static void X11_CheckWindowManager(_THIS) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; Display *display = data->display; Atom _NET_SUPPORTING_WM_CHECK; int status, real_format; Atom real_type; unsigned long items_read = 0, items_left = 0; unsigned char *propdata = NULL; Window wm_window = 0; #ifdef DEBUG_WINDOW_MANAGER char *wm_name; #endif /* Set up a handler to gracefully catch errors */ X11_XSync(display, False); handler = X11_XSetErrorHandler(X11_CheckWindowManagerErrorHandler); _NET_SUPPORTING_WM_CHECK = X11_XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False); status = X11_XGetWindowProperty(display, DefaultRootWindow(display), _NET_SUPPORTING_WM_CHECK, 0L, 1L, False, XA_WINDOW, &real_type, &real_format, &items_read, &items_left, &propdata); if (status == Success) { if (items_read) { wm_window = ((Window*)propdata)[0]; } if (propdata) { X11_XFree(propdata); propdata = NULL; } } if (wm_window) { status = X11_XGetWindowProperty(display, wm_window, _NET_SUPPORTING_WM_CHECK, 0L, 1L, False, XA_WINDOW, &real_type, &real_format, &items_read, &items_left, &propdata); if (status != Success || !items_read || wm_window != ((Window*)propdata)[0]) { wm_window = None; } if (status == Success && propdata) { X11_XFree(propdata); propdata = NULL; } } /* Reset the error handler, we're done checking */ X11_XSync(display, False); X11_XSetErrorHandler(handler); if (!wm_window) { #ifdef DEBUG_WINDOW_MANAGER printf("Couldn't get _NET_SUPPORTING_WM_CHECK property\n"); #endif return; } data->net_wm = SDL_TRUE; #ifdef DEBUG_WINDOW_MANAGER wm_name = X11_GetWindowTitle(_this, wm_window); printf("Window manager: %s\n", wm_name); SDL_free(wm_name); #endif }
int X11_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) { Window w = (Window) data; window->title = X11_GetWindowTitle(_this, w); if (SetupWindowData(_this, window, w, SDL_FALSE) < 0) { return -1; } return 0; }
static void X11_CheckWindowManager(_THIS) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; Display *display = data->display; Atom _NET_SUPPORTING_WM_CHECK; int status, real_format; Atom real_type; unsigned long items_read, items_left; unsigned char *propdata; Window wm_window = 0; #ifdef DEBUG_WINDOW_MANAGER char *wm_name; #endif _NET_SUPPORTING_WM_CHECK = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False); status = XGetWindowProperty(display, DefaultRootWindow(display), _NET_SUPPORTING_WM_CHECK, 0L, 1L, False, XA_WINDOW, &real_type, &real_format, &items_read, &items_left, &propdata); if (status == Success && items_read) { wm_window = ((Window*)propdata)[0]; } XFree(propdata); if (!wm_window) { #ifdef DEBUG_WINDOW_MANAGER printf("Couldn't get _NET_SUPPORTING_WM_CHECK property\n"); #endif return; } data->net_wm = SDL_TRUE; #ifdef DEBUG_WINDOW_MANAGER wm_name = X11_GetWindowTitle(_this, wm_window); printf("Window manager: %s\n", wm_name); SDL_free(wm_name); #endif }