Commit 6d9cb588bb9fa9e5035b76edc2336230c3ce8c7a

Authored by perry.werneck@gmail.com
1 parent 846ee516

Incluindo ações que precisam de tratamento especial

Showing 2 changed files with 35 additions and 9 deletions   Show diff stats
src/gtk/globals.h
@@ -43,6 +43,7 @@ @@ -43,6 +43,7 @@
43 enum 43 enum
44 { 44 {
45 ACTION_PASTENEXT, 45 ACTION_PASTENEXT,
  46 + ACTION_RESELECT,
46 ACTION_FULLSCREEN, 47 ACTION_FULLSCREEN,
47 ACTION_UNFULLSCREEN, 48 ACTION_UNFULLSCREEN,
48 49
src/gtk/mainwindow.c
@@ -75,6 +75,7 @@ @@ -75,6 +75,7 @@
75 }; 75 };
76 76
77 static const gchar *actionname[ACTION_COUNT+1] = { "pastenext", 77 static const gchar *actionname[ACTION_COUNT+1] = { "pastenext",
  78 + "reselect",
78 "setfullscreen", 79 "setfullscreen",
79 "resetfullscreen" 80 "resetfullscreen"
80 }; 81 };
@@ -88,14 +89,6 @@ @@ -88,14 +89,6 @@
88 89
89 if(id == LIB3270_TOGGLE_FULL_SCREEN) 90 if(id == LIB3270_TOGGLE_FULL_SCREEN)
90 { 91 {
91 - GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(toplevel),"named_actions");  
92 -  
93 - if(action[ACTION_FULLSCREEN])  
94 - gtk_action_set_visible(action[ACTION_FULLSCREEN],!toggled);  
95 -  
96 - if(action[ACTION_UNFULLSCREEN])  
97 - gtk_action_set_visible(action[ACTION_UNFULLSCREEN],toggled);  
98 -  
99 if(toggled) 92 if(toggled)
100 gtk_window_fullscreen(GTK_WINDOW(toplevel)); 93 gtk_window_fullscreen(GTK_WINDOW(toplevel));
101 else 94 else
@@ -106,6 +99,23 @@ @@ -106,6 +99,23 @@
106 99
107 } 100 }
108 101
  102 + static gboolean window_state_event(GtkWidget *window, GdkEventWindowState *event, GtkWidget *widget)
  103 + {
  104 + gboolean fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN ? TRUE : FALSE;
  105 + GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(window),"named_actions");
  106 +
  107 + // Update fullscreen toggles
  108 + if(action[ACTION_FULLSCREEN])
  109 + gtk_action_set_visible(action[ACTION_FULLSCREEN],!fullscreen);
  110 +
  111 + if(action[ACTION_UNFULLSCREEN])
  112 + gtk_action_set_visible(action[ACTION_UNFULLSCREEN],fullscreen);
  113 +
  114 + lib3270_set_toggle(v3270_get_session(widget),LIB3270_TOGGLE_FULL_SCREEN,fullscreen);
  115 +
  116 + return 0;
  117 + }
  118 +
109 static void disconnected(GtkWidget *widget, GtkActionGroup **group) 119 static void disconnected(GtkWidget *widget, GtkActionGroup **group)
110 { 120 {
111 gtk_action_group_set_sensitive(group[ACTION_GROUP_ONLINE],FALSE); 121 gtk_action_group_set_sensitive(group[ACTION_GROUP_ONLINE],FALSE);
@@ -158,8 +168,12 @@ @@ -158,8 +168,12 @@
158 168
159 static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group) 169 static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group)
160 { 170 {
161 -// trace("Widget %p selection state changed to %s",widget,on ? "Yes" : "No"); 171 + GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions");
162 gtk_action_group_set_sensitive(group[ACTION_GROUP_SELECTION],on); 172 gtk_action_group_set_sensitive(group[ACTION_GROUP_SELECTION],on);
  173 +
  174 + if(action[ACTION_RESELECT])
  175 + gtk_action_set_sensitive(action[ACTION_RESELECT],!on);
  176 +
163 } 177 }
164 178
165 static void setup_input_method(GtkWidget *widget, GtkWidget *obj) 179 static void setup_input_method(GtkWidget *widget, GtkWidget *obj)
@@ -268,6 +282,8 @@ @@ -268,6 +282,8 @@
268 popup = g_object_get_data(G_OBJECT(window),"popup_menus"); 282 popup = g_object_get_data(G_OBJECT(window),"popup_menus");
269 action = (GtkAction **) g_object_get_data(G_OBJECT(window),"named_actions"); 283 action = (GtkAction **) g_object_get_data(G_OBJECT(window),"named_actions");
270 284
  285 + g_object_set_data(G_OBJECT(terminal),"named_actions",action);
  286 +
271 // Setup action groups 287 // Setup action groups
272 gtk_action_group_set_sensitive(group[ACTION_GROUP_SELECTION],FALSE); 288 gtk_action_group_set_sensitive(group[ACTION_GROUP_SELECTION],FALSE);
273 gtk_action_group_set_sensitive(group[ACTION_GROUP_CLIPBOARD],FALSE); 289 gtk_action_group_set_sensitive(group[ACTION_GROUP_CLIPBOARD],FALSE);
@@ -282,6 +298,15 @@ @@ -282,6 +298,15 @@
282 if(action[ACTION_UNFULLSCREEN]) 298 if(action[ACTION_UNFULLSCREEN])
283 gtk_action_set_visible(action[ACTION_UNFULLSCREEN],lib3270_get_toggle(host,LIB3270_TOGGLE_FULL_SCREEN)); 299 gtk_action_set_visible(action[ACTION_UNFULLSCREEN],lib3270_get_toggle(host,LIB3270_TOGGLE_FULL_SCREEN));
284 300
  301 + if(action[ACTION_PASTENEXT])
  302 + gtk_action_set_sensitive(action[ACTION_PASTENEXT],FALSE);
  303 +
  304 + if(action[ACTION_RESELECT])
  305 + gtk_action_set_sensitive(action[ACTION_RESELECT],FALSE);
  306 +
  307 + // Connect window signals
  308 + g_signal_connect(window,"window_state_event",G_CALLBACK(window_state_event),terminal);
  309 +
285 // Connect widget signals 310 // Connect widget signals
286 g_signal_connect(terminal,"toggle_changed",G_CALLBACK(toggle_changed),window); 311 g_signal_connect(terminal,"toggle_changed",G_CALLBACK(toggle_changed),window);
287 g_signal_connect(terminal,"disconnected",G_CALLBACK(disconnected),group); 312 g_signal_connect(terminal,"disconnected",G_CALLBACK(disconnected),group);