[MPlayer-dev-eng] PATCH: fullscreen issues with GUI, WM layers, gmplayer plays first file always twice

Michael Joosten joost at c-lab.de
Mon Apr 14 16:56:37 CEST 2003


This is the first of a bunch of some small fixes for some annoying
problems we hit when using mplayer for some 'real users' in an unreal
project...

First: Hitting 'f' in gmplayer (not mplayer!) kills it, it crashes in a
BadWindow error somewhere in the XLib error handler. In mplFullScreen,
wsSetLayer is always called for subwindows, even if they are not
existing at all, like menu. 

Second: The WM layer manipulation of file GTK selection box and message
boxes is wrong, they always end up at layer 0 instead of 4. Somehow the
original logic was confused (too late in the night?), and I tried to
reconstruct the desired behaviour.

Third: import_initial_playtree_into_gui() uses mplCurr(), which has the
nasty side effect of disabling mplGotoTheNext. Thus, mplEnd() des not
advance in the playlist and the first file is always played twice - in
gmplayer only. I just hacked this by introducing a function that
re-enabled mplGotoTheNext again, but you will probably write an own
mplXX() function for this purpose.

While the attachment fixes all that, I cannot claim that this is the
right way - but it works, and does not seem to harm anything else.


-- 
Michael Joosten, SBS C-LAB, joost at c-lab.de
Fuerstenallee 11, 33094 Paderborn, Germany
Phone: +49 5251 606127, Fax: +49 5251 606065
C-LAB is a cooperation of University Paderborn & SIEMENS
-------------- next part --------------
diff -ru ../mplayer-pur/main/Gui/interface.c main/Gui/interface.c
--- ../mplayer-pur/main/Gui/interface.c	2003-04-07 18:04:02.000000000 +0200
+++ main/Gui/interface.c	2003-04-11 22:24:12.000000000 +0200
@@ -1145,6 +1145,7 @@
   }
 
   mplCurr(); // Update filename
+  mplEnableGotoNext(); /* HACK: must have mplGotoNext = 1, else plays first file twice !! */
 
   if (!enqueue)
     filename=guiIntfStruct.Filename; // Backward compatibility; if file is specified on commandline,
diff -ru ../mplayer-pur/main/Gui/mplayer/play.c main/Gui/mplayer/play.c
--- ../mplayer-pur/main/Gui/mplayer/play.c	2003-02-06 00:01:02.000000000 +0100
+++ main/Gui/mplayer/play.c	2003-04-11 22:24:12.000000000 +0200
@@ -57,7 +57,7 @@
   if ( guiIntfStruct.Playing || gtkShowVideoWindow ) wsFullScreen( &appMPlayer.subWindow );
   fullscreen=vo_fs=appMPlayer.subWindow.isFullScreen;
   wsSetLayer( wsDisplay,appMPlayer.mainWindow.WindowID,appMPlayer.subWindow.isFullScreen );
-  wsSetLayer( wsDisplay,appMPlayer.menuWindow.WindowID,appMPlayer.subWindow.isFullScreen );
+  if (appMPlayer.menuIsPresent) wsSetLayer( wsDisplay,appMPlayer.menuWindow.WindowID,appMPlayer.subWindow.isFullScreen );
 
  if ( guiIntfStruct.Playing ) wsSetBackgroundRGB( &appMPlayer.subWindow,0,0,0 );
   else wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.sub.R,appMPlayer.sub.G,appMPlayer.sub.B );
@@ -369,3 +369,9 @@
  if ( stop ) mplEventHandling( evStop,0 );
  if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evPlay,0 );
 }
+
+/* needed for commandline files for gui in import_initial_playtree_into_gui() */
+void mplEnableGotoNext(void)
+{
+  mplGotoTheNext = 1;
+}
diff -ru ../mplayer-pur/main/Gui/mplayer/play.h main/Gui/mplayer/play.h
--- ../mplayer-pur/main/Gui/mplayer/play.h	2003-02-06 00:01:02.000000000 +0100
+++ main/Gui/mplayer/play.h	2003-04-11 22:24:12.000000000 +0200
@@ -31,4 +31,6 @@
 
 extern void mplSetFileName( char * dir,char * name,int type );
 
+extern void mplEnableGotoNext( void );
+
 #endif
diff -ru ../mplayer-pur/main/libvo/x11_common.c main/libvo/x11_common.c
--- ../mplayer-pur/main/libvo/x11_common.c	2003-04-09 19:05:35.000000000 +0200
+++ main/libvo/x11_common.c	2003-04-11 22:24:12.000000000 +0200
@@ -783,7 +783,7 @@
   {
     XClientMessageEvent xev;
     
-    if (layer) orig_layer=vo_x11_get_gnome_layer( mDisplay, vo_window );
+    if (!orig_layer) orig_layer=vo_x11_get_gnome_layer( mDisplay, vo_window );
 
     memset(&xev, 0, sizeof(xev));
     xev.type = ClientMessage;


More information about the MPlayer-dev-eng mailing list