summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2012-07-05 18:38:38 +0200
committerMarc-André Lureau <marcandre.lureau@gmail.com>2012-07-23 16:27:33 +0200
commit8006302fefe58ba5fdbde3ff0c99736a34e211c5 (patch)
treef820d940d59405879c2040721bfd1ee1f86b51dd /src
parent57bf1e9090dbd6ca0f3486763ba9284a710883ef (diff)
Make the display submenu insensitive if display can't be selected
Diffstat (limited to 'src')
-rw-r--r--src/virt-viewer-app.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 3d7ff68..a88264b 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -1635,15 +1635,31 @@ window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED,
while (tmp) {
int *nth = tmp->data;
VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(g_hash_table_lookup(self->priv->windows, nth));
+ VirtViewerDisplay *display = virt_viewer_window_get_display(vwin);
GtkWidget *item;
- gboolean visible;
+ gboolean visible, sensitive = FALSE;
gchar *label;
label = g_strdup_printf(_("Display %d"), *nth + 1);
item = gtk_check_menu_item_new_with_label(label);
g_free(label);
+
visible = gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin)));
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible);
+
+ if (display) {
+ guint hint = virt_viewer_display_get_show_hint(display);
+
+ if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY)
+ sensitive = TRUE;
+
+ if ((hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) &&
+ virt_viewer_display_get_selectable(display))
+ sensitive = TRUE;
+ }
+
+ gtk_widget_set_sensitive(item, sensitive);
+
g_signal_connect(G_OBJECT(item),
"toggled", G_CALLBACK(menu_display_visible_toggled_cb), vwin);
gtk_menu_shell_append(submenu, item);