summaryrefslogtreecommitdiff
path: root/apps/plugins/pdbox/PDa/src/g_guiconnect.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/pdbox/PDa/src/g_guiconnect.c')
-rw-r--r--apps/plugins/pdbox/PDa/src/g_guiconnect.c93
1 files changed, 0 insertions, 93 deletions
diff --git a/apps/plugins/pdbox/PDa/src/g_guiconnect.c b/apps/plugins/pdbox/PDa/src/g_guiconnect.c
index c1673827fe..f8356acfa8 100644
--- a/apps/plugins/pdbox/PDa/src/g_guiconnect.c
+++ b/apps/plugins/pdbox/PDa/src/g_guiconnect.c
@@ -92,97 +92,4 @@ void g_guiconnect_setup(void)
92 class_addmethod(guiconnect_class, (t_method)guiconnect_signoff, 92 class_addmethod(guiconnect_class, (t_method)guiconnect_signoff,
93 gensym("signoff"), 0); 93 gensym("signoff"), 0);
94} 94}
95/* Copyright (c) 1997-2000 Miller Puckette.
96* For information on usage and redistribution, and for a DISCLAIMER OF ALL
97* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
98
99/* a thing to forward messages from the GUI, dealing with race conditions
100in which the "target" gets deleted while the GUI is sending it something.
101*/
102
103#include "m_pd.h"
104#include "g_canvas.h"
105
106struct _guiconnect
107{
108 t_object x_obj;
109 t_pd *x_who;
110 t_symbol *x_sym;
111 t_clock *x_clock;
112};
113 95
114static t_class *guiconnect_class;
115
116t_guiconnect *guiconnect_new(t_pd *who, t_symbol *sym)
117{
118 t_guiconnect *x = (t_guiconnect *)pd_new(guiconnect_class);
119 x->x_who = who;
120 x->x_sym = sym;
121 pd_bind(&x->x_obj.ob_pd, sym);
122 return (x);
123}
124
125 /* cleanup routine; delete any resources we have */
126static void guiconnect_free(t_guiconnect *x)
127{
128 if (x->x_sym)
129 pd_unbind(&x->x_obj.ob_pd, x->x_sym);
130 if (x->x_clock)
131 clock_free(x->x_clock);
132}
133
134 /* this is called when the clock times out to indicate the GUI should
135 be gone by now. */
136static void guiconnect_tick(t_guiconnect *x)
137{
138 pd_free(&x->x_obj.ob_pd);
139}
140
141 /* the target calls this to disconnect. If the gui has "signed off"
142 we're ready to delete the object; otherwise we wait either for signoff
143 or for a timeout. */
144void guiconnect_notarget(t_guiconnect *x, double timedelay)
145{
146 if (!x->x_sym)
147 pd_free(&x->x_obj.ob_pd);
148 else
149 {
150 x->x_who = 0;
151 if (timedelay > 0)
152 {
153 x->x_clock = clock_new(x, (t_method)guiconnect_tick);
154 clock_delay(x->x_clock, timedelay);
155 }
156 }
157}
158
159 /* the GUI calls this to send messages to the target. */
160static void guiconnect_anything(t_guiconnect *x,
161 t_symbol *s, int ac, t_atom *av)
162{
163 if (x->x_who)
164 typedmess(x->x_who, s, ac, av);
165}
166
167 /* the GUI calls this when it disappears. (If there's any chance the
168 GUI will fail to do this, the "target", when it signs off, should specify
169 a timeout after which the guiconnect will disappear.) */
170static void guiconnect_signoff(t_guiconnect *x)
171{
172 if (!x->x_who)
173 pd_free(&x->x_obj.ob_pd);
174 else
175 {
176 pd_unbind(&x->x_obj.ob_pd, x->x_sym);
177 x->x_sym = 0;
178 }
179}
180
181void g_guiconnect_setup(void)
182{
183 guiconnect_class = class_new(gensym("guiconnect"), 0,
184 (t_method)guiconnect_free, sizeof(t_guiconnect), CLASS_PD, 0);
185 class_addanything(guiconnect_class, guiconnect_anything);
186 class_addmethod(guiconnect_class, (t_method)guiconnect_signoff,
187 gensym("signoff"), 0);
188}