From e044fe254452dd9046c4d85af14ecbe12ea81fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 22 Jul 2013 19:48:14 +0200 Subject: [PATCH] window: use dynamically generated menu Remove the static Glade menu in favour of the one generated dynamically already used for the toolbar. --- src/virt-viewer-window.c | 33 +++++++- src/virt-viewer.xml | 168 --------------------------------------- 2 files changed, 31 insertions(+), 170 deletions(-) diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index d73312e..adbf7ca 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -193,6 +193,33 @@ virt_viewer_window_dispose (GObject *object) g_value_unset(&priv->accel_setting); } +static void +rebuild_combo_menu(GObject *gobject G_GNUC_UNUSED, + GParamSpec *pspec G_GNUC_UNUSED, + gpointer user_data) +{ + VirtViewerWindow *self = user_data; + GtkWidget *menu; + + menu = GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-send")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), + GTK_WIDGET(virt_viewer_window_get_keycombo_menu(self))); + gtk_widget_set_sensitive(menu, FALSE); +} + +static void +virt_viewer_window_constructed(GObject *object) +{ + VirtViewerWindowPrivate *priv = VIRT_VIEWER_WINDOW(object)->priv; + + if (G_OBJECT_CLASS(virt_viewer_window_parent_class)->constructed) + G_OBJECT_CLASS(virt_viewer_window_parent_class)->constructed(object); + + g_signal_connect(priv->app, "notify::enable-accel", + G_CALLBACK(rebuild_combo_menu), object); + rebuild_combo_menu(NULL, NULL, object); +} + static void virt_viewer_window_class_init (VirtViewerWindowClass *klass) { @@ -203,6 +230,7 @@ virt_viewer_window_class_init (VirtViewerWindowClass *klass) object_class->get_property = virt_viewer_window_get_property; object_class->set_property = virt_viewer_window_set_property; object_class->dispose = virt_viewer_window_dispose; + object_class->constructed = virt_viewer_window_constructed; g_object_class_install_property(object_class, PROP_SUBTITLE, @@ -609,9 +637,8 @@ virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self) virt_viewer_menu_add_combo(self, menu, keyCombos[i].keys, keyCombos[i].label); } - gtk_menu_attach_to_widget(menu, GTK_WIDGET(priv->window), NULL); gtk_widget_show_all(GTK_WIDGET(menu)); - return g_object_ref_sink(menu); + return menu; } void @@ -731,6 +758,8 @@ virt_viewer_window_toolbar_send_key(GtkWidget *button G_GNUC_UNUSED, VirtViewerWindow *self) { GtkMenu *menu = virt_viewer_window_get_keycombo_menu(self); + gtk_menu_attach_to_widget(menu, GTK_WIDGET(self->priv->window), NULL); + g_object_ref_sink(menu); gtk_menu_popup(menu, NULL, NULL, keycombo_menu_location, self, 0, gtk_get_current_event_time()); g_object_unref(menu); diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml index 00f87b5..e9f91f7 100644 --- a/src/virt-viewer.xml +++ b/src/virt-viewer.xml @@ -211,174 +211,6 @@ False _Send key True - - - True - False - - - True - False - False - Ctrl+Alt+_Del - True - - - - - - True - False - False - Ctrl+Alt+_Backspace - True - - - - - - True - False - - - - - True - False - False - Ctrl+Alt+F_1 - True - - - - - - True - False - False - Ctrl+Alt+F_2 - True - - - - - - True - False - False - Ctrl+Alt+F_3 - True - - - - - - True - False - False - Ctrl+Alt+F_4 - True - - - - - - True - False - False - Ctrl+Alt+F_5 - True - - - - - - True - False - False - Ctrl+Alt+F_6 - True - - - - - - True - False - False - Ctrl+Alt+F_7 - True - - - - - - True - False - False - Ctrl+Alt+F_8 - True - - - - - - True - False - False - Ctrl+Alt+F_9 - True - - - - - - True - False - False - Ctrl+Alt+F1_0 - True - - - - - - True - False - False - Ctrl+Alt+F11 - True - - - - - - True - False - False - Ctrl+Alt+F12 - True - - - - - - True - False - - - - - True - False - False - _PrintScreen - True - - - - -