瀏覽代碼

x11: Put a matching window_group wmhint on every window created.

This is useful to the Window Manager, so it can know to associate multiple SDL
windows with a single app.
Ryan C. Gordon 9 年之前
父節點
當前提交
f9af0c0376
共有 3 個文件被更改,包括 6 次插入1 次删除
  1. 3 0
      src/video/x11/SDL_x11video.c
  2. 1 0
      src/video/x11/SDL_x11video.h
  3. 2 1
      src/video/x11/SDL_x11window.c

+ 3 - 0
src/video/x11/SDL_x11video.c

@@ -376,6 +376,9 @@ X11_VideoInit(_THIS)
     /* Get the process PID to be associated to the window */
     data->pid = getpid();
 
+    /* I have no idea how random this actually is, or has to be. */
+    data->window_group = (XID) (((size_t) data->pid) ^ ((size_t) _this));
+
     /* Open a connection to the X input manager */
 #ifdef X_HAVE_UTF8_STRING
     if (SDL_X11_HAVE_UTF8) {

+ 1 - 0
src/video/x11/SDL_x11video.h

@@ -81,6 +81,7 @@ typedef struct SDL_VideoData
     int numwindows;
     SDL_WindowData **windowlist;
     int windowlistlength;
+    XID window_group;
 
     /* This is true for ICCCM2.0-compliant window managers */
     SDL_bool net_wm;

+ 2 - 1
src/video/x11/SDL_x11window.c

@@ -524,7 +524,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
     /* Setup the input hints so we get keyboard input */
     wmhints = X11_XAllocWMHints();
     wmhints->input = True;
-    wmhints->flags = InputHint;
+    wmhints->window_group = data->window_group;
+    wmhints->flags = InputHint | WindowGroupHint;
 
     /* Setup the class hints so we can get an icon (AfterStep) */
     classhints = X11_XAllocClassHint();