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,7 +54,6 @@ | ||
| 54 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { | 54 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { |
| 55 | 55 | ||
| 56 | debug("%s",__FUNCTION__) | 56 | debug("%s",__FUNCTION__) |
| 57 | - | ||
| 58 | gtk_widget_destroy(GTK_WIDGET(menu)); | 57 | gtk_widget_destroy(GTK_WIDGET(menu)); |
| 59 | 58 | ||
| 60 | } | 59 | } |
| @@ -83,7 +82,7 @@ | @@ -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,6 +95,7 @@ | ||
| 96 | static void destroy(GtkWidget *terminal, GtkWindow * window); | 95 | static void destroy(GtkWidget *terminal, GtkWindow * window); |
| 97 | static void close_page(GtkButton *button, GtkWidget *terminal); | 96 | static void close_page(GtkButton *button, GtkWidget *terminal); |
| 98 | static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window); | 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 | gint pw3270_application_window_append_page(pw3270ApplicationWindow * window, GtkWidget * terminal) { | 100 | gint pw3270_application_window_append_page(pw3270ApplicationWindow * window, GtkWidget * terminal) { |
| 101 | 101 | ||
| @@ -117,6 +117,8 @@ | @@ -117,6 +117,8 @@ | ||
| 117 | 117 | ||
| 118 | debug("notebook: %p", window->notebook); | 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 | g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), window); | 122 | g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), window); |
| 121 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); | 123 | g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); |
| 122 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); | 124 | g_signal_connect(G_OBJECT(terminal), "disconnected", G_CALLBACK(disconnected),window); |
| @@ -232,9 +234,12 @@ | @@ -232,9 +234,12 @@ | ||
| 232 | static void destroy(GtkWidget *terminal, GtkWindow * window) { | 234 | static void destroy(GtkWidget *terminal, GtkWindow * window) { |
| 233 | 235 | ||
| 234 | if(gtk_window_get_default_widget(window) != terminal) { | 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 | return; | 238 | return; |
| 236 | } | 239 | } |
| 237 | 240 | ||
| 241 | + debug("Default terminal %p was destroyed",__FUNCTION__); | ||
| 242 | + | ||
| 238 | gtk_window_set_default(window,NULL); | 243 | gtk_window_set_default(window,NULL); |
| 239 | pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host")); | 244 | pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host")); |
| 240 | 245 | ||
| @@ -264,9 +269,17 @@ | @@ -264,9 +269,17 @@ | ||
| 264 | 269 | ||
| 265 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { | 270 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { |
| 266 | 271 | ||
| 272 | + g_object_ref(terminal); | ||
| 273 | + | ||
| 267 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); | 274 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); |
| 268 | gtk_notebook_remove_page(notebook,gtk_notebook_page_num(notebook, terminal)); | 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 | static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { | 285 | static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) { |
| @@ -291,3 +304,34 @@ | @@ -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 | + } |