[virt-tools-list] [PATCH 2/2] virtviewer-window: Make sure fullscreen window stays on the same monitor
Marc-André Lureau
marcandre.lureau at gmail.com
Fri Feb 8 17:29:18 UTC 2013
ack
On Wed, Feb 6, 2013 at 5:40 PM, Hans de Goede <hdegoede at redhat.com> wrote:
> Sometimes the guest may shortly disable and then re-enable a monitor while
> in fullscreen mode, this happens for example when changing display resolution
> through gnome-display-properties inside the guest. This causes the client
> window-manager to remap the window, and this can cause it to end up
> on a different monitor.
>
> This patch fixes this by remembering the position the window is places at
> when going fullcreen and moving it there again when its gets (re-)shown.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> src/virt-viewer-window.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
> index 6adba8e..c5b485c 100644
> --- a/src/virt-viewer-window.c
> +++ b/src/virt-viewer-window.c
> @@ -100,6 +100,7 @@ struct _VirtViewerWindowPrivate {
> gboolean grabbed;
> gboolean before_saved;
> GdkRectangle before_fullscreen;
> + GdkPoint fullscreen_coordinate;
> gboolean desktop_resize_pending;
>
> gint zoomlevel;
> @@ -288,6 +289,7 @@ virt_viewer_window_init (VirtViewerWindow *self)
> priv = self->priv;
>
> priv->auto_resize = TRUE;
> + priv->fullscreen_coordinate.x = priv->fullscreen_coordinate.y = -1;
> g_value_init(&priv->accel_setting, G_TYPE_STRING);
>
> priv->notebook = virt_viewer_notebook_new();
> @@ -479,6 +481,7 @@ virt_viewer_window_leave_fullscreen(VirtViewerWindow *self)
>
> gtk_check_menu_item_set_active(check, FALSE);
> priv->fullscreen = FALSE;
> + priv->fullscreen_coordinate.x = priv->fullscreen_coordinate.y = -1;
> ViewAutoDrawer_SetActive(VIEW_AUTODRAWER(priv->layout), FALSE);
> gtk_widget_show(menu);
> gtk_widget_hide(priv->toolbar);
> @@ -526,8 +529,11 @@ virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gboolean move, gint
> ViewAutoDrawer_Close(VIEW_AUTODRAWER(priv->layout));
>
> /* g_debug("enter fullscreen move:%d %d+%d", move, x, y); */
> - if (move)
> + if (move) {
> gtk_window_move(GTK_WINDOW(priv->window), x, y);
> + priv->fullscreen_coordinate.x = x;
> + priv->fullscreen_coordinate.y = y;
> + }
>
> gtk_window_fullscreen(GTK_WINDOW(priv->window));
> #ifdef G_OS_WIN32
> @@ -1127,6 +1133,8 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa
> void
> virt_viewer_window_show(VirtViewerWindow *self)
> {
> + VirtViewerWindowPrivate *priv = self->priv;
> +
> gtk_widget_show(self->priv->window);
>
> if (self->priv->display)
> @@ -1136,6 +1144,11 @@ virt_viewer_window_show(VirtViewerWindow *self)
> virt_viewer_window_resize(self, FALSE);
> self->priv->desktop_resize_pending = FALSE;
> }
> +
> + if (priv->fullscreen && priv->fullscreen_coordinate.x != -1)
> + gtk_window_move(GTK_WINDOW(priv->window),
> + priv->fullscreen_coordinate.x,
> + priv->fullscreen_coordinate.y);
> }
>
> void
> --
> 1.8.1
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
--
Marc-André Lureau
More information about the virt-tools-list
mailing list