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