Commit 49c725e0cf91909f00d7d4ba1b428c9d7e6c2c2f
1 parent
8ef4f88a
Exists in
master
and in
4 other branches
Implementing tab-menu.
Showing
1 changed file
with
18 additions
and
31 deletions
Show diff stats
src/objects/window/page.c
... | ... | @@ -50,13 +50,21 @@ |
50 | 50 | |
51 | 51 | G_DEFINE_TYPE(pw3270TabLabel, pw3270TabLabel, GTK_TYPE_LABEL); |
52 | 52 | |
53 | - | |
54 | 53 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { |
55 | 54 | |
56 | - debug("%s",__FUNCTION__) | |
57 | - gtk_widget_destroy(GTK_WIDGET(menu)); | |
55 | + debug("%s(%p)",__FUNCTION__,menu); | |
56 | + | |
57 | + } | |
58 | + | |
59 | + static void popup_menu_deactivated(GtkMenu *menu, GtkWidget G_GNUC_UNUSED(*label)) { | |
60 | + gtk_menu_detach(menu); | |
61 | + } | |
58 | 62 | |
63 | +#ifdef DEBUG | |
64 | + static void menu_destroy(GtkWidget *menu) { | |
65 | + debug("%s(%p)",__FUNCTION__,menu); | |
59 | 66 | } |
67 | +#endif // DEBUG | |
60 | 68 | |
61 | 69 | static gboolean tab_label_button_press(GtkWidget *label, GdkEventButton *event) { |
62 | 70 | |
... | ... | @@ -64,6 +72,11 @@ |
64 | 72 | |
65 | 73 | GtkWidget * menu = gtk_menu_new(); |
66 | 74 | |
75 | +#ifdef DEBUG | |
76 | + g_signal_connect(menu,"destroy",G_CALLBACK(menu_destroy),NULL); | |
77 | +#endif // DEBUG | |
78 | + g_signal_connect(menu,"deactivate",G_CALLBACK(popup_menu_deactivated),label); | |
79 | + | |
67 | 80 | debug("menu=%p",menu); |
68 | 81 | |
69 | 82 | gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(label), popup_menu_detach); |
... | ... | @@ -149,6 +162,7 @@ |
149 | 162 | |
150 | 163 | static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent G_GNUC_UNUSED(*event), GtkWidget * window) { |
151 | 164 | |
165 | + gtk_widget_grab_default(terminal); | |
152 | 166 | pw3270_application_window_set_active_terminal(window,terminal); |
153 | 167 | |
154 | 168 | /* |
... | ... | @@ -246,42 +260,15 @@ |
246 | 260 | |
247 | 261 | pw3270_application_window_set_active_terminal(GTK_WIDGET(window),NULL); |
248 | 262 | |
249 | - /* | |
250 | - pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host")); | |
251 | - | |
252 | - // Update actions | |
253 | - size_t ix; | |
254 | - gchar ** actions = g_action_group_list_actions(G_ACTION_GROUP(window)); | |
255 | - | |
256 | - for(ix = 0; actions[ix]; ix++) { | |
257 | - | |
258 | - GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window), actions[ix]); | |
259 | - | |
260 | - if(action) { | |
261 | - | |
262 | - if(PW3270_IS_ACTION(action)) { | |
263 | - pw3270_action_set_terminal_widget(action,NULL); | |
264 | - } else if(V3270_IS_ACTION(action)) { | |
265 | - v3270_action_set_terminal_widget(action,NULL); | |
266 | - } | |
267 | - | |
268 | - } | |
269 | - | |
270 | - } | |
271 | - | |
272 | - g_strfreev(actions); | |
273 | - */ | |
274 | - | |
275 | 263 | } |
276 | 264 | |
277 | 265 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { |
278 | 266 | |
279 | - g_object_ref(terminal); | |
267 | + debug("%s",__FUNCTION__); | |
280 | 268 | |
281 | 269 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); |
282 | 270 | gtk_notebook_remove_page(notebook,gtk_notebook_page_num(notebook, terminal)); |
283 | 271 | |
284 | - g_object_unref(terminal); | |
285 | 272 | |
286 | 273 | } |
287 | 274 | ... | ... |