Commit d72a21f5629a926fcbd1b50a8c5ca3518136b539

Authored by Perry Werneck
1 parent 7a5b4786
Exists in master and in 1 other branch develop

Reimplementing property signals based on lib3270 updates.

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
... ... @@ -246,6 +246,11 @@ G_BEGIN_DECLS
246 246 guint str;
247 247 } type;
248 248  
  249 + GParamSpec * online;
  250 + GParamSpec * luname;
  251 + GParamSpec * model;
  252 + GParamSpec * selection;
  253 +
249 254 } v3270_properties;
250 255  
251 256  
... ...
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 }
... ...