Commit 956af88fdae42a87fadb81a44b950ab69d13079f
1 parent
365d8ec0
Exists in
master
and in
4 other branches
Implementing tab menu.
Showing
1 changed file
with
46 additions
and
2 deletions
Show diff stats
src/objects/window/page.c
... | ... | @@ -54,7 +54,6 @@ |
54 | 54 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { |
55 | 55 | |
56 | 56 | debug("%s",__FUNCTION__) |
57 | - | |
58 | 57 | gtk_widget_destroy(GTK_WIDGET(menu)); |
59 | 58 | |
60 | 59 | } |
... | ... | @@ -83,7 +82,7 @@ |
83 | 82 | |
84 | 83 | } |
85 | 84 | |
86 | - static void pw3270TabLabel_init(pw3270TabLabel *widget) { | |
85 | + static void pw3270TabLabel_init(pw3270TabLabel G_GNUC_UNUSED(*widget)) { | |
87 | 86 | |
88 | 87 | } |
89 | 88 | |
... | ... | @@ -96,6 +95,7 @@ |
96 | 95 | static void destroy(GtkWidget *terminal, GtkWindow * window); |
97 | 96 | static void close_page(GtkButton *button, GtkWidget *terminal); |
98 | 97 | static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); |
98 | + static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal); | |
99 | 99 | |
100 | 100 | gint pw3270_application_window_append_page(pw3270ApplicationWindow * window, GtkWidget * terminal) { |
101 | 101 | |
... | ... | @@ -117,6 +117,8 @@ |
117 | 117 | |
118 | 118 | debug("notebook: %p", window->notebook); |
119 | 119 | |
120 | + g_signal_connect(G_OBJECT(label), "populate-popup", G_CALLBACK(label_populate_popup), terminal); | |
121 | + | |
120 | 122 | g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), window); |
121 | 123 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); |
122 | 124 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); |
... | ... | @@ -232,9 +234,12 @@ |
232 | 234 | static void destroy(GtkWidget *terminal, GtkWindow * window) { |
233 | 235 | |
234 | 236 | if(gtk_window_get_default_widget(window) != terminal) { |
237 | + debug("Terminal %p was destroyed (Default one is %p)",__FUNCTION__,gtk_window_get_default_widget(window)); | |
235 | 238 | return; |
236 | 239 | } |
237 | 240 | |
241 | + debug("Default terminal %p was destroyed",__FUNCTION__); | |
242 | + | |
238 | 243 | gtk_window_set_default(window,NULL); |
239 | 244 | pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host")); |
240 | 245 | |
... | ... | @@ -264,9 +269,17 @@ |
264 | 269 | |
265 | 270 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { |
266 | 271 | |
272 | + g_object_ref(terminal); | |
273 | + | |
267 | 274 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); |
268 | 275 | gtk_notebook_remove_page(notebook,gtk_notebook_page_num(notebook, terminal)); |
269 | 276 | |
277 | + g_object_unref(terminal); | |
278 | + | |
279 | + } | |
280 | + | |
281 | + static void rename_session(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget *terminal) { | |
282 | + debug("%s",__FUNCTION__); | |
270 | 283 | } |
271 | 284 | |
272 | 285 | static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { |
... | ... | @@ -291,3 +304,34 @@ |
291 | 304 | |
292 | 305 | } |
293 | 306 | |
307 | + static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal) { | |
308 | + | |
309 | + static const struct Item { | |
310 | + const gchar * label; | |
311 | + GCallback callback; | |
312 | + } items[] = { | |
313 | + | |
314 | + { | |
315 | + .label = N_("_Rename session"), | |
316 | + .callback = G_CALLBACK(rename_session) | |
317 | + }, | |
318 | + | |
319 | + { | |
320 | + .label = N_("_Close session"), | |
321 | + .callback = G_CALLBACK(close_page) | |
322 | + } | |
323 | + | |
324 | + }; | |
325 | + | |
326 | + size_t ix; | |
327 | + | |
328 | + debug("%s",__FUNCTION__); | |
329 | + | |
330 | + for(ix = 0; ix < G_N_ELEMENTS(items); ix++) { | |
331 | + GtkWidget *item = gtk_menu_item_new_with_mnemonic(gettext(items[ix].label)); | |
332 | + g_signal_connect(G_OBJECT(item),"activate",items[ix].callback,terminal); | |
333 | + gtk_widget_show_all(item); | |
334 | + gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); | |
335 | + } | |
336 | + | |
337 | + } | ... | ... |