Mercurial > mplayer.hg
annotate libvo/x11_common.c @ 3603:baa8b0c0ff30
Removed unnecessary check after the protocol autodetection.
Now it will try to start streaming even if the autodetection failed.
This will allow to work with web server that doesn't report a
proper mime-type.
author | bertrand |
---|---|
date | Wed, 19 Dec 2001 09:02:52 +0000 |
parents | d33dac3fcfa1 |
children | fc1db33734e7 |
rev | line source |
---|---|
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
1 |
32 | 2 #include <stdio.h> |
3 #include <stdlib.h> | |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
4 |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
5 #include "config.h" |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
6 |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
7 #ifdef X11_FULLSCREEN |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
8 |
440
d19a3da6ac13
Pontscho's mixer, select, and hell-a-lot-of-stuff patch ;)
gabucino
parents:
416
diff
changeset
|
9 #include <string.h> |
32 | 10 #include <unistd.h> |
11 #include <sys/mman.h> | |
12 | |
13 #include "video_out.h" | |
14 | |
324 | 15 #include <X11/Xmd.h> |
32 | 16 #include <X11/Xlib.h> |
17 #include <X11/Xutil.h> | |
18 #include <X11/Xatom.h> | |
19 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
20 #ifdef HAVE_XDPMS |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
21 #include <X11/extensions/dpms.h> |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
22 #endif |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
23 |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
24 #ifdef HAVE_XINERAMA |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
25 #include <X11/extensions/Xinerama.h> |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
26 #endif |
1732 | 27 |
28 /* | |
29 * If SCAN_VISUALS is defined, vo_init() scans all available TrueColor | |
30 * visuals for the 'best' visual for MPlayer video display. Note that | |
31 * the 'best' visual might be different from the default visual that | |
32 * is in use on the root window of the display/screen. | |
33 */ | |
34 #define SCAN_VISUALS | |
35 | |
36 | |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1447
diff
changeset
|
37 extern verbose; |
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1447
diff
changeset
|
38 |
324 | 39 static int dpms_disabled=0; |
40 static int timeout_save=0; | |
41 | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
42 char* mDisplayName=NULL; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
43 Display* mDisplay; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
44 Window mRootWin; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
45 int mScreen; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
46 int mLocalDisplay; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
47 |
384 | 48 |
49 void vo_hidecursor ( Display *disp , Window win ) | |
50 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
51 Cursor no_ptr; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
52 Pixmap bm_no; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
53 XColor black,dummy; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
54 Colormap colormap; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
55 static unsigned char bm_no_data[] = { 0,0,0,0, 0,0,0,0 }; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
56 |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
57 colormap = DefaultColormap(disp,DefaultScreen(disp)); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
58 XAllocNamedColor(disp,colormap,"black",&black,&dummy); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
59 bm_no = XCreateBitmapFromData(disp, win, bm_no_data, 8,8); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
60 no_ptr=XCreatePixmapCursor(disp, bm_no, bm_no,&black, &black,0, 0); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
61 XDefineCursor(disp,win,no_ptr); |
384 | 62 } |
63 | |
64 | |
1732 | 65 #ifdef SCAN_VISUALS |
66 /* | |
67 * Scan the available visuals on this Display/Screen. Try to find | |
68 * the 'best' available TrueColor visual that has a decent color | |
69 * depth (at least 15bit). If there are multiple visuals with depth | |
70 * >= 15bit, we prefer visuals with a smaller color depth. | |
71 */ | |
72 int vo_find_depth_from_visuals(Display *dpy, int screen, Visual **visual_return) | |
73 { | |
74 XVisualInfo visual_tmpl; | |
75 XVisualInfo *visuals; | |
76 int nvisuals, i; | |
77 int bestvisual = -1; | |
78 int bestvisual_depth = -1; | |
79 | |
80 visual_tmpl.screen = screen; | |
81 visual_tmpl.class = TrueColor; | |
82 visuals = XGetVisualInfo(dpy, | |
83 VisualScreenMask | VisualClassMask, &visual_tmpl, | |
84 &nvisuals); | |
85 if (visuals != NULL) { | |
86 for (i = 0; i < nvisuals; i++) { | |
87 if (verbose) | |
88 printf("vo: X11 truecolor visual %#x, depth %d, R:%lX G:%lX B:%lX\n", | |
89 visuals[i].visualid, visuals[i].depth, | |
90 visuals[i].red_mask, visuals[i].green_mask, | |
91 visuals[i].blue_mask); | |
92 /* | |
93 * save the visual index and it's depth, if this is the first | |
94 * truecolor visul, or a visual that is 'preferred' over the | |
95 * previous 'best' visual | |
96 */ | |
97 if (bestvisual_depth == -1 | |
98 || (visuals[i].depth >= 15 | |
99 && ( visuals[i].depth < bestvisual_depth | |
100 || bestvisual_depth < 15))) { | |
101 bestvisual = i; | |
102 bestvisual_depth = visuals[i].depth; | |
103 } | |
104 } | |
105 | |
106 if (bestvisual != -1 && visual_return != NULL) | |
107 *visual_return = visuals[bestvisual].visual; | |
108 | |
109 XFree(visuals); | |
110 } | |
111 return bestvisual_depth; | |
112 } | |
113 #endif | |
114 | |
115 | |
32 | 116 int vo_init( void ) |
117 { | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
118 // int mScreen; |
1732 | 119 int depth, bpp; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
120 unsigned int mask; |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
121 // char * DisplayName = ":0.0"; |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
122 // Display * mDisplay; |
1732 | 123 XImage * mXImage = NULL; |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
124 // Window mRootWin; |
1732 | 125 XWindowAttributes attribs; |
32 | 126 |
127 if(vo_depthonscreen) return 1; // already called | |
128 | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
129 if (!mDisplayName) |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
130 if (!(mDisplayName=getenv("DISPLAY"))) |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
131 mDisplayName=strdup(":0.0"); |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
132 |
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
133 mDisplay=XOpenDisplay(mDisplayName); |
32 | 134 if ( !mDisplay ) |
135 { | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
136 printf( "vo: couldn't open the X11 display (%s)!\n",mDisplayName ); |
32 | 137 return 0; |
138 } | |
139 mScreen=DefaultScreen( mDisplay ); // Screen ID. | |
140 mRootWin=RootWindow( mDisplay,mScreen );// Root window ID. | |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
141 |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
142 #ifdef HAVE_XINERAMA |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
143 if(XineramaIsActive(mDisplay)) |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
144 { |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
145 XineramaScreenInfo *screens; |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
146 int num_screens; |
3461
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
147 int disp_screen = mScreen; |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
148 |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
149 screens = XineramaQueryScreens(mDisplay, &num_screens); |
3461
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
150 if (disp_screen > num_screens) |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
151 disp_screen = 0; |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
152 if (! vo_screenwidth) |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
153 vo_screenwidth=screens[disp_screen].width; |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
154 if (! vo_screenheight) |
6b4ff1eb79bf
xinerama: allow to override xinerama screen_w/screen_h and setting size of screen where the window is placed
alex
parents:
2364
diff
changeset
|
155 vo_screenheight=screens[disp_screen].height; |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
156 } |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
157 else |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
158 #endif |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
159 { |
2364 | 160 if (! vo_screenwidth) |
161 vo_screenwidth=DisplayWidth( mDisplay,mScreen ); | |
162 if (! vo_screenheight) | |
163 vo_screenheight=DisplayHeight( mDisplay,mScreen ); | |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
164 } |
1732 | 165 // get color depth (from root window, or the best visual): |
32 | 166 XGetWindowAttributes(mDisplay, mRootWin, &attribs); |
1732 | 167 depth=attribs.depth; |
168 | |
169 #ifdef SCAN_VISUALS | |
170 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) { | |
171 Visual *visual; | |
172 | |
173 depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual); | |
174 if (depth != -1) | |
175 mXImage=XCreateImage(mDisplay, visual, depth, ZPixmap, | |
176 0, NULL, 1, 1, 8, 1); | |
177 } else | |
178 #endif | |
179 mXImage=XGetImage( mDisplay,mRootWin,0,0,1,1,AllPlanes,ZPixmap ); | |
180 | |
181 vo_depthonscreen = depth; // display depth on screen | |
182 | |
183 // get bits/pixel from XImage structure: | |
184 if (mXImage == NULL) { | |
185 mask = 0; | |
186 } else { | |
187 /* | |
188 * for the depth==24 case, the XImage structures might use | |
189 * 24 or 32 bits of data per pixel. The global variable | |
190 * vo_depthonscreen stores the amount of data per pixel in the | |
191 * XImage structure! | |
192 * | |
193 * Maybe we should rename vo_depthonscreen to (or add) vo_bpp? | |
194 */ | |
32 | 195 bpp=mXImage->bits_per_pixel; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
196 if((vo_depthonscreen+7)/8 != (bpp+7)/8) vo_depthonscreen=bpp; // by A'rpi |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
197 mask=mXImage->red_mask|mXImage->green_mask|mXImage->blue_mask; |
1732 | 198 XDestroyImage( mXImage ); |
1456
8c57a5a3c645
printfs cleanup - moved to higher -v level or moved to stderr
arpi
parents:
1447
diff
changeset
|
199 if(verbose) |
1732 | 200 printf("vo: X11 color mask: %X (R:%lX G:%lX B:%lX)\n", |
201 mask,mXImage->red_mask,mXImage->green_mask,mXImage->blue_mask); | |
202 } | |
203 if(((vo_depthonscreen+7)/8)==2){ | |
204 if(mask==0x7FFF) vo_depthonscreen=15; else | |
205 if(mask==0xFFFF) vo_depthonscreen=16; | |
206 } | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
207 // XCloseDisplay( mDisplay ); |
1447
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
208 /* slightly improved local display detection AST */ |
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
209 if ( strncmp(mDisplayName, "unix:", 5) == 0) |
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
210 mDisplayName += 4; |
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
211 else if ( strncmp(mDisplayName, "localhost:", 10) == 0) |
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
212 mDisplayName += 9; |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
213 if (*mDisplayName==':') mLocalDisplay=1; else mLocalDisplay=0; |
1732 | 214 printf("vo: X11 running at %dx%d with depth %d and %d bits/pixel (\"%s\" => %s display)\n", |
215 vo_screenwidth,vo_screenheight, | |
216 depth, vo_depthonscreen, | |
217 mDisplayName,mLocalDisplay?"local":"remote"); | |
32 | 218 return 1; |
219 } | |
220 | |
221 #include "../linux/keycodes.h" | |
222 #include "wskeys.h" | |
223 | |
224 extern void mplayer_put_key(int code); | |
225 | |
226 void vo_x11_putkey(int key){ | |
227 switch ( key ) | |
228 { | |
229 case wsLeft: mplayer_put_key(KEY_LEFT); break; | |
230 case wsRight: mplayer_put_key(KEY_RIGHT); break; | |
231 case wsUp: mplayer_put_key(KEY_UP); break; | |
232 case wsDown: mplayer_put_key(KEY_DOWN); break; | |
233 case wsSpace: mplayer_put_key(' '); break; | |
234 case wsEscape: mplayer_put_key(KEY_ESC); break; | |
235 case wsEnter: mplayer_put_key(KEY_ENTER); break; | |
651 | 236 case wsPageUp: mplayer_put_key(KEY_PAGE_UP); break; |
237 case wsPageDown: mplayer_put_key(KEY_PAGE_DOWN); break; | |
32 | 238 case wsq: |
239 case wsQ: mplayer_put_key('q'); break; | |
240 case wsp: | |
241 case wsP: mplayer_put_key('p'); break; | |
242 case wsMinus: | |
243 case wsGrayMinus: mplayer_put_key('-'); break; | |
244 case wsPlus: | |
245 case wsGrayPlus: mplayer_put_key('+'); break; | |
464 | 246 case wsGrayMul: |
247 case wsMul: mplayer_put_key('*'); break; | |
248 case wsGrayDiv: | |
249 case wsDiv: mplayer_put_key('/'); break; | |
3490 | 250 case wsLess: mplayer_put_key('<'); break; |
251 case wsMore: mplayer_put_key('>'); break; | |
516 | 252 case wsm: |
253 case wsM: mplayer_put_key('m'); break; | |
655 | 254 case wso: |
255 case wsO: mplayer_put_key('o'); break; | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1456
diff
changeset
|
256 default: if((key>='a' && key<='z')||(key>='A' && key<='Z')|| |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1456
diff
changeset
|
257 (key>='0' && key<='9')) mplayer_put_key(key); |
32 | 258 } |
369 | 259 |
32 | 260 } |
261 | |
262 | |
263 // ----- Motif header: ------- | |
264 | |
1236 | 265 #define MWM_HINTS_FUNCTIONS (1L << 0) |
266 #define MWM_HINTS_DECORATIONS (1L << 1) | |
267 #define MWM_HINTS_INPUT_MODE (1L << 2) | |
268 #define MWM_HINTS_STATUS (1L << 3) | |
269 | |
270 #define MWM_FUNC_ALL (1L << 0) | |
271 #define MWM_FUNC_RESIZE (1L << 1) | |
272 #define MWM_FUNC_MOVE (1L << 2) | |
273 #define MWM_FUNC_MINIMIZE (1L << 3) | |
274 #define MWM_FUNC_MAXIMIZE (1L << 4) | |
275 #define MWM_FUNC_CLOSE (1L << 5) | |
276 | |
277 #define MWM_DECOR_ALL (1L << 0) | |
278 #define MWM_DECOR_BORDER (1L << 1) | |
279 #define MWM_DECOR_RESIZEH (1L << 2) | |
280 #define MWM_DECOR_TITLE (1L << 3) | |
281 #define MWM_DECOR_MENU (1L << 4) | |
282 #define MWM_DECOR_MINIMIZE (1L << 5) | |
283 #define MWM_DECOR_MAXIMIZE (1L << 6) | |
284 | |
285 #define MWM_INPUT_MODELESS 0 | |
286 #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 | |
287 #define MWM_INPUT_SYSTEM_MODAL 2 | |
288 #define MWM_INPUT_FULL_APPLICATION_MODAL 3 | |
289 #define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL | |
290 | |
291 #define MWM_TEAROFF_WINDOW (1L<<0) | |
32 | 292 |
293 typedef struct | |
294 { | |
295 long flags; | |
296 long functions; | |
297 long decorations; | |
298 long input_mode; | |
1236 | 299 long state; |
32 | 300 } MotifWmHints; |
301 | |
302 extern MotifWmHints vo_MotifWmHints; | |
303 extern Atom vo_MotifHints; | |
304 extern int vo_depthonscreen; | |
305 extern int vo_screenwidth; | |
306 extern int vo_screenheight; | |
307 | |
308 static MotifWmHints vo_MotifWmHints; | |
309 static Atom vo_MotifHints = None; | |
310 | |
1266 | 311 // Note: always d==0 ! |
32 | 312 void vo_x11_decoration( Display * vo_Display,Window w,int d ) |
313 { | |
1266 | 314 |
315 if(vo_fsmode&1){ | |
316 XSetWindowAttributes attr; | |
317 attr.override_redirect = True; | |
318 XChangeWindowAttributes(vo_Display, w, CWOverrideRedirect, &attr); | |
319 // XMapWindow(vo_Display], w); | |
320 } | |
321 | |
1415 | 322 if(vo_fsmode&8){ |
323 XSetTransientForHint (vo_Display, w, RootWindow(vo_Display,mScreen)); | |
324 } | |
325 | |
32 | 326 vo_MotifHints=XInternAtom( vo_Display,"_MOTIF_WM_HINTS",0 ); |
327 if ( vo_MotifHints != None ) | |
328 { | |
1236 | 329 memset( &vo_MotifWmHints,0,sizeof( MotifWmHints ) ); |
330 vo_MotifWmHints.flags=MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS; | |
331 vo_MotifWmHints.functions=MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE; | |
332 if ( d ) d=MWM_DECOR_ALL; | |
1266 | 333 vo_MotifWmHints.decorations=d|((vo_fsmode&2)?0:MWM_DECOR_MENU); |
32 | 334 XChangeProperty( vo_Display,w,vo_MotifHints,vo_MotifHints,32, |
1266 | 335 PropModeReplace,(unsigned char *)&vo_MotifWmHints,(vo_fsmode&4)?4:5 ); |
32 | 336 } |
337 } | |
338 | |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
339 void vo_x11_classhint( Display * display,Window window,char *name ){ |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
340 XClassHint wmClass; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
341 wmClass.res_name = name; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
342 wmClass.res_class = "MPlayer"; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
343 XSetClassHint(display,window,&wmClass); |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
344 } |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
345 |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
346 #ifdef HAVE_NEW_GUI |
723 | 347 Window vo_window = None; |
348 GC vo_gc; | |
349 int vo_xeventhandling = 1; | |
350 int vo_resize = 0; | |
351 int vo_expose = 0; | |
352 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
353 void vo_setwindow( Window w,GC g ) { |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
354 vo_window=w; vo_gc=g; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
355 vo_xeventhandling=0; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
356 } |
1746 | 357 void vo_setwindowsize( int w,int h ) { |
358 vo_dwidth=w; vo_dheight=h; | |
359 } | |
723 | 360 #endif |
361 | |
32 | 362 int vo_x11_check_events(Display *mydisplay){ |
363 int ret=0; | |
364 XEvent Event; | |
365 char buf[100]; | |
366 KeySym keySym; | |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J«ärgen Keil <jk@tools.de>
arpi_esp
parents:
922
diff
changeset
|
367 static XComposeStatus stat; |
32 | 368 // unsigned long vo_KeyTable[512]; |
369 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
370 #ifdef HAVE_NEW_GUI |
723 | 371 if ( vo_xeventhandling ) |
372 { | |
373 #endif | |
374 while ( XPending( mydisplay ) ) | |
375 { | |
376 XNextEvent( mydisplay,&Event ); | |
377 switch( Event.type ) | |
378 { | |
379 case Expose: | |
380 ret|=VO_EVENT_EXPOSE; | |
381 break; | |
382 case ConfigureNotify: | |
383 vo_dwidth=Event.xconfigure.width; | |
384 vo_dheight=Event.xconfigure.height; | |
385 ret|=VO_EVENT_RESIZE; | |
386 break; | |
387 case KeyPress: | |
388 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); | |
389 vo_x11_putkey( ( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) ) ); | |
390 ret|=VO_EVENT_KEYPRESS; | |
391 break; | |
392 } | |
393 } | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
394 #ifdef HAVE_NEW_GUI |
32 | 395 } |
723 | 396 else |
397 { | |
398 if ( vo_resize ) | |
399 { | |
400 vo_resize=0; | |
401 ret|=VO_EVENT_RESIZE; | |
402 } | |
403 if ( vo_expose ) | |
404 { | |
405 vo_expose=0; | |
406 ret|=VO_EVENT_EXPOSE; | |
407 } | |
408 } | |
409 #endif | |
32 | 410 |
411 return ret; | |
412 } | |
413 | |
324 | 414 void saver_on(Display *mDisplay) { |
415 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
416 #ifdef HAVE_XDPMS |
324 | 417 int nothing; |
418 if (dpms_disabled) | |
419 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
420 if (DPMSQueryExtension(mDisplay, ¬hing, ¬hing)) |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
421 { |
741 | 422 if (!DPMSEnable(mDisplay)) { // restoring power saving settings |
423 printf("DPMS not available?\n"); | |
424 } else { | |
425 // DPMS does not seem to be enabled unless we call DPMSInfo | |
426 BOOL onoff; | |
427 CARD16 state; | |
428 DPMSInfo(mDisplay, &state, &onoff); | |
429 if (onoff) { | |
430 printf ("Successfully enabled DPMS\n"); | |
431 } else { | |
432 printf ("Could not enable DPMS\n"); | |
433 } | |
434 } | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
435 } |
324 | 436 } |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
437 #endif |
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
438 |
324 | 439 if (timeout_save) |
440 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
441 int dummy, interval, prefer_blank, allow_exp; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
442 XGetScreenSaver(mDisplay, &dummy, &interval, &prefer_blank, &allow_exp); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
443 XSetScreenSaver(mDisplay, timeout_save, interval, prefer_blank, allow_exp); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
444 XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp); |
324 | 445 } |
446 | |
447 } | |
448 | |
449 void saver_off(Display *mDisplay) { | |
450 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
451 int interval, prefer_blank, allow_exp; |
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
452 #ifdef HAVE_XDPMS |
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
453 int nothing; |
324 | 454 |
455 if (DPMSQueryExtension(mDisplay, ¬hing, ¬hing)) | |
456 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
457 BOOL onoff; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
458 CARD16 state; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
459 DPMSInfo(mDisplay, &state, &onoff); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
460 if (onoff) |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
461 { |
741 | 462 Status stat; |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
463 printf ("Disabling DPMS\n"); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
464 dpms_disabled=1; |
741 | 465 stat = DPMSDisable(mDisplay); // monitor powersave off |
466 printf ("stat: %d\n", stat); | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
467 } |
324 | 468 } |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
469 #endif |
324 | 470 XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp); |
471 if (timeout_save) | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
472 XSetScreenSaver(mDisplay, 0, interval, prefer_blank, allow_exp); |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
473 // turning off screensaver |
326 | 474 } |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
475 |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
476 #endif |