annotate Gui/wm/ws.c @ 8635:81dbd28ef7c0

these patches let ,,oldstyle'' and freetype subtitle renderers live together happily. if an oldstyle subtitle (font.desc) is found, it will be used. otherwise mplayer will choose subfont.ttf, if freetype was detected during ./configure. (also you can use -font /path/to/font.desc and -font /path/to/foobar.ttf too) patch-set by Wojtek Kaniewski <wojtekka@bydg.pdi.net>
author arpi
date Sun, 29 Dec 2002 14:59:23 +0000
parents 7988573021e8
children b8c271750450
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
2 // --------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
3 // AutoSpace Window System for Linux/Win32 v0.85
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
4 // Writed by pontscho/fresh!mindworkz
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
5 // --------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
6
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
7 #include <X11/Xlib.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
8 #include <X11/Xproto.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
9 #include <X11/Xutil.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
10 #include <X11/keysym.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
11 #include <X11/Xatom.h>
2081
efcab819ac24 gcc3 warning fixed
arpi
parents: 2045
diff changeset
12
efcab819ac24 gcc3 warning fixed
arpi
parents: 2045
diff changeset
13 #include <stdio.h>
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
14 #include <stdlib.h>
2081
efcab819ac24 gcc3 warning fixed
arpi
parents: 2045
diff changeset
15 #include <string.h>
efcab819ac24 gcc3 warning fixed
arpi
parents: 2045
diff changeset
16 #include <unistd.h>
efcab819ac24 gcc3 warning fixed
arpi
parents: 2045
diff changeset
17 #include <errno.h>
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
18
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
19 #include <inttypes.h>
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
20
4818
3473ca9ef158 new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents: 4566
diff changeset
21 #include "../../config.h"
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
22 #include "ws.h"
6967
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
23 #include "wsxdnd.h"
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
24 #include "../../postproc/rgb2rgb.h"
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
25 #include "../../mp_msg.h"
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
26 #include "../../mplayer.h"
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
27
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
28 #include <X11/extensions/XShm.h>
2476
a6c5a537f30a a few warning fixes (missing #include's)
pl
parents: 2081
diff changeset
29 #ifdef HAVE_XSHAPE
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
30 #include <X11/extensions/shape.h>
2476
a6c5a537f30a a few warning fixes (missing #include's)
pl
parents: 2081
diff changeset
31 #endif
a6c5a537f30a a few warning fixes (missing #include's)
pl
parents: 2081
diff changeset
32
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
33 #include <sys/ipc.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
34 #include <sys/shm.h>
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
35
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
36 #define ENABLE_DPMS 0
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
37
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
38 typedef struct
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
39 {
3054
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
40 unsigned long flags;
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
41 unsigned long functions;
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
42 unsigned long decorations;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
43 long input_mode;
3054
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
44 unsigned long status;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
45 } MotifWmHints;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
46
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
47 Atom wsMotifHints;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
48
4465
b013d01d9968 small bugfixes, and kill other warning
pontscho
parents: 4411
diff changeset
49 int wsMaxX = 0; // Screen width.
b013d01d9968 small bugfixes, and kill other warning
pontscho
parents: 4411
diff changeset
50 int wsMaxY = 0; // Screen height.
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
51
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
52 Display * wsDisplay;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
53 int wsScreen;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
54 Window wsRootWin;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
55 XEvent wsEvent;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
56 int wsWindowDepth;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
57 int wsWMType = wsWMUnknown;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
58 GC wsHGC;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
59 MotifWmHints wsMotifWmHints;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
60 Atom wsTextProperlyAtom = None;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
61 int wsLayer = 0;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
62
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
63 int wsDepthOnScreen = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
64 int wsRedMask = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
65 int wsGreenMask = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
66 int wsBlueMask = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
67 int wsOutMask = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
68
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
69 int wsTrue = True;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
70
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
71 wsTWindow * wsWindowList[5] = { NULL,NULL,NULL,NULL,NULL };
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
72 int wsWLCount = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
73
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
74 unsigned long wsKeyTable[512];
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
75
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
76 int wsUseXShm = 1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
77 int wsUseXShape = 1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
78
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
79 int XShmGetEventBase( Display* );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
80 inline int wsSearch( Window win );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
81
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
82 // ---
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
83
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
84 #define PACK_RGB16(r,g,b,pixel) pixel=(b>>3);\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
85 pixel<<=6;\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
86 pixel|=(g>>2);\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
87 pixel<<=5;\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
88 pixel|=(r>>3)
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
89
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
90 #define PACK_RGB15(r,g,b,pixel) pixel=(b>>3);\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
91 pixel<<=5;\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
92 pixel|=(g>>3);\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
93 pixel<<=5;\
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
94 pixel|=(r>>3)
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
95
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
96 typedef void(*wsTConvFunc)( const unsigned char * in_pixels, unsigned char * out_pixels, unsigned num_pixels );
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
97 wsTConvFunc wsConvFunc = NULL;
7706
90044efe01ee - better dxr3 support
pontscho
parents: 7572
diff changeset
98
90044efe01ee - better dxr3 support
pontscho
parents: 7572
diff changeset
99 void rgb32torgb32( const unsigned char * src, unsigned char * dst,unsigned int src_size )
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
100 { memcpy( dst,src,src_size ); }
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
101
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
102 // ---
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
103
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
104 #define MWM_HINTS_FUNCTIONS (1L << 0)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
105 #define MWM_HINTS_DECORATIONS (1L << 1)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
106 #define MWM_HINTS_INPUT_MODE (1L << 2)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
107 #define MWM_HINTS_STATUS (1L << 3)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
108
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
109 #define MWM_FUNC_ALL (1L << 0)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
110 #define MWM_FUNC_RESIZE (1L << 1)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
111 #define MWM_FUNC_MOVE (1L << 2)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
112 #define MWM_FUNC_MINIMIZE (1L << 3)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
113 #define MWM_FUNC_MAXIMIZE (1L << 4)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
114 #define MWM_FUNC_CLOSE (1L << 5)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
115
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
116 #define MWM_DECOR_ALL (1L << 0)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
117 #define MWM_DECOR_BORDER (1L << 1)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
118 #define MWM_DECOR_RESIZEH (1L << 2)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
119 #define MWM_DECOR_TITLE (1L << 3)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
120 #define MWM_DECOR_MENU (1L << 4)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
121 #define MWM_DECOR_MINIMIZE (1L << 5)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
122 #define MWM_DECOR_MAXIMIZE (1L << 6)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
123
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
124 #define MWM_INPUT_MODELESS 0
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
125 #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
126 #define MWM_INPUT_SYSTEM_MODAL 2
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
127 #define MWM_INPUT_FULL_APPLICATION_MODAL 3
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
128 #define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
129
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
130 #define MWM_TEAROFF_WINDOW (1L<<0)
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
131
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
132 void wsWindowDecoration( wsTWindow * win,long d )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
133 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
134 wsMotifHints=XInternAtom( wsDisplay,"_MOTIF_WM_HINTS",0 );
3054
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
135 if ( wsMotifHints == None ) return;
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
136
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
137 memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) );
5031
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
138 wsMotifWmHints.flags=MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
139 if ( d )
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
140 {
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
141 wsMotifWmHints.functions=MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE;
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
142 wsMotifWmHints.decorations=MWM_DECOR_ALL;
8e43137d59d8 rewrite MWM hint handling
pontscho
parents: 4818
diff changeset
143 }
3054
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
144 XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32,
9507f90d8254 add half dvd support for gui
pontscho
parents: 2981
diff changeset
145 PropModeReplace,(unsigned char *)&wsMotifWmHints,5 );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
146 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
147
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
148 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
149 // Init X Window System.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
150 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
151
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
152 int wsIOErrorHandler( Display * dpy )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
153 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
154 fprintf( stderr,"[ws] io error in display.\n" );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
155 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
156 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
157
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
158 int wsErrorHandler( Display * dpy,XErrorEvent * Event )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
159 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
160 char type[128];
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
161 XGetErrorText( wsDisplay,Event->error_code,type,128 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
162 fprintf(stderr,"[ws] Error in display.\n");
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
163 fprintf(stderr,"[ws] Error code: %d ( %s )\n",Event->error_code,type );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
164 fprintf(stderr,"[ws] Request code: %d\n",Event->request_code );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
165 fprintf(stderr,"[ws] Minor code: %d\n",Event->minor_code );
7801
48b7d7fd7075 - wsErrorHandler was crashing on solaris with a null pointer access in printf;
jkeil
parents: 7751
diff changeset
166 fprintf(stderr,"[ws] Modules: %s\n",current_module?current_module:"(NULL)" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
167 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
168 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
169
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
170 int wsWindowManagerType( void )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
171 {
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
172 Atom type;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
173 int format;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
174 unsigned long nitems, bytesafter;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
175 unsigned char * args = NULL;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
176
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
177 Window win;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
178 XEvent xev;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
179 int c = 0;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
180 int wm = wsWMUnknown;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
181
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
182 // --- gnome
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
183 /*
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
184 type=XInternAtom( wsDisplay,"_WIN_SUPPORTING_WM_CHECK",False );
6159
dcf195b784bf applied 64bit patch from Ulrich Hecht <uli@suse.de>
pontscho
parents: 6146
diff changeset
185 if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( int32_t ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
186 {
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
187 mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is Gnome\n" );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
188 XFree( args );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
189 return wsWMGnome;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
190 }
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
191 */
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
192 // --- net wm
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
193 type=XInternAtom( wsDisplay,"_NET_SUPPORTED",False );
6159
dcf195b784bf applied 64bit patch from Ulrich Hecht <uli@suse.de>
pontscho
parents: 6146
diff changeset
194 if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( int32_t ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
195 {
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
196 mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is NetWM\n" );
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
197 XFree( args );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
198 return wsWMNetWM;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
199 }
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
200
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
201 // --- other wm
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
202 mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Create window for WM detect ...\n" );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
203 win=XCreateSimpleWindow( wsDisplay,wsRootWin,wsMaxX,wsMaxY,1,1,0,0,0 );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
204 XSelectInput( wsDisplay,win,PropertyChangeMask | StructureNotifyMask );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
205 XMapWindow( wsDisplay,win );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
206 XMoveWindow( wsDisplay,win,wsMaxX,wsMaxY );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
207 do
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
208 {
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
209 XCheckWindowEvent( wsDisplay,win,PropertyChangeMask | StructureNotifyMask,&xev );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
210
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
211 if ( xev.type == PropertyNotify )
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
212 {
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
213 char * name = XGetAtomName( wsDisplay,xev.xproperty.atom );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
214 if ( !name ) break;
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
215
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
216 if ( !strncmp( name,"_ICEWM_TRAY",11 ) )
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
217 { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is IceWM.\n" ); wm=wsWMIceWM; break; }
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
218 if ( !strncmp( name,"_KDE_",5 ) )
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
219 { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is KDE.\n" ); wm=wsWMKDE; break; }
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
220 if ( !strncmp( name,"KWM_WIN_DESKTOP",15 ) )
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
221 { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is WindowMaker style.\n" ); wm=wsWMWMaker; break; }
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
222 // fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",win,name,xev.xproperty.atom );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
223 XFree( name );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
224 }
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
225 } while( c++ < 25 );
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
226 XUnmapWindow( wsDisplay,win );
6009
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
227 XDestroyWindow( wsDisplay,win );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
228 #ifdef MP_DEBUG
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
229 if ( wm == wsWMUnknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Unknown wm type...\n" );
bb1f3552f118 wm detection -- round two
pontscho
parents: 5997
diff changeset
230 #endif
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
231 return wsWMUnknown;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
232 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
233
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
234 extern int vo_wm_type;
7892
4154b3126927 small warning fix from Dominik Mierzejewski
pontscho
parents: 7802
diff changeset
235 extern int vo_find_depth_from_visuals(Display *dpy, int screen, Visual **visual_return);
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
236
1723
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
237 void wsXInit( void* mDisplay )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
238 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
239 int eventbase;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
240 int errorbase;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
241
1723
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
242 if(mDisplay){
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
243 wsDisplay=mDisplay;
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
244 } else {
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
245 char * DisplayName = ":0.0";
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
246 if ( getenv( "DISPLAY" ) ) DisplayName=getenv( "DISPLAY" );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
247 wsDisplay=XOpenDisplay( DisplayName );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
248 if ( !wsDisplay )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
249 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
250 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] couldn't open the display !\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
251 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
252 }
1723
5e4214a7540e GUI stuff. now seeking works, and xmga renders to video window
arpi
parents: 1709
diff changeset
253 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
254
6967
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
255 /* enable DND atoms */
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
256 wsXDNDInitialize();
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
257
1838
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
258 { /* on remote display XShm will be disabled - LGB */
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
259 char *dispname=DisplayString(wsDisplay);
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
260 int localdisp=1;
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
261 if (dispname&&*dispname!=':') {
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
262 localdisp=0;
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
263 wsUseXShm=0;
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
264 }
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
265 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[ws] Display name: %s => %s display.\n",dispname,localdisp?"local":"REMOTE");
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
266 if (!localdisp) mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Remote display, disabling XMITSHM\n");
1838
4984bd55518e add lgb's localhost detect
pontscho
parents: 1823
diff changeset
267 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
268 if ( !XShmQueryExtension( wsDisplay ) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
269 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
270 mp_msg( MSGT_GPLAYER,MSGL_ERR,"[ws] sorry, your system is not supported X shared memory extension.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
271 wsUseXShm=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
272 }
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
273 #ifdef HAVE_XSHAPE
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
274 if ( !XShapeQueryExtension( wsDisplay,&eventbase,&errorbase ) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
275 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
276 mp_msg( MSGT_GPLAYER,MSGL_ERR,"[ws] sorry, your system is not supported XShape extension.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
277 wsUseXShape=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
278 }
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
279 #else
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
280 wsUseXShape=0;
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
281 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
282
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
283 XSynchronize( wsDisplay,True );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
284
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
285 wsScreen=DefaultScreen( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
286 wsRootWin=RootWindow( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
287 wsMaxX=DisplayWidth( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
288 wsMaxY=DisplayHeight( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
289
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
290 if ( vo_wm_type != -1 ) wsWMType=vo_wm_type;
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
291 else wsWMType=wsWindowManagerType();
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
292
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
293 wsGetDepthOnScreen();
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
294 #ifdef DEBUG
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
295 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
296 int minor,major,shp;
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
297 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] Screen depth: %d\n",wsDepthOnScreen );
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
298 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] size: %dx%d\n",wsMaxX,wsMaxY );
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
299 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] red mask: 0x%x\n",wsRedMask );
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
300 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] green mask: 0x%x\n",wsGreenMask );
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
301 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] blue mask: 0x%x\n",wsBlueMask );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
302 if ( wsUseXShm )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
303 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
304 XShmQueryVersion( wsDisplay,&major,&minor,&shp );
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
305 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] XShm version is %d.%d\n",major,minor );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
306 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
307 #ifdef HAVE_XSHAPE
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
308 if ( wsUseXShape )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
309 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
310 XShapeQueryVersion( wsDisplay,&major,&minor );
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
311 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] XShape version is %d.%d\n",major,minor );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
312 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
313 #endif
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
314 }
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
315 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
316 wsOutMask=wsGetOutMask();
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
317 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[ws] Initialized converter: " );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
318 switch ( wsOutMask )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
319 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
320 case wsRGB32:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
321 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb32\n" );
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
322 wsConvFunc=rgb32torgb32;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
323 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
324 case wsBGR32:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
325 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr32\n" );
2782
b52d3e6ff4ab app michale's rgb32tobgr32
pontscho
parents: 2733
diff changeset
326 wsConvFunc=rgb32tobgr32;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
327 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
328 case wsRGB24:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
329 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb24\n" );
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
330 wsConvFunc=rgb32to24;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
331 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
332 case wsBGR24:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
333 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr24\n" );
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
334 wsConvFunc=rgb32tobgr24;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
335 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
336 case wsRGB16:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
337 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb16\n" );
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
338 wsConvFunc=rgb32to16;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
339 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
340 case wsBGR16:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
341 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr16\n" );
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
342 wsConvFunc=rgb32tobgr16;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
343 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
344 case wsRGB15:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
345 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb15\n" );
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
346 wsConvFunc=rgb32to15;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
347 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
348 case wsBGR15:
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
349 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr15\n" );
7206
09722d199d83 remove obsoleted files
pontscho
parents: 6967
diff changeset
350 wsConvFunc=rgb32tobgr15;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
351 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
352 }
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
353 XSetErrorHandler( wsErrorHandler );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
354 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
355
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
356 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
357 // Create window.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
358 // X,Y : window position
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
359 // wX,wY : size of window
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
360 // bW : border width
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
361 // cV : visible mouse cursor on window
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
362 // D : visible frame, title, etc.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
363 // sR : screen ratio
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
364 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
365
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
366 XClassHint wsClassHint;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
367 XTextProperty wsTextProperty;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
368 Window LeaderWindow;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
369
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
370 void wsCreateWindow( wsTWindow * win,int X,int Y,int wX,int hY,int bW,int cV,unsigned char D,char * label )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
371 {
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
372 int depth;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
373
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
374 win->Property=D;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
375 if ( D & wsShowFrame ) win->Decorations=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
376 wsHGC=DefaultGC( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
377 // The window position and size.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
378 switch ( X )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
379 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
380 case -1: win->X=( wsMaxX / 2 ) - ( wX / 2 ); break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
381 case -2: win->X=wsMaxX - wX - 1; break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
382 default: win->X=X; break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
383 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
384 switch ( Y )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
385 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
386 case -1: win->Y=( wsMaxY / 2 ) - ( hY / 2 ); break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
387 case -2: win->Y=wsMaxY - hY - 1; break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
388 default: win->Y=Y; break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
389 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
390 win->Width=wX;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
391 win->Height=hY;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
392 win->OldX=win->X;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
393 win->OldY=win->Y;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
394 win->OldWidth=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
395 win->OldHeight=win->Height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
396
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
397 // Border size for window.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
398 win->BorderWidth=bW;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
399 // Hide Mouse Cursor
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
400 win->wsCursor=None;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
401 win->wsMouseEventType=cV;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
402 win->wsCursorData[0]=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
403 win->wsCursorPixmap=XCreateBitmapFromData( wsDisplay,wsRootWin,win->wsCursorData,1,1 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
404 if ( !(cV & wsShowMouseCursor) ) win->wsCursor=XCreatePixmapCursor( wsDisplay,win->wsCursorPixmap,win->wsCursorPixmap,&win->wsColor,&win->wsColor,0,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
405
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
406 depth = vo_find_depth_from_visuals( wsDisplay,wsScreen,NULL );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
407 if ( depth < 15 )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
408 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
409 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] sorry, this color depth is not enough.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
410 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
411 }
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
412 XMatchVisualInfo( wsDisplay,wsScreen,depth,TrueColor,&win->VisualInfo );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
413
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
414 // ---
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
415 win->AtomLeaderClient=XInternAtom( wsDisplay,"WM_CLIENT_LEADER",False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
416 win->AtomDeleteWindow=XInternAtom( wsDisplay,"WM_DELETE_WINDOW",False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
417 win->AtomTakeFocus=XInternAtom( wsDisplay,"WM_TAKE_FOCUS",False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
418 win->AtomRolle=XInternAtom( wsDisplay,"WM_WINDOW_ROLE",False );
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
419 win->AtomWMSizeHint=XInternAtom( wsDisplay,"WM_SIZE_HINT",False );
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
420 win->AtomWMNormalHint=XInternAtom( wsDisplay,"WM_NORMAL_HINT",False );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
421 win->AtomProtocols=XInternAtom( wsDisplay,"WM_PROTOCOLS",False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
422 win->AtomsProtocols[0]=win->AtomDeleteWindow;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
423 win->AtomsProtocols[1]=win->AtomTakeFocus;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
424 win->AtomsProtocols[2]=win->AtomRolle;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
425 // ---
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
426
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
427 win->WindowAttrib.background_pixel=BlackPixel( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
428 win->WindowAttrib.border_pixel=WhitePixel( wsDisplay,wsScreen );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
429 win->WindowAttrib.colormap=XCreateColormap( wsDisplay,wsRootWin,win->VisualInfo.visual,AllocNone );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
430 win->WindowAttrib.event_mask=StructureNotifyMask | FocusChangeMask |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
431 ExposureMask | PropertyChangeMask |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
432 EnterWindowMask | LeaveWindowMask |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
433 VisibilityChangeMask |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
434 KeyPressMask | KeyReleaseMask;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
435 if ( ( cV & wsHandleMouseButton ) ) win->WindowAttrib.event_mask|=ButtonPressMask | ButtonReleaseMask;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
436 if ( ( cV & wsHandleMouseMove ) ) win->WindowAttrib.event_mask|=PointerMotionMask;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
437 win->WindowAttrib.cursor=win->wsCursor;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
438 win->WindowAttrib.override_redirect=False;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
439 if ( D & wsOverredirect ) win->WindowAttrib.override_redirect=True;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
440
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
441 win->WindowMask=CWBackPixel | CWBorderPixel |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
442 CWColormap | CWEventMask | CWCursor |
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
443 CWOverrideRedirect;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
444
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
445 win->WindowID=XCreateWindow( wsDisplay,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
446 (win->Parent != 0?win->Parent:wsRootWin),
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
447 win->X,win->Y,win->Width,win->Height,win->BorderWidth,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
448 win->VisualInfo.depth,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
449 InputOutput,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
450 win->VisualInfo.visual,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
451 win->WindowMask,&win->WindowAttrib );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
452
4411
a97f908988ed small changes
pontscho
parents: 3055
diff changeset
453 wsClassHint.res_name="MPlayer";
a97f908988ed small changes
pontscho
parents: 3055
diff changeset
454
2029
41ed89701ece fix fucking icewm fullscreen bug.
pontscho
parents: 1860
diff changeset
455 wsClassHint.res_class="MPlayer";
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
456 XSetClassHint( wsDisplay,win->WindowID,&wsClassHint );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
457
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
458 win->SizeHint.flags=PPosition | PSize | PResizeInc | PWinGravity;// | PBaseSize;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
459 win->SizeHint.x=win->X;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
460 win->SizeHint.y=win->Y;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
461 win->SizeHint.width=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
462 win->SizeHint.height=win->Height;
5986
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
463
1860
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
464 if ( D & wsMinSize )
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
465 {
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
466 win->SizeHint.flags|=PMinSize;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
467 win->SizeHint.min_width=win->Width;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
468 win->SizeHint.min_height=win->Height;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
469 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
470 if ( D & wsMaxSize )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
471 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
472 win->SizeHint.flags|=PMaxSize;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
473 win->SizeHint.max_width=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
474 win->SizeHint.max_height=win->Height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
475 }
5986
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
476
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
477 win->SizeHint.height_inc=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
478 win->SizeHint.width_inc=1;
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
479 win->SizeHint.base_width=win->Width;
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
480 win->SizeHint.base_height=win->Height;
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
481 win->SizeHint.win_gravity=StaticGravity;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
482 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
483
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
484 win->WMHints.flags=InputHint | StateHint;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
485 win->WMHints.input=True;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
486 win->WMHints.initial_state=NormalState;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
487 XSetWMHints( wsDisplay,win->WindowID,&win->WMHints );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
488
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
489 wsWindowDecoration( win,win->Decorations );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
490 XStoreName( wsDisplay,win->WindowID,label );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
491 XmbSetWMProperties( wsDisplay,win->WindowID,label,label,NULL,0,NULL,NULL,NULL );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
492
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
493 XSetWMProtocols( wsDisplay,win->WindowID,win->AtomsProtocols,3 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
494 XChangeProperty( wsDisplay,win->WindowID,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
495 win->AtomLeaderClient,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
496 XA_WINDOW,32,PropModeReplace,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
497 (unsigned char *)&LeaderWindow,1 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
498
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
499 wsTextProperty.value=label;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
500 wsTextProperty.encoding=XA_STRING;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
501 wsTextProperty.format=8;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
502 wsTextProperty.nitems=strlen( label );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
503 XSetWMIconName( wsDisplay,win->WindowID,&wsTextProperty );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
504
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
505 win->wGC=XCreateGC( wsDisplay,win->WindowID,
1814
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
506 GCForeground | GCBackground,
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
507 &win->wGCV );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
508
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
509 win->Visible=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
510 win->Focused=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
511 win->Mapped=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
512 win->Rolled=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
513 if ( D & wsShowWindow ) XMapWindow( wsDisplay,win->WindowID );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
514
1858
88a88d0a3f94 fix skin changing, xv fullscreen redraw bug, etc.
pontscho
parents: 1853
diff changeset
515 wsCreateImage( win,win->Width,win->Height );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
516 // --- End of creating --------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
517
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
518 wsWindowList[wsWLCount++]=win;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
519
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
520 XFlush( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
521 XSync( wsDisplay,False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
522
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
523 win->ReDraw=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
524 win->ReSize=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
525 win->Idle=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
526 win->MouseHandler=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
527 win->KeyHandler=NULL;
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
528 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[ws] window is created. ( %s ).\n",label );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
529 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
530
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
531 void wsDestroyWindow( wsTWindow * win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
532 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
533 int l;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
534 l=wsSearch( win->WindowID );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
535 wsWindowList[l]=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
536 if ( win->wsCursor != None )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
537 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
538 XFreeCursor( wsDisplay,win->wsCursor );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
539 win->wsCursor=None;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
540 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
541 XUnmapWindow( wsDisplay,win->WindowID );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
542 wsDestroyImage( win );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
543 XDestroyWindow( wsDisplay,win->WindowID );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
544 win->ReDraw=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
545 win->ReSize=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
546 win->Idle=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
547 win->MouseHandler=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
548 win->KeyHandler=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
549 win->Visible=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
550 win->Focused=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
551 win->Mapped=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
552 win->Rolled=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
553 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
554
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
555 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
556 // Handle events.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
557 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
558
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
559 inline int wsSearch( Window win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
560 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
561 int i;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
562 for ( i=0;i<wsWLCount;i++ ) if ( wsWindowList[i]->WindowID == win ) return i;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
563 return -1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
564 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
565
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
566 Bool wsEvents( Display * display,XEvent * Event,XPointer arg )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
567 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
568 unsigned long i = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
569 int l;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
570 int x,y;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
571 Window child_window = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
572
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
573 l=wsSearch( Event->xany.window );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
574 if ( l == -1 ) return !wsTrue;
1782
dce42eebfda4 win->state fix
pontscho
parents: 1779
diff changeset
575 wsWindowList[l]->State=0;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
576 switch( Event->type )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
577 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
578 case ClientMessage:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
579 if ( Event->xclient.message_type == wsWindowList[l]->AtomProtocols )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
580 {
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
581 if ( (Atom)Event->xclient.data.l[0] == wsWindowList[l]->AtomDeleteWindow )
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
582 { i=wsWindowClosed; goto expose; }
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
583 if ( (Atom)Event->xclient.data.l[0] == wsWindowList[l]->AtomTakeFocus )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
584 { i=wsWindowFocusIn; wsWindowList[l]->Focused=wsFocused; goto expose; }
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
585 if ( (Atom)Event->xclient.data.l[0] == wsWindowList[l]->AtomRolle )
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
586 { mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[ws] rolled.\n" ); }
6967
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
587 } else {
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
588 /* try to process DND events */
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
589 wsXDNDProcessClientMessage(wsWindowList[l],&Event->xclient);
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
590 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
591 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
592
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
593 case MapNotify: i=wsWindowMapped; wsWindowList[l]->Mapped=wsMapped; goto expose;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
594 case UnmapNotify: i=wsWindowUnmapped; wsWindowList[l]->Mapped=wsNone; goto expose;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
595 case FocusIn:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
596 if ( wsWindowList[l]->Focused == wsFocused ) break;
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
597 i=wsWindowFocusIn;
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
598 wsWindowList[l]->Focused=wsFocused;
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
599 goto expose;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
600 case FocusOut:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
601 if ( wsWindowList[l]->Focused == wsNone ) break;
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
602 i=wsWindowFocusOut;
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
603 wsWindowList[l]->Focused=wsNone;
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
604 goto expose;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
605 case VisibilityNotify:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
606 switch( Event->xvisibility.state )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
607 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
608 case VisibilityUnobscured: i=wsWindowVisible; wsWindowList[l]->Visible=wsVisible; goto expose;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
609 case VisibilityFullyObscured: i=wsWindowNotVisible; wsWindowList[l]->Visible=wsNotVisible; goto expose;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
610 case VisibilityPartiallyObscured: i=wsWindowPartialVisible; wsWindowList[l]->Visible=wsPVisible; goto expose;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
611 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
612 expose:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
613 wsWindowList[l]->State=i;
8058
9246adcf95f0 cosmetic
pontscho
parents: 7892
diff changeset
614 if ( wsWindowList[l]->ReDraw ) wsWindowList[l]->ReDraw();
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
615 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
616
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
617 case Expose:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
618 wsWindowList[l]->State=wsWindowExpose;
8058
9246adcf95f0 cosmetic
pontscho
parents: 7892
diff changeset
619 if ( ( wsWindowList[l]->ReDraw )&&( !Event->xexpose.count ) ) wsWindowList[l]->ReDraw();
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
620 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
621
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
622 case ConfigureNotify:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
623 XTranslateCoordinates( wsDisplay,wsWindowList[l]->WindowID,wsRootWin,0,0,&x,&y,&child_window );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
624 if ( ( wsWindowList[l]->X != x )||( wsWindowList[l]->Y != y )||( wsWindowList[l]->Width != Event->xconfigure.width )||( wsWindowList[l]->Height != Event->xconfigure.height ) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
625 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
626 wsWindowList[l]->X=x; wsWindowList[l]->Y=y;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
627 wsWindowList[l]->Width=Event->xconfigure.width; wsWindowList[l]->Height=Event->xconfigure.height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
628 if ( wsWindowList[l]->ReSize ) wsWindowList[l]->ReSize( wsWindowList[l]->X,wsWindowList[l]->Y,wsWindowList[l]->Width,wsWindowList[l]->Height );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
629 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
630
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
631 wsWindowList[l]->Rolled=wsNone;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
632 if ( Event->xconfigure.y < 0 )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
633 { i=wsWindowRolled; wsWindowList[l]->Rolled=wsRolled; goto expose; }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
634
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
635 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
636
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
637 case KeyPress: i=wsKeyPressed; goto keypressed;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
638 case KeyRelease: i=wsKeyReleased;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
639 keypressed:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
640 wsWindowList[l]->Alt=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
641 wsWindowList[l]->Shift=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
642 wsWindowList[l]->NumLock=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
643 wsWindowList[l]->Control=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
644 wsWindowList[l]->CapsLock=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
645 if ( Event->xkey.state & Mod1Mask ) wsWindowList[l]->Alt=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
646 if ( Event->xkey.state & Mod2Mask ) wsWindowList[l]->NumLock=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
647 if ( Event->xkey.state & ControlMask ) wsWindowList[l]->Control=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
648 if ( Event->xkey.state & ShiftMask ) wsWindowList[l]->Shift=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
649 if ( Event->xkey.state & LockMask ) wsWindowList[l]->CapsLock=1;
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
650 #if 0
6183
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
651 {
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
652 KeySym keySym;
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
653 keySym=XKeycodeToKeysym( wsDisplay,Event->xkey.keycode,0 );
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
654 if ( keySym != NoSymbol )
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
655 {
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
656 keySym=( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) );
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
657 wsKeyTable[ keySym ]=i;
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
658 if ( wsWindowList[l]->KeyHandler )
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
659 wsWindowList[l]->KeyHandler( Event->xkey.state,i,keySym );
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
660 }
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
661 }
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
662 #else
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
663 {
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
664 int key;
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
665 char buf[100];
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
666 KeySym keySym;
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
667 static XComposeStatus stat;
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
668
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
669 XLookupString( &Event->xkey,buf,sizeof(buf),&keySym,&stat );
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
670 key=( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) );
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
671 wsKeyTable[ key ]=i;
6183
a4bbda72ce86 fix two small bug and add multimedia keyboard support ( i tested with Acer AirKey V only )
pontscho
parents: 6159
diff changeset
672 if ( wsWindowList[l]->KeyHandler ) wsWindowList[l]->KeyHandler( Event->xkey.keycode,i,key );
6089
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
673 }
39c2bfe5c267 small fixes
pontscho
parents: 6034
diff changeset
674 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
675 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
676
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
677 case MotionNotify: i=wsMoveMouse; goto buttonreleased;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
678 case ButtonRelease: i=Event->xbutton.button + 128; goto buttonreleased;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
679 case ButtonPress: i=Event->xbutton.button; goto buttonreleased;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
680 case EnterNotify: i=wsEnterWindow; goto buttonreleased;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
681 case LeaveNotify: i=wsLeaveWindow;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
682 buttonreleased:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
683 if ( wsWindowList[l]->MouseHandler )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
684 wsWindowList[l]->MouseHandler( i,Event->xbutton.x,Event->xbutton.y,Event->xmotion.x_root,Event->xmotion.y_root );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
685 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
686
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
687 case PropertyNotify:
5910
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
688 {
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
689 char * name = XGetAtomName( wsDisplay,Event->xproperty.atom );
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
690
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
691 if ( !name ) break;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
692 if ( !strncmp( name,"_ICEWM_TRAY",11 ) )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
693 {
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
694 wsWMType=wsWMIceWM;
6622
da08877b9512 fix window hiding bug with some wms (kde, gnome, icewm, mwm, wmaker)
pontscho
parents: 6619
diff changeset
695 // mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is IceWM.\n" );
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
696 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
697 if ( !strncmp( name,"_KDE_",5 ) )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
698 {
6622
da08877b9512 fix window hiding bug with some wms (kde, gnome, icewm, mwm, wmaker)
pontscho
parents: 6619
diff changeset
699 // mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is KDE.\n" );
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
700 wsWMType=wsWMKDE;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
701 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
702 if ( !strncmp( name,"KWM_WIN_DESKTOP",15 ) )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
703 {
6622
da08877b9512 fix window hiding bug with some wms (kde, gnome, icewm, mwm, wmaker)
pontscho
parents: 6619
diff changeset
704 // mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is WindowMaker style.\n" );
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
705 wsWMType=wsWMWMaker;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
706 }
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
707
5910
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
708 // fprintf(stderr,"[ws] PropertyNotify %s ( 0x%x )\n",name,Event->xproperty.atom );
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
709
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
710 XFree( name );
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
711 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
712 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
713
6967
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
714 case SelectionNotify:
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
715 /* Handle DandD */
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
716 wsXDNDProcessSelection(wsWindowList[l],Event);
0fa27966ac47 add xdnd support (from Gregory Kovriga <gkovriga@techunix.technion.ac.il>) and fix -subdelay bug
pontscho
parents: 6794
diff changeset
717 break;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
718 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
719 XFlush( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
720 XSync( wsDisplay,False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
721 return !wsTrue;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
722 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
723
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
724 Bool wsDummyEvents( Display * display,XEvent * Event,XPointer arg )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
725 { return True; }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
726
4818
3473ca9ef158 new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents: 4566
diff changeset
727 void wsHandleEvents( void ){
1709
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
728 // handle pending events
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
729 while ( XPending(wsDisplay) ){
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
730 XNextEvent( wsDisplay,&wsEvent );
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
731 // printf("### X event: %d [%d]\n",wsEvent.type,delay);
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
732 wsEvents( wsDisplay,&wsEvent,NULL );
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
733 }
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
734 }
a4e0211455d8 GUI integration, step 1
arpi
parents: 1701
diff changeset
735
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
736 void wsMainLoop( void )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
737 {
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
738 int delay=20;
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
739 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[ws] init threads: %d\n",XInitThreads() );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
740 XSynchronize( wsDisplay,False );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
741 XLockDisplay( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
742 // XIfEvent( wsDisplay,&wsEvent,wsEvents,NULL );
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
743
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
744 #if 1
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
745
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
746 while(wsTrue){
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
747 // handle pending events
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
748 while ( XPending(wsDisplay) ){
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
749 XNextEvent( wsDisplay,&wsEvent );
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
750 wsEvents( wsDisplay,&wsEvent,NULL );
1701
7955814db4c7 removed delay debug printf, better 'active delay'
arpi
parents: 1699
diff changeset
751 delay=0;
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
752 }
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
753 usleep(delay*1000); // FIXME!
1701
7955814db4c7 removed delay debug printf, better 'active delay'
arpi
parents: 1699
diff changeset
754 if(delay<10*20) delay+=20; // pump up delay up to 0.2 sec (low activity)
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
755 }
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
756
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
757 #else
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
758
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
759 while( wsTrue )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
760 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
761 XIfEvent( wsDisplay,&wsEvent,wsDummyEvents,NULL );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
762 wsEvents( wsDisplay,&wsEvent,NULL );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
763 }
1699
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
764 #endif
7ddc63b84f1f DGA2 ifdefs, new mainloop/timer stuff
arpi
parents: 1693
diff changeset
765
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
766 XUnlockDisplay( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
767 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
768
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
769 // ----------------------------------------------------------------------------------------------
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
770 // Move window to selected layer
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
771 // ----------------------------------------------------------------------------------------------
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
772
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
773 #define WIN_LAYER_ONBOTTOM 2
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
774 #define WIN_LAYER_NORMAL 4
8150
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
775 #define WIN_LAYER_ONTOP 10
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
776
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
777 void wsSetLayer( Display * wsDisplay, Window win, int layer )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
778 {
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
779 Atom type;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
780 int format;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
781 unsigned long nitems, bytesafter;
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
782 Atom * args = NULL;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
783
6034
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
784 if ( wsWMType == wsWMIceWM )
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
785 {
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
786 switch ( layer )
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
787 {
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
788 case -1: layer=2; break; // WinLayerBelow
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
789 case 0: layer=4; break; // WinLayerNormal
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
790 case 1: layer=8; break; // WinLayerOnTop
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
791 }
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
792 XChangeProperty( wsDisplay,win,
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
793 XInternAtom( wsDisplay,"_WIN_LAYER",False ),XA_CARDINAL,32,PropModeReplace,(unsigned char *)&layer,1 );
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
794 return;
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
795 }
8150
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
796
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
797 type=XInternAtom( wsDisplay,"_WIN_SUPPORTING_WM_CHECK",False );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
798 if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( int32_t ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **)&args ) && nitems > 0 )
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
799 {
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
800 XClientMessageEvent xev;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
801
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
802 memset( &xev,0,sizeof( xev ) );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
803 xev.type=ClientMessage;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
804 xev.window=win;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
805 xev.message_type=XInternAtom( wsDisplay,"_WIN_LAYER",False );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
806 xev.format=32;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
807 switch ( layer )
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
808 {
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
809 case -1: xev.data.l[0] = WIN_LAYER_ONBOTTOM; break;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
810 case 0: xev.data.l[0] = WIN_LAYER_NORMAL; break;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
811 case 1: xev.data.l[0] = WIN_LAYER_ONTOP; break;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
812 }
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
813 XSendEvent( wsDisplay,wsRootWin,False,SubstructureNotifyMask,(XEvent*)&xev );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
814 if ( layer ) XRaiseWindow( wsDisplay,win );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
815
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
816 XFree( args );
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
817 return;
851e974e6eaa updating
pontscho
parents: 8058
diff changeset
818 }
6034
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
819
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
820 type=XInternAtom( wsDisplay,"_NET_SUPPORTED",False );
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
821 if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( int32_t ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **)&args ) && nitems > 0 )
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
822 {
7572
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
823 int i;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
824 XEvent e;
7572
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
825
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
826 e.xclient.type=ClientMessage;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
827 e.xclient.message_type=XInternAtom( wsDisplay,"_NET_WM_STATE",False );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
828 e.xclient.display=wsDisplay;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
829 e.xclient.window=win;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
830 e.xclient.format=32;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
831 e.xclient.data.l[0]=layer;
7572
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
832
7545
pontscho
parents: 7543
diff changeset
833 e.xclient.data.l[1]=XInternAtom( wsDisplay,"_NET_WM_STATE_STAYS_ON_TOP",False );
7572
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
834 type=XInternAtom( wsDisplay,"_NET_WM_STATE_FULLSCREEN",False );
7751
27c9c440536f - dvd aspect changing bug - fixed
pontscho
parents: 7706
diff changeset
835 for ( i=0;(unsigned long)i < nitems;i++ )
7572
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
836 if ( args[i] == type ) { e.xclient.data.l[1]=XInternAtom( wsDisplay,"_NET_WM_STATE_FULLSCREEN",False ); break; }
f46967928779 _NET_WM_FULLSCREEN support
pontscho
parents: 7545
diff changeset
837
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
838 e.xclient.data.l[2]=0l;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
839 e.xclient.data.l[3]=0l;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
840 e.xclient.data.l[4]=0l;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
841 XSendEvent( wsDisplay,wsRootWin,False,SubstructureRedirectMask,&e );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
842
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
843 XFree( args );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
844 return;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
845 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
846 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
847
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
848 // ----------------------------------------------------------------------------------------------
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
849 // Switch to fullscreen.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
850 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
851 void wsFullScreen( wsTWindow * win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
852 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
853 int decoration = 0;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
854
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
855 switch ( wsWMType )
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
856 {
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
857 case wsWMUnknown:
7543
pontscho
parents: 7206
diff changeset
858 // XUnmapWindow( wsDisplay,win->WindowID );
pontscho
parents: 7206
diff changeset
859 XWithdrawWindow( wsDisplay,win->WindowID,wsScreen );
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
860 break;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
861 case wsWMIceWM:
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
862 if ( !win->isFullScreen ) XUnmapWindow( wsDisplay,win->WindowID );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
863 break;
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
864 }
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
865
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
866 if ( win->isFullScreen )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
867 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
868 win->X=win->OldX;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
869 win->Y=win->OldY;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
870 win->Width=win->OldWidth;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
871 win->Height=win->OldHeight;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
872 win->isFullScreen=False;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
873 decoration=win->Decorations;
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
874 #ifdef ENABLE_DPMS
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
875 wsScreenSaverOn( wsDisplay );
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
876 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
877 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
878 else
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
879 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
880 win->OldX=win->X; win->OldY=win->Y;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
881 win->OldWidth=win->Width; win->OldHeight=win->Height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
882 win->X=0; win->Y=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
883 win->Width=wsMaxX; win->Height=wsMaxY;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
884 win->isFullScreen=True;
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
885 #ifdef ENABLE_DPMS
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
886 wsScreenSaverOff( wsDisplay );
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
887 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
888 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
889
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
890 win->SizeHint.flags=PPosition | PSize | PWinGravity;// | PBaseSize;
5910
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
891 win->SizeHint.x=win->X; win->SizeHint.y=win->Y;
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
892 win->SizeHint.width=win->Width; win->SizeHint.height=win->Height;
6034
7570f4666c15 fullscreen -- round three -- icewm fullscreen fixed
pontscho
parents: 6013
diff changeset
893 // win->SizeHint.base_width=win->Width; win->SizeHint.base_height=win->Height;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
894
5910
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
895 win->SizeHint.win_gravity=StaticGravity;
1860
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
896 if ( win->Property & wsMaxSize )
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
897 {
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
898 win->SizeHint.flags|=PMaxSize;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
899 win->SizeHint.max_width=win->Width;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
900 win->SizeHint.max_height=win->Height;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
901 }
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
902 if ( win->Property & wsMinSize )
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
903 {
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
904 win->SizeHint.flags|=PMinSize;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
905 win->SizeHint.min_width=win->Width;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
906 win->SizeHint.min_height=win->Height;
c65abbc91c5c fix mwm bug's. faszom (C), and remove mixer.*
pontscho
parents: 1858
diff changeset
907 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
908 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
909
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
910 wsSetLayer( wsDisplay,win->WindowID,win->isFullScreen );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
911 XMoveResizeWindow( wsDisplay,win->WindowID,win->X,win->Y,win->Width,win->Height );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
912 wsWindowDecoration( win,decoration );
5910
20c335d98ab3 fix fullscreen bug es ilyen libvo not initialized bug with gui igy
pontscho
parents: 5031
diff changeset
913 XMapRaised( wsDisplay,win->WindowID );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
914 XRaiseWindow( wsDisplay,win->WindowID );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
915 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
916
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
917 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
918 // Redraw screen.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
919 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
920 void wsPostRedisplay( wsTWindow * win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
921 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
922 if ( win->ReDraw )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
923 {
6794
77980ab4e296 - add preferences support (first try)
pontscho
parents: 6651
diff changeset
924 win->State=wsWindowExpose;
8058
9246adcf95f0 cosmetic
pontscho
parents: 7892
diff changeset
925 win->ReDraw();
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
926 XFlush( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
927 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
928 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
929
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
930 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
931 // Do Exit.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
932 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
933 void wsDoExit( void )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
934 { wsTrue=False; wsResizeWindow( wsWindowList[0],32,32 ); }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
935
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
936 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
937 // Put 'Image' to window.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
938 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
939 void wsConvert( wsTWindow * win,unsigned char * Image,unsigned int Size )
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
940 { if ( wsConvFunc ) wsConvFunc( Image,win->ImageData,win->xImage->width * win->xImage->height * 4 ); }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
941
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
942 void wsPutImage( wsTWindow * win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
943 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
944 if ( wsUseXShm )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
945 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
946 XShmPutImage( wsDisplay,win->WindowID,win->wGC,win->xImage,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
947 0,0,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
948 ( win->Width - win->xImage->width ) / 2,( win->Height - win->xImage->height ) / 2,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
949 win->xImage->width,win->xImage->height,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
950 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
951 else
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
952 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
953 XPutImage( wsDisplay,win->WindowID,win->wGC,win->xImage,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
954 0,0,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
955 ( win->Width - win->xImage->width ) / 2,( win->Height - win->xImage->height ) / 2,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
956 win->xImage->width,win->xImage->height );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
957 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
958 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
959
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
960 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
961 // Move window to x, y.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
962 // ----------------------------------------------------------------------------------------------
2854
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
963 void wsMoveWindow( wsTWindow * win,int b,int x, int y )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
964 {
2854
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
965 if ( b )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
966 {
2854
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
967 switch ( x )
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
968 {
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
969 case -1: win->X=( wsMaxX / 2 ) - ( win->Width / 2 ); break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
970 case -2: win->X=wsMaxX - win->Width; break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
971 default: win->X=x; break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
972 }
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
973 switch ( y )
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
974 {
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
975 case -1: win->Y=( wsMaxY / 2 ) - ( win->Height / 2 ); break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
976 case -2: win->Y=wsMaxY - win->Height; break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
977 default: win->Y=y; break;
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
978 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
979 }
2854
fd44ecf77f8d move bug meg fileload bug fixed asszem.
pontscho
parents: 2851
diff changeset
980 else { win->X=x; win->Y=y; }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
981
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
982 win->SizeHint.flags=PPosition | PWinGravity;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
983 win->SizeHint.x=win->X;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
984 win->SizeHint.y=win->Y;
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
985 win->SizeHint.win_gravity=StaticGravity;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
986 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
987
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
988 XMoveWindow( wsDisplay,win->WindowID,win->X,win->Y );
1810
d44b0ce32791 fix move&resize
pontscho
parents: 1782
diff changeset
989 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
990 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
991
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
992 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
993 // Resize window to sx, sy.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
994 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
995 void wsResizeWindow( wsTWindow * win,int sx, int sy )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
996 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
997 win->Width=sx;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
998 win->Height=sy;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
999
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1000 win->SizeHint.flags=PPosition | PSize | PWinGravity;// | PBaseSize;
5986
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
1001 win->SizeHint.x=win->X;
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
1002 win->SizeHint.y=win->Y;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1003 win->SizeHint.width=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1004 win->SizeHint.height=win->Height;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1005
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1006 if ( win->Property & wsMinSize )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1007 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1008 win->SizeHint.flags|=PMinSize;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1009 win->SizeHint.min_width=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1010 win->SizeHint.min_height=win->Height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1011 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1012 if ( win->Property & wsMaxSize )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1013 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1014 win->SizeHint.flags|=PMaxSize;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1015 win->SizeHint.max_width=win->Width;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1016 win->SizeHint.max_height=win->Height;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1017 }
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1018
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
1019 win->SizeHint.win_gravity=StaticGravity;
5986
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
1020 win->SizeHint.base_width=sx; win->SizeHint.base_height=sy;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1021
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1022 if ( wsWMType == wsWMUnknown ) XUnmapWindow( wsDisplay,win->WindowID );
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1023
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1024 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1025 XResizeWindow( wsDisplay,win->WindowID,sx,sy );
5986
d34622ebaf45 window resize bug fixed
pontscho
parents: 5919
diff changeset
1026 XMapRaised( wsDisplay,win->WindowID );
1810
d44b0ce32791 fix move&resize
pontscho
parents: 1782
diff changeset
1027 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1028 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1029
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1030 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1031 // Iconify window.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1032 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1033 void wsIconify( wsTWindow win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1034 { XIconifyWindow( wsDisplay,win.WindowID,0 ); }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1035
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1036 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1037 // Move top the window.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1038 // ----------------------------------------------------------------------------------------------
6146
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1039 void wsMoveTopWindow( Display * wsDisplay,Window win )
2851
b64fa5d25142 add roleld mouse support and some small bugfix. neked jol a testedbe.
pontscho
parents: 2782
diff changeset
1040 {
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1041 switch ( wsWMType )
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1042 {
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1043 case wsWMIceWM:
6146
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1044 XUnmapWindow( wsDisplay,win );
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1045 XMapWindow( wsDisplay,win );
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1046 break;
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1047 case wsWMNetWM:
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1048 case wsWMKDE:
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1049 {
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1050 XEvent e;
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1051 e.xclient.type=ClientMessage;
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1052 e.xclient.message_type=XInternAtom( wsDisplay,"_NET_ACTIVE_WINDOW",False );
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1053 e.xclient.display=wsDisplay;
6146
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1054 e.xclient.window=win;
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1055 e.xclient.format=32;
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1056 e.xclient.data.l[0]=0;
6146
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1057 XSendEvent( wsDisplay,RootWindow( wsDisplay,DefaultScreen( wsDisplay ) ),False,SubstructureRedirectMask,&e );
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1058 break;
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1059 }
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1060 default:
6146
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1061 XMapRaised( wsDisplay,win );
b9651eb9749e fix some gtk bug...
pontscho
parents: 6089
diff changeset
1062 XRaiseWindow( wsDisplay,win );
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 6009
diff changeset
1063 break;
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1064 }
2045
deb4aff05c44 fix other bugs
pontscho
parents: 2030
diff changeset
1065 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1066
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1067 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1068 // Set window background to 'color'.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1069 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1070 void wsSetBackground( wsTWindow * win,int color )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1071 { XSetWindowBackground( wsDisplay,win->WindowID,color ); }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1072
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1073 void wsSetBackgroundRGB( wsTWindow * win,int r,int g,int b )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1074 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1075 int color = 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1076 switch ( wsOutMask )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1077 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1078 case wsRGB32:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1079 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1080 case wsBGR32:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1081 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break;
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1082 case wsRGB16: PACK_RGB16( b,g,r,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1083 case wsBGR16: PACK_RGB16( r,g,b,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1084 case wsRGB15: PACK_RGB15( b,g,r,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1085 case wsBGR15: PACK_RGB15( r,g,b,color ); break;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1086 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1087 XSetWindowBackground( wsDisplay,win->WindowID,color );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1088 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1089
1814
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1090 void wsSetForegroundRGB( wsTWindow * win,int r,int g,int b )
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1091 {
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1092 int color = 0;
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1093 switch ( wsOutMask )
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1094 {
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1095 case wsRGB32:
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1096 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break;
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1097 case wsBGR32:
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1098 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break;
2733
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1099 case wsRGB16: PACK_RGB16( b,g,r,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1100 case wsBGR16: PACK_RGB16( r,g,b,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1101 case wsRGB15: PACK_RGB15( b,g,r,color ); break;
4dddb055d2cd add prostproc/rgb2rgb
pontscho
parents: 2476
diff changeset
1102 case wsBGR15: PACK_RGB15( r,g,b,color ); break;
1814
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1103 }
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1104 XSetForeground( wsDisplay,win->wGC,color );
9c674dc76ff3 add wsSetForegroundRGB
pontscho
parents: 1810
diff changeset
1105 }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1106
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1107 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1108 // Draw string at x,y with fc ( foreground color ) and bc ( background color ).
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1109 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1110 void wsDrawString( wsTWindow win,int x,int y,char * str,int fc,int bc )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1111 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1112 XSetForeground( wsDisplay,win.wGC,bc );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1113 XFillRectangle( wsDisplay,win.WindowID,win.wGC,x,y,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1114 XTextWidth( win.Font,str,strlen( str ) ) + 20,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1115 win.FontHeight + 2 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1116 XSetForeground( wsDisplay,win.wGC,fc );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1117 XDrawString( wsDisplay,win.WindowID,win.wGC,x + 10,y + 13,str,strlen( str ) );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1118 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1119
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1120 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1121 // Calculation string width.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1122 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1123 int wsTextWidth( wsTWindow win,char * str )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1124 { return XTextWidth( win.Font,str,strlen( str ) ) + 20; }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1125
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1126 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1127 // Show / hide mouse cursor.
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1128 // ----------------------------------------------------------------------------------------------
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1129 void wsVisibleMouse( wsTWindow * win,int m )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1130 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1131 switch ( m )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1132 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1133 case wsShowMouseCursor:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1134 if ( win->wsCursor != None )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1135 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1136 XFreeCursor( wsDisplay,win->wsCursor );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1137 win->wsCursor=None;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1138 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1139 XDefineCursor( wsDisplay,win->WindowID,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1140 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1141 case wsHideMouseCursor:
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1142 win->wsCursor=XCreatePixmapCursor( wsDisplay,win->wsCursorPixmap,win->wsCursorPixmap,&win->wsColor,&win->wsColor,0,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1143 XDefineCursor( wsDisplay,win->WindowID,win->wsCursor );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1144 break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1145 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1146 XFlush( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1147 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1148
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1149 int wsGetDepthOnScreen( void )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1150 {
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1151 int depth;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1152 XImage * mXImage;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1153 Visual * visual;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1154
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1155 if( (depth = vo_find_depth_from_visuals( wsDisplay,wsScreen,&visual )) > 0 )
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1156 {
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1157 mXImage = XCreateImage( wsDisplay,visual,depth,ZPixmap,0,NULL,
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1158 1,1,32,0 );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1159 wsDepthOnScreen = mXImage->bits_per_pixel;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1160 wsRedMask=mXImage->red_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1161 wsGreenMask=mXImage->green_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1162 wsBlueMask=mXImage->blue_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1163 XDestroyImage( mXImage );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1164 }
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1165 else
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1166 {
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1167 int bpp,ibpp;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1168 XWindowAttributes attribs;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1169
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1170 mXImage=XGetImage( wsDisplay,wsRootWin,0,0,1,1,AllPlanes,ZPixmap );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1171 bpp=mXImage->bits_per_pixel;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1172
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1173 XGetWindowAttributes( wsDisplay,wsRootWin,&attribs );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1174 ibpp=attribs.depth;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1175 mXImage=XGetImage( wsDisplay,wsRootWin,0,0,1,1,AllPlanes,ZPixmap );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1176 bpp=mXImage->bits_per_pixel;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1177 if ( ( ibpp + 7 ) / 8 != ( bpp + 7 ) / 8 ) ibpp=bpp;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1178 wsDepthOnScreen=ibpp;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1179 wsRedMask=mXImage->red_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1180 wsGreenMask=mXImage->green_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1181 wsBlueMask=mXImage->blue_mask;
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1182 XDestroyImage( mXImage );
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1183 }
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1184 return wsDepthOnScreen;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1185 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1186
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1187 void wsXDone( void )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1188 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1189 XCloseDisplay( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1190 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1191
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1192 void wsVisibleWindow( wsTWindow * win,int show )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1193 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1194 switch( show )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1195 {
5997
b5fb9a927bf3 add WM detection, and wm specific fullscreen code. (???)
pontscho
parents: 5986
diff changeset
1196 case wsShowWindow: XMapRaised( wsDisplay,win->WindowID ); break;
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1197 case wsHideWindow: XUnmapWindow( wsDisplay,win->WindowID ); break;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1198 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1199 XFlush( wsDisplay );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1200 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1201
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1202 void wsDestroyImage( wsTWindow * win )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1203 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1204 if ( win->xImage )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1205 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1206 XDestroyImage( win->xImage );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1207 if ( wsUseXShm )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1208 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1209 XShmDetach( wsDisplay,&win->Shminfo );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1210 shmdt( win->Shminfo.shmaddr );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1211 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1212 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1213 win->xImage=NULL;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1214 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1215
1858
88a88d0a3f94 fix skin changing, xv fullscreen redraw bug, etc.
pontscho
parents: 1853
diff changeset
1216 void wsCreateImage( wsTWindow * win,int Width,int Height )
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1217 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1218 int CompletionType = -1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1219 if ( wsUseXShm )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1220 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1221 CompletionType=XShmGetEventBase( wsDisplay ) + ShmCompletion;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1222 win->xImage=XShmCreateImage( wsDisplay,win->VisualInfo.visual,
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1223 win->VisualInfo.depth,ZPixmap,NULL,&win->Shminfo,Width,Height );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1224 if ( win->xImage == NULL )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1225 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1226 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] shared memory extension error.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1227 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1228 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1229 win->Shminfo.shmid=shmget( IPC_PRIVATE,win->xImage->bytes_per_line * win->xImage->height,IPC_CREAT|0777 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1230 if ( win->Shminfo.shmid < 0 )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1231 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1232 XDestroyImage( win->xImage );
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1233 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] shared memory extension error.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1234 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1235 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1236 win->Shminfo.shmaddr=(char *)shmat( win->Shminfo.shmid,0,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1237
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1238 if ( win->Shminfo.shmaddr == ((char *) -1) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1239 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1240 XDestroyImage( win->xImage );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1241 if ( win->Shminfo.shmaddr != ((char *) -1) ) shmdt( win->Shminfo.shmaddr );
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1242 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] shared memory extension error.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1243 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1244 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1245 win->xImage->data=win->Shminfo.shmaddr;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1246 win->Shminfo.readOnly=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1247 XShmAttach( wsDisplay,&win->Shminfo );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1248 shmctl( win->Shminfo.shmid,IPC_RMID,0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1249 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1250 else
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1251 {
7802
037982e833a7 Choose a good visual from the list of supported visuals on the X11 server,
jkeil
parents: 7801
diff changeset
1252 win->xImage=XCreateImage( wsDisplay,win->VisualInfo.visual,win->VisualInfo.depth,
1858
88a88d0a3f94 fix skin changing, xv fullscreen redraw bug, etc.
pontscho
parents: 1853
diff changeset
1253 ZPixmap,0,0,Width,Height,
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1254 (wsDepthOnScreen == 3) ? 32 : wsDepthOnScreen,
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1255 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1256 if ( ( win->xImage->data=malloc( win->xImage->bytes_per_line * win->xImage->height ) ) == NULL )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1257 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1258 mp_msg( MSGT_GPLAYER,MSGL_FATAL,"[ws] sorry, not enough memory for draw buffer.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1259 exit( 0 );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1260 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1261 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1262 win->ImageData=(unsigned char *)win->xImage->data;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1263 win->ImageDataw=(unsigned short int *)win->xImage->data;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1264 win->ImageDatadw=(unsigned int *)win->xImage->data;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1265 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1266
1858
88a88d0a3f94 fix skin changing, xv fullscreen redraw bug, etc.
pontscho
parents: 1853
diff changeset
1267 void wsResizeImage( wsTWindow * win,int Width,int Height )
88a88d0a3f94 fix skin changing, xv fullscreen redraw bug, etc.
pontscho
parents: 1853
diff changeset
1268 { wsDestroyImage( win ); wsCreateImage( win,Width,Height ); }
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1269
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1270 int wsGetOutMask( void )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1271 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1272 if ( ( wsDepthOnScreen == 32 )&&( wsRedMask == 0xff0000 )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0x0000ff ) ) return wsRGB32;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1273 if ( ( wsDepthOnScreen == 32 )&&( wsRedMask == 0x0000ff )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0xff0000 ) ) return wsBGR32;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1274 if ( ( wsDepthOnScreen == 24 )&&( wsRedMask == 0xff0000 )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0x0000ff ) ) return wsRGB24;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1275 if ( ( wsDepthOnScreen == 24 )&&( wsRedMask == 0x0000ff )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0xff0000 ) ) return wsBGR24;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1276 if ( ( wsDepthOnScreen == 16 )&&( wsRedMask == 0xf800 )&&( wsGreenMask == 0x7e0 )&&( wsBlueMask == 0x1f ) ) return wsRGB16;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1277 if ( ( wsDepthOnScreen == 16 )&&( wsRedMask == 0x1f )&&( wsGreenMask == 0x7e0 )&&( wsBlueMask == 0xf800 ) ) return wsBGR16;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1278 if ( ( wsDepthOnScreen == 15 )&&( wsRedMask == 0x7c00 )&&( wsGreenMask == 0x3e0 )&&( wsBlueMask == 0x1f ) ) return wsRGB15;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1279 if ( ( wsDepthOnScreen == 15 )&&( wsRedMask == 0x1f )&&( wsGreenMask == 0x3e0 )&&( wsBlueMask == 0x7c00 ) ) return wsBGR15;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1280 return 0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1281 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1282
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1283 void wsSetTitle( wsTWindow * win,char * name )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1284 { XStoreName( wsDisplay,win->WindowID,name ); }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1285
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1286 void wsSetMousePosition( wsTWindow * win,int x, int y )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1287 { XWarpPointer( wsDisplay,wsRootWin,win->WindowID,0,0,0,0,x,y ); }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1288
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
1289 #ifdef ENABLE_DPMS
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1290 static int dpms_disabled=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1291 static int timeout_save=0;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1292
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1293 void wsScreenSaverOn( Display *mDisplay )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1294 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1295 int nothing;
4566
3b1721b9e211 fix dpsm compile bug in gui
pontscho
parents: 4465
diff changeset
1296 #ifdef HAVE_XDPMS
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1297 if ( dpms_disabled )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1298 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1299 if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1300 {
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1301 if ( !DPMSEnable( mDisplay ) ) mp_msg( MSGT_GPLAYER,MSGL_ERR,"DPMS not available ?\n" ); // restoring power saving settings
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1302 else
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1303 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1304 // DPMS does not seem to be enabled unless we call DPMSInfo
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1305 BOOL onoff;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1306 CARD16 state;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1307 DPMSInfo( mDisplay,&state,&onoff );
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1308 if ( onoff ) mp_msg( MSGT_GPLAYER,MSGL_STATUS,"Successfully enabled DPMS.\n" );
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1309 else mp_msg( MSGT_GPLAYER,MSGL_STATUS,"Could not enable DPMS.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1310 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1311 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1312 }
4566
3b1721b9e211 fix dpsm compile bug in gui
pontscho
parents: 4465
diff changeset
1313 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1314 if ( timeout_save )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1315 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1316 int dummy, interval, prefer_blank, allow_exp;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1317 XGetScreenSaver( mDisplay,&dummy,&interval,&prefer_blank,&allow_exp );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1318 XSetScreenSaver( mDisplay,timeout_save,interval,prefer_blank,allow_exp );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1319 XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1320 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1321 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1322
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1323 void wsScreenSaverOff( Display * mDisplay )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1324 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1325 int interval,prefer_blank,allow_exp,nothing;
4566
3b1721b9e211 fix dpsm compile bug in gui
pontscho
parents: 4465
diff changeset
1326 #ifdef HAVE_XDPMS
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1327 if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1328 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1329 BOOL onoff;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1330 CARD16 state;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1331 DPMSInfo( mDisplay,&state,&onoff );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1332 if ( onoff )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1333 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1334 Status stat;
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1335 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"Disabling DPMS.\n" );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1336 dpms_disabled=1;
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1337 stat=DPMSDisable( mDisplay ); // monitor powersave off
5919
60cf2bca993f some bug fix
pontscho
parents: 5910
diff changeset
1338 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"stat: %d.\n",stat );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1339 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1340 }
4566
3b1721b9e211 fix dpsm compile bug in gui
pontscho
parents: 4465
diff changeset
1341 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1342 XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp );
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1343 if ( timeout_save ) XSetScreenSaver( mDisplay,0,interval,prefer_blank,allow_exp ); // turning off screensaver
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1344 }
8478
7988573021e8 disable DPMS handling
pontscho
parents: 8150
diff changeset
1345 #endif
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1346
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1347 void wsSetShape( wsTWindow * win,char * data )
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1348 {
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1349 #ifdef HAVE_XSHAPE
1852
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1350 if ( !wsUseXShape ) return;
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1351 if ( data )
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1352 {
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1353 win->Mask=XCreateBitmapFromData( wsDisplay,win->WindowID,data,win->Width,win->Height );
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1354 XShapeCombineMask( wsDisplay,win->WindowID,ShapeBounding,0,0,win->Mask,ShapeSet );
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1355 XFreePixmap( wsDisplay,win->Mask );
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1356 }
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1850
diff changeset
1357 else XShapeCombineMask( wsDisplay,win->WindowID,ShapeBounding,0,0,None,ShapeSet );
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1358 #endif
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1359 }
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1360
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1361 void wsSetIcon( Display * dsp,Window win,Pixmap icon,Pixmap mask )
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1362 {
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1363 XWMHints * wm;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1364 long data[2];
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1365 Atom iconatom;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1366
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1367 wm=XGetWMHints( dsp,win );
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1368 if ( !wm ) wm=XAllocWMHints();
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1369
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1370 wm->icon_pixmap=icon;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1371 wm->icon_mask=mask;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1372 wm->flags|=IconPixmapHint | IconMaskHint;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1373
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1374 XSetWMHints( dsp,win,wm );
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1375
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1376 data[0]=icon;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1377 data[1]=mask;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1378 iconatom=XInternAtom( dsp,"KWM_WIN_ICON",0 );
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1379 XChangeProperty( dsp,win,iconatom,iconatom,32,PropModeReplace,(unsigned char *)data,2 );
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1380
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1381 XFree( wm );
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1382 }
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6622
diff changeset
1383
1693
d237c5d4b216 GUI version n-1
arpi
parents:
diff changeset
1384 #include "wsmkeys.h"