Mercurial > mplayer.hg
annotate libvo/x11_common.c @ 8660:39476cbd1673
I have looked at the fullscreen code and realized that there are
generally two types of layer support for window managers:
- NetWM states (FULLSCREEN, STAYS_ON_TOP, ABOVE)
sawfish, metacity, kwin
- _WIN_LAYER
IceWM, WindowMaker
So we don't need any other window manager detection functions, we need
only to check for these two.
Code tested on lots of windowmanagers.
patch by Filip Kalinski <filon@pld.org.pl>
author | arpi |
---|---|
date | Mon, 30 Dec 2002 18:50:15 +0000 |
parents | 5af3d90a8f6b |
children | 21e79b2ea8c5 |
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> | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
4 #include <math.h> |
6401 | 5 #include <inttypes.h> |
448
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 #include "config.h" |
5998 | 8 #include "mp_msg.h" |
6401 | 9 #include "x11_common.h" |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
10 |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
11 #ifdef X11_FULLSCREEN |
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
12 |
440
d19a3da6ac13
Pontscho's mixer, select, and hell-a-lot-of-stuff patch ;)
gabucino
parents:
416
diff
changeset
|
13 #include <string.h> |
32 | 14 #include <unistd.h> |
15 #include <sys/mman.h> | |
16 | |
17 #include "video_out.h" | |
18 | |
324 | 19 #include <X11/Xmd.h> |
32 | 20 #include <X11/Xlib.h> |
21 #include <X11/Xutil.h> | |
22 #include <X11/Xatom.h> | |
23 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
24 #ifdef HAVE_XDPMS |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
25 #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
|
26 #endif |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
27 |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
28 #ifdef HAVE_XINERAMA |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
29 #include <X11/extensions/Xinerama.h> |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
30 #endif |
1732 | 31 |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
32 #ifdef HAVE_XF86VM |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
33 #include <X11/extensions/xf86vmode.h> |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
34 #endif |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
35 |
4658 | 36 #include "../input/input.h" |
37 #include "../input/mouse.h" | |
38 | |
4798 | 39 #ifdef HAVE_NEW_GUI |
40 #include "../Gui/interface.h" | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
41 #include "../mplayer.h" |
4798 | 42 #endif |
43 | |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
44 #define vo_wm_Unknown 0 |
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
45 #define vo_wm_NetWM 1 |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
46 #define vo_wm_Layered 2 |
1732 | 47 |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
48 #define WIN_LAYER_ONBOTTOM 2 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
49 #define WIN_LAYER_NORMAL 4 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
50 #define WIN_LAYER_ONTOP 6 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
51 #define WIN_LAYER_ABOVE_DOCK 12 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
52 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
53 int ice_layer=WIN_LAYER_ABOVE_DOCK; |
6303 | 54 int stop_xscreensaver=0; |
6202 | 55 |
324 | 56 static int dpms_disabled=0; |
57 static int timeout_save=0; | |
6303 | 58 static int xscreensaver_was_running=0; |
8354
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
59 static int kdescreensaver_was_running=0; |
324 | 60 |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
61 char* mDisplayName=NULL; |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6095
diff
changeset
|
62 Display* mDisplay=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
|
63 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
|
64 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
|
65 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
|
66 |
3830 | 67 /* output window id */ |
68 int WinID=-1; | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
69 int vo_mouse_autohide = 0; |
6089 | 70 int vo_wm_type = -1; |
384 | 71 |
8653 | 72 #define SUPPORT_NONE 0 |
73 #define SUPPORT_FULLSCREEN 1 | |
74 #define SUPPORT_ABOVE 2 | |
75 #define SUPPORT_STAYS_ON_TOP 4 | |
76 int net_wm_support = 0; | |
77 | |
7435 | 78 static int vo_old_x = 0; |
79 static int vo_old_y = 0; | |
80 static int vo_old_width = 0; | |
81 static int vo_old_height = 0; | |
82 | |
83 | |
4017 | 84 #ifdef HAVE_XINERAMA |
85 int xinerama_screen = 0; | |
86 int xinerama_x = 0; | |
87 int xinerama_y = 0; | |
88 #endif | |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
89 #ifdef HAVE_XF86VM |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
90 XF86VidModeModeInfo **vidmodes=NULL; |
4977
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
91 XF86VidModeModeLine modeline; |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
92 #endif |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
93 |
384 | 94 void vo_hidecursor ( Display *disp , Window win ) |
95 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
96 Cursor no_ptr; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
97 Pixmap bm_no; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
98 XColor black,dummy; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
99 Colormap colormap; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
100 static unsigned char bm_no_data[] = { 0,0,0,0, 0,0,0,0 }; |
3954 | 101 |
102 if(WinID==0) return; // do not hide, if we're playing at rootwin | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
103 |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
104 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
|
105 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
|
106 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
|
107 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
|
108 XDefineCursor(disp,win,no_ptr); |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
109 XFreeCursor( disp,no_ptr ); |
384 | 110 } |
111 | |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
112 void vo_showcursor( Display *disp, Window win ) |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
113 { |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
114 if ( WinID==0 ) return; |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
115 XDefineCursor( disp,win,0 ); |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
116 } |
384 | 117 |
6077 | 118 static int x11_errorhandler(Display *display, XErrorEvent *event) |
4742 | 119 { |
120 #define MSGLEN 60 | |
121 char msg[MSGLEN]; | |
122 | |
4812 | 123 XGetErrorText(display, event->error_code, (char *)&msg, MSGLEN); |
4742 | 124 |
6296 | 125 mp_msg(MSGT_VO,MSGL_ERR,"X11 error: %s\n", msg); |
4742 | 126 |
6296 | 127 mp_msg(MSGT_VO,MSGL_V,"Type: %x, display: %x, resourceid: %x, serial: %x\n", |
4742 | 128 event->type, event->display, event->resourceid, event->serial); |
6296 | 129 mp_msg(MSGT_VO,MSGL_V,"Error code: %x, request code: %x, minor code: %x\n", |
4742 | 130 event->error_code, event->request_code, event->minor_code); |
131 | |
6095 | 132 abort(); |
133 //exit_player("X11 error"); | |
4742 | 134 #undef MSGLEN |
135 } | |
1732 | 136 |
8653 | 137 int net_wm_support_state_test( char *name ) |
138 { | |
139 mp_dbg(MSGT_VO,MSGL_DBG2, "[x11] NetWM supports %s\n",name); | |
140 if ( !strncmp( name,"_NET_WM_STATE_FULLSCREEN", 24 ) ) | |
141 { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports FULLSCREEN state.\n" ); return SUPPORT_FULLSCREEN; } | |
142 if ( !strncmp( name,"_NET_WM_STATE_STAYS_ON_TOP", 24 ) ) | |
143 { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports STAYS_ON_TOP state.\n" ); return SUPPORT_STAYS_ON_TOP; } | |
144 if ( !strncmp( name,"_NET_WM_STATE_ABOVE", 24 ) ) | |
145 { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports ABOVE state.\n" ); return SUPPORT_ABOVE; } | |
146 return SUPPORT_NONE; | |
147 } | |
148 | |
6009 | 149 int vo_wm_detect( void ) |
150 { | |
151 Atom type; | |
152 XEvent xev; | |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
153 int i; |
6009 | 154 int wm = vo_wm_Unknown; |
155 int format; | |
156 unsigned long nitems, bytesafter; | |
8653 | 157 Atom * args = NULL; |
6043 | 158 |
159 if ( WinID >= 0 ) return vo_wm_Unknown; | |
160 | |
6009 | 161 // --- netwm |
162 type=XInternAtom( mDisplay,"_NET_SUPPORTED",False ); | |
8653 | 163 if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) |
6009 | 164 { |
6043 | 165 mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is of class NetWM.\n" ); |
8653 | 166 for (i = 0; i < nitems; i++) |
167 net_wm_support |= net_wm_support_state_test (XGetAtomName (mDisplay, args[i])); | |
6009 | 168 XFree( args ); |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
169 if (net_wm_support) |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
170 return vo_wm_NetWM; |
6009 | 171 } |
172 | |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
173 // -- supports layers |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
174 type=XInternAtom( mDisplay,"_WIN_PROTOCOLS",False ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
175 if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
176 { |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
177 mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports layers.\n" ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
178 for (i = 0; i < nitems; i++) |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
179 if (!strcmp( XGetAtomName (mDisplay, args[i]), "_WIN_LAYER")); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
180 return vo_wm_Layered; |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
181 XFree( args ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
182 } |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
183 |
6009 | 184 if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" ); |
185 return wm; | |
186 } | |
187 | |
32 | 188 int vo_init( void ) |
189 { | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
190 // int mScreen; |
1732 | 191 int depth, bpp; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
192 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
|
193 // 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
|
194 // Display * mDisplay; |
1732 | 195 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
|
196 // Window mRootWin; |
1732 | 197 XWindowAttributes attribs; |
4815
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
198 char* dispName; |
32 | 199 |
200 if(vo_depthonscreen) return 1; // already called | |
201 | |
4812 | 202 XSetErrorHandler(x11_errorhandler); |
203 | |
204 #if 0 | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
205 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
|
206 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
|
207 mDisplayName=strdup(":0.0"); |
4812 | 208 #else |
4815
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
209 dispName = XDisplayName(mDisplayName); |
4812 | 210 #endif |
211 | |
6296 | 212 mp_msg(MSGT_VO,MSGL_V,"X11 opening display: %s\n", dispName); |
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 |
4815
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
214 mDisplay=XOpenDisplay(dispName); |
32 | 215 if ( !mDisplay ) |
216 { | |
6296 | 217 mp_msg(MSGT_VO,MSGL_ERR,"vo: couldn't open the X11 display (%s)!\n",dispName ); |
32 | 218 return 0; |
219 } | |
220 mScreen=DefaultScreen( mDisplay ); // Screen ID. | |
221 mRootWin=RootWindow( mDisplay,mScreen );// Root window ID. | |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
222 |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
223 #ifdef HAVE_XINERAMA |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
224 if(XineramaIsActive(mDisplay)) |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
225 { |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
226 XineramaScreenInfo *screens; |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
227 int num_screens; |
3990 | 228 |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
229 screens = XineramaQueryScreens(mDisplay, &num_screens); |
4017 | 230 if(xinerama_screen >= num_screens) xinerama_screen = 0; |
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
|
231 if (! vo_screenwidth) |
4017 | 232 vo_screenwidth=screens[xinerama_screen].width; |
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
|
233 if (! vo_screenheight) |
4017 | 234 vo_screenheight=screens[xinerama_screen].height; |
235 xinerama_x = screens[xinerama_screen].x_org; | |
236 xinerama_y = screens[xinerama_screen].y_org; | |
237 | |
3990 | 238 XFree(screens); |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
239 } |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
240 else |
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
241 #endif |
4977
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
242 #ifdef HAVE_XF86VM |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
243 { |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
244 int clock; |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
245 XF86VidModeGetModeLine( mDisplay,mScreen,&clock ,&modeline ); |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
246 if ( !vo_screenwidth ) vo_screenwidth=modeline.hdisplay; |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
247 if ( !vo_screenheight ) vo_screenheight=modeline.vdisplay; |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
248 } |
7b65a4f0b74e
vm pecs applied from daniel carter <hedonist@win.co.nz>
pontscho
parents:
4974
diff
changeset
|
249 #endif |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
250 { |
2364 | 251 if (! vo_screenwidth) |
252 vo_screenwidth=DisplayWidth( mDisplay,mScreen ); | |
253 if (! vo_screenheight) | |
254 vo_screenheight=DisplayHeight( mDisplay,mScreen ); | |
2149
6358db6ad3d0
Xinerama screen size fix by Lev Babiev <harley@hosers.org>
arpi
parents:
1746
diff
changeset
|
255 } |
1732 | 256 // get color depth (from root window, or the best visual): |
32 | 257 XGetWindowAttributes(mDisplay, mRootWin, &attribs); |
1732 | 258 depth=attribs.depth; |
259 | |
260 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) { | |
261 Visual *visual; | |
262 | |
263 depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual); | |
264 if (depth != -1) | |
265 mXImage=XCreateImage(mDisplay, visual, depth, ZPixmap, | |
266 0, NULL, 1, 1, 8, 1); | |
267 } else | |
7256
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
268 mXImage=XGetImage( mDisplay,mRootWin,0,0,1,1,AllPlanes,ZPixmap ); |
1732 | 269 |
270 vo_depthonscreen = depth; // display depth on screen | |
271 | |
272 // get bits/pixel from XImage structure: | |
273 if (mXImage == NULL) { | |
274 mask = 0; | |
275 } else { | |
276 /* | |
277 * for the depth==24 case, the XImage structures might use | |
278 * 24 or 32 bits of data per pixel. The global variable | |
279 * vo_depthonscreen stores the amount of data per pixel in the | |
280 * XImage structure! | |
281 * | |
282 * Maybe we should rename vo_depthonscreen to (or add) vo_bpp? | |
283 */ | |
32 | 284 bpp=mXImage->bits_per_pixel; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
285 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
|
286 mask=mXImage->red_mask|mXImage->green_mask|mXImage->blue_mask; |
6296 | 287 mp_msg(MSGT_VO,MSGL_V,"vo: X11 color mask: %X (R:%lX G:%lX B:%lX)\n", |
1732 | 288 mask,mXImage->red_mask,mXImage->green_mask,mXImage->blue_mask); |
4181 | 289 XDestroyImage( mXImage ); |
1732 | 290 } |
291 if(((vo_depthonscreen+7)/8)==2){ | |
292 if(mask==0x7FFF) vo_depthonscreen=15; else | |
293 if(mask==0xFFFF) vo_depthonscreen=16; | |
294 } | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
741
diff
changeset
|
295 // XCloseDisplay( mDisplay ); |
1447
e82fbd67ae60
better local display connection patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents:
1415
diff
changeset
|
296 /* slightly improved local display detection AST */ |
4815
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
297 if ( strncmp(dispName, "unix:", 5) == 0) |
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
298 dispName += 4; |
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
299 else if ( strncmp(dispName, "localhost:", 10) == 0) |
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
300 dispName += 9; |
7492
5465cbd5c5ef
Modern versions of OpenSSH listen on localhost to forward the X11 connection
arpi
parents:
7435
diff
changeset
|
301 if (*dispName==':' && atoi(dispName+1)<10) mLocalDisplay=1; else mLocalDisplay=0; |
6296 | 302 mp_msg(MSGT_VO,MSGL_INFO,"vo: X11 running at %dx%d with depth %d and %d bpp (\"%s\" => %s display)\n", |
1732 | 303 vo_screenwidth,vo_screenheight, |
304 depth, vo_depthonscreen, | |
4815
178b524e5213
Bugfix in x11_common.c mainly. Don't screw up the display name,
albeu
parents:
4812
diff
changeset
|
305 dispName,mLocalDisplay?"local":"remote"); |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
306 |
6009 | 307 vo_wm_type=vo_wm_detect(); |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
308 |
7111 | 309 saver_off(mDisplay); |
32 | 310 return 1; |
311 } | |
312 | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
313 void vo_uninit( void ) |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
314 { |
6077 | 315 if (!mDisplay) |
316 { | |
317 mp_msg(MSGT_VO, MSGL_V, "vo: x11 uninit called but X11 not inited..\n"); | |
318 return; | |
319 } | |
320 // if( !vo_depthonscreen ) return; | |
6296 | 321 mp_msg(MSGT_VO,MSGL_V,"vo: uninit ...\n" ); |
6016 | 322 XSetErrorHandler(NULL); |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
323 XCloseDisplay( mDisplay ); |
6016 | 324 vo_depthonscreen = 0; |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6095
diff
changeset
|
325 mDisplay=NULL; |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
326 } |
4436 | 327 |
32 | 328 #include "../linux/keycodes.h" |
329 #include "wskeys.h" | |
330 | |
331 extern void mplayer_put_key(int code); | |
332 | |
333 void vo_x11_putkey(int key){ | |
334 switch ( key ) | |
335 { | |
336 case wsLeft: mplayer_put_key(KEY_LEFT); break; | |
337 case wsRight: mplayer_put_key(KEY_RIGHT); break; | |
338 case wsUp: mplayer_put_key(KEY_UP); break; | |
339 case wsDown: mplayer_put_key(KEY_DOWN); break; | |
340 case wsSpace: mplayer_put_key(' '); break; | |
341 case wsEscape: mplayer_put_key(KEY_ESC); break; | |
342 case wsEnter: mplayer_put_key(KEY_ENTER); break; | |
8215 | 343 case wsBackSpace: mplayer_put_key(KEY_BS); break; |
344 case wsDelete: mplayer_put_key(KEY_DELETE); break; | |
345 case wsInsert: mplayer_put_key(KEY_INSERT); break; | |
346 case wsHome: mplayer_put_key(KEY_HOME); break; | |
347 case wsEnd: mplayer_put_key(KEY_END); break; | |
651 | 348 case wsPageUp: mplayer_put_key(KEY_PAGE_UP); break; |
349 case wsPageDown: mplayer_put_key(KEY_PAGE_DOWN); break; | |
32 | 350 case wsq: |
351 case wsQ: mplayer_put_key('q'); break; | |
352 case wsp: | |
353 case wsP: mplayer_put_key('p'); break; | |
354 case wsMinus: | |
355 case wsGrayMinus: mplayer_put_key('-'); break; | |
356 case wsPlus: | |
357 case wsGrayPlus: mplayer_put_key('+'); break; | |
464 | 358 case wsGrayMul: |
359 case wsMul: mplayer_put_key('*'); break; | |
360 case wsGrayDiv: | |
361 case wsDiv: mplayer_put_key('/'); break; | |
3490 | 362 case wsLess: mplayer_put_key('<'); break; |
363 case wsMore: mplayer_put_key('>'); break; | |
516 | 364 case wsm: |
365 case wsM: mplayer_put_key('m'); break; | |
655 | 366 case wso: |
367 case wsO: mplayer_put_key('o'); break; | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1456
diff
changeset
|
368 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
|
369 (key>='0' && key<='9')) mplayer_put_key(key); |
32 | 370 } |
369 | 371 |
32 | 372 } |
373 | |
374 | |
375 // ----- Motif header: ------- | |
376 | |
1236 | 377 #define MWM_HINTS_FUNCTIONS (1L << 0) |
378 #define MWM_HINTS_DECORATIONS (1L << 1) | |
379 #define MWM_HINTS_INPUT_MODE (1L << 2) | |
380 #define MWM_HINTS_STATUS (1L << 3) | |
381 | |
382 #define MWM_FUNC_ALL (1L << 0) | |
383 #define MWM_FUNC_RESIZE (1L << 1) | |
384 #define MWM_FUNC_MOVE (1L << 2) | |
385 #define MWM_FUNC_MINIMIZE (1L << 3) | |
386 #define MWM_FUNC_MAXIMIZE (1L << 4) | |
387 #define MWM_FUNC_CLOSE (1L << 5) | |
388 | |
389 #define MWM_DECOR_ALL (1L << 0) | |
390 #define MWM_DECOR_BORDER (1L << 1) | |
391 #define MWM_DECOR_RESIZEH (1L << 2) | |
392 #define MWM_DECOR_TITLE (1L << 3) | |
393 #define MWM_DECOR_MENU (1L << 4) | |
394 #define MWM_DECOR_MINIMIZE (1L << 5) | |
395 #define MWM_DECOR_MAXIMIZE (1L << 6) | |
396 | |
397 #define MWM_INPUT_MODELESS 0 | |
398 #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 | |
399 #define MWM_INPUT_SYSTEM_MODAL 2 | |
400 #define MWM_INPUT_FULL_APPLICATION_MODAL 3 | |
401 #define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL | |
402 | |
403 #define MWM_TEAROFF_WINDOW (1L<<0) | |
32 | 404 |
405 typedef struct | |
406 { | |
407 long flags; | |
408 long functions; | |
409 long decorations; | |
410 long input_mode; | |
1236 | 411 long state; |
32 | 412 } MotifWmHints; |
413 | |
414 extern MotifWmHints vo_MotifWmHints; | |
415 extern Atom vo_MotifHints; | |
416 extern int vo_depthonscreen; | |
417 extern int vo_screenwidth; | |
418 extern int vo_screenheight; | |
419 | |
420 static MotifWmHints vo_MotifWmHints; | |
421 static Atom vo_MotifHints = None; | |
422 | |
1266 | 423 // Note: always d==0 ! |
32 | 424 void vo_x11_decoration( Display * vo_Display,Window w,int d ) |
425 { | |
1266 | 426 |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
427 if ( !WinID ) return; |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
428 |
1266 | 429 if(vo_fsmode&1){ |
430 XSetWindowAttributes attr; | |
5981 | 431 attr.override_redirect = (!d) ? True : False; |
1266 | 432 XChangeWindowAttributes(vo_Display, w, CWOverrideRedirect, &attr); |
4437 | 433 // XMapWindow(vo_Display, w); |
1266 | 434 } |
435 | |
1415 | 436 if(vo_fsmode&8){ |
437 XSetTransientForHint (vo_Display, w, RootWindow(vo_Display,mScreen)); | |
438 } | |
439 | |
32 | 440 vo_MotifHints=XInternAtom( vo_Display,"_MOTIF_WM_HINTS",0 ); |
441 if ( vo_MotifHints != None ) | |
442 { | |
1236 | 443 memset( &vo_MotifWmHints,0,sizeof( MotifWmHints ) ); |
444 vo_MotifWmHints.flags=MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS; | |
4993 | 445 if ( d ) |
446 { | |
6059 | 447 vo_MotifWmHints.functions=MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE; |
4993 | 448 d=MWM_DECOR_ALL; |
449 } | |
450 #if 0 | |
1266 | 451 vo_MotifWmHints.decorations=d|((vo_fsmode&2)?0:MWM_DECOR_MENU); |
4993 | 452 #else |
453 vo_MotifWmHints.decorations=d|((vo_fsmode&2)?MWM_DECOR_MENU:0); | |
454 #endif | |
32 | 455 XChangeProperty( vo_Display,w,vo_MotifHints,vo_MotifHints,32, |
1266 | 456 PropModeReplace,(unsigned char *)&vo_MotifWmHints,(vo_fsmode&4)?4:5 ); |
32 | 457 } |
458 } | |
459 | |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
460 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
|
461 XClassHint wmClass; |
6401 | 462 pid_t pid=getpid(); |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
463 wmClass.res_name = name; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
464 wmClass.res_class = "MPlayer"; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
465 XSetClassHint(display,window,&wmClass); |
6401 | 466 XChangeProperty(display,window, XInternAtom(display,"_NET_WM_PID", False), XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&pid, 1); |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
467 } |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1109
diff
changeset
|
468 |
4993 | 469 Window vo_window = None; |
6095 | 470 GC vo_gc = NULL; |
4993 | 471 XSizeHints vo_hint; |
4795 | 472 |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
473 #ifdef HAVE_NEW_GUI |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
474 void vo_setwindow( Window w,GC g ) { |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1501
diff
changeset
|
475 vo_window=w; vo_gc=g; |
1746 | 476 } |
723 | 477 #endif |
478 | |
6095 | 479 void vo_x11_uninit() |
4437 | 480 { |
7111 | 481 saver_on(mDisplay); |
6095 | 482 if(vo_window!=None) vo_showcursor( mDisplay,vo_window ); |
4742 | 483 |
4437 | 484 #ifdef HAVE_NEW_GUI |
485 /* destroy window only if it's not controlled by GUI */ | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
486 if ( !use_gui ) |
4437 | 487 #endif |
488 { | |
6095 | 489 if(vo_gc){ |
490 XSetBackground( mDisplay,vo_gc,0 ); | |
7766 | 491 XFreeGC( mDisplay,vo_gc ); |
6095 | 492 vo_gc=NULL; |
493 } | |
494 if(vo_window!=None){ | |
495 XClearWindow( mDisplay,vo_window ); | |
496 if (WinID < 0){ | |
6179 | 497 XEvent xev; |
6095 | 498 XUnmapWindow( mDisplay,vo_window ); |
499 XDestroyWindow(mDisplay, vo_window); | |
6179 | 500 do { XNextEvent( mDisplay,&xev ); } while ( xev.type != DestroyNotify || xev.xdestroywindow.event != vo_window ); |
6095 | 501 } |
502 vo_window=None; | |
503 } | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
6009
diff
changeset
|
504 vo_fs=0; |
7435 | 505 vo_old_width=vo_old_height=0; |
4437 | 506 } |
507 } | |
508 | |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
509 int vo_mouse_timer_const = 30; |
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
510 static int vo_mouse_counter = 30; |
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
511 |
32 | 512 int vo_x11_check_events(Display *mydisplay){ |
513 int ret=0; | |
514 XEvent Event; | |
515 char buf[100]; | |
516 KeySym keySym; | |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by Jrgen Keil <jk@tools.de>
arpi_esp
parents:
922
diff
changeset
|
517 static XComposeStatus stat; |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
518 |
32 | 519 // unsigned long vo_KeyTable[512]; |
520 | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
521 if ( ( vo_mouse_autohide )&&( --vo_mouse_counter == 0 ) ) vo_hidecursor( mydisplay,vo_window ); |
6095 | 522 |
4795 | 523 while ( XPending( mydisplay ) ) |
524 { | |
525 XNextEvent( mydisplay,&Event ); | |
4798 | 526 #ifdef HAVE_NEW_GUI |
5061 | 527 if ( use_gui ) |
528 { | |
529 guiGetEvent( 0,(char*)&Event ); | |
530 if ( vo_window != Event.xany.window ) continue; | |
531 } | |
4798 | 532 #endif |
6095 | 533 // printf("\rEvent.type=%X \n",Event.type); |
4795 | 534 switch( Event.type ) |
535 { | |
536 case Expose: | |
537 ret|=VO_EVENT_EXPOSE; | |
538 break; | |
539 case ConfigureNotify: | |
7435 | 540 // if (!vo_fs && (Event.xconfigure.width == vo_screenwidth || Event.xconfigure.height == vo_screenheight)) break; |
541 // if (vo_fs && Event.xconfigure.width != vo_screenwidth && Event.xconfigure.height != vo_screenheight) break; | |
8086 | 542 if ( vo_window == None ) break; |
4795 | 543 vo_dwidth=Event.xconfigure.width; |
544 vo_dheight=Event.xconfigure.height; | |
4812 | 545 #if 0 |
546 /* when resizing, x and y are zero :( */ | |
547 vo_dx=Event.xconfigure.x; | |
548 vo_dy=Event.xconfigure.y; | |
549 #else | |
550 { | |
551 Window root; | |
552 int foo; | |
6140
44dcc49a0d80
64bit incompatibility bug, patch by Artur Grabowski <art@blahonga.org>
arpi
parents:
6111
diff
changeset
|
553 Window win; |
4812 | 554 XGetGeometry(mydisplay, vo_window, &root, &foo, &foo, |
555 &foo/*width*/, &foo/*height*/, &foo, &foo); | |
556 XTranslateCoordinates(mydisplay, vo_window, root, 0, 0, | |
6140
44dcc49a0d80
64bit incompatibility bug, patch by Artur Grabowski <art@blahonga.org>
arpi
parents:
6111
diff
changeset
|
557 &vo_dx, &vo_dy, &win); |
4812 | 558 } |
559 #endif | |
4795 | 560 ret|=VO_EVENT_RESIZE; |
561 break; | |
562 case KeyPress: | |
4974 | 563 { |
564 int key; | |
565 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); | |
566 key=( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) ); | |
567 #ifdef HAVE_NEW_GUI | |
568 if ( ( use_gui )&&( key == wsEnter ) ) break; | |
569 #endif | |
570 vo_x11_putkey( key ); | |
571 ret|=VO_EVENT_KEYPRESS; | |
572 } | |
4795 | 573 break; |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
574 case MotionNotify: |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
575 if ( vo_mouse_autohide ) { vo_showcursor( mydisplay,vo_window ); vo_mouse_counter=vo_mouse_timer_const; } |
5651
b8d8d72776f2
fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents:
5538
diff
changeset
|
576 break; |
4795 | 577 case ButtonPress: |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
578 if ( vo_mouse_autohide ) { vo_showcursor( mydisplay,vo_window ); vo_mouse_counter=vo_mouse_timer_const; } |
4795 | 579 // Ignore mouse whell press event |
5656
70031f0cc4d2
Bug fix in mouse button handling for 2 scroller (I hope it work
albeu
parents:
5651
diff
changeset
|
580 if(Event.xbutton.button > 3) { |
70031f0cc4d2
Bug fix in mouse button handling for 2 scroller (I hope it work
albeu
parents:
5651
diff
changeset
|
581 mplayer_put_key(MOUSE_BTN0+Event.xbutton.button-1); |
70031f0cc4d2
Bug fix in mouse button handling for 2 scroller (I hope it work
albeu
parents:
5651
diff
changeset
|
582 break; |
70031f0cc4d2
Bug fix in mouse button handling for 2 scroller (I hope it work
albeu
parents:
5651
diff
changeset
|
583 } |
5062 | 584 #ifdef HAVE_NEW_GUI |
585 // Ignor mouse button 1 - 3 under gui | |
586 if ( use_gui && ( Event.xbutton.button >= 1 )&&( Event.xbutton.button <= 3 ) ) break; | |
587 #endif | |
4795 | 588 mplayer_put_key((MOUSE_BTN0+Event.xbutton.button-1)|MP_KEY_DOWN); |
589 break; | |
590 case ButtonRelease: | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5919
diff
changeset
|
591 if ( vo_mouse_autohide ) { vo_showcursor( mydisplay,vo_window ); vo_mouse_counter=vo_mouse_timer_const; } |
5062 | 592 #ifdef HAVE_NEW_GUI |
593 // Ignor mouse button 1 - 3 under gui | |
594 if ( use_gui && ( Event.xbutton.button >= 1 )&&( Event.xbutton.button <= 3 ) ) break; | |
595 #endif | |
4795 | 596 mplayer_put_key(MOUSE_BTN0+Event.xbutton.button-1); |
597 break; | |
5835 | 598 case PropertyNotify: |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
599 { |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
600 char * name = XGetAtomName( mydisplay,Event.xproperty.atom ); |
6046 | 601 int wm = vo_wm_Unknown; |
602 | |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
603 if ( !name ) break; |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
604 |
6046 | 605 // fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",vo_window,name,Event.xproperty.atom ); |
5910
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
606 |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
607 XFree( name ); |
20c335d98ab3
fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents:
5835
diff
changeset
|
608 } |
5835 | 609 break; |
723 | 610 } |
4795 | 611 } |
32 | 612 return ret; |
613 } | |
614 | |
5835 | 615 void vo_x11_sizehint( int x, int y, int width, int height, int max ) |
4993 | 616 { |
6046 | 617 vo_hint.flags=PPosition | PSize | PWinGravity; |
4993 | 618 vo_hint.x=x; vo_hint.y=y; vo_hint.width=width; vo_hint.height=height; |
5835 | 619 if ( max ) |
620 { | |
621 vo_hint.max_width=width; vo_hint.max_height=height; | |
622 vo_hint.flags|=PMaxSize; | |
623 } else { vo_hint.max_width=0; vo_hint.max_height=0; } | |
4993 | 624 vo_hint.win_gravity=StaticGravity; |
625 XSetWMNormalHints( mDisplay,vo_window,&vo_hint ); | |
626 } | |
627 | |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
628 void vo_x11_setlayer( int layer ) |
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
629 { |
8445 | 630 Atom type,arg1,arg2; |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
631 int format; |
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
632 unsigned long nitems, bytesafter; |
7747 | 633 Atom * args = NULL; |
8445 | 634 int i; |
635 | |
6034
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
636 if ( WinID >= 0 ) return; |
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
637 |
8653 | 638 switch ( vo_wm_type ) |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
639 { case vo_wm_Layered: |
6034
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
640 { |
6202 | 641 XClientMessageEvent xev; |
642 memset(&xev, 0, sizeof(xev)); | |
643 xev.type = ClientMessage; | |
8388
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
644 xev.display= mDisplay; |
6202 | 645 xev.window = vo_window; |
646 xev.message_type = XInternAtom(mDisplay, "_WIN_LAYER", False); | |
647 xev.format = 32; | |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
648 xev.data.l[0] = layer?ice_layer:WIN_LAYER_NORMAL; // if not fullscreen, stay on layer "Normal" |
6202 | 649 xev.data.l[1] = CurrentTime; |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
650 mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Layered style stay on top ( layer %d ).\n",xev.data.l[0] ); |
6202 | 651 XSendEvent(mDisplay, mRootWin, False, SubstructureNotifyMask, (XEvent *) &xev); |
8653 | 652 break; |
6034
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
653 } |
8653 | 654 case vo_wm_NetWM: |
8388
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
655 { |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
656 XClientMessageEvent xev; |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
657 mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] NET style stay on top ( layer %d ).\n",layer ); |
8645 | 658 |
8388
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
659 memset( &xev,0,sizeof( xev ) ); |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
660 xev.type=ClientMessage; |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
661 xev.message_type=XInternAtom( mDisplay,"_NET_WM_STATE",False ); |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
662 xev.display=mDisplay; |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
663 xev.window=vo_window; |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
664 xev.format=32; |
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
665 xev.data.l[0]=layer; |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
666 |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
667 if (net_wm_support & SUPPORT_FULLSCREEN) |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
668 { |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
669 xev.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_FULLSCREEN",False ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
670 XSendEvent( mDisplay,mRootWin,False,SubstructureRedirectMask,(XEvent*)&xev ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
671 } else |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
672 if (net_wm_support & SUPPORT_STAYS_ON_TOP) |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
673 { |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
674 xev.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_STAYS_ON_TOP",False ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
675 XSendEvent( mDisplay,mRootWin,False,SubstructureRedirectMask,(XEvent*)&xev ); |
8653 | 676 } else |
677 if (net_wm_support & SUPPORT_ABOVE) | |
678 { | |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
679 xev.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_ABOVE",False ); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
680 XSendEvent( mDisplay,mRootWin,False,SubstructureRedirectMask,(XEvent*)&xev ); |
8445 | 681 } |
8388
45eb2d4d633c
The detection of a NetWM class window manager hints is tested before
arpi
parents:
8354
diff
changeset
|
682 } |
8653 | 683 } |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
684 } |
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
685 |
4981 | 686 void vo_x11_fullscreen( void ) |
687 { | |
7435 | 688 int x,y,w,h; |
5919 | 689 |
6034
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
690 if ( WinID >= 0 ) return; |
7570f4666c15
fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents:
6016
diff
changeset
|
691 |
8660
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
692 // window manager could be changed during play |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
693 vo_wm_type=vo_wm_detect(); |
39476cbd1673
I have looked at the fullscreen code and realized that there are
arpi
parents:
8653
diff
changeset
|
694 |
7435 | 695 if ( vo_fs ){ |
696 // fs->win | |
697 if(vo_dwidth != vo_screenwidth && vo_dheight != vo_screenheight) return; | |
698 vo_fs=VO_FALSE; | |
699 x=vo_old_x; y=vo_old_y; w=vo_old_width; h=vo_old_height; | |
700 } else { | |
701 // win->fs | |
702 if(vo_old_width && | |
703 (vo_dwidth==vo_screenwidth && vo_dwidth!=vo_old_width) && | |
704 (vo_dheight==vo_screenheight && vo_dheight!=vo_old_height) ) return; | |
705 vo_fs=VO_TRUE; | |
706 vo_old_x=vo_dx; vo_old_y=vo_dy; vo_old_width=vo_dwidth; vo_old_height=vo_dheight; | |
707 x=0; y=0; w=vo_screenwidth; h=vo_screenheight; | |
708 } | |
8653 | 709 if (! (net_wm_support & SUPPORT_FULLSCREEN)) |
710 { | |
711 vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 0 : 1 ); | |
712 vo_x11_sizehint( x,y,w,h,0 ); | |
713 } | |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5981
diff
changeset
|
714 vo_x11_setlayer( vo_fs ); |
8653 | 715 if (! (net_wm_support & SUPPORT_FULLSCREEN)) |
716 { | |
717 if(vo_wm_type==vo_wm_Unknown && !(vo_fsmode&16)) | |
718 // XUnmapWindow( mDisplay,vo_window ); // required for MWM | |
719 XWithdrawWindow(mDisplay,vo_window,mScreen); | |
720 XMoveResizeWindow( mDisplay,vo_window,x,y,w,h ); | |
721 } | |
6342
40027495a6ed
xinerama fullscreen switching fix by Joachim Breitner <mail@joachim-breitner.de>
attila
parents:
6303
diff
changeset
|
722 #ifdef HAVE_XINERAMA |
40027495a6ed
xinerama fullscreen switching fix by Joachim Breitner <mail@joachim-breitner.de>
attila
parents:
6303
diff
changeset
|
723 vo_x11_xinerama_move(mDisplay,vo_window); |
40027495a6ed
xinerama fullscreen switching fix by Joachim Breitner <mail@joachim-breitner.de>
attila
parents:
6303
diff
changeset
|
724 #endif |
5835 | 725 XMapRaised( mDisplay,vo_window ); |
726 XRaiseWindow( mDisplay,vo_window ); | |
727 XFlush( mDisplay ); | |
4981 | 728 } |
729 | |
324 | 730 void saver_on(Display *mDisplay) { |
731 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
732 #ifdef HAVE_XDPMS |
324 | 733 int nothing; |
734 if (dpms_disabled) | |
735 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
736 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
|
737 { |
741 | 738 if (!DPMSEnable(mDisplay)) { // restoring power saving settings |
6296 | 739 mp_msg(MSGT_VO,MSGL_WARN,"DPMS not available?\n"); |
741 | 740 } else { |
741 // DPMS does not seem to be enabled unless we call DPMSInfo | |
742 BOOL onoff; | |
743 CARD16 state; | |
8097 | 744 DPMSForceLevel(mDisplay, DPMSModeOn); |
741 | 745 DPMSInfo(mDisplay, &state, &onoff); |
746 if (onoff) { | |
6296 | 747 mp_msg(MSGT_VO,MSGL_INFO,"Successfully enabled DPMS\n"); |
741 | 748 } else { |
6296 | 749 mp_msg(MSGT_VO,MSGL_WARN,"Could not enable DPMS\n"); |
741 | 750 } |
751 } | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
752 } |
7633 | 753 dpms_disabled=0; |
324 | 754 } |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
755 #endif |
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
756 |
324 | 757 if (timeout_save) |
758 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
759 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
|
760 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
|
761 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
|
762 XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp); |
7633 | 763 timeout_save=0; |
324 | 764 } |
765 | |
8097 | 766 if (xscreensaver_was_running && stop_xscreensaver) { |
767 system("cd /; xscreensaver -no-splash &"); | |
768 xscreensaver_was_running = 0; | |
769 } | |
8354
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
770 if (kdescreensaver_was_running && stop_xscreensaver) { |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
771 system("dcop kdesktop KScreensaverIface enable true 2>/dev/null >/dev/null"); |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
772 kdescreensaver_was_running = 0; |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
773 } |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
774 |
6303 | 775 |
324 | 776 } |
777 | |
778 void saver_off(Display *mDisplay) { | |
779 | |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
780 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
|
781 #ifdef HAVE_XDPMS |
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
782 int nothing; |
324 | 783 |
784 if (DPMSQueryExtension(mDisplay, ¬hing, ¬hing)) | |
785 { | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
786 BOOL onoff; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
787 CARD16 state; |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
788 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
|
789 if (onoff) |
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
790 { |
741 | 791 Status stat; |
6296 | 792 mp_msg(MSGT_VO,MSGL_INFO,"Disabling DPMS\n"); |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
793 dpms_disabled=1; |
741 | 794 stat = DPMSDisable(mDisplay); // monitor powersave off |
6296 | 795 mp_msg(MSGT_VO,MSGL_V,"DPMSDisable 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
|
796 } |
324 | 797 } |
1345
be674b95b485
x11_common does not compile, when the XDPMS extension is not available on the
jkeil
parents:
1266
diff
changeset
|
798 #endif |
8097 | 799 if (!timeout_save) { |
800 XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp); | |
801 if (timeout_save) | |
802 XSetScreenSaver(mDisplay, 0, interval, prefer_blank, allow_exp); | |
803 } | |
458
49b0474b2e26
I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents:
456
diff
changeset
|
804 // turning off screensaver |
8354
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
805 if (stop_xscreensaver && !xscreensaver_was_running) |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
806 { |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
807 xscreensaver_was_running = (system("xscreensaver-command -version 2>/dev/null >/dev/null")==0); |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
808 if (xscreensaver_was_running) |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
809 system("xscreensaver-command -exit 2>/dev/null >/dev/null"); |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
810 } |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
811 if (stop_xscreensaver && !kdescreensaver_was_running) |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
812 { |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
813 kdescreensaver_was_running=(system("dcop kdesktop KScreensaverIface isEnabled 2>/dev/null | sed 's/1/true/g' | grep true 2>/dev/null >/dev/null")==0); |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
814 if (kdescreensaver_was_running) |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
815 system("dcop kdesktop KScreensaverIface enable false 2>/dev/null >/dev/null"); |
8a0b6e083280
This patch fixes the screensaver issues in mplayer. It will correctly read
arpi
parents:
8215
diff
changeset
|
816 } |
326 | 817 } |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
818 |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
819 static XErrorHandler old_handler = NULL; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
820 static int selectinput_err = 0; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
821 static int x11_selectinput_errorhandler(Display *display, XErrorEvent *event) |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
822 { |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
823 if (event->error_code == BadAccess) { |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
824 selectinput_err = 1; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
825 mp_msg(MSGT_VO, MSGL_ERR, "X11 error : BadAccess during XSelectInput Call\n"); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
826 mp_msg(MSGT_VO, MSGL_ERR, "X11 error : The 'ButtonPressMask' mask of specified window has probably already used by another appication(see man XSelectInput) \n"); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
827 /* If you think mplayer should shutdown with this error, comments out following line */ |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
828 return 0; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
829 } |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
830 if (old_handler != NULL) old_handler(display, event); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
831 else x11_errorhandler(display, event); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
832 return 0; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
833 } |
3990 | 834 |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
835 void vo_x11_selectinput_witherr(Display *display, Window w, long event_mask) |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
836 { |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
837 XSync(display, False); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
838 old_handler = XSetErrorHandler(x11_selectinput_errorhandler); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
839 selectinput_err = 0; |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
840 XSelectInput(display, w, event_mask); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
841 XSync(display, False); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
842 XSetErrorHandler(old_handler); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
843 if (selectinput_err) { |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
844 mp_msg(MSGT_VO, MSGL_ERR, "X11 error : Mplayer discards mouse control and retry XSelectInput...\n"); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
845 XSelectInput(display, w, event_mask & (~(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)) ); |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
846 } |
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6401
diff
changeset
|
847 } |
3990 | 848 |
849 #ifdef HAVE_XINERAMA | |
850 void vo_x11_xinerama_move(Display *dsp, Window w) | |
851 { | |
852 if(XineramaIsActive(dsp)) | |
853 { | |
4017 | 854 /* printf("XXXX Xinerama screen: x: %hd y: %hd\n",xinerama_x,xinerama_y); */ |
855 XMoveWindow(dsp,w,xinerama_x,xinerama_y); | |
3990 | 856 } |
857 } | |
448
198b46b739d8
qrva eletbe nem kene cvs-t elbaszni inkabb ne nyuljatok hozza baz+
arpi_esp
parents:
440
diff
changeset
|
858 #endif |
3990 | 859 |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
860 #ifdef HAVE_XF86VM |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
861 void vo_vm_switch(uint32_t X, uint32_t Y, int* modeline_width, int* modeline_height) |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
862 { |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
863 unsigned int vm_event, vm_error; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
864 unsigned int vm_ver, vm_rev; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
865 int i,j,have_vm=0; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
866 |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
867 int modecount; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
868 |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
869 if (XF86VidModeQueryExtension(mDisplay, &vm_event, &vm_error)) { |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
870 XF86VidModeQueryVersion(mDisplay, &vm_ver, &vm_rev); |
6296 | 871 mp_msg(MSGT_VO,MSGL_V,"XF86VidMode Extension v%i.%i\n", vm_ver, vm_rev); |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
872 have_vm=1; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
873 } else |
6296 | 874 mp_msg(MSGT_VO,MSGL_WARN,"XF86VidMode Extenstion not available.\n"); |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
875 |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
876 if (have_vm) { |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
877 if (vidmodes==NULL) |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
878 XF86VidModeGetAllModeLines(mDisplay,mScreen,&modecount,&vidmodes); |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
879 j=0; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
880 *modeline_width=vidmodes[0]->hdisplay; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
881 *modeline_height=vidmodes[0]->vdisplay; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
882 |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
883 for (i=1; i<modecount; i++) |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
884 if ((vidmodes[i]->hdisplay >= X) && (vidmodes[i]->vdisplay >= Y)) |
5538 | 885 if ( (vidmodes[i]->hdisplay <= *modeline_width ) && (vidmodes[i]->vdisplay <= *modeline_height) ) |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
886 { |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
887 *modeline_width=vidmodes[i]->hdisplay; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
888 *modeline_height=vidmodes[i]->vdisplay; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
889 j=i; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
890 } |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
891 |
6296 | 892 mp_msg(MSGT_VO,MSGL_INFO,"XF86VM: Selected video mode %dx%d for image size %dx%d.\n",*modeline_width, *modeline_height, X, Y); |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
893 XF86VidModeLockModeSwitch(mDisplay,mScreen,0); |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
894 XF86VidModeSwitchToMode(mDisplay,mScreen,vidmodes[j]); |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
895 XF86VidModeSwitchToMode(mDisplay,mScreen,vidmodes[j]); |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
896 X=(vo_screenwidth-*modeline_width)/2; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
897 Y=(vo_screenheight-*modeline_height)/2; |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
898 XF86VidModeSetViewPort(mDisplay,mScreen,X,Y); |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
899 } |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
900 } |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
901 |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
902 void vo_vm_close(Display *dpy) |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
903 { |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
904 #ifdef HAVE_NEW_GUI |
5019 | 905 if (vidmodes!=NULL && vo_window != None) |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
906 #else |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
907 if (vidmodes!=NULL) |
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
908 #endif |
5019 | 909 { |
910 int i, modecount; | |
911 int screen; screen=DefaultScreen( dpy ); | |
912 | |
913 free(vidmodes); vidmodes=NULL; | |
914 XF86VidModeGetAllModeLines(mDisplay,mScreen,&modecount,&vidmodes); | |
915 for (i=0; i<modecount; i++) | |
916 if ((vidmodes[i]->hdisplay == vo_screenwidth) && (vidmodes[i]->vdisplay == vo_screenheight)) | |
917 { | |
6296 | 918 mp_msg(MSGT_VO,MSGL_INFO,"\nReturning to original mode %dx%d\n", vo_screenwidth, vo_screenheight); |
5019 | 919 break; |
920 } | |
921 | |
922 XF86VidModeSwitchToMode(dpy,screen,vidmodes[i]); | |
923 XF86VidModeSwitchToMode(dpy,screen,vidmodes[i]); | |
924 free(vidmodes); | |
925 } | |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
926 } |
3990 | 927 #endif |
4425
6144f63cbaa1
common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4181
diff
changeset
|
928 |
7256
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
929 #endif /* X11_FULLSCREEN */ |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
930 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
931 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
932 /* |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
933 * Scan the available visuals on this Display/Screen. Try to find |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
934 * the 'best' available TrueColor visual that has a decent color |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
935 * depth (at least 15bit). If there are multiple visuals with depth |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
936 * >= 15bit, we prefer visuals with a smaller color depth. |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
937 */ |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
938 int vo_find_depth_from_visuals(Display *dpy, int screen, Visual **visual_return) |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
939 { |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
940 XVisualInfo visual_tmpl; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
941 XVisualInfo *visuals; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
942 int nvisuals, i; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
943 int bestvisual = -1; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
944 int bestvisual_depth = -1; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
945 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
946 visual_tmpl.screen = screen; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
947 visual_tmpl.class = TrueColor; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
948 visuals = XGetVisualInfo(dpy, |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
949 VisualScreenMask | VisualClassMask, &visual_tmpl, |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
950 &nvisuals); |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
951 if (visuals != NULL) { |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
952 for (i = 0; i < nvisuals; i++) { |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
953 mp_msg(MSGT_VO,MSGL_V,"vo: X11 truecolor visual %#x, depth %d, R:%lX G:%lX B:%lX\n", |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
954 visuals[i].visualid, visuals[i].depth, |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
955 visuals[i].red_mask, visuals[i].green_mask, |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
956 visuals[i].blue_mask); |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
957 /* |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
958 * save the visual index and it's depth, if this is the first |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
959 * truecolor visul, or a visual that is 'preferred' over the |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
960 * previous 'best' visual |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
961 */ |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
962 if (bestvisual_depth == -1 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
963 || (visuals[i].depth >= 15 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
964 && ( visuals[i].depth < bestvisual_depth |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
965 || bestvisual_depth < 15))) { |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
966 bestvisual = i; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
967 bestvisual_depth = visuals[i].depth; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
968 } |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
969 } |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
970 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
971 if (bestvisual != -1 && visual_return != NULL) |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
972 *visual_return = visuals[bestvisual].visual; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
973 |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
974 XFree(visuals); |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
975 } |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
976 return bestvisual_depth; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
977 } |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7111
diff
changeset
|
978 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
979 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
980 static Colormap cmap = None; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
981 static XColor cols[256]; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
982 static int cm_size, red_mask, green_mask, blue_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
983 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
984 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
985 Colormap vo_x11_create_colormap(XVisualInfo *vinfo) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
986 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
987 unsigned k, r, g, b, ru, gu, bu, m, rv, gv, bv, rvu, gvu, bvu; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
988 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
989 if (vinfo->class != DirectColor) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
990 return XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
991 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
992 /* can this function get called twice or more? */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
993 if (cmap) return cmap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
994 cm_size = vinfo->colormap_size; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
995 red_mask = vinfo->red_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
996 green_mask = vinfo->green_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
997 blue_mask = vinfo->blue_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
998 ru = (red_mask&(red_mask-1))^red_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
999 gu = (green_mask&(green_mask-1))^green_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1000 bu = (blue_mask&(blue_mask-1))^blue_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1001 rvu = 65536ull*ru/(red_mask + ru); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1002 gvu = 65536ull*gu/(green_mask + gu); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1003 bvu = 65536ull*bu/(blue_mask + bu); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1004 r = g = b = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1005 rv = gv = bv = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1006 m = DoRed|DoGreen|DoBlue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1007 for (k = 0; k < cm_size; k++) { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1008 int t; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1009 cols[k].pixel = r|g|b; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1010 cols[k].red = rv; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1011 cols[k].green = gv; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1012 cols[k].blue = bv; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1013 cols[k].flags = m; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1014 t = (r + ru) & red_mask; if (t < r) m &= ~DoRed; r = t; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1015 t = (g + gu) & green_mask; if (t < g) m &= ~DoGreen; g = t; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1016 t = (b + bu) & blue_mask; if (t < b) m &= ~DoBlue; b = t; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1017 rv += rvu; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1018 gv += gvu; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1019 bv += bvu; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1020 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1021 cmap = XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocAll); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1022 XStoreColors(mDisplay, cmap, cols, cm_size); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1023 return cmap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1024 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1025 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1026 /* |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1027 * Via colormaps/gamma ramps we can do gamma, brightness, contrast, |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1028 * hue and red/green/blue intensity, but we cannot do saturation. |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1029 * Currently only gamma, brightness and contrast are implemented. |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1030 * Is there sufficient interest for hue and/or red/green/blue intensity? |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1031 */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1032 /* these values have range [-100,100] and are initially 0 */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1033 static int vo_gamma = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1034 static int vo_brightness = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1035 static int vo_contrast = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1036 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1037 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1038 uint32_t vo_x11_set_equalizer(char *name, int value) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1039 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1040 float gamma, brightness, contrast; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1041 float rf, gf, bf; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1042 int k; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1043 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1044 /* |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1045 * IMPLEMENTME: consider using XF86VidModeSetGammaRamp in the case |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1046 * of TrueColor-ed window but be careful: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1047 * unlike the colormaps, which are private for the X client |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1048 * who created them and thus automatically destroyed on client |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1049 * disconnect, this gamma ramp is a system-wide (X-server-wide) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1050 * setting and _must_ be restored before the process exit. |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1051 * Unforunately when the process crashes (or get killed |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1052 * for some reason) it is impossible to restore the setting, |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1053 * and such behaviour could be rather annoying for the users. |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1054 */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1055 if (cmap == None) return VO_NOTAVAIL; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1056 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1057 if (!strcasecmp(name, "brightness")) vo_brightness = value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1058 else if (!strcasecmp(name, "contrast")) vo_contrast = value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1059 else if (!strcasecmp(name, "gamma")) vo_gamma = value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1060 else return VO_NOTIMPL; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1061 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1062 brightness = 0.01*vo_brightness; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1063 contrast = tan(0.0095*(vo_contrast+100)*M_PI/4); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1064 gamma = pow(2, -0.02*vo_gamma); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1065 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1066 rf = (float)((red_mask & (red_mask - 1)) ^ red_mask)/red_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1067 gf = (float)((green_mask & (green_mask - 1)) ^ green_mask)/green_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1068 bf = (float)((blue_mask & (blue_mask - 1)) ^ blue_mask)/blue_mask; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1069 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1070 /* now recalculate the colormap using the newly set value */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1071 for (k = 0; k < cm_size; k++) { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1072 float s; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1073 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1074 s = pow(rf*k, gamma); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1075 s = (s - 0.5)*contrast + 0.5; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1076 s += brightness; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1077 if (s < 0) s = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1078 if (s > 1) s = 1; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1079 cols[k].red = (unsigned short)(s * 65535); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1080 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1081 s = pow(gf*k, gamma); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1082 s = (s - 0.5)*contrast + 0.5; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1083 s += brightness; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1084 if (s < 0) s = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1085 if (s > 1) s = 1; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1086 cols[k].green = (unsigned short)(s * 65535); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1087 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1088 s = pow(bf*k, gamma); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1089 s = (s - 0.5)*contrast + 0.5; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1090 s += brightness; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1091 if (s < 0) s = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1092 if (s > 1) s = 1; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1093 cols[k].blue = (unsigned short)(s * 65535); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1094 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1095 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1096 XStoreColors(mDisplay, cmap, cols, cm_size); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1097 XFlush(mDisplay); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1098 return VO_TRUE; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1099 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1100 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1101 uint32_t vo_x11_get_equalizer(char *name, int *value) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1102 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1103 if (cmap == None) return VO_NOTAVAIL; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1104 if (!strcasecmp(name, "brightness")) *value = vo_brightness; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1105 else if (!strcasecmp(name, "contrast")) *value = vo_contrast; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1106 else if (!strcasecmp(name, "gamma")) *value = vo_gamma; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1107 else return VO_NOTIMPL; |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8097
diff
changeset
|
1108 return VO_TRUE; |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1109 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1110 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7766
diff
changeset
|
1111 |