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 | + } | ... | ... |