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 | 50 | |
| 51 | 51 | G_DEFINE_TYPE(pw3270TabLabel, pw3270TabLabel, GTK_TYPE_LABEL); |
| 52 | 52 | |
| 53 | - | |
| 54 | 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 | 69 | static gboolean tab_label_button_press(GtkWidget *label, GdkEventButton *event) { |
| 62 | 70 | |
| ... | ... | @@ -64,6 +72,11 @@ |
| 64 | 72 | |
| 65 | 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 | 80 | debug("menu=%p",menu); |
| 68 | 81 | |
| 69 | 82 | gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(label), popup_menu_detach); |
| ... | ... | @@ -149,6 +162,7 @@ |
| 149 | 162 | |
| 150 | 163 | static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent G_GNUC_UNUSED(*event), GtkWidget * window) { |
| 151 | 164 | |
| 165 | + gtk_widget_grab_default(terminal); | |
| 152 | 166 | pw3270_application_window_set_active_terminal(window,terminal); |
| 153 | 167 | |
| 154 | 168 | /* |
| ... | ... | @@ -246,42 +260,15 @@ |
| 246 | 260 | |
| 247 | 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 | 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 | 269 | GtkNotebook * notebook = GTK_NOTEBOOK(gtk_widget_get_parent(terminal)); |
| 282 | 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 | ... | ... |