[Spice-devel] [PATCH vdagent 08/12] seamless-mode: Change SpiceWindow to VDAgentSeamlessModeWindow
Jakub Janků
janku.jakub.jj at gmail.com
Tue Aug 8 12:56:58 UTC 2017
From: Lukas Venhoda <lvenhoda at redhat.com>
vd_agent.h already provides structure to hold a seamless window.
Use VDAgentSeamlessModeWindow from spice-protocol, instead of creating
a new structure SpiceWindow.
---
src/vdagent/x11-seamless-mode.c | 44 +++++++++++++++++------------------------
1 file changed, 18 insertions(+), 26 deletions(-)
diff --git a/src/vdagent/x11-seamless-mode.c b/src/vdagent/x11-seamless-mode.c
index ccdb8e0..1621126 100644
--- a/src/vdagent/x11-seamless-mode.c
+++ b/src/vdagent/x11-seamless-mode.c
@@ -26,18 +26,12 @@
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <syslog.h>
+#include <spice/vd_agent.h>
#include "vdagentd-proto.h"
#include "x11.h"
#include "x11-priv.h"
-typedef struct spice_window {
- gint x;
- gint y;
- guint w;
- guint h;
-} SpiceWindow;
-
/* Get window property. */
static gulong
get_window_property(Display *display, Window window,
@@ -134,7 +128,7 @@ get_window_type(Display *display, Window window)
static void
get_geometry(Display *display, Window window,
- gint *x, gint *y, guint *w, guint *h)
+ VDAgentSeamlessModeWindow *geometry)
{
guchar *data = NULL;
gulong *extents;
@@ -143,25 +137,25 @@ get_geometry(Display *display, Window window,
guint border, depth;
XWindowAttributes attributes;
- XGetGeometry(display, window, &root, x, y, w, h, &border, &depth);
+ XGetGeometry(display, window, &root, &geometry->x, &geometry->y, &geometry->w, &geometry->h, &border, &depth);
XTranslateCoordinates(display, window, root, -border, -border,
&x_abs, &y_abs, &child);
XGetWindowAttributes(display, window, &attributes);
/* Change relative to absolute mapping (e.g. gnome-terminal, firefox). */
- if (x_abs != *x || y_abs != *y) {
- *x = x_abs - *x + attributes.x;
- *y = y_abs - *y + attributes.y;
+ if (x_abs != geometry->x || y_abs != geometry->y) {
+ geometry->x = x_abs - geometry->x + attributes.x;
+ geometry->y = y_abs - geometry->y + attributes.y;
}
/* Remove WM border (e.g. gnome-terminal, firefox). */
if (get_window_property(display, window, "_NET_FRAME_EXTENTS",
XA_CARDINAL, 32, &data) == 4) {
extents = (gulong *)data; /* left, right, top, bottom */
- *x -= extents[0];
- *y -= extents[2];
- *w += extents[0] + extents[1];
- *h += extents[2] + extents[3];
+ geometry->x -= extents[0];
+ geometry->y -= extents[2];
+ geometry->w += extents[0] + extents[1];
+ geometry->h += extents[2] + extents[3];
XFree(data);
}
@@ -170,10 +164,10 @@ get_geometry(Display *display, Window window,
if (get_window_property(display, window, "_GTK_FRAME_EXTENTS",
XA_CARDINAL, 32, &data) == 4) {
extents = (gulong *)data; /* left, right, top, bottom */
- *x += extents[0];
- *y += extents[2];
- *w -= extents[0] + extents[1];
- *h -= extents[2] + extents[3];
+ geometry->x += extents[0];
+ geometry->y += extents[2];
+ geometry->w -= extents[0] + extents[1];
+ geometry->h -= extents[2] + extents[3];
XFree(data);
}
@@ -223,13 +217,11 @@ get_window_list(struct vdagent_x11 *x11, Window window)
if (XQueryTree(x11->display, window, &root, &parent, &list, &n)) {
guint i;
for (i = 0; i < n; ++i) {
- SpiceWindow *spice_window;
+ VDAgentSeamlessModeWindow *spice_window;
if (is_visible(x11->display, list[i])) {
- spice_window = g_new0(SpiceWindow, 1);
- get_geometry(x11->display, list[i],
- &spice_window->x, &spice_window->y,
- &spice_window->w, &spice_window->h);
+ spice_window = g_new0(VDAgentSeamlessModeWindow, 1);
+ get_geometry(x11->display, list[i], spice_window);
if (vdagent_x11_restore_error_handler(x11) != 0) {
vdagent_x11_set_error_handler(x11,
@@ -271,7 +263,7 @@ vdagent_x11_seamless_mode_send_list(struct vdagent_x11 *x11)
list = g_malloc0(size);
for (l = window_list; l != NULL; l = l->next) {
- SpiceWindow *window;
+ VDAgentSeamlessModeWindow *window;
window = l->data;
list->windows[list->num_of_windows].x = window->x;
--
2.13.4
More information about the Spice-devel
mailing list