author | Sam Lantinga <slouken@libsdl.org> |
Mon, 21 Sep 2009 07:20:51 +0000 | |
branch | SDL-1.2 |
changeset 4207 | a673f44949d6 |
parent 4159 | a1b03ba2fcd0 |
child 4223 | 63fd67e17705 |
permissions | -rw-r--r-- |
0 | 1 |
/* |
2 |
SDL - Simple DirectMedia Layer |
|
4159 | 3 |
Copyright (C) 1997-2009 Sam Lantinga |
0 | 4 |
|
5 |
This library is free software; you can redistribute it and/or |
|
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
6 |
modify it under the terms of the GNU Lesser General Public |
0 | 7 |
License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
8 |
version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
|
10 |
This library is distributed in the hope that it will be useful, |
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
13 |
Lesser General Public License for more details. |
0 | 14 |
|
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
15 |
You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
16 |
License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1306
diff
changeset
|
17 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
|
19 |
Sam Lantinga |
|
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
242
diff
changeset
|
20 |
slouken@libsdl.org |
0 | 21 |
*/ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
22 |
#include "SDL_config.h" |
0 | 23 |
|
24 |
/* Utilities for getting and setting the X display mode */ |
|
25 |
||
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
26 |
#include <stdio.h> |
0 | 27 |
|
28 |
#include "SDL_timer.h" |
|
29 |
#include "SDL_events.h" |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
30 |
#include "../../events/SDL_events_c.h" |
0 | 31 |
#include "SDL_x11video.h" |
32 |
#include "SDL_x11wm_c.h" |
|
33 |
#include "SDL_x11modes_c.h" |
|
88
71774090f286
Hopefully fixed the fullscreen mode code for KDE
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
34 |
#include "SDL_x11image_c.h" |
0 | 35 |
|
1768 | 36 |
/*#define X11MODES_DEBUG*/ |
37 |
||
1765 | 38 |
#define MAX(a, b) (a > b ? a : b) |
0 | 39 |
|
1765 | 40 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
41 |
static int cmpmodelist(const void *va, const void *vb) |
|
42 |
{ |
|
43 |
const SDL_Rect *a = *(const SDL_Rect **)va; |
|
44 |
const SDL_Rect *b = *(const SDL_Rect **)vb; |
|
45 |
if ( a->w == b->w ) |
|
46 |
return b->h - a->h; |
|
47 |
else |
|
48 |
return b->w - a->w; |
|
49 |
} |
|
50 |
#endif |
|
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
51 |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
52 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
53 |
Bool SDL_NAME(XF86VidModeGetModeInfo)(Display *dpy, int scr, SDL_NAME(XF86VidModeModeInfo) *info) |
0 | 54 |
{ |
4154
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
55 |
Bool retval; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
56 |
int dotclock; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
57 |
SDL_NAME(XF86VidModeModeLine) l; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
58 |
SDL_memset(&l, 0, sizeof(l)); |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
59 |
retval = SDL_NAME(XF86VidModeGetModeLine)(dpy, scr, &dotclock, &l); |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
60 |
info->dotclock = dotclock; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
61 |
info->hdisplay = l.hdisplay; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
62 |
info->hsyncstart = l.hsyncstart; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
63 |
info->hsyncend = l.hsyncend; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
64 |
info->htotal = l.htotal; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
65 |
info->hskew = l.hskew; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
66 |
info->vdisplay = l.vdisplay; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
67 |
info->vsyncstart = l.vsyncstart; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
68 |
info->vsyncend = l.vsyncend; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
69 |
info->vtotal = l.vtotal; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
70 |
info->flags = l.flags; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
71 |
info->privsize = l.privsize; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
72 |
info->private = l.private; |
db4007f17bc8
Correct fix for Bugzilla #602.
Ryan C. Gordon <icculus@icculus.org>
parents:
1863
diff
changeset
|
73 |
return retval; |
0 | 74 |
} |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
75 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
0 | 76 |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
77 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 78 |
static void save_mode(_THIS) |
79 |
{ |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
80 |
SDL_memset(&saved_mode, 0, sizeof(saved_mode)); |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
81 |
SDL_NAME(XF86VidModeGetModeInfo)(SDL_Display,SDL_Screen,&saved_mode); |
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
82 |
SDL_NAME(XF86VidModeGetViewPort)(SDL_Display,SDL_Screen,&saved_view.x,&saved_view.y); |
0 | 83 |
} |
84 |
#endif |
|
85 |
||
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
86 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 87 |
static void restore_mode(_THIS) |
88 |
{ |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
89 |
SDL_NAME(XF86VidModeModeLine) mode; |
0 | 90 |
int unused; |
91 |
||
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
92 |
if ( SDL_NAME(XF86VidModeGetModeLine)(SDL_Display, SDL_Screen, &unused, &mode) ) { |
0 | 93 |
if ( (saved_mode.hdisplay != mode.hdisplay) || |
94 |
(saved_mode.vdisplay != mode.vdisplay) ) { |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
95 |
SDL_NAME(XF86VidModeSwitchToMode)(SDL_Display, SDL_Screen, &saved_mode); |
0 | 96 |
} |
97 |
} |
|
98 |
if ( (saved_view.x != 0) || (saved_view.y != 0) ) { |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
99 |
SDL_NAME(XF86VidModeSetViewPort)(SDL_Display, SDL_Screen, saved_view.x, saved_view.y); |
0 | 100 |
} |
101 |
} |
|
102 |
#endif |
|
103 |
||
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
104 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 105 |
static int cmpmodes(const void *va, const void *vb) |
106 |
{ |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
107 |
const SDL_NAME(XF86VidModeModeInfo) *a = *(const SDL_NAME(XF86VidModeModeInfo)**)va; |
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
108 |
const SDL_NAME(XF86VidModeModeInfo) *b = *(const SDL_NAME(XF86VidModeModeInfo)**)vb; |
966
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
109 |
if ( a->hdisplay == b->hdisplay ) |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
110 |
return b->vdisplay - a->vdisplay; |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
111 |
else |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
112 |
return b->hdisplay - a->hdisplay; |
0 | 113 |
} |
114 |
#endif |
|
115 |
||
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
116 |
static void get_real_resolution(_THIS, int* w, int* h); |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
117 |
|
0 | 118 |
static void set_best_resolution(_THIS, int width, int height) |
119 |
{ |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
120 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 121 |
if ( use_vidmode ) { |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
122 |
SDL_NAME(XF86VidModeModeLine) mode; |
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
123 |
SDL_NAME(XF86VidModeModeInfo) **modes; |
0 | 124 |
int i; |
125 |
int nmodes; |
|
1768 | 126 |
int best = -1; |
0 | 127 |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
128 |
if ( SDL_NAME(XF86VidModeGetModeLine)(SDL_Display, SDL_Screen, &i, &mode) && |
1768 | 129 |
SDL_NAME(XF86VidModeGetAllModeLines)(SDL_Display,SDL_Screen,&nmodes,&modes) ) { |
637
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
130 |
for ( i = 0; i < nmodes ; i++ ) { |
604
31d3af76488b
Date: Mon, 24 Feb 2003 16:31:25 -0500
Sam Lantinga <slouken@libsdl.org>
parents:
499
diff
changeset
|
131 |
if ( (modes[i]->hdisplay == width) && |
1768 | 132 |
(modes[i]->vdisplay == height) ) { |
133 |
best = i; |
|
134 |
break; |
|
135 |
} |
|
136 |
if ( modes[i]->hdisplay >= width && |
|
137 |
modes[i]->vdisplay >= height ) { |
|
138 |
if ( best < 0 || |
|
139 |
(modes[i]->hdisplay < modes[best]->hdisplay && |
|
140 |
modes[i]->vdisplay <= modes[best]->vdisplay) || |
|
141 |
(modes[i]->vdisplay < modes[best]->vdisplay && |
|
142 |
modes[i]->hdisplay <= modes[best]->hdisplay) ) { |
|
143 |
best = i; |
|
637
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
144 |
} |
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
145 |
} |
0 | 146 |
} |
1768 | 147 |
if ( best >= 0 && |
148 |
((modes[best]->hdisplay != mode.hdisplay) || |
|
149 |
(modes[best]->vdisplay != mode.vdisplay)) ) { |
|
150 |
#ifdef X11MODES_DEBUG |
|
151 |
printf("Best Mode %d: %d x %d @ %d\n", best, |
|
152 |
modes[best]->hdisplay, modes[best]->vdisplay, |
|
153 |
(modes[best]->htotal && modes[best]->vtotal) ? (1000 * modes[best]->dotclock / (modes[best]->htotal * modes[best]->vtotal)) : 0 ); |
|
154 |
#endif |
|
155 |
SDL_NAME(XF86VidModeSwitchToMode)(SDL_Display, SDL_Screen, modes[best]); |
|
0 | 156 |
} |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
157 |
XFree(modes); |
0 | 158 |
} |
159 |
} |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
160 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
161 |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
162 |
/* XiG */ |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
163 |
#if SDL_VIDEO_DRIVER_X11_XME |
1768 | 164 |
if ( use_xme && SDL_modelist ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
165 |
int i; |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
166 |
|
1768 | 167 |
#ifdef X11MODES_DEBUG |
168 |
fprintf(stderr, "XME: set_best_resolution(): w = %d, h = %d\n", |
|
169 |
width, height); |
|
170 |
#endif |
|
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
171 |
for ( i=0; SDL_modelist[i]; ++i ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
172 |
if ( (SDL_modelist[i]->w >= width) && |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
173 |
(SDL_modelist[i]->h >= height) ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
174 |
break; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
175 |
} |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
176 |
} |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
177 |
|
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
178 |
if ( SDL_modelist[i] ) { /* found one, lets try it */ |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
179 |
int w, h; |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
180 |
|
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
181 |
/* check current mode so we can avoid uneccessary mode changes */ |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
182 |
get_real_resolution(this, &w, &h); |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
183 |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
184 |
if ( (SDL_modelist[i]->w != w) || (SDL_modelist[i]->h != h) ) { |
1765 | 185 |
#ifdef X11MODES_DEBUG |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
186 |
fprintf(stderr, "XME: set_best_resolution: " |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
187 |
"XiGMiscChangeResolution: %d %d\n", |
1768 | 188 |
SDL_modelist[i]->w, SDL_modelist[i]->h); |
189 |
#endif |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
190 |
XiGMiscChangeResolution(SDL_Display, |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
191 |
SDL_Screen, |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
192 |
0, /* view */ |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
193 |
SDL_modelist[i]->w, |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
194 |
SDL_modelist[i]->h, |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
195 |
0); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
196 |
XSync(SDL_Display, False); |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
197 |
} |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
198 |
} |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
199 |
} |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
200 |
#endif /* SDL_VIDEO_DRIVER_X11_XME */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
201 |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
202 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
1768 | 203 |
if ( use_xrandr && SDL_modelist ) { |
1765 | 204 |
#ifdef X11MODES_DEBUG |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
205 |
fprintf(stderr, "XRANDR: set_best_resolution(): w = %d, h = %d\n", |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
206 |
width, height); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
207 |
#endif |
1768 | 208 |
int i, nsizes; |
209 |
XRRScreenSize *sizes; |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
210 |
|
1768 | 211 |
/* find the smallest resolution that is at least as big as the user requested */ |
212 |
sizes = XRRConfigSizes(screen_config, &nsizes); |
|
213 |
for ( i = (nsizes-1); i >= 0; i-- ) { |
|
214 |
if ( (SDL_modelist[i]->w >= width) && |
|
215 |
(SDL_modelist[i]->h >= height) ) { |
|
216 |
break; |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
217 |
} |
1768 | 218 |
} |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
219 |
|
1768 | 220 |
if ( i >= 0 && SDL_modelist[i] ) { /* found one, lets try it */ |
221 |
int w, h; |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
222 |
|
1768 | 223 |
/* check current mode so we can avoid uneccessary mode changes */ |
224 |
get_real_resolution(this, &w, &h); |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
225 |
|
1768 | 226 |
if ( (SDL_modelist[i]->w != w) || (SDL_modelist[i]->h != h) ) { |
227 |
int size_id; |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
228 |
|
1765 | 229 |
#ifdef X11MODES_DEBUG |
1768 | 230 |
fprintf(stderr, "XRANDR: set_best_resolution: " |
231 |
"XXRSetScreenConfig: %d %d\n", |
|
232 |
SDL_modelist[i]->w, SDL_modelist[i]->h); |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
233 |
#endif |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
234 |
|
1768 | 235 |
/* find the matching size entry index */ |
236 |
for ( size_id = 0; size_id < nsizes; ++size_id ) { |
|
237 |
if ( (sizes[size_id].width == SDL_modelist[i]->w) && |
|
238 |
(sizes[size_id].height == SDL_modelist[i]->h) ) |
|
239 |
break; |
|
240 |
} |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
241 |
|
1768 | 242 |
XRRSetScreenConfig(SDL_Display, screen_config, SDL_Root, |
243 |
size_id, saved_rotation, CurrentTime); |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
244 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
245 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
246 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
247 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
0 | 248 |
} |
249 |
||
250 |
static void get_real_resolution(_THIS, int* w, int* h) |
|
251 |
{ |
|
1765 | 252 |
#if SDL_VIDEO_DRIVER_X11_XME |
253 |
if ( use_xme ) { |
|
254 |
int ractive; |
|
255 |
XiGMiscResolutionInfo *modelist; |
|
256 |
||
257 |
XiGMiscQueryResolutions(SDL_Display, SDL_Screen, |
|
258 |
0, /* view */ |
|
259 |
&ractive, &modelist); |
|
260 |
*w = modelist[ractive].width; |
|
261 |
*h = modelist[ractive].height; |
|
262 |
#ifdef X11MODES_DEBUG |
|
263 |
fprintf(stderr, "XME: get_real_resolution: w = %d h = %d\n", *w, *h); |
|
264 |
#endif |
|
265 |
XFree(modelist); |
|
266 |
return; |
|
267 |
} |
|
268 |
#endif /* SDL_VIDEO_DRIVER_X11_XME */ |
|
269 |
||
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
270 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 271 |
if ( use_vidmode ) { |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
272 |
SDL_NAME(XF86VidModeModeLine) mode; |
0 | 273 |
int unused; |
274 |
||
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
275 |
if ( SDL_NAME(XF86VidModeGetModeLine)(SDL_Display, SDL_Screen, &unused, &mode) ) { |
0 | 276 |
*w = mode.hdisplay; |
277 |
*h = mode.vdisplay; |
|
278 |
return; |
|
279 |
} |
|
280 |
} |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
281 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
282 |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
283 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
284 |
if ( use_xrandr ) { |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
285 |
int nsizes; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
286 |
XRRScreenSize* sizes; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
287 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
288 |
sizes = XRRConfigSizes(screen_config, &nsizes); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
289 |
if ( nsizes > 0 ) { |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
290 |
int cur_size; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
291 |
Rotation cur_rotation; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
292 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
293 |
cur_size = XRRConfigCurrentConfiguration(screen_config, &cur_rotation); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
294 |
if ( cur_size >= 0 && cur_size < nsizes ) { |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
295 |
*w = sizes[cur_size].width; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
296 |
*h = sizes[cur_size].height; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
297 |
} |
1765 | 298 |
#ifdef X11MODES_DEBUG |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
299 |
fprintf(stderr, "XRANDR: get_real_resolution: w = %d h = %d\n", *w, *h); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
300 |
#endif |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
301 |
return; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
302 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
303 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
304 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
305 |
|
1765 | 306 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
307 |
if ( use_xinerama ) { |
|
308 |
*w = xinerama_info.width; |
|
309 |
*h = xinerama_info.height; |
|
310 |
return; |
|
311 |
} |
|
312 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
|
313 |
||
0 | 314 |
*w = DisplayWidth(SDL_Display, SDL_Screen); |
315 |
*h = DisplayHeight(SDL_Display, SDL_Screen); |
|
316 |
} |
|
317 |
||
318 |
/* Called after mapping a window - waits until the window is mapped */ |
|
319 |
void X11_WaitMapped(_THIS, Window win) |
|
320 |
{ |
|
321 |
XEvent event; |
|
322 |
do { |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
323 |
XMaskEvent(SDL_Display, StructureNotifyMask, &event); |
0 | 324 |
} while ( (event.type != MapNotify) || (event.xmap.event != win) ); |
325 |
} |
|
326 |
||
327 |
/* Called after unmapping a window - waits until the window is unmapped */ |
|
328 |
void X11_WaitUnmapped(_THIS, Window win) |
|
329 |
{ |
|
330 |
XEvent event; |
|
331 |
do { |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
332 |
XMaskEvent(SDL_Display, StructureNotifyMask, &event); |
0 | 333 |
} while ( (event.type != UnmapNotify) || (event.xunmap.event != win) ); |
334 |
} |
|
335 |
||
336 |
static void move_cursor_to(_THIS, int x, int y) |
|
337 |
{ |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
338 |
XWarpPointer(SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y); |
0 | 339 |
} |
340 |
||
341 |
static int add_visual(_THIS, int depth, int class) |
|
342 |
{ |
|
343 |
XVisualInfo vi; |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
344 |
if(XMatchVisualInfo(SDL_Display, SDL_Screen, depth, class, &vi)) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
345 |
int n = this->hidden->nvisuals; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
346 |
this->hidden->visuals[n].depth = vi.depth; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
347 |
this->hidden->visuals[n].visual = vi.visual; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
348 |
this->hidden->nvisuals++; |
0 | 349 |
} |
350 |
return(this->hidden->nvisuals); |
|
351 |
} |
|
352 |
static int add_visual_byid(_THIS, const char *visual_id) |
|
353 |
{ |
|
354 |
XVisualInfo *vi, template; |
|
355 |
int nvis; |
|
356 |
||
357 |
if ( visual_id ) { |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
358 |
SDL_memset(&template, 0, (sizeof template)); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
359 |
template.visualid = SDL_strtol(visual_id, NULL, 0); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
360 |
vi = XGetVisualInfo(SDL_Display, VisualIDMask, &template, &nvis); |
0 | 361 |
if ( vi ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
362 |
int n = this->hidden->nvisuals; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
363 |
this->hidden->visuals[n].depth = vi->depth; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
364 |
this->hidden->visuals[n].visual = vi->visual; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
365 |
this->hidden->nvisuals++; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
366 |
XFree(vi); |
0 | 367 |
} |
368 |
} |
|
369 |
return(this->hidden->nvisuals); |
|
370 |
} |
|
371 |
||
372 |
/* Global for the error handler */ |
|
373 |
int vm_event, vm_error = -1; |
|
374 |
||
1765 | 375 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
376 |
static int CheckXinerama(_THIS, int *major, int *minor) |
|
377 |
{ |
|
378 |
const char *env; |
|
379 |
||
380 |
/* Default the extension not available */ |
|
381 |
*major = *minor = 0; |
|
382 |
||
383 |
/* Allow environment override */ |
|
384 |
env = getenv("SDL_VIDEO_X11_XINERAMA"); |
|
385 |
if ( env && !SDL_atoi(env) ) { |
|
386 |
return 0; |
|
387 |
} |
|
388 |
||
389 |
/* Query the extension version */ |
|
390 |
if ( !SDL_NAME(XineramaQueryExtension)(SDL_Display, major, minor) || |
|
391 |
!SDL_NAME(XineramaIsActive)(SDL_Display) ) { |
|
392 |
return 0; |
|
393 |
} |
|
394 |
return 1; |
|
395 |
} |
|
396 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
|
397 |
||
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
398 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
399 |
static int CheckXRandR(_THIS, int *major, int *minor) |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
400 |
{ |
1765 | 401 |
const char *env; |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
402 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
403 |
/* Default the extension not available */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
404 |
*major = *minor = 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
405 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
406 |
/* Allow environment override */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
407 |
env = getenv("SDL_VIDEO_X11_XRANDR"); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
408 |
if ( env && !SDL_atoi(env) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
409 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
410 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
411 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
412 |
/* This defaults off now, due to KDE window maximize problems */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
413 |
if ( !env ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
414 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
415 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
416 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
417 |
if ( !SDL_X11_HAVE_XRANDR ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
418 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
419 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
420 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
421 |
/* Query the extension version */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
422 |
if ( !XRRQueryVersion(SDL_Display, major, minor) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
423 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
424 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
425 |
return 1; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
426 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
427 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
428 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
429 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
430 |
static int CheckVidMode(_THIS, int *major, int *minor) |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
431 |
{ |
1765 | 432 |
const char *env; |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
433 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
434 |
/* Default the extension not available */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
435 |
*major = *minor = 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
436 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
437 |
/* Allow environment override */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
438 |
env = getenv("SDL_VIDEO_X11_VIDMODE"); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
439 |
if ( env && !SDL_atoi(env) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
440 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
441 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
442 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
443 |
/* Metro-X 4.3.0 and earlier has a broken implementation of |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
444 |
XF86VidModeGetAllModeLines() - it hangs the client. |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
445 |
*/ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
446 |
if ( SDL_strcmp(ServerVendor(SDL_Display), "Metro Link Incorporated") == 0 ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
447 |
FILE *metro_fp; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
448 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
449 |
metro_fp = fopen("/usr/X11R6/lib/X11/Metro/.version", "r"); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
450 |
if ( metro_fp != NULL ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
451 |
int major, minor, patch, version; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
452 |
major = 0; minor = 0; patch = 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
453 |
fscanf(metro_fp, "%d.%d.%d", &major, &minor, &patch); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
454 |
fclose(metro_fp); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
455 |
version = major*100+minor*10+patch; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
456 |
if ( version < 431 ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
457 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
458 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
459 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
460 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
461 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
462 |
/* Query the extension version */ |
1747 | 463 |
vm_error = -1; |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
464 |
if ( !SDL_NAME(XF86VidModeQueryExtension)(SDL_Display, &vm_event, &vm_error) || |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
465 |
!SDL_NAME(XF86VidModeQueryVersion)(SDL_Display, major, minor) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
466 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
467 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
468 |
return 1; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
469 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
470 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
471 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
472 |
#if SDL_VIDEO_DRIVER_X11_XME |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
473 |
static int CheckXME(_THIS, int *major, int *minor) |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
474 |
{ |
1765 | 475 |
const char *env; |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
476 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
477 |
/* Default the extension not available */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
478 |
*major = *minor = 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
479 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
480 |
/* Allow environment override */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
481 |
env = getenv("SDL_VIDEO_X11_VIDMODE"); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
482 |
if ( env && !SDL_atoi(env) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
483 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
484 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
485 |
|
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
486 |
/* Query the extension version */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
487 |
if ( !XiGMiscQueryVersion(SDL_Display, major, minor) ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
488 |
return 0; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
489 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
490 |
return 1; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
491 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
492 |
#endif /* SDL_VIDEO_DRIVER_X11_XME */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
493 |
|
0 | 494 |
int X11_GetVideoModes(_THIS) |
495 |
{ |
|
1765 | 496 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
497 |
int xinerama_major, xinerama_minor; |
|
498 |
#endif |
|
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
499 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
500 |
int xrandr_major, xrandr_minor; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
501 |
int nsizes; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
502 |
XRRScreenSize *sizes; |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
503 |
#endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
504 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
0 | 505 |
int vm_major, vm_minor; |
506 |
int nmodes; |
|
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
507 |
SDL_NAME(XF86VidModeModeInfo) **modes; |
0 | 508 |
#endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
509 |
#if SDL_VIDEO_DRIVER_X11_XME |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
510 |
int xme_major, xme_minor; |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
511 |
int ractive, nummodes; |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
512 |
XiGMiscResolutionInfo *modelist; |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
513 |
#endif |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
514 |
int i, n; |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
515 |
int screen_w; |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
516 |
int screen_h; |
0 | 517 |
|
1765 | 518 |
use_xinerama = 0; |
519 |
use_xrandr = 0; |
|
0 | 520 |
use_vidmode = 0; |
1765 | 521 |
use_xme = 0; |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
522 |
screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
523 |
screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
524 |
|
1765 | 525 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
526 |
/* Query Xinerama extention */ |
|
527 |
if ( CheckXinerama(this, &xinerama_major, &xinerama_minor) ) { |
|
528 |
/* Find out which screen is the desired one */ |
|
4207 | 529 |
int desired = -1; |
1765 | 530 |
int screens; |
531 |
int w, h; |
|
532 |
SDL_NAME(XineramaScreenInfo) *xinerama; |
|
533 |
||
534 |
const char *variable = SDL_getenv("SDL_VIDEO_FULLSCREEN_HEAD"); |
|
535 |
if ( variable ) { |
|
536 |
desired = SDL_atoi(variable); |
|
537 |
} |
|
538 |
#ifdef X11MODES_DEBUG |
|
539 |
printf("X11 detected Xinerama:\n"); |
|
540 |
#endif |
|
541 |
xinerama = SDL_NAME(XineramaQueryScreens)(SDL_Display, &screens); |
|
542 |
for ( i = 0; i < screens; i++ ) { |
|
543 |
#ifdef X11MODES_DEBUG |
|
544 |
printf("xinerama %d: %dx%d+%d+%d\n", |
|
545 |
xinerama[i].screen_number, |
|
546 |
xinerama[i].width, xinerama[i].height, |
|
547 |
xinerama[i].x_org, xinerama[i].y_org); |
|
548 |
#endif |
|
549 |
if ( xinerama[i].screen_number == desired ) { |
|
550 |
use_xinerama = 1; |
|
551 |
xinerama_info = xinerama[i]; |
|
552 |
} |
|
553 |
} |
|
554 |
XFree(xinerama); |
|
555 |
||
556 |
if ( use_xinerama ) { |
|
557 |
SDL_modelist = (SDL_Rect **)SDL_malloc(3*sizeof(SDL_Rect *)); |
|
558 |
if ( !SDL_modelist ) { |
|
559 |
SDL_OutOfMemory(); |
|
560 |
return -1; |
|
561 |
} |
|
562 |
||
563 |
/* Add the full xinerama mode */ |
|
564 |
n = 0; |
|
565 |
w = xinerama_info.width; |
|
566 |
h = xinerama_info.height; |
|
567 |
if ( screen_w > w || screen_h > h) { |
|
568 |
SDL_modelist[n] = (SDL_Rect *)SDL_malloc(sizeof(SDL_Rect)); |
|
569 |
if ( SDL_modelist[n] ) { |
|
570 |
SDL_modelist[n]->x = 0; |
|
571 |
SDL_modelist[n]->y = 0; |
|
572 |
SDL_modelist[n]->w = screen_w; |
|
573 |
SDL_modelist[n]->h = screen_h; |
|
574 |
++n; |
|
575 |
} |
|
576 |
} |
|
577 |
||
578 |
/* Add the head xinerama mode */ |
|
579 |
SDL_modelist[n] = (SDL_Rect *)SDL_malloc(sizeof(SDL_Rect)); |
|
580 |
if ( SDL_modelist[n] ) { |
|
581 |
SDL_modelist[n]->x = 0; |
|
582 |
SDL_modelist[n]->y = 0; |
|
583 |
SDL_modelist[n]->w = w; |
|
584 |
SDL_modelist[n]->h = h; |
|
585 |
++n; |
|
586 |
} |
|
587 |
SDL_modelist[n] = NULL; |
|
588 |
} |
|
589 |
} |
|
590 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
|
591 |
||
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
592 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
593 |
/* XRandR */ |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
594 |
/* require at least XRandR v1.0 (arbitrary) */ |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
595 |
if ( CheckXRandR(this, &xrandr_major, &xrandr_minor) && (xrandr_major >= 1) ) |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
596 |
{ |
1765 | 597 |
#ifdef X11MODES_DEBUG |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
598 |
fprintf(stderr, "XRANDR: XRRQueryVersion: V%d.%d\n", |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
599 |
xrandr_major, xrandr_minor); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
600 |
#endif |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
601 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
602 |
/* save the screen configuration since we must reference it |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
603 |
each time we toggle modes. |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
604 |
*/ |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
605 |
screen_config = XRRGetScreenInfo(SDL_Display, SDL_Root); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
606 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
607 |
/* retrieve the list of resolution */ |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
608 |
sizes = XRRConfigSizes(screen_config, &nsizes); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
609 |
if (nsizes > 0) { |
1765 | 610 |
if ( SDL_modelist ) { |
611 |
for ( i = 0; SDL_modelist[i]; ++i ) { |
|
612 |
SDL_free(SDL_modelist[i]); |
|
613 |
} |
|
614 |
SDL_free(SDL_modelist); |
|
615 |
} |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
616 |
SDL_modelist = (SDL_Rect **)malloc((nsizes+1)*sizeof(SDL_Rect *)); |
1765 | 617 |
if ( !SDL_modelist ) { |
618 |
SDL_OutOfMemory(); |
|
619 |
return -1; |
|
620 |
} |
|
621 |
for ( i=0; i < nsizes; i++ ) { |
|
622 |
if ((SDL_modelist[i] = |
|
623 |
(SDL_Rect *)malloc(sizeof(SDL_Rect))) == NULL) |
|
624 |
break; |
|
625 |
#ifdef X11MODES_DEBUG |
|
626 |
fprintf(stderr, "XRANDR: mode = %4d, w = %4d, h = %4d\n", |
|
627 |
i, sizes[i].width, sizes[i].height); |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
628 |
#endif |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
629 |
|
1765 | 630 |
SDL_modelist[i]->x = 0; |
631 |
SDL_modelist[i]->y = 0; |
|
632 |
SDL_modelist[i]->w = sizes[i].width; |
|
633 |
SDL_modelist[i]->h = sizes[i].height; |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
634 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
635 |
} |
1765 | 636 |
/* sort the mode list descending as SDL expects */ |
1771 | 637 |
SDL_qsort(SDL_modelist, nsizes, sizeof *SDL_modelist, cmpmodelist); |
1765 | 638 |
SDL_modelist[i] = NULL; /* terminator */ |
639 |
||
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
640 |
use_xrandr = xrandr_major * 100 + xrandr_minor; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
641 |
saved_size_id = XRRConfigCurrentConfiguration(screen_config, &saved_rotation); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
642 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
643 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
644 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
645 |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
646 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
647 |
/* XVidMode */ |
1765 | 648 |
if ( !use_xrandr && |
1863 | 649 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
4207 | 650 |
(!use_xinerama || xinerama_info.screen_number == -1) && |
1863 | 651 |
#endif |
1765 | 652 |
CheckVidMode(this, &vm_major, &vm_minor) && |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
653 |
SDL_NAME(XF86VidModeGetAllModeLines)(SDL_Display, SDL_Screen,&nmodes,&modes) ) |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
654 |
{ |
1765 | 655 |
#ifdef X11MODES_DEBUG |
1768 | 656 |
printf("VidMode modes: (unsorted)\n"); |
637
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
657 |
for ( i = 0; i < nmodes; ++i ) { |
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
658 |
printf("Mode %d: %d x %d @ %d\n", i, |
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
659 |
modes[i]->hdisplay, modes[i]->vdisplay, |
1765 | 660 |
(modes[i]->htotal && modes[i]->vtotal) ? (1000 * modes[i]->dotclock / (modes[i]->htotal * modes[i]->vtotal)) : 0 ); |
637
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
661 |
} |
6862d4294870
te: 27 Jun 2003 21:16:01 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
614
diff
changeset
|
662 |
#endif |
1765 | 663 |
if ( SDL_modelist ) { |
664 |
for ( i = 0; SDL_modelist[i]; ++i ) { |
|
665 |
SDL_free(SDL_modelist[i]); |
|
666 |
} |
|
667 |
SDL_free(SDL_modelist); |
|
668 |
} |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
669 |
SDL_modelist = (SDL_Rect **)SDL_malloc((nmodes+2)*sizeof(SDL_Rect *)); |
1765 | 670 |
if ( !SDL_modelist ) { |
671 |
SDL_OutOfMemory(); |
|
672 |
return -1; |
|
673 |
} |
|
674 |
SDL_qsort(modes, nmodes, sizeof *modes, cmpmodes); |
|
675 |
n = 0; |
|
676 |
for ( i=0; i<nmodes; ++i ) { |
|
677 |
int w, h; |
|
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
678 |
|
1765 | 679 |
/* Eliminate duplicate modes with different refresh rates */ |
680 |
if ( i > 0 && |
|
681 |
modes[i]->hdisplay == modes[i-1]->hdisplay && |
|
682 |
modes[i]->vdisplay == modes[i-1]->vdisplay ) { |
|
683 |
continue; |
|
684 |
} |
|
1318
f95502c6fc72
Eliminate duplicate modes with different refresh rates
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
685 |
|
1765 | 686 |
/* Check to see if we should add the screen size (Xinerama) */ |
687 |
w = modes[i]->hdisplay; |
|
688 |
h = modes[i]->vdisplay; |
|
689 |
if ( (screen_w * screen_h) >= (w * h) ) { |
|
690 |
if ( (screen_w != w) || (screen_h != h) ) { |
|
691 |
SDL_modelist[n] = (SDL_Rect *)SDL_malloc(sizeof(SDL_Rect)); |
|
692 |
if ( SDL_modelist[n] ) { |
|
693 |
SDL_modelist[n]->x = 0; |
|
694 |
SDL_modelist[n]->y = 0; |
|
695 |
SDL_modelist[n]->w = screen_w; |
|
696 |
SDL_modelist[n]->h = screen_h; |
|
697 |
++n; |
|
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
698 |
} |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
699 |
} |
1765 | 700 |
screen_w = 0; |
701 |
screen_h = 0; |
|
702 |
} |
|
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
703 |
|
1765 | 704 |
/* Add the size from the video mode list */ |
705 |
SDL_modelist[n] = (SDL_Rect *)SDL_malloc(sizeof(SDL_Rect)); |
|
706 |
if ( SDL_modelist[n] == NULL ) { |
|
707 |
break; |
|
0 | 708 |
} |
1765 | 709 |
SDL_modelist[n]->x = 0; |
710 |
SDL_modelist[n]->y = 0; |
|
711 |
SDL_modelist[n]->w = w; |
|
712 |
SDL_modelist[n]->h = h; |
|
713 |
++n; |
|
0 | 714 |
} |
1765 | 715 |
SDL_modelist[n] = NULL; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
716 |
XFree(modes); |
0 | 717 |
|
100
a1c973c35fef
Fixed using the video mode extension on older servers
Sam Lantinga <slouken@lokigames.com>
parents:
98
diff
changeset
|
718 |
use_vidmode = vm_major * 100 + vm_minor; |
0 | 719 |
save_mode(this); |
720 |
} |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
721 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
0 | 722 |
|
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
723 |
#if SDL_VIDEO_DRIVER_X11_XME |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
724 |
/* XiG */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
725 |
modelist = NULL; |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
726 |
/* first lets make sure we have the extension, and it's at least v2.0 */ |
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
727 |
if ( CheckXME(this, &xme_major, &xme_minor) && xme_major >= 2 && |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
728 |
(nummodes = XiGMiscQueryResolutions(SDL_Display, SDL_Screen, |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
729 |
0, /* view */ |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
730 |
&ractive, &modelist)) > 1 ) |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
731 |
{ /* then we actually have some */ |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
732 |
int j; |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
733 |
|
1765 | 734 |
/* We get the list already sorted in descending order. |
735 |
We'll copy it in reverse order so SDL is happy */ |
|
736 |
#ifdef X11MODES_DEBUG |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
737 |
fprintf(stderr, "XME: nummodes = %d, active mode = %d\n", |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
738 |
nummodes, ractive); |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
739 |
#endif |
1765 | 740 |
if ( SDL_modelist ) { |
741 |
for ( i = 0; SDL_modelist[i]; ++i ) { |
|
742 |
SDL_free(SDL_modelist[i]); |
|
743 |
} |
|
744 |
SDL_free(SDL_modelist); |
|
745 |
} |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
746 |
SDL_modelist = (SDL_Rect **)SDL_malloc((nummodes+1)*sizeof(SDL_Rect *)); |
1765 | 747 |
if ( !SDL_modelist ) { |
748 |
SDL_OutOfMemory(); |
|
749 |
return -1; |
|
750 |
} |
|
751 |
for ( i=0, j=nummodes-1; j>=0; i++, j-- ) { |
|
752 |
if ((SDL_modelist[i] = |
|
753 |
(SDL_Rect *)SDL_malloc(sizeof(SDL_Rect))) == NULL) |
|
754 |
break; |
|
755 |
#ifdef X11MODES_DEBUG |
|
756 |
fprintf(stderr, "XME: mode = %4d, w = %4d, h = %4d\n", |
|
757 |
i, modelist[i].width, modelist[i].height); |
|
758 |
#endif |
|
759 |
||
760 |
SDL_modelist[i]->x = 0; |
|
761 |
SDL_modelist[i]->y = 0; |
|
762 |
SDL_modelist[i]->w = modelist[j].width; |
|
763 |
SDL_modelist[i]->h = modelist[j].height; |
|
764 |
||
765 |
} |
|
766 |
SDL_modelist[i] = NULL; /* terminator */ |
|
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
767 |
|
1765 | 768 |
use_xme = xme_major * 100 + xme_minor; |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
769 |
saved_res = modelist[ractive]; /* save the current resolution */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
770 |
} |
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
771 |
if ( modelist ) { |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
772 |
XFree(modelist); |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
773 |
} |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
774 |
#endif /* SDL_VIDEO_DRIVER_X11_XME */ |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
775 |
|
0 | 776 |
{ |
1641 | 777 |
/* It's interesting to note that if we allow 32 bit depths, |
778 |
we get a visual with an alpha mask on composite servers. |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
779 |
static int depth_list[] = { 32, 24, 16, 15, 8 }; |
1641 | 780 |
*/ |
781 |
static int depth_list[] = { 24, 16, 15, 8 }; |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
782 |
int j, np; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
783 |
int use_directcolor = 1; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
784 |
XPixmapFormatValues *pf; |
0 | 785 |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
786 |
/* Search for the visuals in deepest-first order, so that the first |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
787 |
will be the richest one */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
788 |
if ( SDL_getenv("SDL_VIDEO_X11_NODIRECTCOLOR") ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
789 |
use_directcolor = 0; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
790 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
791 |
this->hidden->nvisuals = 0; |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
792 |
if ( ! add_visual_byid(this, SDL_getenv("SDL_VIDEO_X11_VISUALID")) ) { |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
793 |
for ( i=0; i<SDL_arraysize(depth_list); ++i ) { |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
794 |
if ( depth_list[i] > 8 ) { |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
795 |
if ( use_directcolor ) { |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
796 |
add_visual(this, depth_list[i], DirectColor); |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
797 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
798 |
add_visual(this, depth_list[i], TrueColor); |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
799 |
} else { |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
800 |
add_visual(this, depth_list[i], PseudoColor); |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
801 |
add_visual(this, depth_list[i], StaticColor); |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
802 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
803 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
804 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
805 |
if ( this->hidden->nvisuals == 0 ) { |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
806 |
SDL_SetError("Found no sufficiently capable X11 visuals"); |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
807 |
return -1; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
808 |
} |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
809 |
|
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
810 |
/* look up the pixel quantum for each depth */ |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
811 |
pf = XListPixmapFormats(SDL_Display, &np); |
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
812 |
for(i = 0; i < this->hidden->nvisuals; i++) { |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
813 |
int d = this->hidden->visuals[i].depth; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
814 |
for(j = 0; j < np; j++) |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
815 |
if(pf[j].depth == d) |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
816 |
break; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
817 |
this->hidden->visuals[i].bpp = j < np ? pf[j].bits_per_pixel : d; |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
818 |
} |
0 | 819 |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
820 |
XFree(pf); |
0 | 821 |
} |
822 |
||
823 |
if ( SDL_modelist == NULL ) { |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
824 |
SDL_modelist = (SDL_Rect **)SDL_malloc((1+1)*sizeof(SDL_Rect *)); |
1765 | 825 |
if ( !SDL_modelist ) { |
826 |
SDL_OutOfMemory(); |
|
827 |
return -1; |
|
0 | 828 |
} |
1765 | 829 |
n = 0; |
830 |
SDL_modelist[n] = (SDL_Rect *)SDL_malloc(sizeof(SDL_Rect)); |
|
831 |
if ( SDL_modelist[n] ) { |
|
832 |
SDL_modelist[n]->x = 0; |
|
833 |
SDL_modelist[n]->y = 0; |
|
834 |
SDL_modelist[n]->w = screen_w; |
|
835 |
SDL_modelist[n]->h = screen_h; |
|
836 |
++n; |
|
837 |
} |
|
838 |
SDL_modelist[n] = NULL; |
|
0 | 839 |
} |
840 |
||
1765 | 841 |
#ifdef X11MODES_DEBUG |
842 |
if ( use_xinerama ) { |
|
843 |
printf("Xinerama is enabled\n"); |
|
844 |
} |
|
845 |
||
1746
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
846 |
if ( use_xrandr ) { |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
847 |
printf("XRandR is enabled\n"); |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
848 |
} |
a0ddae8b43cf
Disable the XRandR extension by default, since KDE maximizes windows which are larger than the new resolution, and then doesn't restore their size and positition when the old resolution is restored.
Sam Lantinga <slouken@libsdl.org>
parents:
1641
diff
changeset
|
849 |
|
0 | 850 |
if ( use_vidmode ) { |
1768 | 851 |
printf("VidMode is enabled\n"); |
0 | 852 |
} |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
853 |
|
1765 | 854 |
if ( use_xme ) { |
1766 | 855 |
printf("Xi Graphics XME fullscreen is enabled\n"); |
1765 | 856 |
} |
242
4bcb29d3769c
Added support for Xi Graphics XME fullscreen extension
Sam Lantinga <slouken@libsdl.org>
parents:
230
diff
changeset
|
857 |
|
0 | 858 |
if ( SDL_modelist ) { |
227
24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
Sam Lantinga <slouken@libsdl.org>
parents:
100
diff
changeset
|
859 |
printf("X11 video mode list:\n"); |
0 | 860 |
for ( i=0; SDL_modelist[i]; ++i ) { |
227
24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
Sam Lantinga <slouken@libsdl.org>
parents:
100
diff
changeset
|
861 |
printf("\t%dx%d\n", SDL_modelist[i]->w, SDL_modelist[i]->h); |
0 | 862 |
} |
863 |
} |
|
1765 | 864 |
#endif /* X11MODES_DEBUG */ |
227
24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
Sam Lantinga <slouken@libsdl.org>
parents:
100
diff
changeset
|
865 |
|
0 | 866 |
return 0; |
867 |
} |
|
868 |
||
869 |
int X11_SupportedVisual(_THIS, SDL_PixelFormat *format) |
|
870 |
{ |
|
871 |
int i; |
|
872 |
for(i = 0; i < this->hidden->nvisuals; i++) |
|
499
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
873 |
if(this->hidden->visuals[i].bpp == format->BitsPerPixel) |
f480ecd70499
Added an aborted try at making fullscreen work on Xinerama screen != 0
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
874 |
return 1; |
0 | 875 |
return 0; |
876 |
} |
|
877 |
||
878 |
SDL_Rect **X11_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) |
|
879 |
{ |
|
880 |
if ( X11_SupportedVisual(this, format) ) { |
|
881 |
if ( flags & SDL_FULLSCREEN ) { |
|
882 |
return(SDL_modelist); |
|
883 |
} else { |
|
884 |
return((SDL_Rect **)-1); |
|
885 |
} |
|
886 |
} else { |
|
887 |
return((SDL_Rect **)0); |
|
888 |
} |
|
889 |
} |
|
890 |
||
891 |
void X11_FreeVideoModes(_THIS) |
|
892 |
{ |
|
893 |
int i; |
|
894 |
||
895 |
if ( SDL_modelist ) { |
|
896 |
for ( i=0; SDL_modelist[i]; ++i ) { |
|
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
897 |
SDL_free(SDL_modelist[i]); |
0 | 898 |
} |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
899 |
SDL_free(SDL_modelist); |
0 | 900 |
SDL_modelist = NULL; |
901 |
} |
|
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
902 |
|
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
903 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
904 |
/* Free the Xrandr screen configuration */ |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
905 |
if ( screen_config ) { |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
906 |
XRRFreeScreenConfigInfo(screen_config); |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
907 |
screen_config = NULL; |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
908 |
} |
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1575
diff
changeset
|
909 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
0 | 910 |
} |
911 |
||
912 |
int X11_ResizeFullScreen(_THIS) |
|
913 |
{ |
|
1765 | 914 |
int x = 0, y = 0; |
0 | 915 |
int real_w, real_h; |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
916 |
int screen_w; |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
917 |
int screen_h; |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
918 |
|
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
919 |
screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
920 |
screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
0 | 921 |
|
1863 | 922 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
1765 | 923 |
if ( use_xinerama && |
924 |
window_w <= xinerama_info.width && |
|
925 |
window_h <= xinerama_info.height ) { |
|
926 |
x = xinerama_info.x_org; |
|
927 |
y = xinerama_info.y_org; |
|
928 |
} |
|
1863 | 929 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
930 |
||
0 | 931 |
if ( currently_fullscreen ) { |
932 |
/* Switch resolution and cover it with the FSwindow */ |
|
227
24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
Sam Lantinga <slouken@libsdl.org>
parents:
100
diff
changeset
|
933 |
move_cursor_to(this, x, y); |
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
934 |
set_best_resolution(this, window_w, window_h); |
227
24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
Sam Lantinga <slouken@libsdl.org>
parents:
100
diff
changeset
|
935 |
move_cursor_to(this, x, y); |
0 | 936 |
get_real_resolution(this, &real_w, &real_h); |
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
937 |
if ( window_w > real_w ) { |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
938 |
real_w = MAX(real_w, screen_w); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
939 |
} |
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
940 |
if ( window_h > real_h ) { |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
941 |
real_h = MAX(real_h, screen_h); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
942 |
} |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
943 |
XMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h); |
0 | 944 |
move_cursor_to(this, real_w/2, real_h/2); |
945 |
||
946 |
/* Center and reparent the drawing window */ |
|
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
947 |
x = (real_w - window_w)/2; |
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
948 |
y = (real_h - window_h)/2; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
949 |
XReparentWindow(SDL_Display, SDL_Window, FSwindow, x, y); |
0 | 950 |
/* FIXME: move the mouse to the old relative location */ |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
951 |
XSync(SDL_Display, True); /* Flush spurious mode change events */ |
0 | 952 |
} |
953 |
return(1); |
|
954 |
} |
|
955 |
||
956 |
void X11_QueueEnterFullScreen(_THIS) |
|
957 |
{ |
|
958 |
switch_waiting = 0x01 | SDL_FULLSCREEN; |
|
959 |
switch_time = SDL_GetTicks() + 1500; |
|
960 |
#if 0 /* This causes a BadMatch error if the window is iconified (not needed) */ |
|
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
961 |
XSetInputFocus(SDL_Display, WMwindow, RevertToNone, CurrentTime); |
0 | 962 |
#endif |
963 |
} |
|
964 |
||
965 |
int X11_EnterFullScreen(_THIS) |
|
966 |
{ |
|
967 |
int okay; |
|
968 |
#if 0 |
|
969 |
Window tmpwin, *windows; |
|
970 |
int i, nwindows; |
|
971 |
#endif |
|
1765 | 972 |
int x = 0, y = 0; |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
973 |
int real_w, real_h; |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
974 |
int screen_w; |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
975 |
int screen_h; |
0 | 976 |
|
977 |
okay = 1; |
|
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
978 |
if ( currently_fullscreen ) { |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
979 |
return(okay); |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
980 |
} |
0 | 981 |
|
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
982 |
/* Ungrab the input so that we can move the mouse around */ |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
983 |
X11_GrabInputNoLock(this, SDL_GRAB_OFF); |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
984 |
|
1863 | 985 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
1765 | 986 |
if ( use_xinerama && |
987 |
window_w <= xinerama_info.width && |
|
988 |
window_h <= xinerama_info.height ) { |
|
989 |
x = xinerama_info.x_org; |
|
990 |
y = xinerama_info.y_org; |
|
991 |
} |
|
1863 | 992 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
993 |
||
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
994 |
/* Map the fullscreen window to blank the screen */ |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
995 |
screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
996 |
screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
997 |
get_real_resolution(this, &real_w, &real_h); |
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
998 |
if ( window_w > real_w ) { |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
999 |
real_w = MAX(real_w, screen_w); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
1000 |
} |
1545
8d9bb0cf2c2a
Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
1001 |
if ( window_h > real_h ) { |
230
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
1002 |
real_h = MAX(real_h, screen_h); |
275a934573a7
Greatly improved Xinerama video mode support
Sam Lantinga <slouken@libsdl.org>
parents:
227
diff
changeset
|
1003 |
} |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1004 |
XMoveResizeWindow(SDL_Display, FSwindow, |
1765 | 1005 |
x, y, real_w, real_h); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1006 |
XMapRaised(SDL_Display, FSwindow); |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1007 |
X11_WaitMapped(this, FSwindow); |
0 | 1008 |
|
1009 |
#if 0 /* This seems to break WindowMaker in focus-follows-mouse mode */ |
|
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1010 |
/* Make sure we got to the top of the window stack */ |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1011 |
if ( XQueryTree(SDL_Display, SDL_Root, &tmpwin, &tmpwin, |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1012 |
&windows, &nwindows) && windows ) { |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1013 |
/* If not, try to put us there - if fail... oh well */ |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1014 |
if ( windows[nwindows-1] != FSwindow ) { |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1015 |
tmpwin = windows[nwindows-1]; |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1016 |
for ( i=0; i<nwindows; ++i ) { |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1017 |
if ( windows[i] == FSwindow ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1318
diff
changeset
|
1018 |
SDL_memcpy(&windows[i], &windows[i+1], |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1019 |
(nwindows-i-1)*sizeof(windows[i])); |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1020 |
break; |
0 | 1021 |
} |
1022 |
} |
|
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1023 |
windows[nwindows-1] = FSwindow; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1024 |
XRestackWindows(SDL_Display, windows, nwindows); |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1025 |
XSync(SDL_Display, False); |
0 | 1026 |
} |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1027 |
XFree(windows); |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1028 |
} |
0 | 1029 |
#else |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1545
diff
changeset
|
1030 |
XRaiseWindow(SDL_Display, FSwindow); |
0 | 1031 |
#endif |
1032 |
||
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
1033 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1034 |
/* Save the current video mode */ |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1035 |
if ( use_vidmode ) { |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
1036 |
SDL_NAME(XF86VidModeLockModeSwitch)(SDL_Display, SDL_Screen, True); |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1037 |
} |
0 | 1038 |
#endif |
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1039 |
currently_fullscreen = 1; |
0 | 1040 |
|
98
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1041 |
/* Set the new resolution */ |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1042 |
okay = X11_ResizeFullScreen(this); |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1043 |
if ( ! okay ) { |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slouken@lokigames.com>
parents:
91
diff
changeset
|
1044 |
X11_LeaveFullScreen(this); |
8a5aff5c1294
Fixed some problems with the fullscreen code. Wooo. :)
Sam Lantinga <slo |