[PATCH 03/19] Xephyr: use xcb-shape instead of XShape*
Eric Anholt
eric at anholt.net
Mon Aug 26 13:20:47 PDT 2013
From: Julien Cristau <jcristau at debian.org>
Reviewed-by: Mikhail Gusarov <dottedmag at dottedmag.net>
Reviewed-by: Eric Anholt <eric at anholt.net>
Signed-off-by: Julien Cristau <jcristau at debian.org>
---
hw/kdrive/ephyr/hostx.c | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index 2ecda14..f4948b9 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -54,7 +54,6 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
-#include <X11/extensions/shape.h>
#include <xcb/xcb.h>
#include <xcb/xproto.h>
#include <X11/Xlib-xcb.h>
@@ -1300,15 +1299,16 @@ hostx_set_window_bounding_rectangles(int a_window,
EphyrRect * a_rects, int a_num_rects)
{
Bool is_ok = FALSE;
- Display *dpy = hostx_get_display();
int i = 0;
- XRectangle *rects = NULL;
+ xcb_rectangle_t *rects = NULL;
- EPHYR_RETURN_VAL_IF_FAIL(dpy && a_rects, FALSE);
+ EPHYR_RETURN_VAL_IF_FAIL(a_rects, FALSE);
EPHYR_LOG("enter. num rects:%d\n", a_num_rects);
- rects = calloc(a_num_rects, sizeof(XRectangle));
+ rects = calloc(a_num_rects, sizeof (xcb_rectangle_t));
+ if (!rects)
+ goto out;
for (i = 0; i < a_num_rects; i++) {
rects[i].x = a_rects[i].x1;
rects[i].y = a_rects[i].y1;
@@ -1317,11 +1317,17 @@ hostx_set_window_bounding_rectangles(int a_window,
EPHYR_LOG("borders clipped to rect[x:%d,y:%d,w:%d,h:%d]\n",
rects[i].x, rects[i].y, rects[i].width, rects[i].height);
}
- /*this aways returns 1 */
- XShapeCombineRectangles(dpy, a_window, ShapeBounding, 0, 0,
- rects, a_num_rects, ShapeSet, YXBanded);
+ xcb_shape_rectangles(HostX.conn,
+ XCB_SHAPE_SO_SET,
+ XCB_SHAPE_SK_BOUNDING,
+ XCB_CLIP_ORDERING_YX_BANDED,
+ a_window,
+ 0, 0,
+ a_num_rects,
+ rects);
is_ok = TRUE;
+out:
free(rects);
rects = NULL;
EPHYR_LOG("leave\n");
@@ -1335,13 +1341,15 @@ hostx_set_window_clipping_rectangles(int a_window,
Bool is_ok = FALSE;
Display *dpy = hostx_get_display();
int i = 0;
- XRectangle *rects = NULL;
+ xcb_rectangle_t *rects = NULL;
EPHYR_RETURN_VAL_IF_FAIL(dpy && a_rects, FALSE);
EPHYR_LOG("enter. num rects:%d\n", a_num_rects);
- rects = calloc(a_num_rects, sizeof(XRectangle));
+ rects = calloc(a_num_rects, sizeof (xcb_rectangle_t));
+ if (!rects)
+ goto out;
for (i = 0; i < a_num_rects; i++) {
rects[i].x = a_rects[i].x1;
rects[i].y = a_rects[i].y1;
@@ -1350,11 +1358,17 @@ hostx_set_window_clipping_rectangles(int a_window,
EPHYR_LOG("clipped to rect[x:%d,y:%d,w:%d,h:%d]\n",
rects[i].x, rects[i].y, rects[i].width, rects[i].height);
}
- /*this aways returns 1 */
- XShapeCombineRectangles(dpy, a_window, ShapeClip, 0, 0,
- rects, a_num_rects, ShapeSet, YXBanded);
+ xcb_shape_rectangles(HostX.conn,
+ XCB_SHAPE_SO_SET,
+ XCB_SHAPE_SK_CLIP,
+ XCB_CLIP_ORDERING_YX_BANDED,
+ a_window,
+ 0, 0,
+ a_num_rects,
+ rects);
is_ok = TRUE;
+out:
free(rects);
rects = NULL;
EPHYR_LOG("leave\n");
--
1.8.4.rc3
More information about the xorg-devel
mailing list