xserver: Branch 'dmx-2' - 2 commits
David Reveman
davidr at kemper.freedesktop.org
Mon Jan 26 16:10:42 PST 2009
hw/dmx/dmxdbus.c | 119 +++++++++++++++++++++++++++++++++++++++-----------
hw/dmx/dmxextension.c | 30 ++++++++++++
hw/dmx/dmxrandr.c | 9 ++-
hw/dmx/dmxwindow.c | 2
4 files changed, 132 insertions(+), 28 deletions(-)
New commits:
commit 99045bfaf2dab101c30e26a189e0e56d8f2d76c2
Author: David Reveman <davidr at novell.com>
Date: Mon Jan 26 18:41:32 2009 -0500
Add dbus method attachScreenAt.
diff --git a/hw/dmx/dmxdbus.c b/hw/dmx/dmxdbus.c
index 0ea4628..130f6a0 100644
--- a/hw/dmx/dmxdbus.c
+++ b/hw/dmx/dmxdbus.c
@@ -137,34 +137,22 @@ disable_screen (DBusMessage *message,
}
static int
-attach_screen (DBusMessage *message,
+attach_screen (uint32_t window,
+ uint32_t screen,
+ uint32_t auth_type_len,
+ uint32_t auth_data_len,
+ const char *display,
+ const char *auth_type,
+ const char *auth_data,
+ const char *name,
+ int32_t x,
+ int32_t y,
DBusMessage *reply,
DBusError *error)
{
DMXScreenAttributesRec attr;
- uint32_t window, screen, auth_type_len, auth_data_len;
- char *display, *auth_type, *auth_data, *name;
int ret;
- if (!dbus_message_get_args (message, error,
- DBUS_TYPE_UINT32,
- &screen,
- DBUS_TYPE_STRING,
- &display,
- DBUS_TYPE_STRING,
- &name,
- DBUS_TYPE_UINT32,
- &window,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &auth_type, &auth_type_len,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &auth_data, &auth_data_len,
- DBUS_TYPE_INVALID))
- {
- DebugF (MALFORMED_MSG ": %s, %s", error->name, error->message);
- return BadValue;
- }
-
if (!*name)
{
dbus_set_error (error,
@@ -194,8 +182,10 @@ attach_screen (DBusMessage *message,
memset (&attr, 0, sizeof (attr));
- attr.name = name;
- attr.displayName = display;
+ attr.name = name;
+ attr.displayName = display;
+ attr.rootWindowXoffset = x;
+ attr.rootWindowYoffset = y;
ret = dmxAttachScreen (screen,
&attr,
@@ -218,6 +208,83 @@ attach_screen (DBusMessage *message,
}
static int
+attach_screen_without_offset (DBusMessage *message,
+ DBusMessage *reply,
+ DBusError *error)
+{
+ uint32_t window, screen, auth_type_len, auth_data_len;
+ char *display, *auth_type, *auth_data, *name;
+
+ if (!dbus_message_get_args (message, error,
+ DBUS_TYPE_UINT32,
+ &screen,
+ DBUS_TYPE_STRING,
+ &display,
+ DBUS_TYPE_STRING,
+ &name,
+ DBUS_TYPE_UINT32,
+ &window,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &auth_type, &auth_type_len,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &auth_data, &auth_data_len,
+ DBUS_TYPE_INVALID))
+ {
+ DebugF (MALFORMED_MSG ": %s, %s", error->name, error->message);
+ return BadValue;
+ }
+
+ return attach_screen (window, screen,
+ auth_type_len, auth_data_len,
+ display,
+ auth_type, auth_data,
+ name,
+ 0, 0,
+ reply, error);
+}
+
+static int
+attach_screen_with_offset (DBusMessage *message,
+ DBusMessage *reply,
+ DBusError *error)
+{
+ uint32_t window, screen, auth_type_len, auth_data_len;
+ int32_t x, y;
+ char *display, *auth_type, *auth_data, *name;
+
+ if (!dbus_message_get_args (message, error,
+ DBUS_TYPE_UINT32,
+ &screen,
+ DBUS_TYPE_STRING,
+ &display,
+ DBUS_TYPE_STRING,
+ &name,
+ DBUS_TYPE_UINT32,
+ &window,
+ DBUS_TYPE_INT32,
+ &x,
+ DBUS_TYPE_INT32,
+ &y,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &auth_type, &auth_type_len,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &auth_data, &auth_data_len,
+ DBUS_TYPE_INVALID))
+ {
+ DebugF (MALFORMED_MSG ": %s, %s", error->name, error->message);
+ return BadValue;
+ }
+
+ return attach_screen (window, screen,
+ auth_type_len, auth_data_len,
+ display,
+ auth_type, auth_data,
+ name,
+ x, y,
+ reply, error);
+}
+
+static int
detach_screen (DBusMessage *message,
DBusMessage *reply,
DBusError *error)
@@ -425,7 +492,9 @@ message_handler (DBusConnection *connection,
else if (strcmp (dbus_message_get_member (message), "disableScreen") == 0)
err = disable_screen (message, reply, &error);
else if (strcmp (dbus_message_get_member (message), "attachScreen") == 0)
- err = attach_screen (message, reply, &error);
+ err = attach_screen_without_offset (message, reply, &error);
+ else if (strcmp (dbus_message_get_member (message), "attachScreenAt") == 0)
+ err = attach_screen_with_offset (message, reply, &error);
else if (strcmp (dbus_message_get_member (message), "detachScreen") == 0)
err = detach_screen (message, reply, &error);
else if (strcmp (dbus_message_get_member (message), "addInput") == 0)
diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c
index 7bbdb9d..1aac09a 100644
--- a/hw/dmx/dmxextension.c
+++ b/hw/dmx/dmxextension.c
@@ -1622,6 +1622,9 @@ dmxAttachScreen (int idx,
dmxScreen->beAttachedDisplay = dmxScreen->beDisplay;
dmxScreen->beDisplay = NULL;
+ dmxScreen->rootX = attr->rootWindowXoffset;
+ dmxScreen->rootY = attr->rootWindowYoffset;
+
return 0; /* Success */
}
diff --git a/hw/dmx/dmxrandr.c b/hw/dmx/dmxrandr.c
index 18ba733..a4318aa 100644
--- a/hw/dmx/dmxrandr.c
+++ b/hw/dmx/dmxrandr.c
@@ -710,7 +710,9 @@ dmxRRScreenSetSize (ScreenPtr pScreen,
int i;
for (i = 0; i < dmxNumScreens; i++)
- dmxResizeRootWindow (WindowTable[i], 0, 0, width, height);
+ dmxResizeRootWindow (WindowTable[i],
+ dmxScreens[i].rootX, dmxScreens[i].rootY,
+ width, height);
for (i = 0; i < dmxNumScreens; i++)
dmxUpdateScreenResources (screenInfo.screens[i],
@@ -723,7 +725,10 @@ dmxRRScreenSetSize (ScreenPtr pScreen,
else
#endif
{
- dmxResizeRootWindow (WindowTable[pScreen->myNum], 0, 0, width, height);
+ dmxResizeRootWindow (WindowTable[pScreen->myNum],
+ dmxScreens[pScreen->myNum].rootX,
+ dmxScreens[pScreen->myNum].rootY,
+ width, height);
dmxUpdateScreenResources (pScreen, 0, 0, width, height);
}
diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c
index 3a0ab16..7a8a8d4 100644
--- a/hw/dmx/dmxwindow.c
+++ b/hw/dmx/dmxwindow.c
@@ -141,7 +141,9 @@ Window dmxCreateRootWindow(WindowPtr pWindow)
XLIB_PROLOGUE (dmxScreen);
win = XCreateWindow(dmxScreen->beDisplay,
parent,
+ dmxScreen->rootX +
pWindow->origin.x - wBorderWidth(pWindow),
+ dmxScreen->rootY +
pWindow->origin.y - wBorderWidth(pWindow),
w,
h,
commit 1dfa85d97ac704d8b81d96ce0b20c0ce34de51cf
Author: David Reveman <davidr at novell.com>
Date: Thu Jan 22 11:40:31 2009 -0500
Add Composite extension check.
diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c
index c7eecaf..7bbdb9d 100644
--- a/hw/dmx/dmxextension.c
+++ b/hw/dmx/dmxextension.c
@@ -1504,7 +1504,7 @@ dmxAttachScreen (int idx,
if (!beShape)
{
dmxLogErrorSet (dmxWarning, errorSet, error, errorName,
- "SHAPE extension missing");
+ "SHAPE extension missing on back-end server");
dmxCloseDisplay (dmxScreen);
/* Restore the old screen */
@@ -1512,6 +1512,31 @@ dmxAttachScreen (int idx,
return 1;
}
+#ifdef COMPOSITE
+ if (!noCompositeExtension)
+ {
+ Bool beComposite = FALSE;
+ int eventBase;
+
+ XLIB_PROLOGUE (dmxScreen);
+ beComposite = XCompositeQueryExtension (dmxScreen->beDisplay,
+ &eventBase,
+ &errorBase);
+ XLIB_EPILOGUE (dmxScreen);
+
+ if (!beComposite)
+ {
+ dmxLogErrorSet (dmxWarning, errorSet, error, errorName,
+ "Composite extension missing on back-end server");
+ dmxCloseDisplay (dmxScreen);
+
+ /* Restore the old screen */
+ *dmxScreen = oldDMXScreen;
+ return 1;
+ }
+ }
+#endif
+
if (!dmxScreen->scrnWin)
dmxScreen->scrnWin = DefaultRootWindow (dmxScreen->beDisplay);
More information about the xorg-commit
mailing list