diff options
Diffstat (limited to 'xorg-server/hw/xquartz/xpr/xprFrame.c')
-rw-r--r-- | xorg-server/hw/xquartz/xpr/xprFrame.c | 224 |
1 files changed, 119 insertions, 105 deletions
diff --git a/xorg-server/hw/xquartz/xpr/xprFrame.c b/xorg-server/hw/xquartz/xpr/xprFrame.c index 98f1cc3ed..ed81c4b48 100644 --- a/xorg-server/hw/xquartz/xpr/xprFrame.c +++ b/xorg-server/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); } |