[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