summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-07 13:31:29 +0000
committerpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-07 13:31:29 +0000
commit916a1d5dea518a04805cf18bc45c4efaadbea22a (patch)
treedd5c4d0da635a6870a5c64f8344ead1a5804599d /libvo
parent68330a49a6c2f169dd91381a818382572d94a585 (diff)
downloadmpv-916a1d5dea518a04805cf18bc45c4efaadbea22a.tar.bz2
mpv-916a1d5dea518a04805cf18bc45c4efaadbea22a.tar.xz
wm detection -- round two
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6010 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/mga_common.c4
-rw-r--r--libvo/vo_xmga.c2
-rw-r--r--libvo/vo_xv.c1
-rw-r--r--libvo/vo_xvidix.c44
-rw-r--r--libvo/x11_common.c74
5 files changed, 91 insertions, 34 deletions
diff --git a/libvo/mga_common.c b/libvo/mga_common.c
index 57d59f24f3..8ed4a6ca87 100644
--- a/libvo/mga_common.c
+++ b/libvo/mga_common.c
@@ -276,6 +276,10 @@ static uint32_t control(uint32_t request, void *data, ...)
mga_fullscreen();
#endif
return VO_TRUE;
+#if defined( VO_XMGA ) && defined( HAVE_NEW_GUI )
+ case VOCTRL_GUISUPPORT:
+ return VO_TRUE;
+#endif
}
return VO_NOTIMPL;
}
diff --git a/libvo/vo_xmga.c b/libvo/vo_xmga.c
index 6690e20705..59982150d0 100644
--- a/libvo/vo_xmga.c
+++ b/libvo/vo_xmga.c
@@ -292,8 +292,6 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3
vo_x11_classhint( mDisplay,vo_window,"xmga" );
vo_hidecursor(mDisplay,vo_window);
-// if ( vo_fs ) vo_x11_decoration( mDisplay,vo_window,0 );
-
XStoreName( mDisplay,vo_window,mTitle );
XMapWindow( mDisplay,vo_window );
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index 25f2be7289..5bfb1ed635 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -437,7 +437,6 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
);
XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
XSetWMNormalHints( mDisplay,vo_window,&hint );
-// if ( vo_fs ) vo_x11_decoration( mDisplay,vo_window,0 );
XMapWindow(mDisplay, vo_window);
if ( flags&1 ) vo_x11_fullscreen();
#ifdef HAVE_XINERAMA
diff --git a/libvo/vo_xvidix.c b/libvo/vo_xvidix.c
index 0d7c91ac10..98ea87b486 100644
--- a/libvo/vo_xvidix.c
+++ b/libvo/vo_xvidix.c
@@ -33,6 +33,10 @@
#include "vosub_vidix.h"
#include "../vidix/vidixlib.h"
+#ifdef HAVE_NEW_GUI
+#include "../Gui/interface.h"
+#endif
+
LIBVO_EXTERN(xvidix)
static vo_info_t vo_info =
@@ -228,9 +232,9 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
window_width = d_width;
window_height = d_height;
- vo_fs = flags&0x01;
- if (vo_fs)
- { vo_old_width=d_width; vo_old_height=d_height; }
+// vo_fs = flags&0x01;
+// if (vo_fs)
+// { vo_old_width=d_width; vo_old_height=d_height; }
X_already_started++;
@@ -254,26 +258,29 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
}
aspect(&d_width, &d_height, A_NOZOOM);
+
+ vo_dwidth=d_width; vo_dheight=d_height;
#ifdef HAVE_NEW_GUI
-if (vo_window == None)
+if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window
+else
{
#endif
#ifdef X11_FULLSCREEN
- if (vo_fs) /* fullscreen */
+ if ( flags&1 ) /* fullscreen */
{
if (flags & 0x04)
{
aspect(&d_width, &d_height, A_ZOOM);
}
- else
- {
- d_width = vo_screenwidth;
- d_height = vo_screenheight;
- }
- window_width = vo_screenwidth;
- window_height = vo_screenheight;
+// else
+// {
+// d_width = vo_screenwidth;
+// d_height = vo_screenheight;
+// }
+// window_width = vo_screenwidth;
+// window_height = vo_screenheight;
}
#endif
dwidth = d_width;
@@ -310,10 +317,10 @@ if (vo_window == None)
vo_x11_classhint(mDisplay, vo_window, "xvidix");
vo_hidecursor(mDisplay, vo_window);
-#ifdef X11_FULLSCREEN
- if (vo_fs) /* fullscreen */
- vo_x11_decoration(mDisplay, vo_window, 0);
-#endif
+//#ifdef X11_FULLSCREEN
+// if (vo_fs && vo_wm_type == 0) /* fullscreen */
+// vo_x11_decoration(mDisplay, vo_window, 0);
+//#endif
XGetNormalHints(mDisplay, vo_window, &hint);
hint.x = window_x;
@@ -327,13 +334,16 @@ if (vo_window == None)
/* Map window. */
XMapWindow(mDisplay, vo_window);
+
+ if ( flags&1 ) vo_x11_fullscreen();
+
#ifdef HAVE_XINERAMA
vo_x11_xinerama_move(mDisplay, vo_window);
#endif
vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV);
- XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask );
+// XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask );
#ifdef HAVE_NEW_GUI
}
#endif
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index 2a9b9a6c95..c6eb590331 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -174,6 +174,59 @@ static void x11_errorhandler(Display *display, XErrorEvent *event)
#undef MSGLEN
}
+int vo_wm_detect( void )
+{
+ Atom type;
+ Window win;
+ XEvent xev;
+ int c = 0;
+ int wm = vo_wm_Unknown;
+ int format;
+ unsigned long nitems, bytesafter;
+ unsigned char * args = NULL;
+#if 1
+// --- netwm
+ type=XInternAtom( mDisplay,"_NET_SUPPORTED",False );
+ if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
+ {
+ mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is NetWM.\n" );
+ XFree( args );
+ return vo_wm_NetWM;
+ }
+#endif
+// --- other wm
+ mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Create window for WM detect ...\n" );
+ win=XCreateSimpleWindow( mDisplay,mRootWin,vo_screenwidth,vo_screenheight,1,1,0,0,0 );
+ XSelectInput( mDisplay,win,PropertyChangeMask | StructureNotifyMask );
+ XMapWindow( mDisplay,win );
+ XMoveWindow( mDisplay,win,vo_screenwidth,vo_screenheight );
+ do
+ {
+ XCheckWindowEvent( mDisplay,win,PropertyChangeMask | StructureNotifyMask,&xev );
+
+ if ( xev.type == PropertyNotify )
+ {
+ char * name = XGetAtomName( mDisplay,xev.xproperty.atom );
+ if ( !name ) break;
+
+ if ( !strncmp( name,"_ICEWM_TRAY",11 ) )
+ { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is IceWM.\n" ); wm=vo_wm_IceWM; break; }
+ if ( !strncmp( name,"_KDE_",5 ) )
+ { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is KDE.\n" ); wm=vo_wm_KDE; break; }
+ if ( !strncmp( name,"KWM_WIN_DESKTOP",15 ) )
+ { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is WindowMaker style.\n" ); wm=vo_wm_WMakerStyle; break; }
+// fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",win,name,xev.xproperty.atom );
+
+ XFree( name );
+ }
+ } while( c++ < 25 );
+ XDestroyWindow( mDisplay,win );
+#ifdef MP_DEBUG
+ if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" );
+#endif
+ return wm;
+}
+
int vo_init( void )
{
// int mScreen;
@@ -297,19 +350,7 @@ int vo_init( void )
depth, vo_depthonscreen,
dispName,mLocalDisplay?"local":"remote");
- {
- Atom type;
- int format;
- unsigned long nitems, bytesafter;
- unsigned char * args = NULL;
- type=XInternAtom( mDisplay,"_NET_SUPPORTED",False );
- if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
- {
- mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is NetWM.\n" );
- XFree( args );
- vo_wm_type=vo_wm_NetWM;
- }
- }
+ vo_wm_type=vo_wm_detect();
return 1;
}
@@ -564,6 +605,7 @@ int vo_x11_check_events(Display *mydisplay){
mplayer_put_key(MOUSE_BTN0+Event.xbutton.button-1);
break;
#endif
+#if 1
case PropertyNotify:
{
char * name = XGetAtomName( mydisplay,Event.xproperty.atom );
@@ -590,9 +632,9 @@ int vo_x11_check_events(Display *mydisplay){
XFree( name );
}
break;
+#endif
}
}
-
return ret;
}
@@ -675,7 +717,11 @@ void vo_x11_fullscreen( void )
switch ( vo_wm_type )
{
+// case vo_wm_WMakerStyle:
+// vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 1 : 0 );
+ break;
case vo_wm_Unknown:
+ vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 1 : 0 );
XUnmapWindow( mDisplay,vo_window );
break;
case vo_wm_IceWM: