author | Ryan C. Gordon <icculus@icculus.org> |
Thu, 04 Oct 2012 23:56:37 -0400 | |
changeset 6560 | 3c48e9d0ce2e |
parent 6559 | 1fc5f5116bd0 |
child 6564 | fa0c355cbcdd |
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 |
|
6559
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
28 |
/*#define X11MODES_DEBUG*/ |
6558
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
29 |
|
6559
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
30 |
/* I'm becoming more and more convinced that the application should never |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
31 |
* use XRandR, and it's the window manager's responsibility to track and |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
32 |
* manage display modes for fullscreen windows. Right now XRandR is completely |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
33 |
* broken with respect to window manager behavior on every window manager that |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
34 |
* I can find. For example, on Unity 3D if you show a fullscreen window while |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
35 |
* the resolution is changing (within ~250 ms) your window will retain the |
1fc5f5116bd0
Turn off video mode debugging
Sam Lantinga <slouken@libsdl.org>
parents:
6558
diff
changeset
|
36 |
* fullscreen state hint but be decorated and windowed. |
6558
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
37 |
*/ |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
38 |
#define XRANDR_DISABLED_BY_DEFAULT |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
39 |
|
1950
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 |
static int |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
get_visualinfo(Display * display, int screen, XVisualInfo * vinfo) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 |
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
|
45 |
int depth; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 |
/* Look for an exact visual, if requested */ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 |
if (visual_id) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 |
XVisualInfo *vi, template; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 |
int nvis; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
SDL_zero(template); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
template.visualid = SDL_strtol(visual_id, NULL, 0); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 |
vi = XGetVisualInfo(display, VisualIDMask, &template, &nvis); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
if (vi) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 |
*vinfo = *vi; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
XFree(vi); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
} |
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 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 |
depth = DefaultDepth(display, screen); |
5466 | 63 |
if ((X11_UseDirectColorVisuals() && |
64 |
XMatchVisualInfo(display, screen, depth, DirectColor, vinfo)) || |
|
65 |
XMatchVisualInfo(display, screen, depth, TrueColor, vinfo) || |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 |
XMatchVisualInfo(display, screen, depth, PseudoColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 |
XMatchVisualInfo(display, screen, depth, StaticColor, vinfo)) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 |
return -1; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 |
|
5182
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
73 |
int |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
74 |
X11_GetVisualInfoFromVisual(Display * display, Visual * visual, XVisualInfo * vinfo) |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
75 |
{ |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
76 |
XVisualInfo *vi; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
77 |
int nvis; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
78 |
|
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
79 |
vinfo->visualid = XVisualIDFromVisual(visual); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
80 |
vi = XGetVisualInfo(display, VisualIDMask, vinfo, &nvis); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
81 |
if (vi) { |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
82 |
*vinfo = *vi; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
83 |
XFree(vi); |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
84 |
return 0; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
85 |
} |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
86 |
return -1; |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
87 |
} |
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
88 |
|
073b86030262
Added the X11 framebuffer implementation. Simple! :)
Sam Lantinga <slouken@libsdl.org>
parents:
5149
diff
changeset
|
89 |
Uint32 |
2874 | 90 |
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
|
91 |
{ |
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 |
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
|
93 |
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
|
94 |
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
|
95 |
|
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 |
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
|
97 |
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
|
98 |
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
|
99 |
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
|
100 |
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
|
101 |
} 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
|
102 |
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
|
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 |
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
|
106 |
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
|
107 |
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
|
108 |
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
|
109 |
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
|
110 |
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
|
111 |
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
|
112 |
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
|
113 |
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
|
114 |
} |
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 |
} |
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 |
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
|
117 |
} |
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 |
} |
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 |
|
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_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
|
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 |
|
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 |
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
|
124 |
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
|
125 |
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
|
126 |
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
|
127 |
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
|
128 |
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
|
129 |
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
|
130 |
} 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
|
131 |
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
|
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 |
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
|
134 |
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
|
135 |
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
|
136 |
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
|
137 |
} 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
|
138 |
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
|
139 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
140 |
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
|
141 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
142 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
143 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
144 |
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
|
145 |
} |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
147 |
/* Global for the error handler */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
148 |
int vm_event, vm_error = -1; |
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 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
151 |
static SDL_bool |
2874 | 152 |
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
|
153 |
{ |
6027
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
154 |
int event_base = 0; |
56185b574d61
Use correct Xinerama APIs for querying version and availability.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
155 |
int error_base = 0; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
156 |
const char *env; |
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 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
159 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
160 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
161 |
/* 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
|
162 |
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
|
163 |
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
|
164 |
#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
|
165 |
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
|
166 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
167 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
168 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
169 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
170 |
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
|
171 |
#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
|
172 |
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
|
173 |
#endif |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
174 |
return SDL_FALSE; |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
175 |
} |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
176 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
177 |
/* 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
|
178 |
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
|
179 |
!XineramaQueryVersion(display, major, minor) || |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
180 |
!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
|
181 |
#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
|
182 |
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
|
183 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
184 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
185 |
} |
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
|
186 |
#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
|
187 |
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
|
188 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
189 |
return SDL_TRUE; |
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 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
192 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
193 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
194 |
static SDL_bool |
2874 | 195 |
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
|
196 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
197 |
const char *env; |
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 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
200 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
201 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
202 |
/* 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
|
203 |
env = SDL_GetHint(SDL_HINT_VIDEO_X11_XRANDR); |
6558
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
204 |
#ifdef XRANDR_DISABLED_BY_DEFAULT |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
205 |
if (!env || !SDL_atoi(env)) { |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
206 |
#ifdef X11MODES_DEBUG |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
207 |
printf("XRandR disabled by default due to window manager issues\n"); |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
208 |
#endif |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
209 |
return SDL_FALSE; |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
210 |
} |
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
211 |
#else |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
212 |
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
|
213 |
#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
|
214 |
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
|
215 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
216 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
217 |
} |
6558
90f231aa77b9
I'm becoming more and more convinced that the application should never use XRandR, and it's the window manager's responsibility to track and manage display modes for fullscreen windows.
Sam Lantinga <slouken@libsdl.org>
parents:
6553
diff
changeset
|
218 |
#endif /* XRANDR_ENABLED_BY_DEFAULT */ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
219 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
220 |
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
|
221 |
#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
|
222 |
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
|
223 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
224 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
225 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
226 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
227 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
228 |
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
|
229 |
#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
|
230 |
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
|
231 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
232 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
233 |
} |
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
|
234 |
#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
|
235 |
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
|
236 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
237 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
238 |
} |
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
|
239 |
|
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
|
240 |
#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
|
241 |
#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
|
242 |
|
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
|
243 |
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
|
244 |
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
|
245 |
{ |
fc9e6be24ca9
Rewritten X11 video 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 |
return (info->hTotal |
6551
b0679a0d5751
Fixed refresh rate calculation
Sam Lantinga <slouken@libsdl.org>
parents:
6550
diff
changeset
|
247 |
&& info->vTotal) ? (info->dotClock / (info->hTotal * info->vTotal)) : 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
|
248 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
251 |
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
|
252 |
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
|
253 |
{ |
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
|
254 |
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
|
255 |
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
|
256 |
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
|
257 |
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
|
258 |
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
|
259 |
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
|
260 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
262 |
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
|
263 |
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
|
264 |
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
|
265 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
266 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
267 |
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
|
268 |
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
|
269 |
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
|
270 |
} 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
|
271 |
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
|
272 |
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
|
273 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
274 |
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
|
275 |
((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
|
276 |
#ifdef X11MODES_DEBUG |
6560
3c48e9d0ce2e
Fixed compiler warning in debug code.
Ryan C. Gordon <icculus@icculus.org>
parents:
6559
diff
changeset
|
277 |
printf("XRandR mode %d: %dx%d@%dHz\n", (int) modeID, mode->w, mode->h, mode->refresh_rate); |
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
|
278 |
#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
|
279 |
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
|
280 |
} |
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
|
281 |
} |
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
|
282 |
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
|
283 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
284 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
285 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
286 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
287 |
static SDL_bool |
2874 | 288 |
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
|
289 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
290 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
291 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
292 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
293 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
294 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
295 |
/* 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
|
296 |
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
|
297 |
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
|
298 |
#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
|
299 |
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
|
300 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
301 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
302 |
} |
2874 | 303 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
304 |
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
|
305 |
#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
|
306 |
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
|
307 |
#endif |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
308 |
return SDL_FALSE; |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
309 |
} |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
310 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
311 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
312 |
vm_error = -1; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
313 |
if (!XF86VidModeQueryExtension(display, &vm_event, &vm_error) |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
314 |
|| !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
|
315 |
#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
|
316 |
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
|
317 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
318 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
319 |
} |
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
|
320 |
#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
|
321 |
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
|
322 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
323 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
324 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
325 |
|
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
|
326 |
static |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
327 |
Bool XF86VidModeGetModeInfo(Display * dpy, int scr, |
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
328 |
XF86VidModeModeInfo* info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
329 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
330 |
Bool retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
331 |
int dotclock; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
332 |
XF86VidModeModeLine l; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
333 |
SDL_zerop(info); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
334 |
SDL_zero(l); |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
335 |
retval = XF86VidModeGetModeLine(dpy, scr, &dotclock, &l); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
336 |
info->dotclock = dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
337 |
info->hdisplay = l.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
338 |
info->hsyncstart = l.hsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
339 |
info->hsyncend = l.hsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
340 |
info->htotal = l.htotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
341 |
info->hskew = l.hskew; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
342 |
info->vdisplay = l.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
343 |
info->vsyncstart = l.vsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
344 |
info->vsyncend = l.vsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
345 |
info->vtotal = l.vtotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
346 |
info->flags = l.flags; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
347 |
info->privsize = l.privsize; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
348 |
info->private = l.private; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
349 |
return retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
350 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
351 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
352 |
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
|
353 |
CalculateXVidModeRefreshRate(const XF86VidModeModeInfo * info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
354 |
{ |
2874 | 355 |
return (info->htotal |
356 |
&& info->vtotal) ? (1000 * info->dotclock / (info->htotal * |
|
357 |
info->vtotal)) : 0; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
358 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
359 |
|
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
|
360 |
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
|
361 |
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
|
362 |
{ |
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
|
363 |
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
|
364 |
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
|
365 |
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
|
366 |
((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
|
367 |
return SDL_TRUE; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
368 |
} |
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
|
369 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
370 |
|
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
|
371 |
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
|
372 |
X11_InitModes(_THIS) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
373 |
{ |
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
|
374 |
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
|
375 |
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
|
376 |
#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
|
377 |
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
|
378 |
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
|
379 |
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
|
380 |
#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
|
381 |
#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
|
382 |
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
|
383 |
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
|
384 |
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
|
385 |
#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
|
386 |
#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
|
387 |
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
|
388 |
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
|
389 |
#endif |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
390 |
|
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
|
391 |
#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
|
392 |
/* 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
|
393 |
* 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
|
394 |
* 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
|
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 |
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
|
397 |
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
|
398 |
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
|
399 |
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
|
400 |
} |
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 |
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
|
403 |
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
|
404 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
406 |
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
|
407 |
#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
|
408 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
410 |
/* 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
|
411 |
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
|
412 |
(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
|
413 |
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
|
414 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
416 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
418 |
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
|
419 |
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
|
420 |
} |
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
|
421 |
#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
|
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 |
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
|
424 |
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
|
425 |
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
|
426 |
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
|
427 |
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
|
428 |
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
|
429 |
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
|
430 |
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
|
431 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
433 |
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
|
434 |
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
|
435 |
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
|
436 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
} 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
|
438 |
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
|
439 |
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
|
440 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
443 |
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
|
444 |
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
|
445 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
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 |
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
|
449 |
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
|
450 |
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
|
451 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
454 |
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
|
455 |
/* 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
|
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 |
#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
|
460 |
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
|
461 |
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
|
462 |
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
|
463 |
} 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
|
464 |
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
|
465 |
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
|
466 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
468 |
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
|
469 |
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
|
470 |
#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
|
471 |
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
|
472 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
474 |
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
|
475 |
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
|
476 |
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
|
477 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
479 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
481 |
/* 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
|
482 |
* 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
|
483 |
* 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
|
484 |
*/ |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
486 |
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
|
487 |
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
|
488 |
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
|
489 |
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
|
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 |
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
|
492 |
#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
|
493 |
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
|
494 |
#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
|
495 |
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
|
496 |
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
|
497 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
499 |
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
|
500 |
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
|
501 |
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
|
502 |
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
|
503 |
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
|
504 |
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
|
505 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
508 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
511 |
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
|
512 |
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
|
513 |
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
|
514 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
515 |
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
|
516 |
#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
|
517 |
{ |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
519 |
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
|
520 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
523 |
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
|
524 |
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
|
525 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
527 |
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
|
528 |
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
|
529 |
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
|
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 |
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
|
532 |
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
|
533 |
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
|
534 |
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
|
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 |
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
|
537 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
/* 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
|
540 |
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
|
541 |
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
|
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 |
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
|
544 |
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
|
545 |
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
|
546 |
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
|
547 |
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
|
548 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
551 |
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
|
552 |
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
|
553 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
555 |
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
|
556 |
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
|
557 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
559 |
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
|
560 |
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
|
561 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
#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
|
563 |
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
|
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 |
#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
|
566 |
|
fc9e6be24ca9
Rewritten X11 video 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 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
|
568 |
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
|
569 |
#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
|
570 |
(!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
|
571 |
#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
|
572 |
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
|
573 |
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
|
574 |
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
|
575 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
576 |
#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
|
577 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
578 |
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
|
579 |
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
|
580 |
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
|
581 |
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
|
582 |
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
|
583 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
584 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
585 |
#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
|
586 |
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
|
587 |
#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
|
588 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
590 |
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
|
591 |
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
|
592 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
593 |
return 0; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
594 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
595 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 |
void |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
597 |
X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 |
{ |
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
|
599 |
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
|
600 |
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
|
601 |
#if SDL_VIDEO_DRIVER_X11_XVIDMODE |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
602 |
int nmodes; |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
603 |
XF86VidModeModeInfo ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
604 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
605 |
int screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
606 |
int screen_h; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
607 |
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
|
608 |
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
|
609 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
610 |
/* 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
|
611 |
* 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
|
612 |
* 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
|
613 |
* 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
|
614 |
* (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
|
615 |
*/ |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
616 |
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
|
617 |
mode.driverdata = NULL; |
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 |
screen_w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
620 |
screen_h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
621 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
622 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
623 |
if (data->use_xinerama) { |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
624 |
/* 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
|
625 |
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
|
626 |
(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
|
627 |
mode.w = screen_w; |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
628 |
mode.h = screen_h; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
629 |
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
|
630 |
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
|
631 |
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
|
632 |
*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
|
633 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
mode.driverdata = modedata; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
635 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
636 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
637 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
638 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
639 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
640 |
#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
|
641 |
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
|
642 |
XRRScreenResources *res; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
643 |
|
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
|
644 |
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
|
645 |
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
|
646 |
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
|
647 |
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
|
648 |
int i; |
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 |
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
|
651 |
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
|
652 |
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
|
653 |
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
|
654 |
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
|
655 |
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
|
656 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
657 |
mode.driverdata = modedata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
658 |
|
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
|
659 |
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
|
660 |
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
|
661 |
} 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
|
662 |
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
|
663 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
664 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
665 |
} |
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
|
666 |
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
|
667 |
XRRFreeScreenResources(res); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
668 |
} |
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
|
669 |
return; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
670 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
671 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
672 |
|
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
673 |
#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
|
674 |
if (data->use_vidmode && |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
675 |
XF86VidModeGetAllModeLines(display, data->screen, &nmodes, &modes)) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
676 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
677 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
678 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
679 |
printf("VidMode modes: (unsorted)\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
680 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
681 |
printf("Mode %d: %d x %d @ %d\n", i, |
2874 | 682 |
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
|
683 |
CalculateXVidModeRefreshRate(modes[i])); |
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 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
686 |
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
|
687 |
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
|
688 |
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
|
689 |
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
|
690 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
692 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
693 |
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
|
694 |
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
|
695 |
} 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
|
696 |
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
|
697 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
698 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
699 |
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
|
700 |
return; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
701 |
} |
5408
35a63789c3f2
Dynamically load the Xinerama and xf86vmode extensions
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
702 |
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
703 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
704 |
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
|
705 |
/* 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
|
706 |
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
|
707 |
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
|
708 |
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
|
709 |
*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
|
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 |
mode.driverdata = modedata; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
712 |
SDL_AddDisplayMode(sdl_display, &mode); |
2874 | 713 |
} |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
714 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
715 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
716 |
int |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
717 |
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
|
718 |
{ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
719 |
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
|
720 |
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
|
721 |
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
|
722 |
|
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
|
723 |
#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
|
724 |
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
|
725 |
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
|
726 |
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
|
727 |
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
|
728 |
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
|
729 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
731 |
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
|
732 |
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
|
733 |
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
|
734 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
737 |
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
|
738 |
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
|
739 |
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
|
740 |
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
|
741 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
|
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
744 |
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
|
745 |
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
|
746 |
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
|
747 |
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
|
748 |
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
|
749 |
} |
fc9e6be24ca9
Rewritten X11 video 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 |
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
|
752 |
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
|
753 |
&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
|
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 |
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
|
756 |
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
|
757 |
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
|
758 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
759 |
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
|
760 |
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
|
761 |
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
|
762 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
763 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
764 |
#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
|
765 |
|
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
766 |
#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
|
767 |
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
|
768 |
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
|
769 |
} |
fc9e6be24ca9
Rewritten X11 video mode support to directly set requested modes and exactly restore the desktop mode at shutdown.
Sam Lantinga <slouken@libsdl.org>
parents:
6538
diff
changeset
|
770 |
#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
|
771 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
772 |
return 0; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
773 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
774 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
775 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
776 |
X11_QuitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
777 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
778 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 |
|
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
780 |
int |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
781 |
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
|
782 |
{ |
6502
f41a82de351e
Fixed detection of display bounds after a mode switch when Xinerama is enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
6482
diff
changeset
|
783 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
784 |
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
|
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 |
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
|
787 |
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
|
788 |
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
|
789 |
rect->h = sdl_display->current_mode.h; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
790 |
|
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
791 |
#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
|
792 |
/* 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
|
793 |
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
|
794 |
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
|
795 |
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
|
796 |
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
|
797 |
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
|
798 |
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
|
799 |
} |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
800 |
} |
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
|
801 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
6475
71d39944810b
Fixed fullscreen origin for multi-head displays
Sam Lantinga <slouken@libsdl.org>
parents:
6472
diff
changeset
|
802 |
return 0; |
6331
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
803 |
} |
5732e1a80bde
Fixes #1522, improved Xinerama / Twinview support
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6138
diff
changeset
|
804 |
|
5481
22dfc3958dc3
Fixed so code will compile with SDL_config_minimal.h
Sam Lantinga <slouken@libsdl.org>
parents:
5466
diff
changeset
|
805 |
#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
|
806 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
807 |
/* vi: set ts=4 sw=4 expandtab: */ |