@@ -1270,10 +1270,12 @@ static void gd_menu_switch_vc(GtkMenuItem *item, void *opaque)
GtkDisplayState *s = opaque;
VirtualConsole *vc;
GtkNotebook *nb = GTK_NOTEBOOK(s->notebook);
+ GdkWindow *window;
gint page;
vc = gd_vc_find_current(s);
vc->gfx.visible = false;
+ gd_set_ui_size(vc, 0, 0);
vc = gd_vc_find_by_menu(s);
gtk_release_modifiers(s);
@@ -1281,6 +1283,9 @@ static void gd_menu_switch_vc(GtkMenuItem *item, void *opaque)
page = gtk_notebook_page_num(nb, vc->tab_item);
gtk_notebook_set_current_page(nb, page);
gtk_widget_grab_focus(vc->focus);
+ window = gtk_widget_get_window(vc->gfx.drawing_area);
+ gd_set_ui_size(vc, gdk_window_get_width(window),
+ gdk_window_get_height(window));
vc->gfx.visible = true;
}
}
@@ -1312,6 +1317,7 @@ static gboolean gd_tab_window_close(GtkWidget *widget, GdkEvent *event,
GtkDisplayState *s = vc->s;
vc->gfx.visible = false;
+ gd_set_ui_size(vc, 0, 0);
gtk_widget_set_sensitive(vc->menu_item, true);
gd_widget_reparent(vc->window, s->notebook, vc->tab_item);
gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(s->notebook),
@@ -1347,6 +1353,7 @@ static gboolean gd_win_grab(void *opaque)
static void gd_menu_untabify(GtkMenuItem *item, void *opaque)
{
GtkDisplayState *s = opaque;
+ GdkWindow *window;
VirtualConsole *vc = gd_vc_find_current(s);
if (vc->type == GD_VC_GFX &&
@@ -1385,6 +1392,10 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque)
gd_update_geometry_hints(vc);
gd_update_caption(s);
}
+
+ window = gtk_widget_get_window(vc->gfx.drawing_area);
+ gd_set_ui_size(vc, gdk_window_get_width(window),
+ gdk_window_get_height(window));
vc->gfx.visible = true;
}
@@ -1709,7 +1720,9 @@ static gboolean gd_configure(GtkWidget *widget,
{
VirtualConsole *vc = opaque;
- gd_set_ui_size(vc, cfg->width, cfg->height);
+ if (vc->gfx.visible) {
+ gd_set_ui_size(vc, cfg->width, cfg->height);
+ }
return FALSE;
}
Make guest displays disconnected when not visible. Setting ui size to 0 is used to indicate that the display is disconnected. When the VC is visible again, the ui size is set to associated window's size again which makes the display reconnected and available to the guest. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Daniel P. Berrangé <berrange@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Cc: Philippe Mathieu-Daudé <f4bug@amsat.org> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Thomas Huth <thuth@redhat.com> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> --- ui/gtk.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)