XQuartz: Initial framework for dealing with spaces on OS-X
(cherry picked from commit 9831324998
)
This commit is contained in:
parent
8bc58eb960
commit
b0e84dd16c
|
@ -106,6 +106,7 @@ enum {
|
||||||
kXDarwinBringAllToFront, // bring all X windows to front
|
kXDarwinBringAllToFront, // bring all X windows to front
|
||||||
kXDarwinToggleFullscreen, // Enable/Disable fullscreen mode
|
kXDarwinToggleFullscreen, // Enable/Disable fullscreen mode
|
||||||
kXDarwinSetRootless, // Set rootless mode
|
kXDarwinSetRootless, // Set rootless mode
|
||||||
|
kXDarwinSpaceChanged, // Spaces changed
|
||||||
/*
|
/*
|
||||||
* AppleWM events
|
* AppleWM events
|
||||||
*/
|
*/
|
||||||
|
@ -116,7 +117,7 @@ enum {
|
||||||
*/
|
*/
|
||||||
kXDarwinDisplayChanged, // display configuration has changed
|
kXDarwinDisplayChanged, // display configuration has changed
|
||||||
kXDarwinWindowState, // window visibility state has changed
|
kXDarwinWindowState, // window visibility state has changed
|
||||||
kXDarwinWindowMoved // window has moved on screen
|
kXDarwinWindowMoved, // window has moved on screen
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ENABLE_DEBUG_LOG 1
|
#define ENABLE_DEBUG_LOG 1
|
||||||
|
|
|
@ -364,6 +364,14 @@ static void QuartzSetRootClip(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* QuartzSpaceChanged
|
||||||
|
* Unmap offscreen windows, map onscreen windows
|
||||||
|
*/
|
||||||
|
static void QuartzSpaceChanged(uint32_t space_id) {
|
||||||
|
/* Do something special here, so we don't depend on quartz-wm for spaces to work... */
|
||||||
|
DEBUG_LOG("Space Changed (%u) ... do something interesting...\n", space_id);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QuartzMessageServerThread
|
* QuartzMessageServerThread
|
||||||
|
@ -494,6 +502,10 @@ void QuartzProcessEvent(xEvent *xe) {
|
||||||
RootlessOrderAllWindows();
|
RootlessOrderAllWindows();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case kXDarwinSpaceChanged:
|
||||||
|
DEBUG_LOG("kXDarwinSpaceChanged\n");
|
||||||
|
QuartzSpaceChanged(xe->u.clientMessage.u.l.longs0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ErrorF("Unknown application defined event type %d.\n", xe->u.u.type);
|
ErrorF("Unknown application defined event type %d.\n", xe->u.u.type);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ static const char *xprOpenGLBundle = "glxCGL.bundle";
|
||||||
*/
|
*/
|
||||||
static void eventHandler(unsigned int type, const void *arg,
|
static void eventHandler(unsigned int type, const void *arg,
|
||||||
unsigned int arg_size, void *data) {
|
unsigned int arg_size, void *data) {
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case XP_EVENT_DISPLAY_CHANGED:
|
case XP_EVENT_DISPLAY_CHANGED:
|
||||||
DEBUG_LOG("XP_EVENT_DISPLAY_CHANGED\n");
|
DEBUG_LOG("XP_EVENT_DISPLAY_CHANGED\n");
|
||||||
|
@ -105,6 +106,13 @@ static void eventHandler(unsigned int type, const void *arg,
|
||||||
DRISurfaceNotify(*(xp_surface_id *) arg, kind);
|
DRISurfaceNotify(*(xp_surface_id *) arg, kind);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case XP_EVENT_SPACE_CHANGED:
|
||||||
|
ErrorF("XP_EVENT_SPACE_CHANGED\n");
|
||||||
|
if(arg_size == sizeof(uint32_t)) {
|
||||||
|
uint32_t space_id = *(uint32_t *)arg;
|
||||||
|
QuartzMessageServerThread(kXDarwinSpaceChanged, 1, space_id);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ErrorF("Unknown XP_EVENT type (%d) in xprScreen:eventHandler\n", type);
|
ErrorF("Unknown XP_EVENT type (%d) in xprScreen:eventHandler\n", type);
|
||||||
}
|
}
|
||||||
|
@ -233,7 +241,8 @@ xprDisplayInit(void)
|
||||||
| XP_EVENT_WINDOW_STATE_CHANGED
|
| XP_EVENT_WINDOW_STATE_CHANGED
|
||||||
| XP_EVENT_WINDOW_MOVED
|
| XP_EVENT_WINDOW_MOVED
|
||||||
| XP_EVENT_SURFACE_CHANGED
|
| XP_EVENT_SURFACE_CHANGED
|
||||||
| XP_EVENT_SURFACE_DESTROYED,
|
| XP_EVENT_SURFACE_DESTROYED
|
||||||
|
| XP_EVENT_SPACE_CHANGED,
|
||||||
eventHandler, NULL);
|
eventHandler, NULL);
|
||||||
|
|
||||||
AppleDRIExtensionInit();
|
AppleDRIExtensionInit();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user