summaryrefslogtreecommitdiff
path: root/hw/xquartz/xpr/xprFrame.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xquartz/xpr/xprFrame.c')
-rw-r--r--hw/xquartz/xpr/xprFrame.c224
1 files changed, 119 insertions, 105 deletions
diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index 98f1cc3ed..ed81c4b48 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -73,37 +73,51 @@ static pthread_rwlock_t window_hash_rwlock;
#endif
/* Prototypes for static functions */
-static Bool xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
+static Bool
+xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
int newX, int newY, RegionPtr pShape);
-static void xprDestroyFrame(RootlessFrameID wid);
-static void xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY);
-static void xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
+static void
+xprDestroyFrame(RootlessFrameID wid);
+static void
+xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY);
+static void
+xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
int newX, int newY, unsigned int newW, unsigned int newH,
unsigned int gravity);
-static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid);
-static void xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape);
-static void xprUnmapFrame(RootlessFrameID wid);
-static void xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow);
-static void xprStopDrawing(RootlessFrameID wid, Bool flush);
-static void xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage);
-static void xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects,
+static void
+xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid);
+static void
+xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape);
+static void
+xprUnmapFrame(RootlessFrameID wid);
+static void
+xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow);
+static void
+xprStopDrawing(RootlessFrameID wid, Bool flush);
+static void
+xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage);
+static void
+xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec * rects,
int shift_x, int shift_y);
-static void xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin);
-static Bool xprDoReorderWindow(RootlessWindowPtr pFrame);
-static void xprHideWindow(RootlessFrameID wid);
-static void xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen);
-static void xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
+static void
+xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin);
+static Bool
+xprDoReorderWindow(RootlessWindowPtr pFrame);
+static void
+xprHideWindow(RootlessFrameID wid);
+static void
+xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen);
+static void
+xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec * dstRects,
int dx, int dy);
-
static inline xp_error
xprConfigureWindow(xp_window_id id, unsigned int mask,
- const xp_window_changes *values)
+ const xp_window_changes * values)
{
return xp_configure_window(id, mask, values);
}
-
static void
xprSetNativeProperty(RootlessWindowPtr pFrame)
{
@@ -112,20 +126,22 @@ xprSetNativeProperty(RootlessWindowPtr pFrame)
long data;
err = xp_get_native_window(x_cvt_vptr_to_uint(pFrame->wid), &native_id);
- if (err == Success)
- {
+ if (err == Success) {
/* FIXME: move this to AppleWM extension */
data = native_id;
- dixChangeWindowProperty(serverClient, pFrame->win, xa_native_window_id(),
- XA_INTEGER, 32, PropModeReplace, 1, &data, TRUE);
+ dixChangeWindowProperty(serverClient, pFrame->win,
+ xa_native_window_id(), XA_INTEGER, 32,
+ PropModeReplace, 1, &data, TRUE);
}
}
static xp_error
-xprColormapCallback(void *data, int first_color, int n_colors, uint32_t *colors)
+xprColormapCallback(void *data, int first_color, int n_colors,
+ uint32_t * colors)
{
- return (RootlessResolveColormap (data, first_color, n_colors, colors) ? XP_Success : XP_BadMatch);
+ return (RootlessResolveColormap(data, first_color, n_colors, colors) ?
+ XP_Success : XP_BadMatch);
}
/*
@@ -147,8 +163,7 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
wc.bit_gravity = XP_GRAVITY_NONE;
mask |= XP_BOUNDS;
- if (pWin->drawable.depth == 8)
- {
+ if (pWin->drawable.depth == 8) {
wc.depth = XP_DEPTH_INDEX8;
wc.colormap = xprColormapCallback;
wc.colormap_data = pScreen;
@@ -162,35 +177,34 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
wc.depth = XP_DEPTH_NIL;
mask |= XP_DEPTH;
- if (pShape != NULL)
- {
+ if (pShape != NULL) {
wc.shape_nrects = RegionNumRects(pShape);
wc.shape_rects = RegionRects(pShape);
wc.shape_tx = wc.shape_ty = 0;
mask |= XP_SHAPE;
}
- pFrame->level = !IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
+ pFrame->level =
+ !IsRoot(pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
- if(XQuartzIsRootless)
+ if (XQuartzIsRootless)
wc.window_level = normal_window_levels[pFrame->level];
- else if(XQuartzShieldingWindowLevel)
+ else if (XQuartzShieldingWindowLevel)
wc.window_level = XQuartzShieldingWindowLevel + 1;
else
wc.window_level = rooted_window_levels[pFrame->level];
mask |= XP_WINDOW_LEVEL;
- err = xp_create_window(mask, &wc, (xp_window_id *) &pFrame->wid);
+ err = xp_create_window(mask, &wc, (xp_window_id *) & pFrame->wid);
- if (err != Success)
- {
+ if (err != Success) {
return FALSE;
}
#ifdef HAVE_LIBDISPATCH
- dispatch_async(window_hash_serial_q, ^{
- x_hash_table_insert(window_hash, pFrame->wid, pFrame);
- });
+ dispatch_async(window_hash_serial_q, ^ {
+ x_hash_table_insert(window_hash, pFrame->wid, pFrame);}
+ );
#else
pthread_rwlock_wrlock(&window_hash_rwlock);
x_hash_table_insert(window_hash, pFrame->wid, pFrame);
@@ -202,7 +216,6 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
return TRUE;
}
-
/*
* Destroy a frame.
*/
@@ -212,9 +225,8 @@ xprDestroyFrame(RootlessFrameID wid)
xp_error err;
#ifdef HAVE_LIBDISPATCH
- dispatch_async(window_hash_serial_q, ^{
- x_hash_table_remove(window_hash, wid);
- });
+ dispatch_async(window_hash_serial_q, ^ {
+ x_hash_table_remove(window_hash, wid);});
#else
pthread_rwlock_wrlock(&window_hash_rwlock);
x_hash_table_remove(window_hash, wid);
@@ -223,10 +235,10 @@ xprDestroyFrame(RootlessFrameID wid)
err = xp_destroy_window(x_cvt_vptr_to_uint(wid));
if (err != Success)
- FatalError("Could not destroy window %d (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
+ FatalError("Could not destroy window %d (%d).",
+ (int) x_cvt_vptr_to_uint(wid), (int) err);
}
-
/*
* Move a frame on screen.
*/
@@ -241,7 +253,6 @@ xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY)
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_ORIGIN, &wc);
}
-
/*
* Resize and move a frame.
*/
@@ -264,43 +275,46 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_BOUNDS, &wc);
}
-
/*
* Change frame stacking.
*/
-static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
+static void
+xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
+{
xp_window_changes wc;
unsigned int mask = XP_STACKING;
+
#ifdef HAVE_LIBDISPATCH
__block
#endif
- RootlessWindowRec *winRec;
+ RootlessWindowRec * winRec;
/* Stack frame below nextWid it if it exists, or raise
frame above everything otherwise. */
- if(nextWid == NULL) {
+ if (nextWid == NULL) {
wc.stack_mode = XP_MAPPED_ABOVE;
wc.sibling = 0;
- } else {
+ }
+ else {
wc.stack_mode = XP_MAPPED_BELOW;
wc.sibling = x_cvt_vptr_to_uint(nextWid);
}
#ifdef HAVE_LIBDISPATCH
- dispatch_sync(window_hash_serial_q, ^{
- winRec = x_hash_table_lookup(window_hash, wid, NULL);
- });
+ dispatch_sync(window_hash_serial_q, ^ {
+ winRec = x_hash_table_lookup(window_hash, wid, NULL);}
+ );
#else
pthread_rwlock_rdlock(&window_hash_rwlock);
winRec = x_hash_table_lookup(window_hash, wid, NULL);
pthread_rwlock_unlock(&window_hash_rwlock);
#endif
-
- if(winRec) {
- if(XQuartzIsRootless)
+
+ if (winRec) {
+ if (XQuartzIsRootless)
wc.window_level = normal_window_levels[winRec->level];
- else if(XQuartzShieldingWindowLevel)
+ else if (XQuartzShieldingWindowLevel)
wc.window_level = XQuartzShieldingWindowLevel + 1;
else
wc.window_level = rooted_window_levels[winRec->level];
@@ -310,7 +324,6 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
xprConfigureWindow(x_cvt_vptr_to_uint(wid), mask, &wc);
}
-
/*
* Change the frame's shape.
*/
@@ -319,13 +332,11 @@ xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape)
{
xp_window_changes wc;
- if (pShape != NULL)
- {
+ if (pShape != NULL) {
wc.shape_nrects = RegionNumRects(pShape);
wc.shape_rects = RegionRects(pShape);
}
- else
- {
+ else {
wc.shape_nrects = -1;
wc.shape_rects = NULL;
}
@@ -335,7 +346,6 @@ xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape)
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_SHAPE, &wc);
}
-
/*
* Unmap a frame.
*/
@@ -350,7 +360,6 @@ xprUnmapFrame(RootlessFrameID wid)
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_STACKING, &wc);
}
-
/*
* Start drawing to a frame.
* Prepare for direct access to its backing buffer.
@@ -362,15 +371,17 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow)
unsigned int rowbytes[2];
xp_error err;
- err = xp_lock_window(x_cvt_vptr_to_uint(wid), NULL, NULL, data, rowbytes, NULL);
+ err =
+ xp_lock_window(x_cvt_vptr_to_uint(wid), NULL, NULL, data, rowbytes,
+ NULL);
if (err != Success)
- FatalError("Could not lock window %d for drawing (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
+ FatalError("Could not lock window %d for drawing (%d).",
+ (int) x_cvt_vptr_to_uint(wid), (int) err);
*pixelData = data[0];
*bytesPerRow = rowbytes[0];
}
-
/*
* Stop drawing to a frame.
*/
@@ -383,11 +394,11 @@ xprStopDrawing(RootlessFrameID wid, Bool flush)
/* This should be a FatalError, but we started tripping over it. Make it a
* FatalError after http://xquartz.macosforge.org/trac/ticket/482 is fixed.
*/
- if(err != Success)
- ErrorF("Could not unlock window %d after drawing (%d).", (int)x_cvt_vptr_to_uint(wid), (int)err);
+ if (err != Success)
+ ErrorF("Could not unlock window %d after drawing (%d).",
+ (int) x_cvt_vptr_to_uint(wid), (int) err);
}
-
/*
* Flush drawing updates to the screen.
*/
@@ -397,18 +408,16 @@ xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage)
xp_flush_window(x_cvt_vptr_to_uint(wid));
}
-
/*
* Mark damaged rectangles as requiring redisplay to screen.
*/
static void
-xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects,
+xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec * rects,
int shift_x, int shift_y)
{
xp_mark_window(x_cvt_vptr_to_uint(wid), nrects, rects, shift_x, shift_y);
}
-
/*
* Called after the window associated with a frame has been switched
* to a new top-level parent.
@@ -421,31 +430,29 @@ xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin)
xprSetNativeProperty(pFrame);
}
-
/*
* Called to check if the frame should be reordered when it is restacked.
*/
-static Bool xprDoReorderWindow(RootlessWindowPtr pFrame)
+static Bool
+xprDoReorderWindow(RootlessWindowPtr pFrame)
{
WindowPtr pWin = pFrame->win;
return AppleWMDoReorderWindow(pWin);
}
-
/*
* Copy area in frame to another part of frame.
* Used to accelerate scrolling.
*/
static void
-xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
+xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec * dstRects,
int dx, int dy)
{
xp_copy_window(x_cvt_vptr_to_uint(wid), x_cvt_vptr_to_uint(wid),
dstNrects, dstRects, dx, dy);
}
-
static RootlessFrameProcsRec xprRootlessProcs = {
xprCreateFrame,
xprDestroyFrame,
@@ -466,7 +473,6 @@ static RootlessFrameProcsRec xprRootlessProcs = {
xprCopyWindow
};
-
/*
* Initialize XPR implementation
*/
@@ -480,15 +486,16 @@ xprInit(ScreenPtr pScreen)
assert((window_hash = x_hash_table_new(NULL, NULL, NULL, NULL)));
#ifdef HAVE_LIBDISPATCH
- assert((window_hash_serial_q = dispatch_queue_create(BUNDLE_ID_PREFIX".X11.xpr_window_hash", NULL)));
+ assert((window_hash_serial_q =
+ dispatch_queue_create(BUNDLE_ID_PREFIX ".X11.xpr_window_hash",
+ NULL)));
#else
assert(0 == pthread_rwlock_init(&window_hash_rwlock, NULL));
#endif
-
+
return TRUE;
}
-
/*
* Given the id of a physical window, try to find the top-level (or root)
* X window that it represents.
@@ -498,11 +505,14 @@ xprGetXWindow(xp_window_id wid)
{
#ifdef HAVE_LIBDISPATCH
RootlessWindowRec *winRec __block;
- dispatch_sync(window_hash_serial_q, ^{
- winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
- });
+
+ dispatch_sync(window_hash_serial_q, ^ {
+ winRec =
+ x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid),
+ NULL);});
#else
RootlessWindowRec *winRec;
+
pthread_rwlock_rdlock(&window_hash_rwlock);
winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
pthread_rwlock_unlock(&window_hash_rwlock);
@@ -529,7 +539,6 @@ xprIsX11Window(int windowNumber)
return ret;
}
-
/*
* xprHideWindows
* Hide or unhide all top level windows. This is called for application hide/
@@ -544,6 +553,7 @@ xprHideWindows(Bool hide)
for (screen = 0; screen < screenInfo.numScreens; screen++) {
RootlessFrameID prevWid = NULL;
+
pRoot = screenInfo.screens[screen]->root;
for (pWin = pRoot->firstChild; pWin; pWin = pWin->nextSib) {
@@ -552,7 +562,8 @@ xprHideWindows(Bool hide)
if (winRec != NULL) {
if (hide) {
xprUnmapFrame(winRec->wid);
- } else {
+ }
+ else {
BoxRec box;
xprRestackFrame(winRec->wid, prevWid);
@@ -577,32 +588,35 @@ xprHideWindows(Bool hide)
Bool no_configure_window;
static inline int
-configure_window (xp_window_id id, unsigned int mask,
- const xp_window_changes *values)
+configure_window(xp_window_id id, unsigned int mask,
+ const xp_window_changes * values)
{
- if (!no_configure_window)
- return xp_configure_window (id, mask, values);
- else
- return XP_Success;
+ if (!no_configure_window)
+ return xp_configure_window(id, mask, values);
+ else
+ return XP_Success;
}
-
static
-void xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen)
+ void
+xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen)
{
- /* This is how we tell xp that the colormap may have changed. */
- xp_window_changes wc;
- wc.colormap = xprColormapCallback;
- wc.colormap_data = pScreen;
+ /* This is how we tell xp that the colormap may have changed. */
+ xp_window_changes wc;
- configure_window(MAKE_WINDOW_ID(wid), XP_COLORMAP, &wc);
+ wc.colormap = xprColormapCallback;
+ wc.colormap_data = pScreen;
+
+ configure_window(MAKE_WINDOW_ID(wid), XP_COLORMAP, &wc);
}
static
-void xprHideWindow(RootlessFrameID wid)
+ void
+xprHideWindow(RootlessFrameID wid)
{
- xp_window_changes wc;
- wc.stack_mode = XP_UNMAPPED;
- wc.sibling = 0;
- configure_window(MAKE_WINDOW_ID(wid), XP_STACKING, &wc);
+ xp_window_changes wc;
+
+ wc.stack_mode = XP_UNMAPPED;
+ wc.sibling = 0;
+ configure_window(MAKE_WINDOW_ID(wid), XP_STACKING, &wc);
}