Commit dc851660d2cf8d162ac1e9de703ca7cf78be2595

Authored by perry.werneck@gmail.com
1 parent 48e3b348

Incluindo notificacao quando da mudanca de um toggle

src/include/lib3270.h
@@ -641,7 +641,7 @@ @@ -641,7 +641,7 @@
641 * @return Constant string with the toggle name. 641 * @return Constant string with the toggle name.
642 * 642 *
643 */ 643 */
644 - LIB3270_EXPORT const char * lib3270_get_toggle_description(LIB3270_TOGGLE_ID ix); 644 + LIB3270_EXPORT const char * lib3270_get_toggle_description(LIB3270_TOGGLE ix);
645 645
646 /** 646 /**
647 * Revert toggle status. 647 * Revert toggle status.
src/lib3270/toggles.c
@@ -58,36 +58,36 @@ @@ -58,36 +58,36 @@
58 static const struct _toggle 58 static const struct _toggle
59 { 59 {
60 const char *name; 60 const char *name;
61 - const char *descr; 61 + const char *description;
62 } 62 }
63 toggle_info[LIB3270_TOGGLE_COUNT] = 63 toggle_info[LIB3270_TOGGLE_COUNT] =
64 { 64 {
65 - { "monocase", "" },  
66 - { "cursorblink", "" },  
67 - { "showtiming", "" },  
68 - { "cursorpos", "" },  
69 - { "dstrace", "" },  
70 - { "linewrap", "" },  
71 - { "blankfill", "" },  
72 - { "screentrace", "" },  
73 - { "eventtrace", "" },  
74 - { "marginedpaste", "" },  
75 - { "rectselect", "" },  
76 - { "crosshair", "" },  
77 - { "fullscreen", "" },  
78 - { "reconnect", "" },  
79 - { "insert", "" },  
80 - { "smartpaste", "" },  
81 - { "bold", "" },  
82 - { "keepselected", "" },  
83 - { "underline", "" },  
84 - { "autoconnect", "" },  
85 - { "kpalternative", "" }, /**< Keypad +/- move to next/previous field */  
86 - { "beep", "" }, /**< Beep on errors */  
87 - { "fieldattr", "" }, /**< View Field attribute */  
88 - { "altscreen", "" }, /**< auto resize on altscreen */  
89 - { "keepalive", "" }, /**< Enable network keep-alive with SO_KEEPALIVE */  
90 - { "nettrace", "" }, /**< Enable network in/out trace */ 65 + { "monocase", N_( "" ) },
  66 + { "cursorblink", N_( "" ) },
  67 + { "showtiming", N_( "" ) },
  68 + { "cursorpos", N_( "" ) },
  69 + { "dstrace", N_( "" ) },
  70 + { "linewrap", N_( "" ) },
  71 + { "blankfill", N_( "" ) },
  72 + { "screentrace", N_( "" ) },
  73 + { "eventtrace", N_( "" ) },
  74 + { "marginedpaste", N_( "" ) },
  75 + { "rectselect", N_( "" ) },
  76 + { "crosshair", N_( "" ) },
  77 + { "fullscreen", N_( "" ) },
  78 + { "reconnect", N_( "" ) },
  79 + { "insert", N_( "" ) },
  80 + { "smartpaste", N_( "" ) },
  81 + { "bold", N_( "" ) },
  82 + { "keepselected", N_( "" ) },
  83 + { "underline", N_( "" ) },
  84 + { "autoconnect", N_( "" ) },
  85 + { "kpalternative", N_( "Keypad +/- move to next/previous field" ) },
  86 + { "beep", N_( "Beep on errors" ) },
  87 + { "fieldattr", N_( "Show Field attribute" ) },
  88 + { "altscreen", N_( "Auto resize on altscreen" ) },
  89 + { "keepalive", N_( "Enable network keep-alive with SO_KEEPALIVE" ) },
  90 + { "nettrace", N_( "Enable network in/out trace" ) },
91 }; 91 };
92 92
93 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix) 93 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix)
@@ -109,7 +109,7 @@ static void toggle_notify(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGG @@ -109,7 +109,7 @@ static void toggle_notify(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGG
109 t->upcall(session, t, TT_INTERACTIVE); 109 t->upcall(session, t, TT_INTERACTIVE);
110 110
111 if(session->update_toggle) 111 if(session->update_toggle)
112 - session->update_toggle(session,ix,t->value,TT_INTERACTIVE,toggle_names[ix]); 112 + session->update_toggle(session,ix,t->value,TT_INTERACTIVE,toggle_info[ix].name);
113 113
114 } 114 }
115 115
@@ -244,14 +244,14 @@ void shutdown_toggles(H3270 *session) @@ -244,14 +244,14 @@ void shutdown_toggles(H3270 *session)
244 LIB3270_EXPORT const char * lib3270_get_toggle_description(LIB3270_TOGGLE_ID ix) 244 LIB3270_EXPORT const char * lib3270_get_toggle_description(LIB3270_TOGGLE_ID ix)
245 { 245 {
246 if(ix < N_TOGGLES) 246 if(ix < N_TOGGLES)
247 - return toggle_names[ix]; 247 + return toggle_info[ix].description;
248 return ""; 248 return "";
249 } 249 }
250 250
251 LIB3270_EXPORT const char * lib3270_get_toggle_name(LIB3270_TOGGLE_ID ix) 251 LIB3270_EXPORT const char * lib3270_get_toggle_name(LIB3270_TOGGLE_ID ix)
252 { 252 {
253 if(ix < N_TOGGLES) 253 if(ix < N_TOGGLES)
254 - return toggle_names[ix]; 254 + return toggle_info[ix].name;
255 return ""; 255 return "";
256 } 256 }
257 257
@@ -262,7 +262,7 @@ LIB3270_EXPORT LIB3270_TOGGLE lib3270_get_toggle_id(const char *name) @@ -262,7 +262,7 @@ LIB3270_EXPORT LIB3270_TOGGLE lib3270_get_toggle_id(const char *name)
262 int f; 262 int f;
263 for(f=0;f<N_TOGGLES;f++) 263 for(f=0;f<N_TOGGLES;f++)
264 { 264 {
265 - if(!strcasecmp(name,toggle_names[f])) 265 + if(!strcasecmp(name,toggle_info[f].name))
266 return f; 266 return f;
267 } 267 }
268 } 268 }
src/pw3270/v3270/widget.c
@@ -83,13 +83,17 @@ @@ -83,13 +83,17 @@
83 PROP_TOGGLE 83 PROP_TOGGLE
84 }; 84 };
85 85
  86 + #define PROP_LAST (PROP_TOGGLE+LIB3270_TOGGLE_COUNT)
  87 +
86 G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET); 88 G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET);
87 89
88 -/*--[ Globals ]--------------------------------------------------------------------------------------*/ 90 +/*--[ Globals ]----------LIB3270_TOGGLE_COUNT----------------------------------------------------------------------------*/
89 91
90 guint v3270_widget_signal[LAST_SIGNAL] = { 0 }; 92 guint v3270_widget_signal[LAST_SIGNAL] = { 0 };
91 GdkCursor * v3270_cursor[V3270_CURSOR_COUNT] = { 0 }; 93 GdkCursor * v3270_cursor[V3270_CURSOR_COUNT] = { 0 };
92 94
  95 + static GParamSpec * v3270_properties[PROP_LAST] = { 0 };
  96 +
93 /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ 97 /*--[ Prototipes ]-----------------------------------------------------------------------------------*/
94 98
95 // http://git.gnome.org/browse/gtk+/tree/gtk/gtkdrawingarea.c?h=gtk-3-0 99 // http://git.gnome.org/browse/gtk+/tree/gtk/gtkdrawingarea.c?h=gtk-3-0
@@ -325,11 +329,37 @@ static void v3270_set_property(GObject *object, guint prop_id, const GValue *val @@ -325,11 +329,37 @@ static void v3270_set_property(GObject *object, guint prop_id, const GValue *val
325 break; 329 break;
326 330
327 default: 331 default:
  332 + if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
  333 + {
  334 + lib3270_set_toggle(window->host,prop_id - PROP_TOGGLE, (int) g_value_get_boolean (value));
  335 + return;
  336 + }
328 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 337 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
329 } 338 }
330 339
331 } 340 }
332 341
  342 +static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec)
  343 +{
  344 + v3270 *window = GTK_V3270(object);
  345 +
  346 + switch (prop_id)
  347 + {
  348 + case PROP_FULLSCREEN:
  349 + #warning Get the correct value
  350 + g_value_set_boolean(value,FALSE);
  351 + break;
  352 +
  353 + default:
  354 + if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT))
  355 + {
  356 + g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - PROP_TOGGLE) ? TRUE : FALSE );
  357 + return;
  358 + }
  359 + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
  360 + }
  361 +}
  362 +
333 static void v3270_class_init(v3270Class *klass) 363 static void v3270_class_init(v3270Class *klass)
334 { 364 {
335 GObjectClass * gobject_class = G_OBJECT_CLASS(klass); 365 GObjectClass * gobject_class = G_OBJECT_CLASS(klass);
@@ -598,14 +628,10 @@ static void v3270_class_init(v3270Class *klass) @@ -598,14 +628,10 @@ static void v3270_class_init(v3270Class *klass)
598 628
599 // Properties 629 // Properties
600 gobject_class->set_property = v3270_set_property; 630 gobject_class->set_property = v3270_set_property;
  631 + gobject_class->get_property = v3270_get_property;
601 632
602 - g_object_class_install_property(  
603 - gobject_class,  
604 - PROP_FULLSCREEN,  
605 - g_param_spec_boolean("fullscreen",  
606 - "Fullscreen","If TRUE, the toplevel window was set to fullscreen",  
607 - FALSE,  
608 - G_PARAM_WRITABLE|G_PARAM_READABLE)); 633 + v3270_properties[PROP_FULLSCREEN] = g_param_spec_boolean("fullscreen","Fullscreen","If TRUE, the toplevel window was set to fullscreen",FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE);
  634 + g_object_class_install_property(gobject_class,PROP_FULLSCREEN,v3270_properties[PROP_FULLSCREEN]);
609 635
610 636
611 // Toggle properties 637 // Toggle properties
@@ -613,18 +639,10 @@ static void v3270_class_init(v3270Class *klass) @@ -613,18 +639,10 @@ static void v3270_class_init(v3270Class *klass)
613 639
614 for(f=0;f<LIB3270_TOGGLE_COUNT;f++) 640 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
615 { 641 {
616 - g_object_class_install_property(  
617 - gobject_class,  
618 - PROP_TOGGLE+f,  
619 - g_param_spec_boolean(  
620 - lib3270_get_toggle_name(f),  
621 - lib3270_get_toggle_name(f),  
622 - lib3270_get_toggle_description(f),  
623 - FALSE,  
624 - G_PARAM_WRITABLE|G_PARAM_READABLE)); 642 + 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);
  643 + g_object_class_install_property(gobject_class,PROP_TOGGLE+f,v3270_properties[PROP_TOGGLE+f]);
625 } 644 }
626 645
627 -  
628 } 646 }
629 647
630 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height) 648 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
@@ -742,6 +760,7 @@ static void set_timer(H3270 *session, unsigned char on) @@ -742,6 +760,7 @@ static void set_timer(H3270 *session, unsigned char on)
742 760
743 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name) 761 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name)
744 { 762 {
  763 + g_object_notify_by_pspec(G_OBJECT(session->widget), v3270_properties[PROP_TOGGLE+ix]);
745 g_signal_emit(GTK_WIDGET(session->widget), v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name); 764 g_signal_emit(GTK_WIDGET(session->widget), v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name);
746 } 765 }
747 766