Commit 60b030af642ac803e52f93a55325110c0fb341cd

Authored by perry.werneck@gmail.com
1 parent 58012c44

Implementando actions

src/gtk/actions.c
... ... @@ -36,6 +36,7 @@
36 36 #include <lib3270/selection.h>
37 37  
38 38 #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME)
  39 + #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1
39 40  
40 41 /*--[ Implement ]------------------------------------------------------------------------------------*/
41 42  
... ... @@ -186,7 +187,10 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget)
186 187  
187 188 trace("Action %s toggled on widget %p (id=%d)",gtk_action_get_name(GTK_ACTION(action)),widget,(int) toggle);
188 189  
189   - lib3270_set_toggle(GTK_V3270(widget)->host,toggle,gtk_toggle_action_get_active(action));
  190 + if(toggle == TOGGLE_GDKDEBUG)
  191 + gdk_window_set_debug_updates(gtk_toggle_action_get_active(action));
  192 + else
  193 + lib3270_set_toggle(GTK_V3270(widget)->host,toggle,gtk_toggle_action_get_active(action));
190 194 }
191 195  
192 196 static void selection_move_action(GtkAction *action, GtkWidget *widget)
... ... @@ -327,11 +331,18 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
327 331 if(!attr)
328 332 attr = ui_get_attribute("toggle",names,values);
329 333  
330   - id = lib3270_get_toggle_id(attr);
331   - if(id < 0)
  334 + if(g_strcasecmp(attr,"gdkdebug"))
332 335 {
333   - *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs a valid toggle name" ), name);
334   - return NULL;
  336 + id = lib3270_get_toggle_id(attr);
  337 + if(id < 0)
  338 + {
  339 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs a valid toggle name" ), name);
  340 + return NULL;
  341 + }
  342 + }
  343 + else
  344 + {
  345 + id = TOGGLE_GDKDEBUG;
335 346 }
336 347 nm = g_strconcat(name,attr,NULL);
337 348 }
... ...
src/gtk/mainwindow.c
... ... @@ -199,6 +199,11 @@
199 199  
200 200 }
201 201  
  202 + static void has_text(GtkWidget *widget, gboolean on, GtkActionGroup **group)
  203 + {
  204 + gtk_action_group_set_sensitive(group[ACTION_GROUP_CLIPBOARD],on);
  205 + }
  206 +
202 207 static void pastenext(GtkWidget *widget, gboolean on, GtkAction **action)
203 208 {
204 209 gtk_action_set_sensitive(action[ACTION_PASTENEXT],on);
... ... @@ -346,9 +351,10 @@
346 351 g_signal_connect(terminal,"model_changed",G_CALLBACK(update_model),0);
347 352 g_signal_connect(terminal,"selecting",G_CALLBACK(selecting),group);
348 353 g_signal_connect(terminal,"popup",G_CALLBACK(popup_menu),popup);
  354 + g_signal_connect(terminal,"has_text",G_CALLBACK(has_text),group);
349 355  
350 356 g_free(path);
351   - gtk_widget_grab_focus(terminal);
  357 +// gtk_widget_grab_focus(terminal);
352 358  
353 359 if(lib3270_get_toggle(host,LIB3270_TOGGLE_FULL_SCREEN))
354 360 gtk_window_fullscreen(GTK_WINDOW(window));
... ... @@ -358,6 +364,7 @@
358 364 #endif
359 365  
360 366 trace("%s ends",__FUNCTION__);
  367 + gtk_window_set_focus(GTK_WINDOW(window),terminal);
361 368 return window;
362 369 }
363 370  
... ...
src/gtk/v3270/clipboard.c
... ... @@ -90,6 +90,7 @@ void v3270_copy_clipboard(v3270 *widget)
90 90  
91 91 if(!text)
92 92 {
  93 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, FALSE);
93 94 lib3270_ring_bell(widget->host);
94 95 return;
95 96 }
... ... @@ -108,6 +109,9 @@ void v3270_copy_clipboard(v3270 *widget)
108 109 {
109 110 gtk_clipboard_set_can_store(clipboard,targets,1);
110 111 }
  112 +
  113 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE);
  114 +
111 115 }
112 116  
113 117 void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding)
... ...
src/gtk/v3270/private.h
... ... @@ -75,6 +75,7 @@ G_BEGIN_DECLS
75 75 SIGNAL_SELECTING,
76 76 SIGNAL_POPUP,
77 77 SIGNAL_PASTENEXT,
  78 + SIGNAL_CLIPBOARD,
78 79  
79 80 LAST_SIGNAL
80 81 };
... ...
src/gtk/v3270/widget.c
... ... @@ -302,6 +302,14 @@ static void v3270_class_init(v3270Class *klass)
302 302 pw3270_VOID__VOID_BOOL,
303 303 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
304 304  
  305 + v3270_widget_signal[SIGNAL_CLIPBOARD] =
  306 + g_signal_new( "has_text",
  307 + G_OBJECT_CLASS_TYPE (gobject_class),
  308 + G_SIGNAL_RUN_FIRST,
  309 + 0,
  310 + NULL, NULL,
  311 + pw3270_VOID__VOID_BOOL,
  312 + G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
305 313 }
306 314  
307 315 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
... ... @@ -875,12 +883,8 @@ int v3270_connect(GtkWidget *widget, const gchar *host)
875 883 g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
876 884  
877 885  
878   -
879 886 terminal = GTK_V3270(widget);
880 887  
881   - rc = lib3270_connect(terminal->host,host,0);
882   -
883   -/*
884 888 if(host)
885 889 {
886 890 set_string_to_config("host","uri","%s",host);
... ... @@ -897,7 +901,7 @@ int v3270_connect(GtkWidget *widget, const gchar *host)
897 901  
898 902 g_free(hs);
899 903 }
900   -*/
  904 +
901 905 trace("%s exits with rc=%d (%s)",__FUNCTION__,rc,strerror(rc));
902 906  
903 907 return rc;
... ...
ui/00default.xml
... ... @@ -181,7 +181,7 @@
181 181  
182 182 </popup>
183 183  
184   - <accelerator action='Toggle' id='Insert' key='Insert' group='online' />
  184 + <accelerator action='toggle' id='insert' key='Insert' group='online' />
185 185  
186 186 <accelerator action='Home' key='Home' group='online' />
187 187 <!-- accelerator action='Reset' key='<Shift><Ctrl>r' group='online' /-->
... ...
ui/99debug.xml
... ... @@ -41,6 +41,7 @@
41 41 <menu name='debugmenu' label='Debug' >
42 42 <menuitem action='testpattern' group='offline' label='Show test pattern' />
43 43 <menuitem action='reload' label='Reload buffer contents' />
  44 + <menuitem action='toggle' id='gdkdebug' label='Debug window updates' />
44 45 </menu>
45 46  
46 47 </menubar>
... ...