Commit 49c725e0cf91909f00d7d4ba1b428c9d7e6c2c2f
1 parent
8ef4f88a
Exists in
master
and in
4 other branches
Implementing tab-menu.
Showing
1 changed file
with
18 additions
and
31 deletions
Show diff stats
src/objects/window/page.c
| @@ -50,13 +50,21 @@ | @@ -50,13 +50,21 @@ | ||
| 50 | 50 | ||
| 51 | G_DEFINE_TYPE(pw3270TabLabel, pw3270TabLabel, GTK_TYPE_LABEL); | 51 | G_DEFINE_TYPE(pw3270TabLabel, pw3270TabLabel, GTK_TYPE_LABEL); |
| 52 | 52 | ||
| 53 | - | ||
| 54 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { | 53 | static void popup_menu_detach(GtkWidget G_GNUC_UNUSED(*label), GtkMenu *menu) { |
| 55 | 54 | ||
| 56 | - debug("%s",__FUNCTION__) | ||
| 57 | - gtk_widget_destroy(GTK_WIDGET(menu)); | 55 | + debug("%s(%p)",__FUNCTION__,menu); |
| 56 | + | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + static void popup_menu_deactivated(GtkMenu *menu, GtkWidget G_GNUC_UNUSED(*label)) { | ||
| 60 | + gtk_menu_detach(menu); | ||
| 61 | + } | ||
| 58 | 62 | ||
| 63 | +#ifdef DEBUG | ||
| 64 | + static void menu_destroy(GtkWidget *menu) { | ||
| 65 | + debug("%s(%p)",__FUNCTION__,menu); | ||
| 59 | } | 66 | } |
| 67 | +#endif // DEBUG | ||
| 60 | 68 | ||
| 61 | static gboolean tab_label_button_press(GtkWidget *label, GdkEventButton *event) { | 69 | static gboolean tab_label_button_press(GtkWidget *label, GdkEventButton *event) { |
| 62 | 70 | ||
| @@ -64,6 +72,11 @@ | @@ -64,6 +72,11 @@ | ||
| 64 | 72 | ||
| 65 | GtkWidget * menu = gtk_menu_new(); | 73 | GtkWidget * menu = gtk_menu_new(); |
| 66 | 74 | ||
| 75 | +#ifdef DEBUG | ||
| 76 | + g_signal_connect(menu,"destroy",G_CALLBACK(menu_destroy),NULL); | ||
| 77 | +#endif // DEBUG | ||
| 78 | + g_signal_connect(menu,"deactivate",G_CALLBACK(popup_menu_deactivated),label); | ||
| 79 | + | ||
| 67 | debug("menu=%p",menu); | 80 | debug("menu=%p",menu); |
| 68 | 81 | ||
| 69 | gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(label), popup_menu_detach); | 82 | gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(label), popup_menu_detach); |
| @@ -149,6 +162,7 @@ | @@ -149,6 +162,7 @@ | ||
| 149 | 162 | ||
| 150 | static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent G_GNUC_UNUSED(*event), GtkWidget * window) { | 163 | static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent G_GNUC_UNUSED(*event), GtkWidget * window) { |
| 151 | 164 | ||
| 165 | + gtk_widget_grab_default(terminal); | ||
| 152 | pw3270_application_window_set_active_terminal(window,terminal); | 166 | pw3270_application_window_set_active_terminal(window,terminal); |
| 153 | 167 | ||
| 154 | /* | 168 | /* |
| @@ -246,42 +260,15 @@ | @@ -246,42 +260,15 @@ | ||
| 246 | 260 | ||
| 247 | pw3270_application_window_set_active_terminal(GTK_WIDGET(window),NULL); | 261 | pw3270_application_window_set_active_terminal(GTK_WIDGET(window),NULL); |
| 248 | 262 | ||
| 249 | - /* | ||
| 250 | - pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host")); | ||
| 251 | - | ||
| 252 | - // Update actions | ||
| 253 | - size_t ix; | ||
| 254 | - gchar ** actions = g_action_group_list_actions(G_ACTION_GROUP(window)); | ||
| 255 | - | ||
| 256 | - for(ix = 0; actions[ix]; ix++) { | ||
| 257 | - | ||
| 258 | - GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window), actions[ix]); | ||
| 259 | - | ||
| 260 | - if(action) { | ||
| 261 | - | ||
| 262 | - if(PW3270_IS_ACTION(action)) { | ||
| 263 | - pw3270_action_set_terminal_widget(action,NULL); | ||
| 264 | - } else if(V3270_IS_ACTION(action)) { | ||
| 265 | - v3270_action_set_terminal_widget(action,NULL); | ||
| 266 | - } | ||
| 267 | - | ||
| 268 | - } | ||
| 269 | - | ||
| 270 | - } | ||
| 271 | - | ||
| 272 | - g_strfreev(actions); | ||
| 273 | - */ | ||
| 274 | - | ||
| 275 | } | 263 | } |
| 276 | 264 | ||
| 277 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { | 265 | static void close_page(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { |
| 278 | 266 | ||
| 279 | - g_object_ref(terminal); | 267 | + debug("%s",__FUNCTION__); |
| 280 | 268 | ||
| 281 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); | 269 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); |
| 282 | gtk_notebook_remove_page(notebook,gtk_notebook_page_num(notebook, terminal)); | 270 | gtk_notebook_remove_page(notebook,gtk_notebook_page_num(notebook, terminal)); |
| 283 | 271 | ||
| 284 | - g_object_unref(terminal); | ||
| 285 | 272 | ||
| 286 | } | 273 | } |
| 287 | 274 |