author | Sam Lantinga <slouken@libsdl.org> |
Wed, 03 Oct 2012 19:24:11 -0700 | |
changeset 6550 | 191f00a080ba |
parent 6549 | db16b819e1d1 |
child 6551 | b0679a0d5751 |
permissions | -rw-r--r-- |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 |
/* |
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
2 |
Simple DirectMedia Layer |
6138 | 3 |
Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org> |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
5 |
This software is provided 'as-is', without any express or implied |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
6 |
warranty. In no event will the authors be held liable for any damages |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
7 |
arising from the use of this software. |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
9 |
Permission is granted to anyone to use this software for any purpose, |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
10 |
including commercial applications, and to alter it and redistribute it |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
11 |
freely, subject to the following restrictions: |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
13 |
1. The origin of this software must not be misrepresented; you must not |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
14 |
claim that you wrote the original software. If you use this software |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
15 |
in a product, an acknowledgment in the product documentation would be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
16 |
appreciated but is not required. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
17 |
2. Altered source versions must be plainly marked as such, and must not be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
18 |
misrepresented as being the original software. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5481
diff
changeset
|
19 |
3. This notice may not be removed or altered from any source distribution. |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 |
*/ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 |
#include "SDL_config.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
|
5481
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
23 |
#if SDL_VIDEO_DRIVER_X11 |
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
24 |
|
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
25 |
#include "SDL_hints.h" |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
#include "SDL_x11video.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
|
6538
05cf19d1eb53
Fixed compile error - had work in progress in there.
Sam Lantinga <slouken@libsdl.org>
parents:
6537
diff
changeset
|
28 |
/*#define X11MODES_DEBUG*/ |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
static int |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
get_visualinfo(Display * display, int screen, XVisualInfo * vinfo) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
const char *visual_id = SDL_getenv("SDL_VIDEO_X11_VISUALID"); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 |
int depth; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 |
/* Look for an exact visual, if requested */ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 |
if (visual_id) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 |
XVisualInfo *vi, template; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
int nvis; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
SDL_zero(template); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
template.visualid = SDL_strtol(visual_id, NULL, 0); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 |
vi = XGetVisualInfo(display, VisualIDMask, &template, &nvis); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 |
if (vi) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 |
*vinfo = *vi; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
XFree(vi); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 |
depth = DefaultDepth(display, screen); |
5466 | 52 |
if ((X11_UseDirectColorVisuals() && |
53 |
XMatchVisualInfo(display, screen, depth, DirectColor, vinfo)) || |
|
54 |
XMatchVisualInfo(display, screen, depth, TrueColor, vinfo) || |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
XMatchVisualInfo(display, screen, depth, PseudoColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 |
XMatchVisualInfo(display, screen, depth, StaticColor, vinfo)) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
return -1; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 |
|
5182
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
62 |
int |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
63 |
X11_GetVisualInfoFromVisual(Display * display, Visual * visual, XVisualInfo * vinfo) |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
64 |
{ |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
65 |
XVisualInfo *vi; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
66 |
int nvis; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
67 |
|
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
68 |
vinfo->visualid = XVisualIDFromVisual(visual); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
69 |
vi = XGetVisualInfo(display, VisualIDMask, vinfo, &nvis); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
70 |
if (vi) { |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
71 |
*vinfo = *vi; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
72 |
XFree(vi); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
73 |
return 0; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
74 |
} |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
75 |
return -1; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
76 |
} |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
77 |
|
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
78 |
Uint32 |
2874 | 79 |
X11_GetPixelFormatFromVisualInfo(Display * display, XVisualInfo * vinfo) |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
80 |
{ |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
81 |
if (vinfo->class == DirectColor || vinfo->class == TrueColor) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
82 |
int bpp; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
83 |
Uint32 Rmask, Gmask, Bmask, Amask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
84 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
85 |
Rmask = vinfo->visual->red_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
86 |
Gmask = vinfo->visual->green_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
87 |
Bmask = vinfo->visual->blue_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
88 |
if (vinfo->depth == 32) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
89 |
Amask = (0xFFFFFFFF & ~(Rmask | Gmask | Bmask)); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
90 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
91 |
Amask = 0; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
92 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
93 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
94 |
bpp = vinfo->depth; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
95 |
if (bpp == 24) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
96 |
int i, n; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
97 |
XPixmapFormatValues *p = XListPixmapFormats(display, &n); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
98 |
if (p) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
99 |
for (i = 0; i < n; ++i) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
100 |
if (p[i].depth == 24) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
101 |
bpp = p[i].bits_per_pixel; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
102 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
103 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
104 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
105 |
XFree(p); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
106 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
107 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
108 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
109 |
return SDL_MasksToPixelFormatEnum(bpp, Rmask, Gmask, Bmask, Amask); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
110 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
111 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
112 |
if (vinfo->class == PseudoColor || vinfo->class == StaticColor) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
113 |
switch (vinfo->depth) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
114 |
case 8: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
115 |
return SDL_PIXELTYPE_INDEX8; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
116 |
case 4: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
117 |
if (BitmapBitOrder(display) == LSBFirst) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
118 |
return SDL_PIXELFORMAT_INDEX4LSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
119 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
120 |
return SDL_PIXELFORMAT_INDEX4MSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
121 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
122 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
123 |
case 1: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
124 |
if (BitmapBitOrder(display) == LSBFirst) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
125 |
return SDL_PIXELFORMAT_INDEX1LSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
126 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
127 |
return SDL_PIXELFORMAT_INDEX1MSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
128 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
129 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
130 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
131 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
132 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
133 |
return SDL_PIXELFORMAT_UNKNOWN; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
134 |
} |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
136 |
/* Global for the error handler */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
137 |
int vm_event, vm_error = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
138 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
139 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
140 |
static SDL_bool |
2874 | 141 |
CheckXinerama(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
142 |
{ |
6027
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
143 |
int event_base = 0; |
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
144 |
int error_base = 0; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
145 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
146 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
147 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
148 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
149 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
150 |
/* Allow environment override */ |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
151 |
env = SDL_GetHint(SDL_HINT_VIDEO_X11_XINERAMA); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
152 |
if (env && !SDL_atoi(env)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
153 |
#ifdef X11MODES_DEBUG |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
154 |
printf("Xinerama disabled due to hint\n"); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
155 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
156 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
157 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
158 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
159 |
if (!SDL_X11_HAVE_XINERAMA) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
160 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
161 |
printf("Xinerama support not available\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
162 |
#endif |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
163 |
return SDL_FALSE; |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
164 |
} |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
165 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
166 |
/* Query the extension version */ |
6027
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
167 |
if (!XineramaQueryExtension(display, &event_base, &error_base) || |
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
168 |
!XineramaQueryVersion(display, major, minor) || |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
169 |
!XineramaIsActive(display)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
170 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
171 |
printf("Xinerama not active on the display\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
172 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
173 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
174 |
} |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
175 |
#ifdef X11MODES_DEBUG |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
176 |
printf("Xinerama available at version %d.%d!\n", *major, *minor); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
177 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
178 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
179 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
180 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
181 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
182 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
183 |
static SDL_bool |
2874 | 184 |
CheckXRandR(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
185 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
186 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
187 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
188 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
189 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
190 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
191 |
/* Allow environment override */ |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
192 |
env = SDL_GetHint(SDL_HINT_VIDEO_X11_XRANDR); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
193 |
if (env && !SDL_atoi(env)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
194 |
#ifdef X11MODES_DEBUG |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
195 |
printf("XRandR disabled due to hint\n"); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
196 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
197 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
198 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
199 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
200 |
if (!SDL_X11_HAVE_XRANDR) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
201 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
202 |
printf("XRandR support not available\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
203 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
204 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
205 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
206 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
207 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
208 |
if (!XRRQueryVersion(display, major, minor)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
209 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
210 |
printf("XRandR not active on the display\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
211 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
212 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
213 |
} |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
214 |
#ifdef X11MODES_DEBUG |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
215 |
printf("XRandR available at version %d.%d!\n", *major, *minor); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
216 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
217 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
218 |
} |
6537
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
219 |
|
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
220 |
#define XRANDR_ROTATION_LEFT (1 << 1) |
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
221 |
#define XRANDR_ROTATION_RIGHT (1 << 3) |
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
222 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
223 |
static int |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
224 |
CalculateXRandRRefreshRate(const XRRModeInfo *info) |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
225 |
{ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
226 |
return (info->hTotal |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
227 |
&& info->vTotal) ? (1000 * info->dotClock / (info->hTotal * |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
228 |
info->vTotal)) : 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
229 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
230 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
231 |
static SDL_bool |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
232 |
SetXRandRModeInfo(Display *display, XRRScreenResources *res, XRROutputInfo *output_info, |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
233 |
RRMode modeID, SDL_DisplayMode *mode) |
6537
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
234 |
{ |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
235 |
int i; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
236 |
for (i = 0; i < res->nmode; ++i) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
237 |
if (res->modes[i].id == modeID) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
238 |
XRRCrtcInfo *crtc; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
239 |
Rotation rotation = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
240 |
const XRRModeInfo *info = &res->modes[i]; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
241 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
242 |
crtc = XRRGetCrtcInfo(display, res, output_info->crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
243 |
if (crtc) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
244 |
rotation = crtc->rotation; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
245 |
XRRFreeCrtcInfo(crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
246 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
247 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
248 |
if (rotation & (XRANDR_ROTATION_LEFT|XRANDR_ROTATION_RIGHT)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
249 |
mode->w = info->height; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
250 |
mode->h = info->width; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
251 |
} else { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
252 |
mode->w = info->width; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
253 |
mode->h = info->height; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
254 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
255 |
mode->refresh_rate = CalculateXRandRRefreshRate(info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
256 |
((SDL_DisplayModeData*)mode->driverdata)->xrandr_mode = modeID; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
257 |
#ifdef X11MODES_DEBUG |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
258 |
printf("XRandR mode %d: %dx%d@%dHz\n", modeID, mode->w, mode->h, mode->refresh_rate); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
259 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
260 |
return SDL_TRUE; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
261 |
} |
6537
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
262 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
263 |
return SDL_FALSE; |
6537
85cf169db434
Fixed XRandR code to change resolution on the correct monitor in a multi-monitor setup.
Sam Lantinga <slouken@libsdl.org>
parents:
6506
diff
changeset
|
264 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
265 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
266 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
267 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
268 |
static SDL_bool |
2874 | 269 |
CheckVidMode(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
270 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
271 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
272 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
273 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
274 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
275 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
276 |
/* Allow environment override */ |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
277 |
env = SDL_GetHint(SDL_HINT_VIDEO_X11_XVIDMODE); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
278 |
if (env && !SDL_atoi(env)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
279 |
#ifdef X11MODES_DEBUG |
6472
d4623b7209db
Turned the X11 mode extension environment variables into hints so they can be more easily set from applications.
Sam Lantinga <slouken@libsdl.org>
parents:
6468
diff
changeset
|
280 |
printf("XVidMode disabled due to hint\n"); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
281 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
282 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
283 |
} |
2874 | 284 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
285 |
if (!SDL_X11_HAVE_XVIDMODE) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
286 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
287 |
printf("XVidMode support not available\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
288 |
#endif |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
289 |
return SDL_FALSE; |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
290 |
} |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
291 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
292 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
293 |
vm_error = -1; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
294 |
if (!XF86VidModeQueryExtension(display, &vm_event, &vm_error) |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
295 |
|| !XF86VidModeQueryVersion(display, major, minor)) { |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
296 |
#ifdef X11MODES_DEBUG |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
297 |
printf("XVidMode not active on the display\n"); |
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
298 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
299 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
300 |
} |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
301 |
#ifdef X11MODES_DEBUG |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
302 |
printf("XVidMode available at version %d.%d!\n", *major, *minor); |
6468
6af2a8db95d0
Fixed bug where Xinerama was treated as being available even if it wasn't.
Sam Lantinga <slouken@libsdl.org>
parents:
6331
diff
changeset
|
303 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
304 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
305 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
306 |
|
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
307 |
static |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
308 |
Bool XF86VidModeGetModeInfo(Display * dpy, int scr, |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
309 |
XF86VidModeModeInfo* info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
310 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
311 |
Bool retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
312 |
int dotclock; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
313 |
XF86VidModeModeLine l; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
314 |
SDL_zerop(info); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
315 |
SDL_zero(l); |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
316 |
retval = XF86VidModeGetModeLine(dpy, scr, &dotclock, &l); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
317 |
info->dotclock = dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
318 |
info->hdisplay = l.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
319 |
info->hsyncstart = l.hsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
320 |
info->hsyncend = l.hsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
321 |
info->htotal = l.htotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
322 |
info->hskew = l.hskew; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
323 |
info->vdisplay = l.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
324 |
info->vsyncstart = l.vsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
325 |
info->vsyncend = l.vsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
326 |
info->vtotal = l.vtotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
327 |
info->flags = l.flags; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
328 |
info->privsize = l.privsize; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
329 |
info->private = l.private; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
330 |
return retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
331 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
332 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
333 |
static int |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
334 |
CalculateXVidModeRefreshRate(const XF86VidModeModeInfo * info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
335 |
{ |
2874 | 336 |
return (info->htotal |
337 |
&& info->vtotal) ? (1000 * info->dotclock / (info->htotal * |
|
338 |
info->vtotal)) : 0; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
339 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
340 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
341 |
SDL_bool |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
342 |
SetXVidModeModeInfo(const XF86VidModeModeInfo *info, SDL_DisplayMode *mode) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
343 |
{ |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
344 |
mode->w = info->hdisplay; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
345 |
mode->h = info->vdisplay; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
346 |
mode->refresh_rate = CalculateXVidModeRefreshRate(info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
347 |
((SDL_DisplayModeData*)mode->driverdata)->vm_mode = *info; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
348 |
return SDL_TRUE; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
349 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
350 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
351 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
352 |
int |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
353 |
X11_InitModes(_THIS) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
354 |
{ |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
355 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
356 |
int screen, screencount; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
357 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
358 |
int xinerama_major, xinerama_minor; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
359 |
int use_xinerama = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
360 |
XineramaScreenInfo *xinerama = NULL; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
361 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
362 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
363 |
int xrandr_major, xrandr_minor; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
364 |
int use_xrandr = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
365 |
XRRScreenResources *res = NULL; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
366 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
367 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
368 |
int vm_major, vm_minor; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
369 |
int use_vidmode = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
370 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
371 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
372 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
373 |
/* Query Xinerama extention |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
374 |
* NOTE: This works with Nvidia Twinview correctly, but you need version 302.17 (released on June 2012) |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
375 |
* or newer of the Nvidia binary drivers |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
376 |
*/ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
377 |
if (CheckXinerama(data->display, &xinerama_major, &xinerama_minor)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
378 |
xinerama = XineramaQueryScreens(data->display, &screencount); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
379 |
if (xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
380 |
use_xinerama = xinerama_major * 100 + xinerama_minor; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
381 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
382 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
383 |
if (!xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
384 |
screencount = ScreenCount(data->display); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
385 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
386 |
#else |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
387 |
screencount = ScreenCount(data->display); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
388 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
389 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
390 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
391 |
/* require at least XRandR v1.2 */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
392 |
if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) && |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
393 |
(xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 2))) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
394 |
use_xrandr = xrandr_major * 100 + xrandr_minor; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
395 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
396 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
397 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
398 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
399 |
if (CheckVidMode(data->display, &vm_major, &vm_minor)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
400 |
use_vidmode = vm_major * 100 + vm_minor; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
401 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
402 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
403 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
404 |
for (screen = 0; screen < screencount; ++screen) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
405 |
XVisualInfo vinfo; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
406 |
SDL_VideoDisplay display; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
407 |
SDL_DisplayData *displaydata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
408 |
SDL_DisplayMode mode; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
409 |
SDL_DisplayModeData *modedata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
410 |
XPixmapFormatValues *pixmapFormats; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
411 |
int i, n; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
412 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
413 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
414 |
if (xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
415 |
if (get_visualinfo(data->display, 0, &vinfo) < 0) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
416 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
417 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
418 |
} else { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
419 |
if (get_visualinfo(data->display, screen, &vinfo) < 0) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
420 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
421 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
422 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
423 |
#else |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
424 |
if (get_visualinfo(data->display, screen, &vinfo) < 0) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
425 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
426 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
427 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
428 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
429 |
displaydata = (SDL_DisplayData *) SDL_calloc(1, sizeof(*displaydata)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
430 |
if (!displaydata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
431 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
432 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
433 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
434 |
mode.format = X11_GetPixelFormatFromVisualInfo(data->display, &vinfo); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
435 |
if (SDL_ISPIXELFORMAT_INDEXED(mode.format)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
436 |
/* We don't support palettized modes now */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
437 |
SDL_free(displaydata); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
438 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
439 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
440 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
441 |
if (xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
442 |
mode.w = xinerama[screen].width; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
443 |
mode.h = xinerama[screen].height; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
444 |
} else { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
445 |
mode.w = DisplayWidth(data->display, screen); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
446 |
mode.h = DisplayHeight(data->display, screen); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
447 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
448 |
#else |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
449 |
mode.w = DisplayWidth(data->display, screen); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
450 |
mode.h = DisplayHeight(data->display, screen); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
451 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
452 |
mode.refresh_rate = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
453 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
454 |
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
455 |
if (!modedata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
456 |
SDL_free(displaydata); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
457 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
458 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
459 |
mode.driverdata = modedata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
460 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
461 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
462 |
/* Most of SDL's calls to X11 are unwaware of Xinerama, and to X11 standard calls, when Xinerama is active, |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
463 |
* there's only one screen available. So we force the screen number to zero and |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
464 |
* let Xinerama specific code handle specific functionality using displaydata->xinerama_info |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
465 |
*/ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
466 |
if (use_xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
467 |
displaydata->screen = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
468 |
displaydata->use_xinerama = use_xinerama; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
469 |
displaydata->xinerama_info = xinerama[screen]; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
470 |
displaydata->xinerama_screen = screen; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
471 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
472 |
else displaydata->screen = screen; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
473 |
#else |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
474 |
displaydata->screen = screen; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
475 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
476 |
displaydata->visual = vinfo.visual; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
477 |
displaydata->depth = vinfo.depth; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
478 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
479 |
displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
480 |
pixmapFormats = XListPixmapFormats(data->display, &n); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
481 |
if (pixmapFormats) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
482 |
for (i = 0; i < n; ++i) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
483 |
if (pixmapFormats[i].depth == displaydata->depth) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
484 |
displaydata->scanline_pad = pixmapFormats[i].scanline_pad; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
485 |
break; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
486 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
487 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
488 |
XFree(pixmapFormats); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
489 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
490 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
491 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
492 |
if (use_xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
493 |
displaydata->x = xinerama[screen].x_org; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
494 |
displaydata->y = xinerama[screen].y_org; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
495 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
496 |
else |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
497 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
498 |
{ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
499 |
displaydata->x = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
500 |
displaydata->y = 0; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
501 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
502 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
503 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
504 |
if (use_xrandr) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
505 |
res = XRRGetScreenResources(data->display, RootWindow(data->display, displaydata->screen)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
506 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
507 |
if (res) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
508 |
XRROutputInfo *output_info; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
509 |
XRRCrtcInfo *crtc; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
510 |
int output; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
511 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
512 |
for (output = 0; output < res->noutput; output++) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
513 |
output_info = XRRGetOutputInfo(data->display, res, res->outputs[output]); |
6550
191f00a080ba
Don't try to query outputs that are not hooked up to a crtc
Sam Lantinga <slouken@libsdl.org>
parents:
6549
diff
changeset
|
514 |
if (!output_info || !output_info->crtc || |
191f00a080ba
Don't try to query outputs that are not hooked up to a crtc
Sam Lantinga <slouken@libsdl.org>
parents:
6549
diff
changeset
|
515 |
output_info->connection == RR_Disconnected) { |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
516 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
517 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
518 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
519 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
520 |
/* Is this the output that corresponds to the current screen? |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
521 |
We're checking the crtc position, but that may not be a valid test |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
522 |
in all cases. Anybody want to give this some love? |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
523 |
*/ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
524 |
crtc = XRRGetCrtcInfo(data->display, res, output_info->crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
525 |
if (!crtc || crtc->x != displaydata->x || crtc->y != displaydata->y) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
526 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
527 |
XRRFreeCrtcInfo(crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
528 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
529 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
530 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
531 |
displaydata->use_xrandr = use_xrandr; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
532 |
displaydata->xrandr_output = res->outputs[output]; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
533 |
SetXRandRModeInfo(data->display, res, output_info, crtc->mode, &mode); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
534 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
535 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
536 |
XRRFreeCrtcInfo(crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
537 |
break; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
538 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
539 |
#ifdef X11MODES_DEBUG |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
540 |
if (output == res->noutput) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
541 |
printf("Couldn't find XRandR CRTC at %d,%d\n", displaydata->x, displaydata->y); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
542 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
543 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
544 |
XRRFreeScreenResources(res); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
545 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
546 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
547 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
548 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
549 |
if (!displaydata->use_xrandr && |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
550 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
551 |
(!displaydata->use_xinerama || displaydata->xinerama_info.screen_number == 0) && |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
552 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
553 |
use_vidmode) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
554 |
displaydata->use_vidmode = use_vidmode; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
555 |
XF86VidModeGetModeInfo(data->display, screen, &modedata->vm_mode); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
556 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
557 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
558 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
559 |
SDL_zero(display); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
560 |
display.desktop_mode = mode; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
561 |
display.current_mode = mode; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
562 |
display.driverdata = displaydata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
563 |
SDL_AddVideoDisplay(&display); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
564 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
565 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
566 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
567 |
if (xinerama) XFree(xinerama); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
568 |
#endif |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
569 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
570 |
if (_this->num_displays == 0) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
571 |
SDL_SetError("No available displays"); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
572 |
return -1; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
573 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
574 |
return 0; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
575 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
576 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
577 |
void |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
578 |
X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
579 |
{ |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
580 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
581 |
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
582 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
583 |
int nmodes; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
584 |
XF86VidModeModeInfo ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
585 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
586 |
int screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
587 |
int screen_h; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
588 |
SDL_DisplayMode mode; |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
589 |
SDL_DisplayModeData *modedata; |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
590 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
591 |
/* Unfortunately X11 requires the window to be created with the correct |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
592 |
* visual and depth ahead of time, but the SDL API allows you to create |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
593 |
* a window before setting the fullscreen display mode. This means that |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
594 |
* we have to use the same format for all windows and all display modes. |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
595 |
* (or support recreating the window with a new visual behind the scenes) |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
596 |
*/ |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
597 |
mode.format = sdl_display->current_mode.format; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
598 |
mode.driverdata = NULL; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
599 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
600 |
screen_w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
601 |
screen_h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
602 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
603 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
604 |
if (data->use_xinerama) { |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
605 |
/* Add the full (both screens combined) xinerama mode only on the display that starts at 0,0 */ |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
606 |
if (!data->xinerama_info.x_org && !data->xinerama_info.y_org && |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
607 |
(screen_w > data->xinerama_info.width || screen_h > data->xinerama_info.height)) { |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
608 |
mode.w = screen_w; |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
609 |
mode.h = screen_h; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
610 |
mode.refresh_rate = 0; |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
611 |
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
612 |
if (modedata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
613 |
*modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
614 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
615 |
mode.driverdata = modedata; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
616 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
617 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
618 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
619 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
620 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
621 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
622 |
if (data->use_xrandr) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
623 |
XRRScreenResources *res; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
624 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
625 |
res = XRRGetScreenResources (display, RootWindow(display, data->screen)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
626 |
if (res) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
627 |
SDL_DisplayModeData *modedata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
628 |
XRROutputInfo *output_info; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
629 |
int i; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
630 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
631 |
output_info = XRRGetOutputInfo(display, res, data->xrandr_output); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
632 |
if (output_info && output_info->connection != RR_Disconnected) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
633 |
for (i = 0; i < output_info->nmode; ++i) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
634 |
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
635 |
if (!modedata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
636 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
637 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
638 |
mode.driverdata = modedata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
639 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
640 |
if (SetXRandRModeInfo(display, res, output_info, output_info->modes[i], &mode)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
641 |
SDL_AddDisplayMode(sdl_display, &mode); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
642 |
} else { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
643 |
SDL_free(modedata); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
644 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
645 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
646 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
647 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
648 |
XRRFreeScreenResources(res); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
649 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
650 |
return; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
651 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
652 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
653 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
654 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
655 |
if (data->use_vidmode && |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
656 |
XF86VidModeGetAllModeLines(display, data->screen, &nmodes, &modes)) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
657 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
658 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
659 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
660 |
printf("VidMode modes: (unsorted)\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
661 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
662 |
printf("Mode %d: %d x %d @ %d\n", i, |
2874 | 663 |
modes[i]->hdisplay, modes[i]->vdisplay, |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
664 |
CalculateXVidModeRefreshRate(modes[i])); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
665 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
666 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
667 |
for (i = 0; i < nmodes; ++i) { |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
668 |
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
669 |
if (!modedata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
670 |
continue; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
671 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
672 |
mode.driverdata = modedata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
673 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
674 |
if (SetXVidModeModeInfo(modes[i], &mode)) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
675 |
SDL_AddDisplayMode(sdl_display, &mode); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
676 |
} else { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
677 |
SDL_free(modedata); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
678 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
679 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
680 |
XFree(modes); |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
681 |
return; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
682 |
} |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
683 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
684 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
685 |
if (!data->use_xrandr && !data->use_vidmode) { |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
686 |
/* Add the desktop mode */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
687 |
mode = sdl_display->desktop_mode; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
688 |
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
689 |
if (modedata) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
690 |
*modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
691 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
692 |
mode.driverdata = modedata; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
693 |
SDL_AddDisplayMode(sdl_display, &mode); |
2874 | 694 |
} |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
695 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
696 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
697 |
int |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
698 |
X11_SetDisplayMode(_THIS, SDL_VideoDisplay * sdl_display, SDL_DisplayMode * mode) |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
699 |
{ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
700 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
701 |
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
702 |
SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)mode->driverdata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
703 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
704 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
705 |
if (data->use_xrandr) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
706 |
XRRScreenResources *res; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
707 |
XRROutputInfo *output_info; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
708 |
XRRCrtcInfo *crtc; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
709 |
Status status; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
710 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
711 |
res = XRRGetScreenResources (display, RootWindow(display, data->screen)); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
712 |
if (!res) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
713 |
SDL_SetError("Couldn't get XRandR screen resources"); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
714 |
return -1; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
715 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
716 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
717 |
output_info = XRRGetOutputInfo(display, res, data->xrandr_output); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
718 |
if (!output_info || output_info->connection == RR_Disconnected) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
719 |
SDL_SetError("Couldn't get XRandR output info"); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
720 |
XRRFreeScreenResources(res); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
721 |
return -1; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
722 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
723 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
724 |
crtc = XRRGetCrtcInfo(display, res, output_info->crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
725 |
if (!crtc) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
726 |
SDL_SetError("Couldn't get XRandR crtc info"); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
727 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
728 |
XRRFreeScreenResources(res); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
729 |
return -1; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
730 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
731 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
732 |
status = XRRSetCrtcConfig (display, res, output_info->crtc, CurrentTime, |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
733 |
crtc->x, crtc->y, modedata->xrandr_mode, crtc->rotation, |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
734 |
&data->xrandr_output, 1); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
735 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
736 |
XRRFreeCrtcInfo(crtc); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
737 |
XRRFreeOutputInfo(output_info); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
738 |
XRRFreeScreenResources(res); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
739 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
740 |
if (status != Success) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
741 |
SDL_SetError("XRRSetCrtcConfig failed"); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
742 |
return -1; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
743 |
} |
6549
db16b819e1d1
Added a delay hack to let the window manager adjust to the mode change. I'm not sure if this is a good idea, but at least it works sometimes now. :)
Sam Lantinga <slouken@libsdl.org>
parents:
6548
diff
changeset
|
744 |
|
db16b819e1d1
Added a delay hack to let the window manager adjust to the mode change. I'm not sure if this is a good idea, but at least it works sometimes now. :)
Sam Lantinga <slouken@libsdl.org>
parents:
6548
diff
changeset
|
745 |
/* Hack to let the window manager adjust to the mode change */ |
db16b819e1d1
Added a delay hack to let the window manager adjust to the mode change. I'm not sure if this is a good idea, but at least it works sometimes now. :)
Sam Lantinga <slouken@libsdl.org>
parents:
6548
diff
changeset
|
746 |
const int WINDOW_MANAGER_DELAY_HACK = 250; |
db16b819e1d1
Added a delay hack to let the window manager adjust to the mode change. I'm not sure if this is a good idea, but at least it works sometimes now. :)
Sam Lantinga <slouken@libsdl.org>
parents:
6548
diff
changeset
|
747 |
SDL_Delay(WINDOW_MANAGER_DELAY_HACK); |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
748 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
749 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
750 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
751 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
752 |
if (data->use_vidmode) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
753 |
XF86VidModeSwitchToMode(display, data->screen, &modedata->vm_mode); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
754 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
755 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
756 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
757 |
return 0; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
758 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
759 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
760 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
761 |
X11_QuitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
762 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
763 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
764 |
|
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
765 |
int |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
766 |
X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect) |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
767 |
{ |
6502
f41a82de351e
Fixed detection of display bounds after a mode switch when Xinerama is enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
6482
diff
changeset
|
768 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
769 |
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; |
6502
f41a82de351e
Fixed detection of display bounds after a mode switch when Xinerama is enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
6482
diff
changeset
|
770 |
|
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
771 |
rect->x = data->x; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
772 |
rect->y = data->y; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
773 |
rect->w = sdl_display->current_mode.w; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
774 |
rect->h = sdl_display->current_mode.h; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
775 |
|
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
776 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
777 |
/* Get the real current bounds of the display */ |
6502
f41a82de351e
Fixed detection of display bounds after a mode switch when Xinerama is enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
6482
diff
changeset
|
778 |
if (data->use_xinerama) { |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
779 |
int screencount; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
780 |
XineramaScreenInfo *xinerama = XineramaQueryScreens(display, &screencount); |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
781 |
if (xinerama) { |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
782 |
rect->x = xinerama[data->xinerama_screen].x_org; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
783 |
rect->y = xinerama[data->xinerama_screen].y_org; |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
784 |
} |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
785 |
} |
6548
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
786 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
6475
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6472
diff
changeset
|
787 |
return 0; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
788 |
} |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
789 |
|
5481
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
790 |
#endif /* SDL_VIDEO_DRIVER_X11 */ |
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
791 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 |
/* vi: set ts=4 sw=4 expandtab: */ |