author  Sam Lantinga <slouken@libsdl.org> 
Sat, 05 Sep 2009 07:33:54 +0000  
changeset 3241  08c5964f2a34 
parent 3195  08747e24a50f 
child 3322  d9dd6cbba4c0 
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 

2046
da8332c8f480
Replaced strncmp for SDL_VIDEODRIVER test with strcasecmp
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

24 
#include <sys/types.h> 
da8332c8f480
Replaced strncmp for SDL_VIDEODRIVER test with strcasecmp
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

25 
#include <sys/time.h> 
da8332c8f480
Replaced strncmp for SDL_VIDEODRIVER test with strcasecmp
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

26 
#include <unistd.h> 
da8332c8f480
Replaced strncmp for SDL_VIDEODRIVER test with strcasecmp
Sam Lantinga <slouken@libsdl.org>
parents:
1951
diff
changeset

27 

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

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

29 
#include "../../events/SDL_events_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:
2859
diff
changeset

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

31 

3241
08c5964f2a34
Fixed a few issues compiling with Mac OS X 10.6
Sam Lantinga <slouken@libsdl.org>
parents:
3195
diff
changeset

32 
#include "SDL_syswm.h" 
08c5964f2a34
Fixed a few issues compiling with Mac OS X 10.6
Sam Lantinga <slouken@libsdl.org>
parents:
3195
diff
changeset

33 

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

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

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

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

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

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

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

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

41 

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

42 
SDL_zero(xevent); /* valgrind fix. ryan. */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

43 
XNextEvent(videodata>display, &xevent); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

44 

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

45 
/* filter events catchs XIM events and sends them to the correct 
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

46 
handler */ 
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

47 
if (XFilterEvent(&xevent, None) == True) { 
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2326
diff
changeset

48 
#if 0 
2328
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2327
diff
changeset

49 
printf("Filtered event type = %d display = %d window = %d\n", 
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2327
diff
changeset

50 
xevent.type, xevent.xany.display, xevent.xany.window); 
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

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

52 
return; 
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

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

54 

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

55 
/* Send a SDL_SYSWMEVENT if the application wants them */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

56 
if (SDL_ProcessEvents[SDL_SYSWMEVENT] == SDL_ENABLE) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

58 

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

59 
SDL_VERSION(&wmmsg.version); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

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

64 

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

65 
data = NULL; 
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

66 
if (videodata && videodata>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

67 
for (i = 0; i < videodata>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

68 
if ((videodata>windowlist[i] != 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

69 
(videodata>windowlist[i]>window == xevent.xany.window)) { 
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset

70 
data = videodata>windowlist[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

71 
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

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

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

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

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

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

77 
} 
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2326
diff
changeset

78 
#if 0 
2328
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2327
diff
changeset

79 
printf("type = %d display = %d window = %d\n", 
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2327
diff
changeset

80 
xevent.type, xevent.xany.display, xevent.xany.window); 
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2326
diff
changeset

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

82 
switch (xevent.type) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

83 

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

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

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

86 
#ifdef DEBUG_XEVENTS 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

87 
printf("EnterNotify! (%d,%d,%d)\n", 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

88 
xevent.xcrossing.x, 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

89 
xevent.xcrossing.y, 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

90 
xevent.xcrossing.mode); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

91 
if (xevent.xcrossing.mode == NotifyGrab) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

92 
printf("Mode: NotifyGrab\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

93 
if (xevent.xcrossing.mode == NotifyUngrab) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

94 
printf("Mode: NotifyUngrab\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

96 
if ((xevent.xcrossing.mode != NotifyGrab) && 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

97 
(xevent.xcrossing.mode != NotifyUngrab)) { 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

98 
#if 1 
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:
2859
diff
changeset

99 
/* FIXME: Should we reset data for all mice? */ 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

100 
for (i = 0; i < SDL_GetNumMice(); ++i) { 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

101 
SDL_Mouse *mouse = SDL_GetMouse(i); 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

102 
SDL_SetMouseFocus(mouse>id, data>windowID); 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

103 
} 
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:
2859
diff
changeset

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

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

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

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

108 

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

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

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

111 
#ifdef DEBUG_XEVENTS 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

112 
printf("LeaveNotify! (%d,%d,%d)\n", 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

113 
xevent.xcrossing.x, 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

114 
xevent.xcrossing.y, 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

115 
xevent.xcrossing.mode); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

116 
if (xevent.xcrossing.mode == NotifyGrab) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

117 
printf("Mode: NotifyGrab\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

118 
if (xevent.xcrossing.mode == NotifyUngrab) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

119 
printf("Mode: NotifyUngrab\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

121 
if ((xevent.xcrossing.mode != NotifyGrab) && 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

122 
(xevent.xcrossing.mode != NotifyUngrab) && 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

123 
(xevent.xcrossing.detail != NotifyInferior)) { 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

124 
#if 1 
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:
2859
diff
changeset

125 
/* FIXME: Should we reset data for all mice? */ 
3195
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

126 
for (i = 0; i < SDL_GetNumMice(); ++i) { 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

127 
SDL_Mouse *mouse = SDL_GetMouse(i); 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

128 
SDL_SetMouseFocus(mouse>id, 0); 
08747e24a50f
Mouse events now report the correct window id and window enter/leave events are now reported.
Bob Pendleton <bob@pendleton.com>
parents:
3188
diff
changeset

129 
} 
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:
2859
diff
changeset

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

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

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

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

134 

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

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

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

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

138 
printf("FocusIn!\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

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

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

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

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

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

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

148 

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

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

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

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

152 
printf("FocusOut!\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

154 
SDL_SetKeyboardFocus(videodata>keyboard, 0); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

157 
XUnsetICFocus(data>ic); 
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 
#endif 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

162 

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

163 
/* Generated upon EnterWindow and FocusIn */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

166 
printf("KeymapNotify!\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

169 
X11_SetKeyboardState(SDL_Display, xevent.xkeymap.key_vector); 
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 
} 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

173 

2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

174 
/* Has the keyboard layout changed? */ 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

175 
case MappingNotify:{ 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

176 
#ifdef DEBUG_XEVENTS 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

177 
printf("MappingNotify!\n"); 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

178 
#endif 
2306  179 
X11_UpdateKeymap(_this); 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

180 
} 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

181 
break; 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

182 

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

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

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

185 
KeyCode keycode = xevent.xkey.keycode; 
2300
c97ad1abe05b
Minimal implementation of textinput events for x11. It only works for latin1.
Bob Pendleton <bob@pendleton.com>
parents:
2299
diff
changeset

186 
KeySym keysym = NoSymbol; 
2306  187 
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; 
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

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

189 

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

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

191 
printf("KeyPress (X11 keycode = 0x%X)\n", xevent.xkey.keycode); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

192 
#endif 
2299
a7cbc25071b6
Enabled key board auto repeat in X11_InitKeyboard.c. Had to add a couple of new Xlib symbols.
Bob Pendleton <bob@pendleton.com>
parents:
2295
diff
changeset

193 
SDL_SendKeyboardKey(videodata>keyboard, SDL_PRESSED, 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

194 
videodata>key_layout[keycode]); 
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

195 
#if 0 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

196 
if (videodata>key_layout[keycode] == SDLK_UNKNOWN) { 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

197 
int min_keycode, max_keycode; 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

198 
XDisplayKeycodes(videodata>display, &min_keycode, 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

199 
&max_keycode); 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

200 
keysym = XKeycodeToKeysym(videodata>display, keycode, 0); 
2299
a7cbc25071b6
Enabled key board auto repeat in X11_InitKeyboard.c. Had to add a couple of new Xlib symbols.
Bob Pendleton <bob@pendleton.com>
parents:
2295
diff
changeset

201 
fprintf(stderr, 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

202 
"The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL mailing list <sdl@libsdl.org> X11 KeyCode %d (%d), X11 KeySym 0x%X (%s).\n", 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

203 
keycode, keycode  min_keycode, keysym, 
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

204 
XKeysymToString(keysym)); 
2299
a7cbc25071b6
Enabled key board auto repeat in X11_InitKeyboard.c. Had to add a couple of new Xlib symbols.
Bob Pendleton <bob@pendleton.com>
parents:
2295
diff
changeset

205 
} 
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2046
diff
changeset

206 
#endif 
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

207 
/* */ 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

208 
SDL_zero(text); 
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

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

210 
if (data>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

211 
Xutf8LookupString(data>ic, &xevent.xkey, text, sizeof(text), 
2738
79c1bd651f04
Fixed a bunch of compile warnings on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
2710
diff
changeset

212 
&keysym, &status); 
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

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

214 
#else 
2306  215 
XLookupString(&xevent.xkey, text, sizeof(text), &keysym, NULL); 
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

216 
#endif 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

217 
if (*text) { 
2300
c97ad1abe05b
Minimal implementation of textinput events for x11. It only works for latin1.
Bob Pendleton <bob@pendleton.com>
parents:
2299
diff
changeset

218 
SDL_SendKeyboardText(videodata>keyboard, text); 
c97ad1abe05b
Minimal implementation of textinput events for x11. It only works for latin1.
Bob Pendleton <bob@pendleton.com>
parents:
2299
diff
changeset

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

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

221 
break; 
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 
/* Key release? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

225 
KeyCode keycode = xevent.xkey.keycode; 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

226 

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

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

228 
printf("KeyRelease (X11 keycode = 0x%X)\n", xevent.xkey.keycode); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

229 
#endif 
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2046
diff
changeset

230 
SDL_SendKeyboardKey(videodata>keyboard, SDL_RELEASED, 
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2300
diff
changeset

231 
videodata>key_layout[keycode]); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

234 

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

235 
/* Have we been iconified? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

238 
printf("UnmapNotify!\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

241 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_MINIMIZED, 0, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

245 

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

246 
/* Have we been restored? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

249 
printf("MapNotify!\n"); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

252 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_RESTORED, 0, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

256 

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

257 
/* Have we been resized or moved? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

260 
printf("ConfigureNotify! (resize: %dx%d)\n", 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

261 
xevent.xconfigure.width, xevent.xconfigure.height); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

263 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_MOVED, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

265 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_RESIZED, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

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

270 

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

271 
/* Have we been requested to quit (or another client message?) */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

273 
if ((xevent.xclient.format == 32) && 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

274 
(xevent.xclient.data.l[0] == videodata>WM_DELETE_WINDOW)) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

275 

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

276 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_CLOSE, 0, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

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

281 

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

282 
/* Do we need to refresh ourselves? */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

285 
printf("Expose (count = %d)\n", xevent.xexpose.count); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

287 
SDL_SendWindowEvent(data>windowID, SDL_WINDOWEVENT_EXPOSED, 0, 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

291 

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

292 
default:{ 
2942  293 
for (i = 0; i < SDL_GetNumMice(); ++i) { 
294 
SDL_Mouse *mouse; 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

295 
#if SDL_VIDEO_DRIVER_X11_XINPUT 
2942  296 
X11_MouseData *data; 
3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

297 
#endif 
2942  298 

299 
mouse = SDL_GetMouse(i); 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

300 
if (!mouse>driverdata) { 
2992
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

301 
switch (xevent.type) { 
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

302 
case MotionNotify: 
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

303 
#ifdef DEBUG_MOTION 
2997  304 
printf("X11 motion: %d,%d\n", xevent.xmotion.x, 
305 
xevent.xmotion.y); 

2992
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

306 
#endif 
2997  307 
SDL_SendMouseMotion(mouse>id, 0, xevent.xmotion.x, 
308 
xevent.xmotion.y, 0); 

2992
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

309 
break; 
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

310 

dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

311 
case ButtonPress: 
2997  312 
SDL_SendMouseButton(mouse>id, SDL_PRESSED, 
313 
xevent.xbutton.button); 

2992
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

314 
break; 
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

315 

dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

316 
case ButtonRelease: 
2997  317 
SDL_SendMouseButton(mouse>id, SDL_RELEASED, 
318 
xevent.xbutton.button); 

2992
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

319 
break; 
dbff5769d742
The core pointer is comprised of merging the inputs of all mice.
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset

320 
} 
2942  321 
continue; 
322 
} 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

323 
#if SDL_VIDEO_DRIVER_X11_XINPUT 
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

324 
data = (X11_MouseData *) mouse>driverdata; 
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

325 
if (xevent.type == data>motion) { 
2942  326 
XDeviceMotionEvent *move = 
327 
(XDeviceMotionEvent *) & xevent; 

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

328 
#ifdef DEBUG_MOTION 
2942  329 
printf("X11 motion: %d,%d\n", move>x, move>y); 
2710
44e49d3fa6cf
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2328
diff
changeset

330 
#endif 
2942  331 
SDL_SendMouseMotion(move>deviceid, 0, move>x, move>y, 
332 
move>axis_data[2]); 

333 
return; 

334 
} 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

335 
if (xevent.type == data>button_pressed) { 
2942  336 
XDeviceButtonPressedEvent *pressed = 
337 
(XDeviceButtonPressedEvent *) & xevent; 

338 
SDL_SendMouseButton(pressed>deviceid, SDL_PRESSED, 

339 
pressed>button); 

340 
return; 

341 
} 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

342 
if (xevent.type == data>button_released) { 
2942  343 
XDeviceButtonReleasedEvent *released = 
344 
(XDeviceButtonReleasedEvent *) & xevent; 

345 
SDL_SendMouseButton(released>deviceid, SDL_RELEASED, 

346 
released>button); 

347 
return; 

348 
} 

349 
if (xevent.type == data>proximity_in) { 

350 
XProximityNotifyEvent *proximity = 

351 
(XProximityNotifyEvent *) & xevent; 

352 
SDL_SendProximity(proximity>deviceid, proximity>x, 

353 
proximity>y, SDL_PROXIMITYIN); 

354 
return; 

355 
} 

356 
if (xevent.type == data>proximity_out) { 

357 
XProximityNotifyEvent *proximity = 

358 
(XProximityNotifyEvent *) & xevent; 

359 
SDL_SendProximity(proximity>deviceid, proximity>x, 

360 
proximity>y, SDL_PROXIMITYOUT); 

361 
return; 

362 
} 

3003
699d68ef2aca
Fixed mouse events with disablevideox11xinput
Sam Lantinga <slouken@libsdl.org>
parents:
2997
diff
changeset

363 
#endif 
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:
2859
diff
changeset

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

365 
#ifdef DEBUG_XEVENTS 
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:
2859
diff
changeset

366 
printf("Unhandled event %d\n", xevent.type); 
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

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

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

372 

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

373 
/* Ack! XPending() actually performs a blocking read if no events available */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

375 
X11_Pending(Display * display) 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

377 
/* Flush the display connection and look to see if events are queued */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

379 
if (XEventsQueued(display, QueuedAlready)) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

382 

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

383 
/* More drastic measures are required  see if X is ready to talk */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

385 
static struct timeval zero_time; /* static == 0 */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

388 

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

389 
x11_fd = ConnectionNumber(display); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

391 
FD_SET(x11_fd, &fdset); 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

392 
if (select(x11_fd + 1, &fdset, NULL, NULL, &zero_time) == 1) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

396 

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

397 
/* Oh well, nothing is ready .. */ 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

400 

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

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

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

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

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

405 

3025
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

406 
/* Update activity every 30 seconds to prevent screensaver */ 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

407 
if (_this>suspend_screensaver) { 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

408 
Uint32 now = SDL_GetTicks(); 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

409 
if (!data>screensaver_activity  
3040  410 
(int) (now  data>screensaver_activity) >= 30000) { 
3025
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

411 
XResetScreenSaver(data>display); 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

412 
data>screensaver_activity = now; 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

413 
} 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

414 
} 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

415 

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

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

417 
while (X11_Pending(data>display)) { 
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

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

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

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

421 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

422 
/* This is so wrong it hurts */ 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

423 
#define GNOME_SCREENSAVER_HACK 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

424 
#ifdef GNOME_SCREENSAVER_HACK 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

425 
#include <unistd.h> 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

426 
static pid_t screensaver_inhibit_pid; 
3040  427 
static void 
428 
gnome_screensaver_disable() 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

429 
{ 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

430 
screensaver_inhibit_pid = fork(); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

431 
if (screensaver_inhibit_pid == 0) { 
3031
86918831452f
Don't complain when the GNOME screensaver isn't running (or available)
Sam Lantinga <slouken@libsdl.org>
parents:
3030
diff
changeset

432 
close(0); 
86918831452f
Don't complain when the GNOME screensaver isn't running (or available)
Sam Lantinga <slouken@libsdl.org>
parents:
3030
diff
changeset

433 
close(1); 
86918831452f
Don't complain when the GNOME screensaver isn't running (or available)
Sam Lantinga <slouken@libsdl.org>
parents:
3030
diff
changeset

434 
close(2); 
3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

435 
execl("/usr/bin/gnomescreensavercommand", 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

436 
"gnomescreensavercommand", 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

437 
"inhibit", 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

438 
"reason", 
3040  439 
"GNOME screensaver doesn't respect MITSCREENSAVER", NULL); 
3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

440 
exit(2); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

441 
} 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

442 
} 
3040  443 
static void 
444 
gnome_screensaver_enable() 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

445 
{ 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

446 
kill(screensaver_inhibit_pid, 15); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

447 
} 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

448 
#endif 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

449 

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

450 
void 
3025
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

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

452 
{ 
3025
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

453 
#if SDL_VIDEO_DRIVER_X11_SCRNSAVER 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

454 
SDL_VideoData *data = (SDL_VideoData *) _this>driverdata; 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

455 
int dummy; 
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

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

457 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

458 
if (SDL_X11_HAVE_XSS) { 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

459 
/* XScreenSaverSuspend was introduced in MITSCREENSAVER 1.1 */ 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

460 
if (!XScreenSaverQueryExtension(data>display, &dummy, &dummy)  
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

461 
!XScreenSaverQueryVersion(data>display, 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

462 
&major_version, &minor_version)  
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

463 
major_version < 1  (major_version == 1 && minor_version < 1)) { 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

464 
return; 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

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

466 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

467 
XScreenSaverSuspend(data>display, _this>suspend_screensaver); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

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

469 
} 
3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

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

471 

3030
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

472 
#ifdef GNOME_SCREENSAVER_HACK 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

473 
if (_this>suspend_screensaver) { 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

474 
gnome_screensaver_disable(); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

475 
} else { 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

476 
gnome_screensaver_enable(); 
f13ad181f5b2
This is so wrong, it hurts.
Sam Lantinga <slouken@libsdl.org>
parents:
3025
diff
changeset

477 
} 
3025
54fac87e1f34
Added an API to enable/disable the screen saver.
Sam Lantinga <slouken@libsdl.org>
parents:
3015
diff
changeset

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

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

480 

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

481 
/* vi: set ts=4 sw=4 expandtab: */ 