From 8cdc91227d9f6a8f6f7b1e77bdc6c90f75e01cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Thu, 26 Jul 2018 17:06:35 +0200 Subject: [PATCH] window: set sensitivity based on display capability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A following patch is adding a new display (VTE) that won't have the send_key() or screenshot() callbacks. Activating those menu/actions would lead to nothing or a crash. I chose to keep the UI consistent for all display, but disable the menu sensitivity. Signed-off-by: Marc-André Lureau Acked-by: Victor Toso --- src/virt-viewer-display.h | 6 ++++++ src/virt-viewer-window.c | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h index 7016a85..2de17db 100644 --- a/src/virt-viewer-display.h +++ b/src/virt-viewer-display.h @@ -86,6 +86,12 @@ struct _VirtViewerDisplayClass { void (*disable)(VirtViewerDisplay *display); }; +#define VIRT_VIEWER_DISPLAY_CAN_SCREENSHOT(display) \ + (display && (VIRT_VIEWER_DISPLAY_GET_CLASS(display)->get_pixbuf != NULL)) + +#define VIRT_VIEWER_DISPLAY_CAN_SEND_KEYS(display) \ + (display && (VIRT_VIEWER_DISPLAY_GET_CLASS(display)->send_keys != NULL)) + GType virt_viewer_display_get_type(void); GtkWidget *virt_viewer_display_new(void); diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 932f839..044d1c6 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -1349,15 +1349,21 @@ virt_viewer_window_set_menus_sensitive(VirtViewerWindow *self, gboolean sensitiv gtk_widget_set_sensitive(menu, sensitive); menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-file-screenshot")); - gtk_widget_set_sensitive(menu, sensitive); + gtk_widget_set_sensitive(menu, sensitive && + VIRT_VIEWER_DISPLAY_CAN_SCREENSHOT(self->priv->display)); menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-view-zoom")); gtk_widget_set_sensitive(menu, sensitive); - menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-send")); - gtk_widget_set_sensitive(menu, sensitive); + { + gboolean can_send = sensitive && + VIRT_VIEWER_DISPLAY_CAN_SEND_KEYS(self->priv->display); - gtk_widget_set_sensitive(self->priv->toolbar_send_key, sensitive); + menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-send")); + gtk_widget_set_sensitive(menu, can_send); + + gtk_widget_set_sensitive(self->priv->toolbar_send_key, can_send); + } } static void