author  Sam Lantinga <slouken@libsdl.org> 
Thu, 19 Feb 2009 06:48:25 +0000  
changeset 3077  9b58f26ede81 
parent 3057  089a77aebb7d 
child 3078  81d15ace9129 
permissions  rwrr 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1 
/* 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

2 
SDL  Simple DirectMedia Layer 
2859  3 
Copyright (C) 19972009 Sam Lantinga 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

4 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

5 
This library is free software; you can redistribute it and/or 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

6 
modify it under the terms of the GNU Lesser General Public 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

7 
License as published by the Free Software Foundation; either 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

8 
version 2.1 of the License, or (at your option) any later version. 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

9 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

10 
This library is distributed in the hope that it will be useful, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

11 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

12 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

13 
Lesser General Public License for more details. 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

14 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

15 
You should have received a copy of the GNU Lesser General Public 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

16 
License along with this library; if not, write to the Free Software 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

17 
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

18 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

19 
Sam Lantinga 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

20 
slouken@libsdl.org 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

21 
*/ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

22 
#include "SDL_config.h" 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

23 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

24 
#include "SDL_syswm.h" 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

25 
#include "../SDL_sysvideo.h" 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

26 
#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

27 
#include "../../events/SDL_mouse_c.h" 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

28 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

29 
#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

30 
#include "SDL_x11mouse.h" 
3009
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

31 
#include "SDL_x11gamma.h" 
2185
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

32 
#include "../Xext/extensions/StdCmap.h" 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

33 

3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

34 
#define _NET_WM_STATE_REMOVE 0l 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

35 
#define _NET_WM_STATE_ADD 1l 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

36 
#define _NET_WM_STATE_TOGGLE 2l 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

37 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

38 
static void 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

39 
X11_GetDisplaySize(_THIS, SDL_Window * window, int *w, int *h) 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

40 
{ 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

41 
SDL_VideoData *data = (SDL_VideoData *) _this>driverdata; 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

42 
SDL_DisplayData *displaydata = 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

43 
(SDL_DisplayData *) SDL_GetDisplayFromWindow(window)>driverdata; 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

44 
XWindowAttributes attr; 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

45 

e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

46 
XGetWindowAttributes(data>display, RootWindow(data>display, 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

47 
displaydata>screen), 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

48 
&attr); 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

49 
if (w) { 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

50 
*w = attr.width; 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

51 
} 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

52 
if (h) { 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

53 
*h = attr.height; 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

54 
} 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

55 
} 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

56 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

57 
static int 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

58 
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

59 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

60 
SDL_VideoData *videodata = (SDL_VideoData *) _this>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

61 
SDL_WindowData *data; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

62 
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

63 
int windowlistlength = videodata>windowlistlength; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

64 
SDL_WindowData **windowlist = videodata>windowlist; 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

65 
int index; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

66 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

67 
/* Allocate the window data */ 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

68 
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

69 
if (!data) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

70 
SDL_OutOfMemory(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

71 
return 1; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

72 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

73 
data>windowID = window>id; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

74 
data>window = w; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

75 
#ifdef X_HAVE_UTF8_STRING 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

76 
if (SDL_X11_HAVE_UTF8) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

77 
data>ic = 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

78 
pXCreateIC(videodata>im, XNClientWindow, w, XNFocusWindow, w, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

79 
XNInputStyle, XIMPreeditNothing  XIMStatusNothing, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

80 
XNResourceName, videodata>classname, XNResourceClass, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

81 
videodata>classname, NULL); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

82 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

83 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

84 
data>created = created; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

85 
data>videodata = videodata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

86 

2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

87 
/* 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

88 

3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

89 
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

90 
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

91 
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

92 
} 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

93 
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

94 
(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

95 
(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

96 
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

97 
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

98 
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

99 
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

100 
return 1; 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

101 
} 
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

102 
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

103 
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

104 
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

105 
videodata>windowlist = windowlist; 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

106 
} 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

107 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

108 
/* 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

109 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

110 
XWindowAttributes attrib; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

111 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

112 
XGetWindowAttributes(data>videodata>display, w, &attrib); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

113 
window>x = attrib.x; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

114 
window>y = attrib.y; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

115 
window>w = attrib.width; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

116 
window>h = attrib.height; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

117 
if (attrib.map_state != IsUnmapped) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

118 
window>flags = SDL_WINDOW_SHOWN; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

119 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

120 
window>flags &= ~SDL_WINDOW_SHOWN; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

121 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

122 
} 
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

123 

9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

124 
{ 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

125 
Atom _NET_WM_STATE = XInternAtom(data>videodata>display, "_NET_WM_STATE", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

126 
Atom _NET_WM_STATE_MAXIMIZED_VERT = XInternAtom(data>videodata>display, "_NET_WM_STATE_MAXIMIZED_VERT", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

127 
Atom _NET_WM_STATE_MAXIMIZED_HORZ = XInternAtom(data>videodata>display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

128 
Atom actualType; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

129 
int actualFormat; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

130 
unsigned long i, numItems, bytesAfter; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

131 
unsigned char *propertyValue = NULL; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

132 
long maxLength = 1024; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

133 

9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

134 
if (XGetWindowProperty(data>videodata>display, w, _NET_WM_STATE, 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

135 
0l, maxLength, False, XA_ATOM, &actualType, &actualFormat, 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

136 
&numItems, &bytesAfter, &propertyValue) == Success) { 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

137 
Atom *atoms = (Atom *)propertyValue; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

138 
int maximized = 0; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

139 

9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

140 
for (i = 0; i < numItems; ++i) { 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

141 
if (atoms[i] == _NET_WM_STATE_MAXIMIZED_VERT) { 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

142 
maximized = 1; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

143 
} else if (atoms[i] == _NET_WM_STATE_MAXIMIZED_HORZ) { 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

144 
maximized = 2; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

145 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

146 
/* Might also want to check the following properties: 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

147 
_NET_WM_STATE_ABOVE, _NET_WM_STATE_FULLSCREEN 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

148 
*/ 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

149 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

150 
if (maximized == 3) { 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

151 
window>flags = SDL_WINDOW_MAXIMIZED; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

152 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

153 
XFree(propertyValue); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

154 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

155 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

156 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

157 
/* FIXME: How can I tell? 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

158 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

159 
DWORD style = GetWindowLong(hwnd, GWL_STYLE); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

160 
if (style & WS_VISIBLE) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

161 
if (style & (WS_BORDER  WS_THICKFRAME)) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

162 
window>flags &= ~SDL_WINDOW_BORDERLESS; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

163 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

164 
window>flags = SDL_WINDOW_BORDERLESS; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

165 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

166 
if (style & WS_THICKFRAME) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

167 
window>flags = SDL_WINDOW_RESIZABLE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

168 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

169 
window>flags &= ~SDL_WINDOW_RESIZABLE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

170 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

171 
if (style & WS_MAXIMIZE) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

172 
window>flags = SDL_WINDOW_MAXIMIZED; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

173 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

174 
window>flags &= ~SDL_WINDOW_MAXIMIZED; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

175 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

176 
if (style & WS_MINIMIZE) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

177 
window>flags = SDL_WINDOW_MINIMIZED; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

178 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

179 
window>flags &= ~SDL_WINDOW_MINIMIZED; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

180 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

181 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

182 
if (GetFocus() == hwnd) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

183 
int index = data>videodata>keyboard; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

184 
window>flags = SDL_WINDOW_INPUT_FOCUS; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

185 
SDL_SetKeyboardFocus(index, data>windowID); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

186 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

187 
if (window>flags & SDL_WINDOW_INPUT_GRABBED) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

188 
RECT rect; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

189 
GetClientRect(hwnd, &rect); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

190 
ClientToScreen(hwnd, (LPPOINT) & rect); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

191 
ClientToScreen(hwnd, (LPPOINT) & rect + 1); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

192 
ClipCursor(&rect); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

193 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

194 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

195 
*/ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

196 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

197 
/* All done! */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

198 
window>driverdata = data; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

199 
return 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

200 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

201 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

202 
int 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

203 
X11_CreateWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

204 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

205 
SDL_VideoData *data = (SDL_VideoData *) _this>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

206 
SDL_DisplayData *displaydata = 
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

207 
(SDL_DisplayData *) SDL_GetDisplayFromWindow(window)>driverdata; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

208 
Visual *visual; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

209 
int depth; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

210 
XSetWindowAttributes xattr; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

211 
int x, y; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

212 
Window w; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

213 
XSizeHints *sizehints; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

214 
XWMHints *wmhints; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

215 
XClassHint *classhints; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

216 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

217 
#if SDL_VIDEO_DRIVER_X11_XINERAMA 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

218 
/* FIXME 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

219 
if ( use_xinerama ) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

220 
x = xinerama_info.x_org; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

221 
y = xinerama_info.y_org; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

222 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

223 
*/ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

224 
#endif 
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

225 
#ifdef SDL_VIDEO_OPENGL_GLX 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

226 
if (window>flags & SDL_WINDOW_OPENGL) { 
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

227 
XVisualInfo *vinfo; 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

228 

420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

229 
vinfo = X11_GL_GetVisual(_this, data>display, displaydata>screen); 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

230 
if (!vinfo) { 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

231 
return 1; 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

232 
} 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

233 
visual = vinfo>visual; 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

234 
depth = vinfo>depth; 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

235 
XFree(vinfo); 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

236 
} else 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

237 
#endif 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

238 
{ 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

239 
visual = displaydata>visual; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

240 
depth = displaydata>depth; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

241 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

242 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

243 
if (window>flags & SDL_WINDOW_FULLSCREEN) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

244 
xattr.override_redirect = True; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

245 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

246 
xattr.override_redirect = False; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

247 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

248 
xattr.background_pixel = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

249 
xattr.border_pixel = 0; 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

250 

2945
e38423786728
Fixed DirectColor visual window creation problem
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

251 
if (visual>class == PseudoColor) { 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

252 
printf("asking for PseudoColor\n"); 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

253 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

254 
Status status; 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

255 
XStandardColormap cmap; 
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

256 
XColor *colorcells; 
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

257 
Colormap colormap; 
3052  258 
Sint32 pix; 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

259 
Sint32 ncolors; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

260 
Sint32 nbits; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

261 
Sint32 rmax, gmax, bmax; 
3052  262 
Sint32 rwidth, gwidth, bwidth; 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

263 
Sint32 rmask, gmask, bmask; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

264 
Sint32 rshift, gshift, bshift; 
3052  265 
Sint32 r, g, b; 
2185
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

266 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

267 
/* Is the colormap we need already registered in SDL? */ 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

268 
if (colormap = 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

269 
X11_LookupColormap(data>display, 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

270 
displaydata>screen, visual>visualid)) { 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

271 
xattr.colormap = colormap; 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

272 
/* printf("found existing colormap\n"); */ 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

273 
} else { 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

274 
/* The colormap is not known to SDL so we will create it */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

275 
colormap = XCreateColormap(data>display, 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

276 
RootWindow(data>display, 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

277 
displaydata>screen), 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

278 
visual, AllocAll); 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

279 
/* printf("colormap = %x\n", colormap); */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

280 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

281 
/* If we can't create a colormap, then we must die */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

282 
if (!colormap) { 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

283 
SDL_SetError 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

284 
("Couldn't create window: Could not create writable colormap"); 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

285 
return 1; 
2185
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

286 
} 
2213  287 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

288 
/* OK, we got a colormap, now fill it in as best as we can */ 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

289 

e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

290 
colorcells = SDL_malloc(visual>map_entries * sizeof(XColor)); 
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

291 
if (NULL == colorcells) { 
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

292 
SDL_SetError("out of memory in X11_CreateWindow"); 
2185
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

293 
return 1; 
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

294 
} 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

295 

2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

296 
ncolors = visual>map_entries; 
3052  297 
nbits = visual>bits_per_rgb; 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

298 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

299 
/* printf("ncolors = %d nbits = %d\n", ncolors, nbits); */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

300 

3052  301 
/* what if ncolors != (1 << nbits)? That can happen on a 
302 
true PseudoColor display. I'm assuming that we will 

303 
always have ncolors == (1 << nbits) */ 

304 

305 
/* I'm making a lot of assumptions here. */ 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

306 

3052  307 
/* Compute the width of each field. If there is one extra 
308 
bit, give it to green. If there are two extra bits give 

309 
them to red and greed. We can get extra bits when the 

310 
number of bits per pixel is not a multiple of 3. For 

311 
example when we have 16 bits per pixel and need a 5/6/5 

312 
layout for the RGB fields */ 

2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

313 

3052  314 
rwidth = (nbits / 3) + (((nbits % 3) == 2) ? 1 : 0); 
315 
gwidth = (nbits / 3) + (((nbits % 3) >= 1) ? 1 : 0); 

316 
bwidth = (nbits / 3); 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

317 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

318 
rshift = gwidth + bwidth; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

319 
gshift = bwidth; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

320 
bshift = 0; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

321 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

322 
rmax = 1 << rwidth; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

323 
gmax = 1 << gwidth; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

324 
bmax = 1 << bwidth; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

325 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

326 
rmask = rmax  1; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

327 
gmask = gmax  1; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

328 
bmask = bmax  1; 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

329 

b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

330 
/* printf("red mask = %4x shift = %4d width = %d\n", rmask, rshift, rwidth); */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

331 
/* printf("green mask = %4x shift = %4d width = %d\n", gmask, gshift, gwidth); */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

332 
/* printf("blue mask = %4x shift = %4d width = %d\n", bmask, bshift, bwidth); */ 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

333 

e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

334 
/* build the color table pixel values */ 
3052  335 
pix = 0; 
336 
for (r = 0; r < rmax; r++) { 

337 
for (g = 0; g < gmax; g++) { 

338 
for (b = 0; b < bmax; b++) { 

339 
colorcells[pix].pixel = 

340 
(r << rshift)  (g << gshift)  (b << bshift); 

341 
colorcells[pix].red = (0xffff * r) / rmask; 

342 
colorcells[pix].green = (0xffff * g) / gmask; 

343 
colorcells[pix].blue = (0xffff * b) / bmask; 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

344 
/* printf("%4x:%4x [%4x %4x %4x]\n", */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

345 
/* pix, */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

346 
/* colorcells[pix].pixel, */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

347 
/* colorcells[pix].red, */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

348 
/* colorcells[pix].green, */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

349 
/* colorcells[pix].blue); */ 
3052  350 
pix++; 
351 
} 

352 
} 

353 
} 

2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

354 

3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

355 
/* status = */ 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

356 
/* XStoreColors(data>display, colormap, colorcells, ncolors); */ 
2214
e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

357 

e7164a4dac62
Added gamma table support to X11. Also now supports DirectColor visuals.
Bob Pendleton <bob@pendleton.com>
parents:
2213
diff
changeset

358 
xattr.colormap = colormap; 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

359 
X11_TrackColormap(data>display, displaydata>screen, 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

360 
colormap, visual, NULL); 
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

361 

3009
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

362 
SDL_free(colorcells); 
2185
2032348afed1
This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents:
2143
diff
changeset

363 
} 
2945
e38423786728
Fixed DirectColor visual window creation problem
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

364 
} else if (visual>class == DirectColor) { 
3009
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

365 
Status status; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

366 
XStandardColormap cmap; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

367 
XColor *colorcells; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

368 
Colormap colormap; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

369 
int i; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

370 
int ncolors; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

371 
int rmax, gmax, bmax; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

372 
int rmask, gmask, bmask; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

373 
int rshift, gshift, bshift; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

374 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

375 
/* Is the colormap we need already registered in SDL? */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

376 
if (colormap = 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

377 
X11_LookupColormap(data>display, 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

378 
displaydata>screen, visual>visualid)) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

379 
xattr.colormap = colormap; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

380 
/* printf("found existing colormap\n"); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

381 
} else { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

382 
/* The colormap is not known to SDL so we will create it */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

383 
colormap = XCreateColormap(data>display, 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

384 
RootWindow(data>display, 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

385 
displaydata>screen), 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

386 
visual, AllocAll); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

387 
/* printf("colormap = %x\n", colormap); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

388 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

389 
/* If we can't create a colormap, then we must die */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

390 
if (!colormap) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

391 
SDL_SetError 
3044
b36579172f27
Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents:
3009
diff
changeset

392 
("Couldn't create window: Could not create writable colormap"); 
3009
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

393 
return 1; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

394 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

395 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

396 
/* OK, we got a colormap, now fill it in as best as we can */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

397 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

398 
colorcells = SDL_malloc(visual>map_entries * sizeof(XColor)); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

399 
if (NULL == colorcells) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

400 
SDL_SetError("out of memory in X11_CreateWindow"); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

401 
return 1; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

402 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

403 
ncolors = visual>map_entries; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

404 
rmax = 0xffff; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

405 
gmax = 0xffff; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

406 
bmax = 0xffff; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

407 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

408 
rshift = 0; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

409 
rmask = visual>red_mask; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

410 
while (0 == (rmask & 1)) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

411 
rshift++; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

412 
rmask >>= 1; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

413 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

414 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

415 
/* printf("rmask = %4x rshift = %4d\n", rmask, rshift); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

416 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

417 
gshift = 0; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

418 
gmask = visual>green_mask; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

419 
while (0 == (gmask & 1)) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

420 
gshift++; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

421 
gmask >>= 1; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

422 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

423 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

424 
/* printf("gmask = %4x gshift = %4d\n", gmask, gshift); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

425 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

426 
bshift = 0; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

427 
bmask = visual>blue_mask; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

428 
while (0 == (bmask & 1)) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

429 
bshift++; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

430 
bmask >>= 1; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

431 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

432 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

433 
/* printf("bmask = %4x bshift = %4d\n", bmask, bshift); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

434 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

435 
/* build the color table pixel values */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

436 
for (i = 0; i < ncolors; i++) { 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

437 
Uint32 red = (rmax * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

438 
Uint32 green = (gmax * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

439 
Uint32 blue = (bmax * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

440 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

441 
Uint32 rbits = (rmask * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

442 
Uint32 gbits = (gmask * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

443 
Uint32 bbits = (bmask * i) / (ncolors  1); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

444 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

445 
Uint32 pix = 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

446 
(rbits << rshift)  (gbits << gshift)  (bbits << bshift); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

447 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

448 
colorcells[i].pixel = pix; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

449 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

450 
colorcells[i].red = red; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

451 
colorcells[i].green = green; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

452 
colorcells[i].blue = blue; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

453 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

454 
colorcells[i].flags = DoRed  DoGreen  DoBlue; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

455 
/* printf("%2d:%4x [%4x %4x %4x]\n", i, pix, red, green, blue); */ 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

456 
} 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

457 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

458 
status = 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

459 
XStoreColors(data>display, colormap, colorcells, ncolors); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

460 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

461 
xattr.colormap = colormap; 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

462 
X11_TrackColormap(data>display, displaydata>screen, 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

463 
colormap, visual, colorcells); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

464 

546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

465 
SDL_free(colorcells); 
546c022a9ae5
Changed and hopefully fixed support for DirectColor with support for gammaramps.
Bob Pendleton <bob@pendleton.com>
parents:
2990
diff
changeset

466 
} 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

467 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

468 
xattr.colormap = 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

469 
XCreateColormap(data>display, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

470 
RootWindow(data>display, displaydata>screen), 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

471 
visual, AllocNone); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

472 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

473 

2876  474 
if ((window>flags & SDL_WINDOW_FULLSCREEN) 
475 
 window>x == SDL_WINDOWPOS_CENTERED) { 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

476 
X11_GetDisplaySize(_this, window, &x, NULL); 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

477 
x = (x  window>w) / 2; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

478 
} else if (window>x == SDL_WINDOWPOS_UNDEFINED) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

479 
x = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

480 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

481 
x = window>x; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

482 
} 
2876  483 
if ((window>flags & SDL_WINDOW_FULLSCREEN) 
484 
 window>y == SDL_WINDOWPOS_CENTERED) { 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

485 
X11_GetDisplaySize(_this, window, NULL, &y); 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

486 
y = (y  window>h) / 2; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

487 
} else if (window>y == SDL_WINDOWPOS_UNDEFINED) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

488 
y = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

489 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

490 
y = window>y; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

491 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

492 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

493 
w = XCreateWindow(data>display, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

494 
RootWindow(data>display, displaydata>screen), x, y, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

495 
window>w, window>h, 0, depth, InputOutput, visual, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

496 
(CWOverrideRedirect  CWBackPixel  CWBorderPixel  
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

497 
CWColormap), &xattr); 
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

498 
if (!w) { 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

499 
SDL_SetError("Couldn't create window"); 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

500 
return 1; 
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

501 
} 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

502 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

503 
sizehints = XAllocSizeHints(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

504 
if (sizehints) { 
2876  505 
if ((window>flags & SDL_WINDOW_RESIZABLE) 
506 
&& !(window>flags & SDL_WINDOW_FULLSCREEN)) { 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

507 
sizehints>min_width = 32; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

508 
sizehints>min_height = 32; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

509 
sizehints>max_height = 4096; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

510 
sizehints>max_width = 4096; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

511 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

512 
sizehints>min_width = sizehints>max_width = window>w; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

513 
sizehints>min_height = sizehints>max_height = window>h; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

514 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

515 
sizehints>flags = PMaxSize  PMinSize; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

516 
if (!(window>flags & SDL_WINDOW_FULLSCREEN) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

517 
&& window>x != SDL_WINDOWPOS_UNDEFINED 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

518 
&& window>y != SDL_WINDOWPOS_UNDEFINED) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

519 
sizehints>x = x; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

520 
sizehints>y = y; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

521 
sizehints>flags = USPosition; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

522 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

523 
XSetWMNormalHints(data>display, w, sizehints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

524 
XFree(sizehints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

525 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

526 

2876  527 
if (window>flags & (SDL_WINDOW_BORDERLESS  SDL_WINDOW_FULLSCREEN)) { 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

528 
SDL_bool set; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

529 
Atom WM_HINTS; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

530 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

531 
/* We haven't modified the window manager hints yet */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

532 
set = SDL_FALSE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

533 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

534 
/* First try to set MWM hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

535 
WM_HINTS = XInternAtom(data>display, "_MOTIF_WM_HINTS", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

536 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

537 
/* Hints used by Motif compliant window managers */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

538 
struct 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

539 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

540 
unsigned long flags; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

541 
unsigned long functions; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

542 
unsigned long decorations; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

543 
long input_mode; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

544 
unsigned long status; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

545 
} MWMHints = { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

546 
(1L << 1), 0, 0, 0, 0}; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

547 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

548 
XChangeProperty(data>display, w, WM_HINTS, WM_HINTS, 32, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

549 
PropModeReplace, (unsigned char *) &MWMHints, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

550 
sizeof(MWMHints) / sizeof(long)); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

551 
set = SDL_TRUE; 
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 
/* Now try to set KWM hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

554 
WM_HINTS = XInternAtom(data>display, "KWM_WIN_DECORATION", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

555 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

556 
long KWMHints = 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 
XChangeProperty(data>display, w, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

559 
WM_HINTS, WM_HINTS, 32, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

560 
PropModeReplace, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

561 
(unsigned char *) &KWMHints, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

562 
sizeof(KWMHints) / sizeof(long)); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

563 
set = SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

564 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

565 
/* Now try to set GNOME hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

566 
WM_HINTS = XInternAtom(data>display, "_WIN_HINTS", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

567 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

568 
long GNOMEHints = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

569 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

570 
XChangeProperty(data>display, w, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

571 
WM_HINTS, WM_HINTS, 32, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

572 
PropModeReplace, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

573 
(unsigned char *) &GNOMEHints, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

574 
sizeof(GNOMEHints) / sizeof(long)); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

575 
set = SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

576 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

577 
/* Finally set the transient hints if necessary */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

578 
if (!set) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

579 
XSetTransientForHint(data>display, w, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

580 
RootWindow(data>display, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

581 
displaydata>screen)); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

582 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

583 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

584 
SDL_bool set; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

585 
Atom WM_HINTS; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

586 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

587 
/* We haven't modified the window manager hints yet */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

588 
set = SDL_FALSE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

589 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

590 
/* First try to unset MWM hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

591 
WM_HINTS = XInternAtom(data>display, "_MOTIF_WM_HINTS", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

592 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

593 
XDeleteProperty(data>display, w, WM_HINTS); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

594 
set = SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

595 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

596 
/* Now try to unset KWM hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

597 
WM_HINTS = XInternAtom(data>display, "KWM_WIN_DECORATION", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

598 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

599 
XDeleteProperty(data>display, w, WM_HINTS); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

600 
set = SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

601 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

602 
/* Now try to unset GNOME hints */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

603 
WM_HINTS = XInternAtom(data>display, "_WIN_HINTS", True); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

604 
if (WM_HINTS != None) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

605 
XDeleteProperty(data>display, w, WM_HINTS); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

606 
set = SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

607 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

608 
/* Finally unset the transient hints if necessary */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

609 
if (!set) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

610 
/* NOTE: Does this work? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

611 
XSetTransientForHint(data>display, w, None); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

612 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

613 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

614 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

615 
/* Tell KDE to keep fullscreen windows on top */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

616 
if (window>flags & SDL_WINDOW_FULLSCREEN) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

617 
XEvent ev; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

618 
long mask; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

619 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

620 
SDL_zero(ev); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

621 
ev.xclient.type = ClientMessage; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

622 
ev.xclient.window = RootWindow(data>display, displaydata>screen); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

623 
ev.xclient.message_type = 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

624 
XInternAtom(data>display, "KWM_KEEP_ON_TOP", False); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

625 
ev.xclient.format = 32; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

626 
ev.xclient.data.l[0] = w; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

627 
ev.xclient.data.l[1] = CurrentTime; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

628 
XSendEvent(data>display, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

629 
RootWindow(data>display, displaydata>screen), False, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

630 
SubstructureRedirectMask, &ev); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

631 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

632 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

633 
/* Set the input hints so we get keyboard input */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

634 
wmhints = XAllocWMHints(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

635 
if (wmhints) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

636 
wmhints>input = True; 
1956
ba0d62354872
Simplified driver window creation code.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset

637 
wmhints>flags = InputHint; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

638 
XSetWMHints(data>display, w, wmhints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

639 
XFree(wmhints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

640 
} 
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 
/* Set the class hints so we can get an icon (AfterStep) */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

643 
classhints = XAllocClassHint(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

644 
if (classhints != NULL) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

645 
classhints>res_name = data>classname; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

646 
classhints>res_class = data>classname; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

647 
XSetClassHint(data>display, w, classhints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

648 
XFree(classhints); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

649 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

650 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

651 
/* Allow the window to be deleted by the window manager */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

652 
XSetWMProtocols(data>display, w, &data>WM_DELETE_WINDOW, 1); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

653 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

654 
if (SetupWindowData(_this, window, w, SDL_TRUE) < 0) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

655 
XDestroyWindow(data>display, w); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

656 
return 1; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

657 
} 
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

658 
#ifdef X_HAVE_UTF8_STRING 
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

659 
{ 
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

660 
Uint32 fevent = 0; 
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

661 
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

662 
XNFilterEvents, &fevent, NULL); 
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

663 
XSelectInput(data>display, w, 
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

664 
(FocusChangeMask  EnterWindowMask  LeaveWindowMask  
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

665 
ExposureMask  ButtonPressMask  ButtonReleaseMask  
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

666 
PointerMotionMask  KeyPressMask  KeyReleaseMask  
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

667 
PropertyChangeMask  StructureNotifyMask  
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

668 
KeymapStateMask  fevent)); 
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

669 
} 
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

670 
#else 
2718
abacf2555bb4
Removed unneccesary code lines. Fixed mousename bug. Added lacking code in mousebutton
Szymon Wilczek <kazeuser@gmail.com>
parents:
2710
diff
changeset

671 
{ 
abacf2555bb4
Removed unneccesary code lines. Fixed mousename bug. Added lacking code in mousebutton
Szymon Wilczek <kazeuser@gmail.com>
parents:
2710
diff
changeset

672 
XSelectInput(data>display, w, 
2725  673 
(FocusChangeMask  EnterWindowMask  LeaveWindowMask  
674 
ExposureMask  ButtonPressMask  ButtonReleaseMask  

675 
PointerMotionMask  KeyPressMask  KeyReleaseMask  

676 
PropertyChangeMask  StructureNotifyMask  

677 
KeymapStateMask)); 

2718
abacf2555bb4
Removed unneccesary code lines. Fixed mousename bug. Added lacking code in mousebutton
Szymon Wilczek <kazeuser@gmail.com>
parents:
2710
diff
changeset

678 
} 
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

679 
#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

680 

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

681 
#if SDL_VIDEO_DRIVER_X11_XINPUT 
2710
44e49d3fa6cf
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2325
diff
changeset

682 
/* we're informing the display what extension events we want to receive from it */ 
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

683 
{ 
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

684 
int i, j, n = 0; 
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

685 
XEventClass xevents[256]; 
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

686 

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

687 
for (i = 0; i < SDL_GetNumMice(); ++i) { 
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

688 
SDL_Mouse *mouse; 
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

689 
X11_MouseData *data; 
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

690 

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

691 
mouse = SDL_GetMouse(i); 
2942  692 
data = (X11_MouseData *) mouse>driverdata; 
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

693 
if (!data) { 
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

694 
continue; 
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

695 
} 
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

696 

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

697 
for (j = 0; j < data>num_xevents; ++j) { 
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

698 
xevents[n++] = data>xevents[j]; 
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

699 
} 
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

700 
} 
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

701 
if (n > 0) { 
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

702 
XSelectExtensionEvent(data>display, w, xevents, n); 
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

703 
} 
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

704 
} 
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

705 
#endif 
2710
44e49d3fa6cf
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2325
diff
changeset

706 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

707 
return 0; 
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 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

710 
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

711 
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

712 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

713 
Window w = (Window) data; 
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 
/* FIXME: Query the title from the existing window */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

716 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

717 
if (SetupWindowData(_this, window, w, SDL_FALSE) < 0) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

718 
return 1; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

719 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

720 
return 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

721 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

722 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

723 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

724 
X11_SetWindowTitle(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

725 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

726 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

727 
Display *display = data>videodata>display; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

728 
XTextProperty titleprop, iconprop; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

729 
Status status; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

730 
const char *title = window>title; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

731 
const char *icon = NULL; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

732 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

733 
#ifdef X_HAVE_UTF8_STRING 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

734 
Atom _NET_WM_NAME = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

735 
Atom _NET_WM_ICON_NAME = 0; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

736 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

737 
/* Look up some useful Atoms */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

738 
if (SDL_X11_HAVE_UTF8) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

739 
_NET_WM_NAME = XInternAtom(display, "_NET_WM_NAME", False); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

740 
_NET_WM_ICON_NAME = XInternAtom(display, "_NET_WM_ICON_NAME", False); 
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 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

743 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

744 
if (title != NULL) { 
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset

745 
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

746 
if (!title_locale) { 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

747 
SDL_OutOfMemory(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

748 
return; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

749 
} 
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset

750 
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

751 
SDL_free(title_locale); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

752 
if (status) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

753 
XSetTextProperty(display, data>window, &titleprop, XA_WM_NAME); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

754 
XFree(titleprop.value); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

755 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

756 
#ifdef X_HAVE_UTF8_STRING 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

757 
if (SDL_X11_HAVE_UTF8) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

758 
status = 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

759 
Xutf8TextListToTextProperty(display, (char **) &title, 1, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

760 
XUTF8StringStyle, &titleprop); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

761 
if (status == Success) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

762 
XSetTextProperty(display, data>window, &titleprop, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

763 
_NET_WM_NAME); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

764 
XFree(titleprop.value); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

765 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

766 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

767 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

768 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

769 
if (icon != NULL) { 
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset

770 
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

771 
if (!icon_locale) { 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

772 
SDL_OutOfMemory(); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

773 
return; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

774 
} 
2143
e906da4414a3
Fix for bug #447 merged from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1956
diff
changeset

775 
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

776 
SDL_free(icon_locale); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

777 
if (status) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

778 
XSetTextProperty(display, data>window, &iconprop, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

779 
XA_WM_ICON_NAME); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

780 
XFree(iconprop.value); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

781 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

782 
#ifdef X_HAVE_UTF8_STRING 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

783 
if (SDL_X11_HAVE_UTF8) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

784 
status = 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

785 
Xutf8TextListToTextProperty(display, (char **) &icon, 1, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

786 
XUTF8StringStyle, &iconprop); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

787 
if (status == Success) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

788 
XSetTextProperty(display, data>window, &iconprop, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

789 
_NET_WM_ICON_NAME); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

790 
XFree(iconprop.value); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

791 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

792 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

793 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

794 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

795 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

796 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

797 
void 
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

798 
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

799 
{ 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

800 
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

801 
Display *display = data>videodata>display; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

802 
Atom _NET_WM_ICON = XInternAtom(display, "_NET_WM_ICON", False); 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

803 

e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

804 
if (icon) { 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

805 
SDL_PixelFormat format; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

806 
SDL_Surface *surface; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

807 
int propsize; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

808 
Uint32 *propdata; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

809 

e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

810 
/* Convert the icon to ARGB for modern window managers */ 
2990  811 
SDL_InitFormat(&format, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 
812 
0xFF000000); 

2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

813 
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

814 
if (!surface) { 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

815 
return; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

816 
} 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

817 

e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

818 
/* Set the _NET_WM_ICON property */ 
2990  819 
propsize = 2 + (icon>w * icon>h); 
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

820 
propdata = SDL_malloc(propsize * sizeof(Uint32)); 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

821 
if (propdata) { 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

822 
propdata[0] = icon>w; 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

823 
propdata[1] = icon>h; 
2990  824 
SDL_memcpy(&propdata[2], surface>pixels, 
825 
surface>h * surface>pitch); 

826 
XChangeProperty(display, data>window, _NET_WM_ICON, XA_CARDINAL, 

827 
32, PropModeReplace, (unsigned char *) propdata, 

828 
propsize); 

2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

829 
} 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

830 
SDL_FreeSurface(surface); 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

831 
} else { 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

832 
XDeleteProperty(display, data>window, _NET_WM_ICON); 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

833 
} 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

834 
} 
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

835 

e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2945
diff
changeset

836 
void 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

837 
X11_SetWindowPosition(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

838 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

839 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

840 
SDL_DisplayData *displaydata = 
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

841 
(SDL_DisplayData *) SDL_GetDisplayFromWindow(window)>driverdata; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

842 
Display *display = data>videodata>display; 
2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

843 
int x, y; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

844 

2876  845 
if ((window>flags & SDL_WINDOW_FULLSCREEN) 
846 
 window>x == SDL_WINDOWPOS_CENTERED) { 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

847 
X11_GetDisplaySize(_this, window, &x, NULL); 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

848 
x = (x  window>w) / 2; 
2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

849 
} else { 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

850 
x = window>x; 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

851 
} 
2876  852 
if ((window>flags & SDL_WINDOW_FULLSCREEN) 
853 
 window>y == SDL_WINDOWPOS_CENTERED) { 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

854 
X11_GetDisplaySize(_this, window, NULL, &y); 
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

855 
y = (y  window>h) / 2; 
2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

856 
} else { 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

857 
y = window>y; 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

858 
} 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

859 
XMoveWindow(display, data>window, x, y); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

860 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

861 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

862 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

863 
X11_SetWindowSize(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

864 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

865 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

866 
Display *display = data>videodata>display; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

867 

2931
e705adf6f3dc
Date: Mon, 29 Dec 2008 23:29:52 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2876
diff
changeset

868 
XResizeWindow(display, data>window, window>w, window>h); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

869 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

870 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

871 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

872 
X11_ShowWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

873 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

874 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

875 
Display *display = data>videodata>display; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

876 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

877 
XMapRaised(display, data>window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

878 
} 
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 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

881 
X11_HideWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

882 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

883 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

884 
Display *display = data>videodata>display; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

885 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

886 
XUnmapWindow(display, data>window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

887 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

888 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

889 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

890 
X11_RaiseWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

891 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

892 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

893 
Display *display = data>videodata>display; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

894 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

895 
XRaiseWindow(display, data>window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

896 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

897 

3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

898 
static void 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

899 
X11_SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized) 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

900 
{ 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

901 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

902 
SDL_DisplayData *displaydata = 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

903 
(SDL_DisplayData *) SDL_GetDisplayFromWindow(window)>driverdata; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

904 
Display *display = data>videodata>display; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

905 
Atom _NET_WM_STATE = XInternAtom(display, "_NET_WM_STATE", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

906 
Atom _NET_WM_STATE_MAXIMIZED_VERT = XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_VERT", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

907 
Atom _NET_WM_STATE_MAXIMIZED_HORZ = XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

908 
XEvent e; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

909 

9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

910 
e.xany.type = ClientMessage; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

911 
e.xany.window = data>window; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

912 
e.xclient.message_type = _NET_WM_STATE; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

913 
e.xclient.format = 32; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

914 
e.xclient.data.l[0] = maximized ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

915 
e.xclient.data.l[1] = _NET_WM_STATE_MAXIMIZED_VERT; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

916 
e.xclient.data.l[2] = _NET_WM_STATE_MAXIMIZED_HORZ; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

917 
e.xclient.data.l[3] = 0l; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

918 
e.xclient.data.l[4] = 0l; 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

919 

9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

920 
XSendEvent(display, RootWindow(display, displaydata>screen), 0, 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

921 
SubstructureNotifyMaskSubstructureRedirectMask, &e); 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

922 
} 
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

923 

1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

924 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

925 
X11_MaximizeWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

926 
{ 
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

927 
X11_SetWindowMaximized(_this, window, SDL_TRUE); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

928 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

929 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

930 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

931 
X11_MinimizeWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

932 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

933 
X11_HideWindow(_this, window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

934 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

935 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

936 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

937 
X11_RestoreWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

938 
{ 
3077
9b58f26ede81
Implemented X11 maximized state control
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset

939 
X11_SetWindowMaximized(_this, window, SDL_FALSE); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

940 
X11_ShowWindow(_this, window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

941 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

942 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

943 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

944 
X11_SetWindowGrab(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

945 
{ 
2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

946 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

947 
Display *display = data>videodata>display; 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

948 

2876  949 
if ((window>flags & (SDL_WINDOW_INPUT_GRABBED  SDL_WINDOW_FULLSCREEN)) 
950 
&& (window>flags & SDL_WINDOW_INPUT_FOCUS)) { 

2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

951 
/* Try to grab the mouse */ 
2876  952 
for (;;) { 
953 
int result = 

954 
XGrabPointer(display, data>window, True, 0, GrabModeAsync, 

955 
GrabModeAsync, data>window, None, CurrentTime); 

956 
if (result == GrabSuccess) { 

2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

957 
break; 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

958 
} 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

959 
SDL_Delay(100); 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

960 
} 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

961 

91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

962 
/* Raise the window if we grab the mouse */ 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

963 
XRaiseWindow(display, data>window); 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

964 

91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

965 
/* Now grab the keyboard */ 
2876  966 
XGrabKeyboard(display, data>window, True, GrabModeAsync, 
967 
GrabModeAsync, CurrentTime); 

2875
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

968 
} else { 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

969 
XUngrabPointer(display, CurrentTime); 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

970 
XUngrabKeyboard(display, CurrentTime); 
91a7e08cd238
* Implemented X11 fullscreen input grab
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset

971 
} 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

972 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

973 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

974 
void 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

975 
X11_DestroyWindow(_THIS, SDL_Window * window) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

976 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

977 
SDL_WindowData *data = (SDL_WindowData *) window>driverdata; 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

978 
window>driverdata = NULL; 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

979 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

980 
if (data) { 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

981 
SDL_VideoData *videodata = (SDL_VideoData *) data>videodata; 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

982 
Display *display = videodata>display; 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

983 
int numwindows = videodata>numwindows; 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

984 
SDL_WindowData **windowlist = videodata>windowlist; 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

985 
int i; 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

986 

4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

987 
if (windowlist) { 
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

988 
for (i = 0; i < numwindows; ++i) { 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

989 
if (windowlist[i] && (windowlist[i]>windowID == window>id)) { 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

990 
windowlist[i] = windowlist[numwindows  1]; 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

991 
windowlist[numwindows  1] = NULL; 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

992 
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

993 
break; 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

994 
} 
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

995 
} 
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset

996 
} 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

997 
#ifdef X_HAVE_UTF8_STRING 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

998 
if (data>ic) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

999 
XDestroyIC(data>ic); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1000 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1001 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1002 
if (data>created) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1003 
XDestroyWindow(display, data>window); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1004 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1005 
SDL_free(data); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1006 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1007 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1008 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1009 
SDL_bool 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1010 
X11_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1011 
{ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1012 
if (info>version.major <= SDL_MAJOR_VERSION) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1013 
/* FIXME! */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1014 
return SDL_TRUE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1015 
} else { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1016 
SDL_SetError("Application not compiled with SDL %d.%d\n", 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1017 
SDL_MAJOR_VERSION, SDL_MINOR_VERSION); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1018 
return SDL_FALSE; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1019 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1020 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1021 

7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

1022 
/* vi: set ts=4 sw=4 expandtab: */ 