summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer-display-spice.c
diff options
context:
space:
mode:
authorPavel Grunt <pgrunt@redhat.com>2015-04-05 15:45:02 +0200
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-04-09 10:47:57 +0200
commit310979947594bbbab39c4b1b25823cf0a2e56e93 (patch)
tree1ab2674eadf40e69bb720c6a9c0062b373841af4 /src/virt-viewer-display-spice.c
parent01249f703263ef6a8be59479df5cf6c5e8b1ceb9 (diff)
downloadvirt-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.c27
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: