Commit 956af88fdae42a87fadb81a44b950ab69d13079f

Authored by Perry Werneck
1 parent 365d8ec0

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