author | Sam Lantinga <slouken@libsdl.org> |
Thu, 27 Sep 2012 17:17:33 -0700 | |
changeset 6480 | d02a4369b3f5 |
parent 6479 | 388318faf0fb |
child 6481 | fab4b15b17e9 |
permissions | -rw-r--r-- |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 |
/* |
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
2 |
Simple DirectMedia Layer |
6138 | 3 |
Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org> |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
5 |
This software is provided 'as-is', without any express or implied |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
6 |
warranty. In no event will the authors be held liable for any damages |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
7 |
arising from the use of this software. |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
9 |
Permission is granted to anyone to use this software for any purpose, |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
10 |
including commercial applications, and to alter it and redistribute it |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
11 |
freely, subject to the following restrictions: |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
13 |
1. The origin of this software must not be misrepresented; you must not |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
14 |
claim that you wrote the original software. If you use this software |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
15 |
in a product, an acknowledgment in the product documentation would be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
16 |
appreciated but is not required. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
17 |
2. Altered source versions must be plainly marked as such, and must not be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
18 |
misrepresented as being the original software. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5531
diff
changeset
|
19 |
3. This notice may not be removed or altered from any source distribution. |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 |
*/ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 |
#include "SDL_config.h" |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
|
5481
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5478
diff
changeset
|
23 |
#if SDL_VIDEO_DRIVER_X11 |
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5478
diff
changeset
|
24 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
#include "../SDL_sysvideo.h" |
4465
3e69e077cb95
Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
26 |
#include "../SDL_pixels_c.h" |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
#include "../../events/SDL_keyboard_c.h" |
2940
b93965a16fe0
Fixed X11 mouse motion/button events - it's not actually safe to cast mouse events to device events.
Sam Lantinga <slouken@libsdl.org>
parents:
2931
diff
changeset
|
28 |
#include "../../events/SDL_mouse_c.h" |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
#include "SDL_x11video.h" |
2940
b93965a16fe0
Fixed X11 mouse motion/button events - it's not actually safe to cast mouse events to device events.
Sam Lantinga <slouken@libsdl.org>
parents:
2931
diff
changeset
|
31 |
#include "SDL_x11mouse.h" |
4782
b6930aefd008
Finished X11 shaped-window functionality and removed ellipse+polygon rendering.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
3697
diff
changeset
|
32 |
#include "SDL_x11shape.h" |
6316
a89c79a3f0cd
1.Moved all xinput2 functionality to its own file
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
6275
diff
changeset
|
33 |
#include "SDL_x11xinput2.h" |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 |
|
6188
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
35 |
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 |
3161
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
36 |
#include "SDL_x11opengles.h" |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
37 |
#endif |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
38 |
|
4465
3e69e077cb95
Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
39 |
#include "SDL_timer.h" |
3241
08c5964f2a34
Fixed a few issues compiling with Mac OS X 10.6
Sam Lantinga <slouken@libsdl.org>
parents:
3225
diff
changeset
|
40 |
#include "SDL_syswm.h" |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
41 |
#include "SDL_assert.h" |
3241
08c5964f2a34
Fixed a few issues compiling with Mac OS X 10.6
Sam Lantinga <slouken@libsdl.org>
parents:
3225
diff
changeset
|
42 |
|
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
43 |
#define _NET_WM_STATE_REMOVE 0l |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
44 |
#define _NET_WM_STATE_ADD 1l |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
45 |
#define _NET_WM_STATE_TOGGLE 2l |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
46 |
|
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
47 |
static Bool isMapNotify(Display *dpy, XEvent *ev, XPointer win) |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
48 |
{ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
49 |
return ev->type == MapNotify && ev->xmap.window == *((Window*)win); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
50 |
} |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
51 |
static Bool isUnmapNotify(Display *dpy, XEvent *ev, XPointer win) |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
52 |
{ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
53 |
return ev->type == UnmapNotify && ev->xunmap.window == *((Window*)win); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
54 |
} |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
55 |
static Bool isConfigureNotify(Display *dpy, XEvent *ev, XPointer win) |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
56 |
{ |
6480
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
57 |
return ev->type == ConfigureNotify && ev->xconfigure.window == *((Window*)win); |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
58 |
} |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
59 |
static Bool isFocusIn(Display *dpy, XEvent *ev, XPointer win) |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
60 |
{ |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
61 |
return ev->type == FocusIn && ev->xfocus.window == *((Window*)win); |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
62 |
} |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
63 |
static Bool isFocusOut(Display *dpy, XEvent *ev, XPointer win) |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
64 |
{ |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
65 |
return ev->type == FocusOut && ev->xfocus.window == *((Window*)win); |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
66 |
} |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
67 |
|
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
68 |
static SDL_bool |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
69 |
X11_IsWindowLegacyFullscreen(_THIS, SDL_Window * window) |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
70 |
{ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
71 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
72 |
return (data->fswindow != 0); |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
73 |
} |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
74 |
|
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
75 |
static SDL_bool |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
76 |
X11_IsWindowMapped(_THIS, SDL_Window * window) |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
77 |
{ |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
78 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
79 |
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
80 |
XWindowAttributes attr; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
81 |
|
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
82 |
XGetWindowAttributes(videodata->display, data->xwindow, &attr); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
83 |
if (attr.map_state != IsUnmapped) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
84 |
return SDL_TRUE; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
85 |
} else { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
86 |
return SDL_FALSE; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
87 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
88 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
89 |
|
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
90 |
static int |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
91 |
X11_GetWMStateProperty(_THIS, SDL_Window * window, Atom atoms[3]) |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
92 |
{ |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
93 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
94 |
int count = 0; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
95 |
|
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
96 |
if (window->flags & SDL_WINDOW_FULLSCREEN) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
97 |
atoms[count++] = data->_NET_WM_STATE_FULLSCREEN; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
98 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
99 |
if (window->flags & SDL_WINDOW_MAXIMIZED) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
100 |
atoms[count++] = data->_NET_WM_STATE_MAXIMIZED_VERT; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
101 |
atoms[count++] = data->_NET_WM_STATE_MAXIMIZED_HORZ; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
102 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
103 |
return count; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
104 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
105 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 |
static int |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 |
SetupWindowData(_THIS, SDL_Window * window, Window w, BOOL created) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 |
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 |
SDL_WindowData *data; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 |
int numwindows = videodata->numwindows; |
2324
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
112 |
int windowlistlength = videodata->windowlistlength; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 |
SDL_WindowData **windowlist = videodata->windowlist; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 |
/* Allocate the window data */ |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
116 |
data = (SDL_WindowData *) SDL_calloc(1, sizeof(*data)); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 |
if (!data) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 |
SDL_OutOfMemory(); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 |
return -1; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 |
} |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
121 |
data->window = window; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
122 |
data->xwindow = w; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 |
#ifdef X_HAVE_UTF8_STRING |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 |
if (SDL_X11_HAVE_UTF8) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 |
data->ic = |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 |
pXCreateIC(videodata->im, XNClientWindow, w, XNFocusWindow, w, |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 |
XNInputStyle, XIMPreeditNothing | XIMStatusNothing, |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 |
XNResourceName, videodata->classname, XNResourceClass, |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 |
videodata->classname, NULL); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 |
#endif |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 |
data->created = created; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 |
data->videodata = videodata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 |
|
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
135 |
/* Associate the data with the window */ |
2324
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
136 |
|
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
137 |
if (numwindows < windowlistlength) { |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
138 |
windowlist[numwindows] = data; |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
139 |
videodata->numwindows++; |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
140 |
} else { |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
141 |
windowlist = |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
142 |
(SDL_WindowData **) SDL_realloc(windowlist, |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
143 |
(numwindows + |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
144 |
1) * sizeof(*windowlist)); |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
145 |
if (!windowlist) { |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
146 |
SDL_OutOfMemory(); |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
147 |
SDL_free(data); |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
148 |
return -1; |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
149 |
} |
2324
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
150 |
windowlist[numwindows] = data; |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
151 |
videodata->numwindows++; |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
152 |
videodata->windowlistlength++; |
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
153 |
videodata->windowlist = windowlist; |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
154 |
} |
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
155 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 |
/* Fill in the SDL window with the window data */ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 |
XWindowAttributes attrib; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 |
XGetWindowAttributes(data->videodata->display, w, &attrib); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 |
window->x = attrib.x; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 |
window->y = attrib.y; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 |
window->w = attrib.width; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 |
window->h = attrib.height; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 |
if (attrib.map_state != IsUnmapped) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 |
window->flags |= SDL_WINDOW_SHOWN; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 |
} else { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 |
window->flags &= ~SDL_WINDOW_SHOWN; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 |
} |
5182
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5088
diff
changeset
|
170 |
data->visual = attrib.visual; |
5466 | 171 |
data->colormap = attrib.colormap; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 |
} |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
173 |
|
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
174 |
{ |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
175 |
Atom _NET_WM_STATE = data->videodata->_NET_WM_STATE; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
176 |
Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
177 |
Atom _NET_WM_STATE_MAXIMIZED_HORZ = data->videodata->_NET_WM_STATE_MAXIMIZED_HORZ; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
178 |
Atom _NET_WM_STATE_FULLSCREEN = data->videodata->_NET_WM_STATE_FULLSCREEN; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
179 |
Atom actualType; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
180 |
int actualFormat; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
181 |
unsigned long i, numItems, bytesAfter; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
182 |
unsigned char *propertyValue = NULL; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
183 |
long maxLength = 1024; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
184 |
|
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
185 |
if (XGetWindowProperty(data->videodata->display, w, _NET_WM_STATE, |
3078 | 186 |
0l, maxLength, False, XA_ATOM, &actualType, |
187 |
&actualFormat, &numItems, &bytesAfter, |
|
188 |
&propertyValue) == Success) { |
|
189 |
Atom *atoms = (Atom *) propertyValue; |
|
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
190 |
int maximized = 0; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
191 |
int fullscreen = 0; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
192 |
|
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
193 |
for (i = 0; i < numItems; ++i) { |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
194 |
if (atoms[i] == _NET_WM_STATE_MAXIMIZED_VERT) { |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
195 |
maximized |= 1; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
196 |
} else if (atoms[i] == _NET_WM_STATE_MAXIMIZED_HORZ) { |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
197 |
maximized |= 2; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
198 |
} else if ( atoms[i] == _NET_WM_STATE_FULLSCREEN) { |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
199 |
fullscreen = 1; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
200 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
201 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
202 |
if (maximized == 3) { |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
203 |
window->flags |= SDL_WINDOW_MAXIMIZED; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
204 |
} else if (fullscreen == 1) { |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
205 |
window->flags |= SDL_WINDOW_FULLSCREEN; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
206 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
207 |
XFree(propertyValue); |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
208 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
209 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
210 |
|
6024
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
211 |
{ |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
212 |
Window FocalWindow; |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
213 |
int RevertTo=0; |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
214 |
XGetInputFocus(data->videodata->display, &FocalWindow, &RevertTo); |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
215 |
if (FocalWindow==w) |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
216 |
{ |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
217 |
window->flags |= SDL_WINDOW_INPUT_FOCUS; |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
218 |
SDL_SetKeyboardFocus(data->window); |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
219 |
} |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
220 |
|
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
221 |
if (window->flags & SDL_WINDOW_INPUT_GRABBED) { |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
222 |
/* Tell x11 to clip mouse */ |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
223 |
} |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
224 |
} |
38e2f4644548
Set up window focus correctly when using an existing X11 window.
Ryan C. Gordon <icculus@icculus.org>
parents:
6023
diff
changeset
|
225 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 |
/* FIXME: How can I tell? |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 |
DWORD style = GetWindowLong(hwnd, GWL_STYLE); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 |
if (style & WS_VISIBLE) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 |
if (style & (WS_BORDER | WS_THICKFRAME)) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 |
window->flags &= ~SDL_WINDOW_BORDERLESS; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 |
} else { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 |
window->flags |= SDL_WINDOW_BORDERLESS; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 |
if (style & WS_THICKFRAME) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 |
window->flags |= SDL_WINDOW_RESIZABLE; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 |
} else { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 |
window->flags &= ~SDL_WINDOW_RESIZABLE; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 |
if (style & WS_MINIMIZE) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 |
window->flags |= SDL_WINDOW_MINIMIZED; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 |
} else { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 |
window->flags &= ~SDL_WINDOW_MINIMIZED; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 |
if (GetFocus() == hwnd) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 |
int index = data->videodata->keyboard; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 |
window->flags |= SDL_WINDOW_INPUT_FOCUS; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
249 |
SDL_SetKeyboardFocus(index, data->window); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 |
if (window->flags & SDL_WINDOW_INPUT_GRABBED) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 |
RECT rect; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 |
GetClientRect(hwnd, &rect); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 |
ClientToScreen(hwnd, (LPPOINT) & rect); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 |
ClientToScreen(hwnd, (LPPOINT) & rect + 1); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 |
ClipCursor(&rect); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 |
*/ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 |
/* All done! */ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 |
window->driverdata = data; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 |
return 0; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 |
|
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
266 |
static void |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
267 |
SetWindowBordered(Display *display, int screen, Window window, SDL_bool border) |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
268 |
{ |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
269 |
/* |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
270 |
* this code used to check for KWM_WIN_DECORATION, but KDE hasn't |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
271 |
* supported it for years and years. It now respects _MOTIF_WM_HINTS. |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
272 |
* Gnome is similar: just use the Motif atom. |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
273 |
*/ |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
274 |
|
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
275 |
Atom WM_HINTS = XInternAtom(display, "_MOTIF_WM_HINTS", True); |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
276 |
if (WM_HINTS != None) { |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
277 |
/* Hints used by Motif compliant window managers */ |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
278 |
struct |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
279 |
{ |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
280 |
unsigned long flags; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
281 |
unsigned long functions; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
282 |
unsigned long decorations; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
283 |
long input_mode; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
284 |
unsigned long status; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
285 |
} MWMHints = { |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
286 |
(1L << 1), 0, border ? 1 : 0, 0, 0 |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
287 |
}; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
288 |
|
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
289 |
XChangeProperty(display, window, WM_HINTS, WM_HINTS, 32, |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
290 |
PropModeReplace, (unsigned char *) &MWMHints, |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
291 |
sizeof(MWMHints) / 4); |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
292 |
} else { /* set the transient hints instead, if necessary */ |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
293 |
XSetTransientForHint(display, window, RootWindow(display, screen)); |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
294 |
} |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
295 |
} |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
296 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 |
int |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 |
X11_CreateWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
SDL_DisplayData *displaydata = |
5246
58265e606e4e
Window coordinates are in the global space and windows are not tied to a particular display.
Sam Lantinga <slouken@libsdl.org>
parents:
5243
diff
changeset
|
302 |
(SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata; |
4521
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
303 |
Display *display = data->display; |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
304 |
int screen = displaydata->screen; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 |
Visual *visual; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 |
int depth; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 |
XSetWindowAttributes xattr; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 |
Window w; |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
309 |
XSizeHints *sizehints; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
310 |
XWMHints *wmhints; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
311 |
XClassHint *classhints; |
4521
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
312 |
Atom _NET_WM_WINDOW_TYPE; |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
313 |
Atom _NET_WM_WINDOW_TYPE_NORMAL; |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
314 |
Atom _NET_WM_PID; |
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
315 |
int wmstate_count; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
316 |
Atom wmstate_atoms[3]; |
6045
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
317 |
Uint32 fevent = 0; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
318 |
|
6369
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
319 |
#if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 |
if (window->flags & SDL_WINDOW_OPENGL) { |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
321 |
XVisualInfo *vinfo; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
322 |
|
6370
93187f7f7d5d
Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents:
6369
diff
changeset
|
323 |
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 |
93187f7f7d5d
Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents:
6369
diff
changeset
|
324 |
if (_this->gl_config.use_egl == 1) { |
6369
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
325 |
vinfo = X11_GLES_GetVisual(_this, display, screen); |
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
326 |
} else |
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
327 |
#endif |
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
328 |
{ |
6370
93187f7f7d5d
Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents:
6369
diff
changeset
|
329 |
#if SDL_VIDEO_OPENGL_GLX |
6369
a92fbd27127b
Fix OpenGL initialization when OpenGL and OpenGLES are both available.
Sam Lantinga <slouken@libsdl.org>
parents:
6343
diff
changeset
|
330 |
vinfo = X11_GL_GetVisual(_this, display, screen); |
6370
93187f7f7d5d
Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents:
6369
diff
changeset
|
331 |
#endif |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
332 |
} |
3161
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
333 |
if (!vinfo) { |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
334 |
return -1; |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
335 |
} |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
336 |
visual = vinfo->visual; |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
337 |
depth = vinfo->depth; |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
338 |
XFree(vinfo); |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
339 |
} else |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
340 |
#endif |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
341 |
{ |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 |
visual = displaydata->visual; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 |
depth = displaydata->depth; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 |
|
5386
762e67f81fc7
Simplified the X11 window creation
Sam Lantinga <slouken@libsdl.org>
parents:
5305
diff
changeset
|
346 |
xattr.override_redirect = False; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 |
xattr.background_pixel = 0; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 |
xattr.border_pixel = 0; |
5466 | 349 |
|
350 |
if (visual->class == DirectColor) { |
|
351 |
XColor *colorcells; |
|
352 |
int i; |
|
353 |
int ncolors; |
|
354 |
int rmax, gmax, bmax; |
|
355 |
int rmask, gmask, bmask; |
|
356 |
int rshift, gshift, bshift; |
|
357 |
||
358 |
xattr.colormap = |
|
359 |
XCreateColormap(display, RootWindow(display, screen), |
|
360 |
visual, AllocAll); |
|
361 |
||
362 |
/* If we can't create a colormap, then we must die */ |
|
363 |
if (!xattr.colormap) { |
|
364 |
SDL_SetError("Could not create writable colormap"); |
|
365 |
return -1; |
|
366 |
} |
|
367 |
||
368 |
/* OK, we got a colormap, now fill it in as best as we can */ |
|
369 |
colorcells = SDL_malloc(visual->map_entries * sizeof(XColor)); |
|
370 |
if (!colorcells) { |
|
371 |
SDL_OutOfMemory(); |
|
372 |
return -1; |
|
373 |
} |
|
374 |
ncolors = visual->map_entries; |
|
375 |
rmax = 0xffff; |
|
376 |
gmax = 0xffff; |
|
377 |
bmax = 0xffff; |
|
378 |
||
379 |
rshift = 0; |
|
380 |
rmask = visual->red_mask; |
|
381 |
while (0 == (rmask & 1)) { |
|
382 |
rshift++; |
|
383 |
rmask >>= 1; |
|
384 |
} |
|
385 |
||
386 |
gshift = 0; |
|
387 |
gmask = visual->green_mask; |
|
388 |
while (0 == (gmask & 1)) { |
|
389 |
gshift++; |
|
390 |
gmask >>= 1; |
|
391 |
} |
|
392 |
||
393 |
bshift = 0; |
|
394 |
bmask = visual->blue_mask; |
|
395 |
while (0 == (bmask & 1)) { |
|
396 |
bshift++; |
|
397 |
bmask >>= 1; |
|
398 |
} |
|
399 |
||
400 |
/* build the color table pixel values */ |
|
401 |
for (i = 0; i < ncolors; i++) { |
|
402 |
Uint32 red = (rmax * i) / (ncolors - 1); |
|
403 |
Uint32 green = (gmax * i) / (ncolors - 1); |
|
404 |
Uint32 blue = (bmax * i) / (ncolors - 1); |
|
405 |
||
406 |
Uint32 rbits = (rmask * i) / (ncolors - 1); |
|
407 |
Uint32 gbits = (gmask * i) / (ncolors - 1); |
|
408 |
Uint32 bbits = (bmask * i) / (ncolors - 1); |
|
409 |
||
410 |
Uint32 pix = |
|
411 |
(rbits << rshift) | (gbits << gshift) | (bbits << bshift); |
|
412 |
||
413 |
colorcells[i].pixel = pix; |
|
414 |
||
415 |
colorcells[i].red = red; |
|
416 |
colorcells[i].green = green; |
|
417 |
colorcells[i].blue = blue; |
|
418 |
||
419 |
colorcells[i].flags = DoRed | DoGreen | DoBlue; |
|
420 |
} |
|
421 |
||
422 |
XStoreColors(display, xattr.colormap, colorcells, ncolors); |
|
423 |
||
424 |
SDL_free(colorcells); |
|
425 |
} else { |
|
426 |
xattr.colormap = |
|
427 |
XCreateColormap(display, RootWindow(display, screen), |
|
428 |
visual, AllocNone); |
|
429 |
} |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 |
|
5386
762e67f81fc7
Simplified the X11 window creation
Sam Lantinga <slouken@libsdl.org>
parents:
5305
diff
changeset
|
431 |
w = XCreateWindow(display, RootWindow(display, screen), |
762e67f81fc7
Simplified the X11 window creation
Sam Lantinga <slouken@libsdl.org>
parents:
5305
diff
changeset
|
432 |
window->x, window->y, window->w, window->h, |
762e67f81fc7
Simplified the X11 window creation
Sam Lantinga <slouken@libsdl.org>
parents:
5305
diff
changeset
|
433 |
0, depth, InputOutput, visual, |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 |
(CWOverrideRedirect | CWBackPixel | CWBorderPixel | |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 |
CWColormap), &xattr); |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
436 |
if (!w) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
437 |
SDL_SetError("Couldn't create window"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
438 |
return -1; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset
|
439 |
} |
6188
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
440 |
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 |
6373
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
441 |
if ((window->flags & SDL_WINDOW_OPENGL) && (_this->gl_config.use_egl == 1)) { |
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
442 |
if (!_this->gles_data) { |
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
443 |
XDestroyWindow(display, w); |
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
444 |
return -1; |
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
445 |
} |
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
446 |
|
6188
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
447 |
/* Create the GLES window surface */ |
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
448 |
_this->gles_data->egl_surface = |
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
449 |
_this->gles_data->eglCreateWindowSurface(_this->gles_data-> |
3161
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
450 |
egl_display, |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
451 |
_this->gles_data->egl_config, |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
452 |
(NativeWindowType) w, NULL); |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
453 |
|
6188
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
454 |
if (_this->gles_data->egl_surface == EGL_NO_SURFACE) { |
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
455 |
SDL_SetError("Could not create GLES window surface"); |
6373
494e0436525f
More OpenGL ES fixes from Scott Percival
Sam Lantinga <slouken@libsdl.org>
parents:
6370
diff
changeset
|
456 |
XDestroyWindow(display, w); |
6188
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
457 |
return -1; |
e82023802002
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents:
6167
diff
changeset
|
458 |
} |
3161
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
459 |
} |
494559cc723b
OpenPandora support added by David Carré
Sam Lantinga <slouken@libsdl.org>
parents:
3078
diff
changeset
|
460 |
#endif |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 |
|
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
462 |
SetWindowBordered(display, screen, w, |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
463 |
(window->flags & SDL_WINDOW_BORDERLESS) == 0); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 |
|
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
465 |
sizehints = XAllocSizeHints(); |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
466 |
/* Setup the normal size hints */ |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
467 |
sizehints->flags = 0; |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
468 |
if (!(window->flags & SDL_WINDOW_RESIZABLE)) { |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
469 |
sizehints->min_width = sizehints->max_width = window->w; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
470 |
sizehints->min_height = sizehints->max_height = window->h; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
471 |
sizehints->flags |= (PMaxSize | PMinSize); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 |
} |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
473 |
sizehints->x = window->x; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
474 |
sizehints->y = window->y; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
475 |
sizehints->flags |= USPosition; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 |
|
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
477 |
/* Setup the input hints so we get keyboard input */ |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
478 |
wmhints = XAllocWMHints(); |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
479 |
wmhints->input = True; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
480 |
wmhints->flags = InputHint; |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
481 |
|
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
482 |
/* Setup the class hints so we can get an icon (AfterStep) */ |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
483 |
classhints = XAllocClassHint(); |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
484 |
classhints->res_name = data->classname; |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
485 |
classhints->res_class = data->classname; |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
486 |
|
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
487 |
/* Set the size, input and class hints, and define WM_CLIENT_MACHINE and WM_LOCALE_NAME */ |
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
488 |
XSetWMProperties(display, w, NULL, NULL, NULL, 0, sizehints, wmhints, classhints); |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
489 |
|
6462
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
490 |
XFree(sizehints); |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
491 |
XFree(wmhints); |
5e09ac1aba80
allocate *Hint structures per Xlib docs
Edward Rudd <urkle@outoforder.cc>
parents:
6423
diff
changeset
|
492 |
XFree(classhints); |
6167
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
493 |
/* Set the PID related to the window for the given hostname, if possible */ |
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
494 |
if (data->pid > 0) { |
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
495 |
_NET_WM_PID = XInternAtom(display, "_NET_WM_PID", False); |
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
496 |
XChangeProperty(display, w, _NET_WM_PID, XA_CARDINAL, 32, PropModeReplace, |
c071e1372341
X11: Move to XSetWMProperties and add support to _NET_WM_PID
Marco Trevisan (Treviño) <mail@3v1n0.net>
parents:
6138
diff
changeset
|
497 |
(unsigned char *)&data->pid, 1); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 |
|
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
500 |
/* Set the window manager state */ |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
501 |
wmstate_count = X11_GetWMStateProperty(_this, window, wmstate_atoms); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
502 |
if (wmstate_count > 0) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
503 |
XChangeProperty(display, w, data->_NET_WM_STATE, XA_ATOM, 32, |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
504 |
PropModeReplace, |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
505 |
(unsigned char *)wmstate_atoms, wmstate_count); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
506 |
} else { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
507 |
XDeleteProperty(display, w, data->_NET_WM_STATE); |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
508 |
} |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
509 |
|
4521
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
510 |
/* Let the window manager know we're a "normal" window */ |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
511 |
_NET_WM_WINDOW_TYPE = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False); |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
512 |
_NET_WM_WINDOW_TYPE_NORMAL = XInternAtom(display, "_NET_WM_WINDOW_TYPE_NORMAL", False); |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
513 |
XChangeProperty(display, w, _NET_WM_WINDOW_TYPE, XA_ATOM, 32, |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
514 |
PropModeReplace, |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
515 |
(unsigned char *)&_NET_WM_WINDOW_TYPE_NORMAL, 1); |
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
516 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 |
/* Allow the window to be deleted by the window manager */ |
4521
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
518 |
XSetWMProtocols(display, w, &data->WM_DELETE_WINDOW, 1); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 |
if (SetupWindowData(_this, window, w, SDL_TRUE) < 0) { |
4521
50125e8aab94
Let the window manager know we're a "normal" window
Sam Lantinga <slouken@libsdl.org>
parents:
4520
diff
changeset
|
521 |
XDestroyWindow(display, w); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 |
return -1; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 |
} |
5386
762e67f81fc7
Simplified the X11 window creation
Sam Lantinga <slouken@libsdl.org>
parents:
5305
diff
changeset
|
524 |
|
2325
c7bcf84ba1b9
Next version of internationalized input for X11. On my machine (famous last words :-) with a US English keyboard and locale I can compose ` and e and get a text
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
525 |
#ifdef X_HAVE_UTF8_STRING |
6045
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
526 |
if (SDL_X11_HAVE_UTF8) { |
2325
c7bcf84ba1b9
Next version of internationalized input for X11. On my machine (famous last words :-) with a US English keyboard and locale I can compose ` and e and get a text
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
527 |
pXGetICValues(((SDL_WindowData *) window->driverdata)->ic, |
c7bcf84ba1b9
Next version of internationalized input for X11. On my machine (famous last words :-) with a US English keyboard and locale I can compose ` and e and get a text
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
528 |
XNFilterEvents, &fevent, NULL); |
2718
abacf2555bb4
Removed unneccesary code lines. Fixed mousename bug. Added lacking code in mousebutton
Szymon Wilczek <kazeuser@gmail.com>
parents:
2710
diff
changeset
|
529 |
} |
2325
c7bcf84ba1b9
Next version of internationalized input for X11. On my machine (famous last words :-) with a US English keyboard and locale I can compose ` and e and get a text
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
530 |
#endif |
c7bcf84ba1b9
Next version of internationalized input for X11. On my machine (famous last words :-) with a US English keyboard and locale I can compose ` and e and get a text
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
531 |
|
6316
a89c79a3f0cd
1.Moved all xinput2 functionality to its own file
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
6275
diff
changeset
|
532 |
X11_Xinput2SelectTouch(_this, window); |
a89c79a3f0cd
1.Moved all xinput2 functionality to its own file
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
6275
diff
changeset
|
533 |
|
6045
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
534 |
XSelectInput(display, w, |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
535 |
(FocusChangeMask | EnterWindowMask | LeaveWindowMask | |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
536 |
ExposureMask | ButtonPressMask | ButtonReleaseMask | |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
537 |
PointerMotionMask | KeyPressMask | KeyReleaseMask | |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
538 |
PropertyChangeMask | StructureNotifyMask | |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
539 |
KeymapStateMask | fevent)); |
b8e995dab018
Fix crash on X servers without UTF-8 support.
Ryan C. Gordon <icculus@icculus.org>
parents:
6024
diff
changeset
|
540 |
|
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
541 |
XFlush(display); |
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
542 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 |
return 0; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 |
int |
2324
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
547 |
X11_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 |
Window w = (Window) data; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 |
|
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
551 |
window->title = X11_GetWindowTitle(_this, w); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 |
if (SetupWindowData(_this, window, w, SDL_FALSE) < 0) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 |
return -1; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 |
return 0; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 |
|
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
559 |
char * |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
560 |
X11_GetWindowTitle(_THIS, Window xwindow) |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
561 |
{ |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
562 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
563 |
Display *display = data->display; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
564 |
int status, real_format; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
565 |
Atom real_type; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
566 |
unsigned long items_read, items_left; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
567 |
unsigned char *propdata; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
568 |
char *title = NULL; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
569 |
|
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
570 |
status = XGetWindowProperty(display, xwindow, data->_NET_WM_NAME, |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
571 |
0L, 8192L, False, data->UTF8_STRING, &real_type, &real_format, |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
572 |
&items_read, &items_left, &propdata); |
6023
6279958d571d
XGetWindowProperty() can report success but still give you a NULL pointer.
Ryan C. Gordon <icculus@icculus.org>
parents:
5981
diff
changeset
|
573 |
if (status == Success && propdata) { |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
574 |
title = SDL_strdup(SDL_static_cast(char*, propdata)); |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
575 |
XFree(propdata); |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
576 |
} else { |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
577 |
status = XGetWindowProperty(display, xwindow, XA_WM_NAME, |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
578 |
0L, 8192L, False, XA_STRING, &real_type, &real_format, |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
579 |
&items_read, &items_left, &propdata); |
6023
6279958d571d
XGetWindowProperty() can report success but still give you a NULL pointer.
Ryan C. Gordon <icculus@icculus.org>
parents:
5981
diff
changeset
|
580 |
if (status == Success && propdata) { |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
581 |
title = SDL_iconv_string("UTF-8", "", SDL_static_cast(char*, propdata), items_read+1); |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
582 |
} else { |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
583 |
title = SDL_strdup(""); |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
584 |
} |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
585 |
} |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
586 |
return title; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
587 |
} |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
588 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
589 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
590 |
X11_SetWindowTitle(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
591 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
592 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 |
Display *display = data->videodata->display; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 |
XTextProperty titleprop, iconprop; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 |
Status status; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 |
const char *title = window->title; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 |
const char *icon = NULL; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 |
#ifdef X_HAVE_UTF8_STRING |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
600 |
Atom _NET_WM_NAME = data->videodata->_NET_WM_NAME; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
601 |
Atom _NET_WM_ICON_NAME = data->videodata->_NET_WM_ICON_NAME; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 |
#endif |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 |
if (title != NULL) { |
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
605 |
char *title_locale = SDL_iconv_utf8_locale(title); |
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
606 |
if (!title_locale) { |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
607 |
SDL_OutOfMemory(); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
608 |
return; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
609 |
} |
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
610 |
status = XStringListToTextProperty(&title_locale, 1, &titleprop); |
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
611 |
SDL_free(title_locale); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
612 |
if (status) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
613 |
XSetTextProperty(display, data->xwindow, &titleprop, XA_WM_NAME); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
614 |
XFree(titleprop.value); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
615 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 |
#ifdef X_HAVE_UTF8_STRING |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
617 |
if (SDL_X11_HAVE_UTF8) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
618 |
status = |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 |
Xutf8TextListToTextProperty(display, (char **) &title, 1, |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
620 |
XUTF8StringStyle, &titleprop); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
621 |
if (status == Success) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
622 |
XSetTextProperty(display, data->xwindow, &titleprop, |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
623 |
_NET_WM_NAME); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
624 |
XFree(titleprop.value); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
625 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
626 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
627 |
#endif |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 |
if (icon != NULL) { |
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
630 |
char *icon_locale = SDL_iconv_utf8_locale(icon); |
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
631 |
if (!icon_locale) { |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
632 |
SDL_OutOfMemory(); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
633 |
return; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
634 |
} |
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
635 |
status = XStringListToTextProperty(&icon_locale, 1, &iconprop); |
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset
|
636 |
SDL_free(icon_locale); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 |
if (status) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
638 |
XSetTextProperty(display, data->xwindow, &iconprop, |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 |
XA_WM_ICON_NAME); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 |
XFree(iconprop.value); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
641 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
642 |
#ifdef X_HAVE_UTF8_STRING |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
643 |
if (SDL_X11_HAVE_UTF8) { |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
644 |
status = |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
645 |
Xutf8TextListToTextProperty(display, (char **) &icon, 1, |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 |
XUTF8StringStyle, &iconprop); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
647 |
if (status == Success) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
648 |
XSetTextProperty(display, data->xwindow, &iconprop, |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
649 |
_NET_WM_ICON_NAME); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
650 |
XFree(iconprop.value); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
651 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
652 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
653 |
#endif |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
654 |
} |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
655 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
656 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
657 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
658 |
void |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
659 |
X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
660 |
{ |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
661 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
662 |
Display *display = data->videodata->display; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
663 |
Atom _NET_WM_ICON = data->videodata->_NET_WM_ICON; |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
664 |
|
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
665 |
if (icon) { |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
666 |
SDL_PixelFormat format; |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
667 |
SDL_Surface *surface; |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
668 |
int propsize; |
4528 | 669 |
long *propdata; |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
670 |
|
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
671 |
/* Convert the icon to ARGB for modern window managers */ |
5288 | 672 |
SDL_InitFormat(&format, SDL_PIXELFORMAT_ARGB8888); |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
673 |
surface = SDL_ConvertSurface(icon, &format, 0); |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
674 |
if (!surface) { |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
675 |
return; |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
676 |
} |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
677 |
|
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
678 |
/* Set the _NET_WM_ICON property */ |
2990 | 679 |
propsize = 2 + (icon->w * icon->h); |
4566
40c833d951a1
Fixed memory corruption on AMD64
Sam Lantinga <slouken@libsdl.org>
parents:
4555
diff
changeset
|
680 |
propdata = SDL_malloc(propsize * sizeof(long)); |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
681 |
if (propdata) { |
4528 | 682 |
int x, y; |
683 |
Uint32 *src; |
|
684 |
long *dst; |
|
685 |
||
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
686 |
propdata[0] = icon->w; |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
687 |
propdata[1] = icon->h; |
4528 | 688 |
dst = &propdata[2]; |
689 |
for (y = 0; y < icon->h; ++y) { |
|
690 |
src = (Uint32*)((Uint8*)surface->pixels + y * surface->pitch); |
|
691 |
for (x = 0; x < icon->w; ++x) { |
|
692 |
*dst++ = *src++; |
|
693 |
} |
|
694 |
} |
|
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
695 |
XChangeProperty(display, data->xwindow, _NET_WM_ICON, XA_CARDINAL, |
2990 | 696 |
32, PropModeReplace, (unsigned char *) propdata, |
697 |
propsize); |
|
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
698 |
} |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
699 |
SDL_FreeSurface(surface); |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
700 |
} else { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
701 |
XDeleteProperty(display, data->xwindow, _NET_WM_ICON); |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
702 |
} |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
703 |
XFlush(display); |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
704 |
} |
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
705 |
|
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset
|
706 |
void |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
707 |
X11_SetWindowPosition(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
710 |
Display *display = data->videodata->display; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
711 |
|
5478
6b65ff3cee62
Fixed bug 1167 (SDL_WINDOWPOS_CENTERED doesn't work if used right after fullscreen -> windowed switch)
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
712 |
XMoveWindow(display, data->xwindow, window->x, window->y); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
713 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
714 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
715 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
716 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
717 |
X11_SetWindowSize(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
718 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
719 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
720 |
Display *display = data->videodata->display; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
721 |
|
4937
24d44c7c4c63
Don't crash when resizing non-shaped windows
Sam Lantinga <slouken@libsdl.org>
parents:
4902
diff
changeset
|
722 |
if (SDL_IsShapedWindow(window)) |
4782
b6930aefd008
Finished X11 shaped-window functionality and removed ellipse+polygon rendering.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
3697
diff
changeset
|
723 |
X11_ResizeWindowShape(window); |
5531
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
724 |
if (!(window->flags & SDL_WINDOW_RESIZABLE)) { |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
725 |
/* Apparently, if the X11 Window is set to a 'non-resizable' window, you cannot resize it using the XResizeWindow, thus |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
726 |
we must set the size hints to adjust the window size.*/ |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
727 |
XSizeHints *sizehints = XAllocSizeHints(); |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
728 |
long userhints; |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
729 |
|
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
730 |
XGetWMNormalHints(display, data->xwindow, sizehints, &userhints); |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
731 |
|
6343
e94f912d20b9
Fix SDL_SetWindowSize with X11 non-RESIZABLE windows, patch by Pierre-Loup.
Sam Lantinga <slouken@libsdl.org>
parents:
6336
diff
changeset
|
732 |
sizehints->min_width = sizehints->max_width = window->w; |
5531
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
733 |
sizehints->min_height = sizehints->max_height = window->h; |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
734 |
|
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
735 |
XSetWMNormalHints(display, data->xwindow, sizehints); |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
736 |
|
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
737 |
XFree(sizehints); |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
738 |
} else |
477f550f6efd
Fixed setting programmatically setting the size of a window on X11 for non-resizable windows.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
739 |
XResizeWindow(display, data->xwindow, window->w, window->h); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
740 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
741 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
742 |
|
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
743 |
void |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
744 |
X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
745 |
{ |
6423
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
746 |
const SDL_bool focused = ((window->flags & SDL_WINDOW_INPUT_FOCUS) != 0); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
747 |
const SDL_bool visible = ((window->flags & SDL_WINDOW_HIDDEN) == 0); |
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
748 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
749 |
SDL_DisplayData *displaydata = |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
750 |
(SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
751 |
Display *display = data->videodata->display; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
752 |
XEvent event; |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
753 |
|
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
754 |
SetWindowBordered(display, displaydata->screen, data->xwindow, bordered); |
6423
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
755 |
XFlush(display); |
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
756 |
XIfEvent(display, &event, &isConfigureNotify, (XPointer)&data->xwindow); |
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
757 |
|
6423
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
758 |
if (visible) { |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
759 |
XWindowAttributes attr; |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
760 |
do { |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
761 |
XSync(display, False); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
762 |
XGetWindowAttributes(display, data->xwindow, &attr); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
763 |
} while (attr.map_state != IsViewable); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
764 |
|
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
765 |
if (focused) { |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
766 |
XSetInputFocus(display, data->xwindow, RevertToParent, CurrentTime); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
767 |
} |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
768 |
} |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
769 |
|
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
770 |
/* make sure these don't make it to the real event queue if they fired here. */ |
6423
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
771 |
XSync(display, False); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
772 |
XCheckIfEvent(display, &event, &isUnmapNotify, (XPointer)&data->xwindow); |
339c0ccf6250
Make the X11 SetBordered event tapdancing more robust, restore focus, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
6422
diff
changeset
|
773 |
XCheckIfEvent(display, &event, &isMapNotify, (XPointer)&data->xwindow); |
6422
fd0ac1b56115
Added SDL_SetWindowBordered() API.
Ryan C. Gordon <icculus@icculus.org>
parents:
6373
diff
changeset
|
774 |
} |
6336
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
775 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
776 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
777 |
X11_ShowWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
778 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 |
Display *display = data->videodata->display; |
6336
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
781 |
XEvent event; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
782 |
|
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
783 |
XMapRaised(display, data->xwindow); |
6336
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
784 |
/* Blocking wait for "MapNotify" event. |
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
785 |
* We use XIfEvent because XWindowEvent takes a mask rather than a type, |
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
786 |
* and XCheckTypedWindowEvent doesn't block */ |
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
787 |
XIfEvent(display, &event, &isMapNotify, (XPointer)&data->xwindow); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
788 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
789 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
790 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
791 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 |
X11_HideWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
793 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
794 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
795 |
Display *display = data->videodata->display; |
6336
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
796 |
XEvent event; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 |
|
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
798 |
XUnmapWindow(display, data->xwindow); |
6336
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
799 |
/* Blocking wait for "UnmapNotify" event */ |
6e6163b6ba69
Fixed issue with tiling window managers (bug 1246)
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
800 |
XIfEvent(display, &event, &isUnmapNotify, (XPointer)&data->xwindow); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
801 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
803 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
804 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
805 |
X11_RaiseWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
806 |
{ |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
807 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
808 |
Display *display = data->videodata->display; |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
809 |
|
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3241
diff
changeset
|
810 |
XRaiseWindow(display, data->xwindow); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
811 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
812 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
813 |
|
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
814 |
static void |
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
815 |
SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized) |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
816 |
{ |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
817 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
818 |
SDL_DisplayData *displaydata = |
5246
58265e606e4e
Window coordinates are in the global space and windows are not tied to a particular display.
Sam Lantinga <slouken@libsdl.org>
parents:
5243
diff
changeset
|
819 |
(SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
820 |
Display *display = data->videodata->display; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
821 |
Atom _NET_WM_STATE = data->videodata->_NET_WM_STATE; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
822 |
Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
823 |
Atom _NET_WM_STATE_MAXIMIZED_HORZ = data->videodata->_NET_WM_STATE_MAXIMIZED_HORZ; |
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
824 |
Atom _NET_WM_STATE_FULLSCREEN = data->videodata->_NET_WM_STATE_FULLSCREEN; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
825 |
|
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
826 |
if (X11_IsWindowMapped(_this, window)) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
827 |
XEvent e; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
828 |
|
4524
a256e1dadf3f
Zero any fields not explicitly filled in.
Sam Lantinga <slouken@libsdl.org>
parents:
4522
diff
changeset
|
829 |
SDL_zero(e); |
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
830 |
e.xany.type = ClientMessage; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
831 |
e.xclient.message_type = _NET_WM_STATE; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
832 |
e.xclient.format = 32; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
833 |
e.xclient.window = data->xwindow; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
834 |
e.xclient.data.l[0] = |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
835 |
maximized ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
836 |
e.xclient.data.l[1] = _NET_WM_STATE_MAXIMIZED_VERT; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
837 |
e.xclient.data.l[2] = _NET_WM_STATE_MAXIMIZED_HORZ; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
838 |
e.xclient.data.l[3] = 0l; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
839 |
|
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
840 |
XSendEvent(display, RootWindow(display, displaydata->screen), 0, |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
841 |
SubstructureNotifyMask | SubstructureRedirectMask, &e); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
842 |
} else { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
843 |
int count = 0; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
844 |
Atom atoms[3]; |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
845 |
|
4522
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
846 |
if (window->flags & SDL_WINDOW_FULLSCREEN) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
847 |
atoms[count++] = _NET_WM_STATE_FULLSCREEN; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
848 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
849 |
if (maximized) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
850 |
atoms[count++] = _NET_WM_STATE_MAXIMIZED_VERT; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
851 |
atoms[count++] = _NET_WM_STATE_MAXIMIZED_HORZ; |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
852 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
853 |
if (count > 0) { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
854 |
XChangeProperty(display, data->xwindow, _NET_WM_STATE, XA_ATOM, 32, |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
855 |
PropModeReplace, (unsigned char *)atoms, count); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
856 |
} else { |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
857 |
XDeleteProperty(display, data->xwindow, _NET_WM_STATE); |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
858 |
} |
a4da6b906abb
Fixed setting fullscreen and maximized states for windows that haven't been mapped yet.
Sam Lantinga <slouken@libsdl.org>
parents:
4521
diff
changeset
|
859 |
} |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
860 |
XFlush(display); |
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
861 |
} |
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
862 |
|
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
863 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
864 |
X11_MaximizeWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
865 |
{ |
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
866 |
SetWindowMaximized(_this, window, SDL_TRUE); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
867 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
868 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
869 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
870 |
X11_MinimizeWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
871 |
{ |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
872 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
873 |
SDL_DisplayData *displaydata = |
5246
58265e606e4e
Window coordinates are in the global space and windows are not tied to a particular display.
Sam Lantinga <slouken@libsdl.org>
parents:
5243
diff
changeset
|
874 |
(SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata; |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
875 |
Display *display = data->videodata->display; |
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
876 |
|
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
4510
diff
changeset
|
877 |
XIconifyWindow(display, data->xwindow, displaydata->screen); |
5031
5e3291605ad0
Added XFlush() so changes happen immediately instead of waiting for the next event loop.
Sam Lantinga <slouken@libsdl.org>
parents:
4937
diff
changeset
|
878 |
XFlush(display); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
879 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
880 |
|
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
881 |
void |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
882 |
X11_RestoreWindow(_THIS, SDL_Window * window) |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
883 |
{ |
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
884 |
SetWindowMaximized(_this, window, SDL_FALSE); |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 |
X11_ShowWindow(_this, window); |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
886 |
} |
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
887 |
|
6466
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
888 |
static Bool |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
889 |
isActionAllowed(SDL_WindowData *data, Atom action) |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
890 |
{ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
891 |
Atom _NET_WM_ALLOWED_ACTIONS = data->videodata->_NET_WM_ALLOWED_ACTIONS; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
892 |
Atom type; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
893 |
Display *display = data->videodata->display; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
894 |
int form; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
895 |
unsigned long remain; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
896 |
unsigned long len, i; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
897 |
Atom *list; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
898 |
Bool ret = False; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
899 |
if (XGetWindowProperty(display, data->xwindow, _NET_WM_ALLOWED_ACTIONS, 0, 1024, False, XA_ATOM, &type, &form, &len, &remain, (unsigned char **)&list) == Success) |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
900 |
{ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
901 |
for (i=0; i<len; ++i) |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
902 |
{ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
903 |
if (list[i] == action) { |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
904 |
ret = True; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
905 |
break; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
906 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
907 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
908 |
XFree(list); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
909 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
910 |
return ret; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
911 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
912 |
|
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
913 |
/* This asks the Window Manager to handle fullscreen for us. Most don't do it right, though. */ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
914 |
static void |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
915 |
X11_SetWindowFullscreenViaWM(_THIS, SDL_Window * window, SDL_VideoDisplay * _display, SDL_bool fullscreen) |
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
916 |
{ |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
917 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
5305
75f5ff92ad08
Fixed a host of issues with Windows fullscreen modes. Toggling fullscreen OpenGL works now in my test environment.
Sam Lantinga <slouken@libsdl.org>
parents:
5302
diff
changeset
|
918 |
SDL_DisplayData *displaydata = (SDL_DisplayData *) _display->driverdata; |
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
919 |
Display *display = data->videodata->display; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
920 |
Atom _NET_WM_STATE = data->videodata->_NET_WM_STATE; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
921 |
Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
922 |
Atom _NET_WM_STATE_MAXIMIZED_HORZ = data->videodata->_NET_WM_STATE_MAXIMIZED_HORZ; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
923 |
Atom _NET_WM_STATE_FULLSCREEN = data->videodata->_NET_WM_STATE_FULLSCREEN; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
924 |
|
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
925 |
if (X11_IsWindowMapped(_this, window)) { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
926 |
XEvent e; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
927 |
|
6466
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
928 |
if (isActionAllowed(data, data->videodata->_NET_WM_ACTION_FULLSCREEN) == False) |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
929 |
{ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
930 |
/* We aren't allowed to go into fullscreen mode... */ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
931 |
if ((window->flags & SDL_WINDOW_RESIZABLE) == 0) { |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
932 |
/* ...and we aren't resizable. Compiz refuses fullscreen toggle in this case. */ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
933 |
XSizeHints *sizehints = XAllocSizeHints(); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
934 |
long flags = 0; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
935 |
XGetWMNormalHints(display, data->xwindow, sizehints, &flags); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
936 |
/* set the resize flags on */ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
937 |
sizehints->flags |= PMinSize | PMaxSize; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
938 |
if (fullscreen) { |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
939 |
/* we are going fullscreen so turn the flags off */ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
940 |
sizehints->flags ^= (PMinSize | PMaxSize); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
941 |
} else { |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
942 |
/* Reset the min/max width height to make the window non-resizable again */ |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
943 |
sizehints->min_width = sizehints->max_width = window->w; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
944 |
sizehints->min_height = sizehints->max_height = window->h; |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
945 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
946 |
XSetWMNormalHints(display, data->xwindow, sizehints); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
947 |
XFree(sizehints); |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
948 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
949 |
} |
ebe165c00fab
On Compiz (etc?), _NET_WM_ACTION_FULLSCREEN needs the window to be resizable.
Ryan C. Gordon <icculus@icculus.org>
parents:
6462
diff
changeset
|
950 |
|
5302
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
951 |
SDL_zero(e); |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
952 |
e.xany.type = ClientMessage; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
953 |
e.xclient.message_type = _NET_WM_STATE; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
954 |
e.xclient.format = 32; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
955 |
e.xclient.window = data->xwindow; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
956 |
e.xclient.data.l[0] = |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
957 |
fullscreen ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
958 |
e.xclient.data.l[1] = _NET_WM_STATE_FULLSCREEN; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
959 |
e.xclient.data.l[3] = 0l; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
960 |
|
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
961 |
XSendEvent(display, RootWindow(display, displaydata->screen), 0, |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
962 |
SubstructureNotifyMask | SubstructureRedirectMask, &e); |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
963 |
} else { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
964 |
int count = 0; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
965 |
Atom atoms[3]; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
966 |
|
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
967 |
if (fullscreen) { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
968 |
atoms[count++] = _NET_WM_STATE_FULLSCREEN; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
969 |
} |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
970 |
if (window->flags & SDL_WINDOW_MAXIMIZED) { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
971 |
atoms[count++] = _NET_WM_STATE_MAXIMIZED_VERT; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
972 |
atoms[count++] = _NET_WM_STATE_MAXIMIZED_HORZ; |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
973 |
} |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
974 |
if (count > 0) { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
975 |
XChangeProperty(display, data->xwindow, _NET_WM_STATE, XA_ATOM, 32, |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
976 |
PropModeReplace, (unsigned char *)atoms, count); |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
977 |
} else { |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
978 |
XDeleteProperty(display, data->xwindow, _NET_WM_STATE); |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
979 |
} |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
980 |
} |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
981 |
XFlush(display); |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
982 |
} |
b1b9ec9874ba
Implemented X11 fullscreen toggling with modern window managers
Sam Lantinga <slouken@libsdl.org>
parents:
5288
diff
changeset
|
983 |
|
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
984 |
static __inline__ int |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
985 |
maxint(const int a, const int b) |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
986 |
{ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
987 |
return (a > b ? a : b); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
988 |
} |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
989 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
990 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
991 |
/* This handles fullscreen itself, outside the Window Manager. */ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
992 |
static void |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
993 |
X11_BeginWindowFullscreenLegacy(_THIS, SDL_Window * window, SDL_VideoDisplay * _display) |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
994 |
{ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
995 |
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
996 |
SDL_DisplayData *displaydata = (SDL_DisplayData *) _display->driverdata; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
997 |
Visual *visual = data->visual; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
998 |
Display *display = data->videodata->display; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
999 |
const int screen = displaydata->screen; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1000 |
Window root = RootWindow(display, screen); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1001 |
const int def_vis = (visual == DefaultVisual(display, screen)); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1002 |
unsigned long xattrmask = 0; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1003 |
XSetWindowAttributes xattr; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1004 |
XEvent ev; |
6475
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6473
diff
changeset
|
1005 |
SDL_Rect rect; |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1006 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1007 |
if ( data->fswindow ) { |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1008 |
return; /* already fullscreen, I hope. */ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1009 |
} |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1010 |
|
6475
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6473
diff
changeset
|
1011 |
X11_GetDisplayBounds(_this, _display, &rect); |
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6473
diff
changeset
|
1012 |
|
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1013 |
SDL_zero(xattr); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1014 |
xattr.override_redirect = True; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1015 |
xattrmask |= CWOverrideRedirect; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1016 |
xattr.background_pixel = def_vis ? BlackPixel(display, screen) : 0; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1017 |
xattrmask |= CWBackPixel; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1018 |
xattr.border_pixel = 0; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1019 |
xattrmask |= CWBorderPixel; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1020 |
xattr.colormap = data->colormap; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1021 |
xattrmask |= CWColormap; |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1022 |
|
6475
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6473
diff
changeset
|
1023 |
data->fswindow = XCreateWindow(display, root, |
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6473
diff
changeset
|
1024 |
rect.x, rect.y, rect.w, rect.h, 0, |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1025 |
displaydata->depth, InputOutput, |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1026 |
visual, xattrmask, &xattr); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1027 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1028 |
XSelectInput(display, data->fswindow, StructureNotifyMask); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1029 |
XSetWindowBackground(display, data->fswindow, 0); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1030 |
XClearWindow(display, data->fswindow); |
6480
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
1031 |
XMapRaised(display, data->fswindow); |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1032 |
|
6480
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
1033 |
/* Make sure the fswindow is in view by warping mouse to the corner */ |
d02a4369b3f5
Hopefully improved legacy fullscreen handling (it works now on my Ubuntu Unity system)
Sam Lantinga <slouken@libsdl.org>
parents:
6479
diff
changeset
|
1034 |
XWarpPointer(display, None, root, 0, 0, 0, 0, rect.x, rect.y); |
6467
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1035 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1036 |
/* Wait to be mapped, filter Unmap event out if it arrives. */ |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1037 |
XIfEvent(display, &ev, &isMapNotify, (XPointer)&data->fswindow); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1038 |
XCheckIfEvent(display, &ev, &isUnmapNotify, (XPointer)&data->fswindow); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1039 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1040 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1041 |
if ( displaydata->use_vidmode ) { |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1042 |
XF86VidModeLockModeSwitch(display, screen, True); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1043 |
} |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1044 |
#endif |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1045 |
XInstallColormap(display, data->colormap); |
ec5a04e921d4
X11: Attempt to go fullscreen the way SDL 1.2 did it.
Ryan C. Gordon <icculus@icculus.org>
parents:
6466
diff
changeset
|
1046 |
|
ec5a04e921d4
X11: Attempt to go fullscreen the way SD |