Commit d72a21f5629a926fcbd1b50a8c5ca3518136b539
1 parent
7a5b4786
Exists in
master
and in
1 other branch
Reimplementing property signals based on lib3270 updates.
Showing
4 changed files
with
48 additions
and
77 deletions
Show diff stats
src/v3270/oia.c
... | ... | @@ -711,7 +711,7 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name) |
711 | 711 | v3270_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height); |
712 | 712 | } |
713 | 713 | |
714 | -// g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_LUNAME]); | |
714 | + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.luname); | |
715 | 715 | |
716 | 716 | } |
717 | 717 | ... | ... |
src/v3270/private.h
src/v3270/properties.c
... | ... | @@ -141,6 +141,36 @@ |
141 | 141 | |
142 | 142 | } |
143 | 143 | |
144 | + void v3270_install_property(GObjectClass *oclass, guint property_id, GParamSpec *pspec) | |
145 | + { | |
146 | + static const struct | |
147 | + { | |
148 | + const char *name; | |
149 | + GParamSpec **prop; | |
150 | + } properties[] = { | |
151 | + { "connected", &v3270_properties.online }, | |
152 | + { "luname", &v3270_properties.luname }, | |
153 | + { "model", &v3270_properties.model }, | |
154 | + { "has-selection", &v3270_properties.selection } | |
155 | + }; | |
156 | + | |
157 | + size_t ix; | |
158 | + | |
159 | + debug("Property %s=%u",g_param_spec_get_name(pspec),(unsigned int) property_id); | |
160 | + g_object_class_install_property(oclass, property_id, pspec); | |
161 | + | |
162 | + for(ix = 0; ix < G_N_ELEMENTS(properties); ix++) | |
163 | + { | |
164 | + if(!g_ascii_strcasecmp(properties[ix].name,g_param_spec_get_name(pspec))) | |
165 | + { | |
166 | + debug("Property \"%s\" is special",g_param_spec_get_name(pspec)); | |
167 | + *properties[ix].prop = pspec; | |
168 | + break; | |
169 | + } | |
170 | + } | |
171 | + | |
172 | + } | |
173 | + | |
144 | 174 | void v3270_init_properties(GObjectClass * gobject_class) |
145 | 175 | { |
146 | 176 | size_t ix; |
... | ... | @@ -185,7 +215,7 @@ |
185 | 215 | { |
186 | 216 | debug("Property %u=%s (Toggle)",(unsigned int) v3270_properties.type.toggle + ix, lib3270_get_toggle_name(ix)); |
187 | 217 | spec = g_param_spec_boolean(lib3270_get_toggle_name(ix),lib3270_get_toggle_name(ix),lib3270_get_toggle_description(ix),FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE); |
188 | - g_object_class_install_property(gobject_class, v3270_properties.type.toggle + ix, spec); | |
218 | + v3270_install_property(gobject_class, v3270_properties.type.toggle + ix, spec); | |
189 | 219 | } |
190 | 220 | |
191 | 221 | |
... | ... | @@ -194,7 +224,7 @@ |
194 | 224 | { |
195 | 225 | debug("Property %u=%s (Boolean)",(unsigned int) v3270_properties.type.boolean + ix, bool_props[ix].name); |
196 | 226 | spec = g_param_spec_boolean(bool_props[ix].name, bool_props[ix].name, bool_props[ix].description, FALSE,(bool_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE))); |
197 | - g_object_class_install_property(gobject_class, v3270_properties.type.boolean + ix, spec); | |
227 | + v3270_install_property(gobject_class, v3270_properties.type.boolean + ix, spec); | |
198 | 228 | |
199 | 229 | } |
200 | 230 | |
... | ... | @@ -213,7 +243,7 @@ |
213 | 243 | (int_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)) |
214 | 244 | ); |
215 | 245 | |
216 | - g_object_class_install_property(gobject_class, v3270_properties.type.integer + ix, spec); | |
246 | + v3270_install_property(gobject_class, v3270_properties.type.integer + ix, spec); | |
217 | 247 | |
218 | 248 | } |
219 | 249 | |
... | ... | @@ -222,79 +252,10 @@ |
222 | 252 | { |
223 | 253 | debug("Property %u=%s (String)",(unsigned int) v3270_properties.type.str + ix, str_props[ix].name); |
224 | 254 | spec = g_param_spec_string(str_props[ix].name, str_props[ix].name, str_props[ix].description, FALSE,(str_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE))); |
225 | - g_object_class_install_property(gobject_class, v3270_properties.type.str + ix, spec); | |
255 | + v3270_install_property(gobject_class, v3270_properties.type.str + ix, spec); | |
226 | 256 | |
227 | 257 | } |
228 | 258 | |
229 | - | |
230 | - /* | |
231 | - v3270_properties[PROP_ONLINE] = g_param_spec_boolean( | |
232 | - "online", | |
233 | - "online", | |
234 | - "True if is online", | |
235 | - FALSE,G_PARAM_READABLE); | |
236 | - g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]); | |
237 | - | |
238 | - v3270_properties[PROP_SELECTION] = g_param_spec_boolean( | |
239 | - "selection", | |
240 | - "selection", | |
241 | - "True on selected area", | |
242 | - FALSE,G_PARAM_READABLE); | |
243 | - g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]); | |
244 | - | |
245 | - v3270_properties[PROP_MODEL] = g_param_spec_string( | |
246 | - "model", | |
247 | - "model", | |
248 | - "The model of 3270 display to be emulated", | |
249 | - NULL, | |
250 | - G_PARAM_READABLE|G_PARAM_WRITABLE); | |
251 | - | |
252 | - g_object_class_install_property(gobject_class,PROP_MODEL,v3270_properties[PROP_MODEL]); | |
253 | - | |
254 | - v3270_properties[PROP_LUNAME] = g_param_spec_string( | |
255 | - "luname", | |
256 | - "luname", | |
257 | - "The logical Unit (LU) name", | |
258 | - NULL, | |
259 | - G_PARAM_READABLE|G_PARAM_WRITABLE); | |
260 | - g_object_class_install_property(gobject_class,PROP_LUNAME,v3270_properties[PROP_LUNAME]); | |
261 | - | |
262 | - v3270_properties[PROP_AUTO_DISCONNECT] = g_param_spec_uint( | |
263 | - "auto_disconnect", | |
264 | - "auto_disconnect", | |
265 | - "Minutes to disconnect when idle", | |
266 | - 0, // Minimo | |
267 | - 3600, // Máximo | |
268 | - 0, // Default | |
269 | - G_PARAM_READABLE|G_PARAM_WRITABLE); | |
270 | - g_object_class_install_property(gobject_class,PROP_AUTO_DISCONNECT,v3270_properties[PROP_AUTO_DISCONNECT]); | |
271 | - | |
272 | - v3270_properties[PROP_URL] = g_param_spec_string( | |
273 | - "url", | |
274 | - "url", | |
275 | - "Host URL", | |
276 | - NULL, | |
277 | - G_PARAM_READABLE|G_PARAM_WRITABLE); | |
278 | - g_object_class_install_property(gobject_class,PROP_AUTO_DISCONNECT,v3270_properties[PROP_URL]); | |
279 | - | |
280 | - v3270_properties[PROP_SESSION_NAME] = g_param_spec_string( | |
281 | - "session_name", | |
282 | - "session_name", | |
283 | - "The TN3270 Session Name", | |
284 | - g_get_application_name(), | |
285 | - G_PARAM_READABLE|G_PARAM_WRITABLE); | |
286 | - g_object_class_install_property(gobject_class,PROP_SESSION_NAME,v3270_properties[PROP_SESSION_NAME]); | |
287 | - | |
288 | - // Toggle properties | |
289 | - int f; | |
290 | - | |
291 | - for(f=0;f<LIB3270_TOGGLE_COUNT;f++) | |
292 | - { | |
293 | - v3270_properties[PROP_TOGGLE+f] = g_param_spec_boolean(lib3270_get_toggle_name(f),lib3270_get_toggle_name(f),lib3270_get_toggle_description(f),FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE); | |
294 | - g_object_class_install_property(gobject_class,PROP_TOGGLE+f,v3270_properties[PROP_TOGGLE+f]); | |
295 | - } | |
296 | - debug("%s",__FUNCTION__); | |
297 | - */ | |
298 | 259 | } |
299 | 260 | |
300 | 261 | void v3270_set_auto_disconnect(GtkWidget *widget, guint minutes) | ... | ... |
src/v3270/widget.c
... | ... | @@ -782,7 +782,8 @@ static void update_connect(H3270 *session, unsigned char connected) |
782 | 782 | g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_DISCONNECTED], 0); |
783 | 783 | } |
784 | 784 | |
785 | - // g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_ONLINE]); | |
785 | + if(v3270_properties.online) | |
786 | + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.online); | |
786 | 787 | |
787 | 788 | widget->activity.timestamp = time(0); |
788 | 789 | |
... | ... | @@ -797,7 +798,9 @@ static void update_screen_size(H3270 *session,unsigned short rows, unsigned shor |
797 | 798 | |
798 | 799 | static void update_model(H3270 *session, const char *name, int model, int rows, int cols) |
799 | 800 | { |
800 | -// g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties[PROP_MODEL]); | |
801 | + if(v3270_properties.model) | |
802 | + g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties.model); | |
803 | + | |
801 | 804 | g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name); |
802 | 805 | } |
803 | 806 | |
... | ... | @@ -852,7 +855,9 @@ static void set_selection(H3270 *session, unsigned char status) |
852 | 855 | { |
853 | 856 | GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session)); |
854 | 857 | |
855 | -// g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]); | |
858 | + if(v3270_properties.selection) | |
859 | + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.selection); | |
860 | + | |
856 | 861 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_SELECTING], 0, status ? TRUE : FALSE); |
857 | 862 | |
858 | 863 | } | ... | ... |