diff options
author | Pavel Grunt <pgrunt@redhat.com> | 2015-04-05 15:45:02 +0200 |
---|---|---|
committer | Fabiano FidĂȘncio <fidencio@redhat.com> | 2015-04-09 10:47:57 +0200 |
commit | 310979947594bbbab39c4b1b25823cf0a2e56e93 (patch) | |
tree | 1ab2674eadf40e69bb720c6a9c0062b373841af4 /src/virt-viewer-display-spice.c | |
parent | 01249f703263ef6a8be59479df5cf6c5e8b1ceb9 (diff) | |
download | virt-viewer-310979947594bbbab39c4b1b25823cf0a2e56e93.tar.gz virt-viewer-310979947594bbbab39c4b1b25823cf0a2e56e93.tar.xz virt-viewer-310979947594bbbab39c4b1b25823cf0a2e56e93.zip |
display-spice: Do not ignore change of position
Positions of displays can be changed by guest, it is important to
react to this change by rearranging client's windows otherwise
mouse actions can be assigned to a wrong window.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1206216
Diffstat (limited to 'src/virt-viewer-display-spice.c')
-rw-r--r-- | src/virt-viewer-display-spice.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c index 6cd8394..399c207 100644 --- a/src/virt-viewer-display-spice.c +++ b/src/virt-viewer-display-spice.c @@ -45,6 +45,8 @@ struct _VirtViewerDisplaySpicePrivate { SpiceChannel *channel; /* weak reference */ SpiceDisplay *display; AutoResizeState auto_resize; + guint x; + guint y; }; #define VIRT_VIEWER_DISPLAY_SPICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_DISPLAY_SPICE, VirtViewerDisplaySpicePrivate)) @@ -343,6 +345,31 @@ virt_viewer_display_spice_selectable(VirtViewerDisplay *self) return agent_connected; } +void +virt_viewer_display_spice_set_desktop(VirtViewerDisplay *display, + guint x, guint y, + guint width, guint height) +{ + VirtViewerDisplaySpicePrivate *priv; + guint desktopWidth, desktopHeight; + + g_return_if_fail(VIRT_VIEWER_IS_DISPLAY_SPICE(display)); + + virt_viewer_display_get_desktop_size(display, &desktopWidth, &desktopHeight); + + priv = VIRT_VIEWER_DISPLAY_SPICE(display)->priv; + + if (desktopWidth == width && desktopHeight == height && priv->x == x && priv->y == y) + return; + + g_object_set(G_OBJECT(display), "desktop-width", width, "desktop-height", height, NULL); + priv->x = x; + priv->y = y; + + virt_viewer_display_queue_resize(display); + + g_signal_emit_by_name(display, "display-desktop-resize"); +} /* * Local variables: |