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