diff options
Diffstat (limited to 'miext')
-rw-r--r-- | miext/rootless/rootless.h | 9 | ||||
-rw-r--r-- | miext/rootless/rootlessCommon.c | 3 | ||||
-rw-r--r-- | miext/rootless/rootlessCommon.h | 4 | ||||
-rw-r--r-- | miext/rootless/rootlessWindow.c | 76 | ||||
-rw-r--r-- | miext/rootless/rootlessWindow.h | 2 |
5 files changed, 26 insertions, 68 deletions
diff --git a/miext/rootless/rootless.h b/miext/rootless/rootless.h index bde4cff52..00eac4e8a 100644 --- a/miext/rootless/rootless.h +++ b/miext/rootless/rootless.h @@ -351,6 +351,13 @@ typedef void (*RootlessCopyWindowProc) (RootlessFrameID wid, int dstNrects, const BoxRec *dstRects, int dx, int dy); + +typedef void (*RootlessHideWindowProc) + (RootlessFrameID wid); + +typedef void (*RootlessUpdateColormapProc) + (RootlessFrameID wid, ScreenPtr pScreen); + /* * Rootless implementation function list */ @@ -374,6 +381,8 @@ typedef struct _RootlessFrameProcs { /* Optional frame functions */ RootlessSwitchWindowProc SwitchWindow; RootlessDoReorderWindowProc DoReorderWindow; + RootlessHideWindowProc HideWindow; + RootlessUpdateColormapProc UpdateColormap; /* Optional acceleration functions */ RootlessCopyBytesProc CopyBytes; diff --git a/miext/rootless/rootlessCommon.c b/miext/rootless/rootlessCommon.c index e3dd9d97c..39a3eed0f 100644 --- a/miext/rootless/rootlessCommon.c +++ b/miext/rootless/rootlessCommon.c @@ -146,6 +146,7 @@ void RootlessStartDrawing(WindowPtr pWindow) ScreenPtr pScreen = pWindow->drawable.pScreen; WindowPtr top = TopLevelParent(pWindow); RootlessWindowRec *winRec; + PixmapPtr curPixmap; if (top == NULL) return; @@ -172,7 +173,7 @@ void RootlessStartDrawing(WindowPtr pWindow) winRec->is_drawing = TRUE; } - PixmapPtr curPixmap = pScreen->GetWindowPixmap(pWindow); + curPixmap = pScreen->GetWindowPixmap(pWindow); if (curPixmap == winRec->pixmap) { RL_DEBUG_MSG("Window %p already has winRec->pixmap %p; not pushing\n", pWindow, winRec->pixmap); diff --git a/miext/rootless/rootlessCommon.h b/miext/rootless/rootlessCommon.h index ba121c0f4..d4a94f8ca 100644 --- a/miext/rootless/rootlessCommon.h +++ b/miext/rootless/rootlessCommon.h @@ -268,9 +268,6 @@ Bool RootlessResolveColormap (ScreenPtr pScreen, int first_color, void RootlessFlushWindowColormap (WindowPtr pWin); void RootlessFlushScreenColormaps (ScreenPtr pScreen); -// xp_error -int RootlessColormapCallback(void *data, int first_color, int n_colors, uint32_t *colors); - // Move a window to its proper location on the screen. void RootlessRepositionWindow(WindowPtr pWin); @@ -285,5 +282,6 @@ void RootlessUpdateRooted (Bool state); void RootlessEnableRoot (ScreenPtr pScreen); void RootlessDisableRoot (ScreenPtr pScreen); +void RootlessSetPixmapOfAncestors(WindowPtr pWin); #endif /* _ROOTLESSCOMMON_H */ diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c index d43301fc1..53209565d 100644 --- a/miext/rootless/rootlessWindow.c +++ b/miext/rootless/rootlessWindow.c @@ -36,15 +36,15 @@ #include <stddef.h> /* For NULL */ #include <limits.h> /* For CHAR_BIT */ #include <assert.h> -#ifdef __APPLE__ -//#include <X11/Xlib.h> #include <X11/Xatom.h> +#ifdef __APPLE__ +#include <Xplugin.h> #include "mi.h" #include "pixmapstr.h" #include "windowstr.h" -#include <Xplugin.h> //#include <X11/extensions/applewm.h> extern int darwinMainScreenX, darwinMainScreenY; +extern Bool no_configure_window; #endif #include "fb.h" @@ -61,8 +61,6 @@ extern int darwinMainScreenX, darwinMainScreenY; #define SCREEN_TO_GLOBAL_Y 0 #endif -#define MAKE_WINDOW_ID(x) ((xp_window_id)((size_t)(x))) - #define DEFINE_ATOM_HELPER(func,atom_name) \ static Atom func (void) { \ static unsigned int generation = 0; \ @@ -74,34 +72,15 @@ extern int darwinMainScreenX, darwinMainScreenY; return atom; \ } -DEFINE_ATOM_HELPER (xa_native_screen_origin, "_NATIVE_SCREEN_ORIGIN") DEFINE_ATOM_HELPER (xa_native_window_id, "_NATIVE_WINDOW_ID") -DEFINE_ATOM_HELPER (xa_apple_no_order_in, "_APPLE_NO_ORDER_IN") -static Bool no_configure_window; static Bool windows_hidden; // TODO - abstract xp functions -static inline int -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; -} - -/*static inline unsigned long -current_time_in_seconds (void) -{ - unsigned long t = 0; - - t += currentTime.milliseconds / 1000; - t += currentTime.months * 4294967; +#ifdef __APPLE__ - return t; - } */ +// XXX: identical to x_cvt_vptr_to_uint ? +#define MAKE_WINDOW_ID(x) ((xp_window_id)((size_t)(x))) void RootlessNativeWindowStateChanged (WindowPtr pWin, unsigned int state) @@ -153,25 +132,7 @@ void RootlessNativeWindowMoved (WindowPtr pWin) { no_configure_window = FALSE; } -/* Updates the _NATIVE_SCREEN_ORIGIN property on the given root window. */ -static void -set_screen_origin (WindowPtr pWin) -{ - long data[2]; - - if (!IsRoot (pWin)) - return; - - /* FIXME: move this to an extension? */ - - data[0] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].x - + darwinMainScreenX); - data[1] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].y - + darwinMainScreenY); - - dixChangeWindowProperty(serverClient, pWin, xa_native_screen_origin(), - XA_INTEGER, 32, PropModeReplace, 2, data, TRUE); -} +#endif /* __APPLE__ */ /* * RootlessCreateWindow @@ -437,13 +398,6 @@ RootlessInitializeFrame(WindowPtr pWin, RootlessWindowRec *winRec) #endif } - -Bool -RootlessColormapCallback (void *data, int first_color, int n_colors, uint32_t *colors) -{ - return (RootlessResolveColormap (data, first_color, n_colors, colors) ? XP_Success : XP_BadMatch); -} - /* * RootlessEnsureFrame * Make sure the given window is framed. If the window doesn't have a @@ -1482,19 +1436,15 @@ void RootlessFlushWindowColormap (WindowPtr pWin) { RootlessWindowRec *winRec = WINREC (pWin); - xp_window_changes wc; + ScreenPtr pScreen = pWin->drawable.pScreen; if (winRec == NULL) return; RootlessStopDrawing (pWin, FALSE); - /* This is how we tell xp that the colormap may have changed. */ - - wc.colormap = RootlessColormapCallback; - wc.colormap_data = pWin->drawable.pScreen; - - configure_window (MAKE_WINDOW_ID(winRec->wid), XP_COLORMAP, &wc); + if (SCREENREC(pScreen)->imp->UpdateColormap) + SCREENREC(pScreen)->imp->UpdateColormap(winRec->wid, pScreen); } /* @@ -1617,7 +1567,6 @@ RootlessHideAllWindows (void) ScreenPtr pScreen; WindowPtr pWin; RootlessWindowRec *winRec; - xp_window_changes wc; if (windows_hidden) return; @@ -1641,9 +1590,8 @@ RootlessHideAllWindows (void) winRec = WINREC (pWin); if (winRec != NULL) { - wc.stack_mode = XP_UNMAPPED; - wc.sibling = 0; - configure_window (MAKE_WINDOW_ID(winRec->wid), XP_STACKING, &wc); + if (SCREENREC(pScreen)->imp->HideWindow) + SCREENREC(pScreen)->imp->HideWindow(winRec->wid); } } } diff --git a/miext/rootless/rootlessWindow.h b/miext/rootless/rootlessWindow.h index 2d2555ea5..ca104a4d7 100644 --- a/miext/rootless/rootlessWindow.h +++ b/miext/rootless/rootlessWindow.h @@ -52,7 +52,9 @@ void RootlessResizeWindow(WindowPtr pWin, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib); void RootlessReparentWindow(WindowPtr pWin, WindowPtr pPriorParent); void RootlessChangeBorderWidth(WindowPtr pWin, unsigned int width); +#ifdef __APPLE__ void RootlessNativeWindowMoved (WindowPtr pWin); void RootlessNativeWindowStateChanged (WindowPtr pWin, unsigned int state); +#endif #endif |