Mercurial > mplayer.hg
changeset 12520:94e66acdb706
Metacity fullscreen issues, patch by Alexander Strasser <eclipse7@gmx.net>,
approved by Attila.
author | diego |
---|---|
date | Wed, 02 Jun 2004 02:34:39 +0000 |
parents | 12a87d539f6d |
children | 27ed4672c619 |
files | Gui/wm/ws.c help/help_mp-de.h help/help_mp-en.h libvo/x11_common.c libvo/x11_common.h |
diffstat | 5 files changed, 65 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Gui/wm/ws.c Wed Jun 02 00:58:05 2004 +0000 +++ b/Gui/wm/ws.c Wed Jun 02 02:34:39 2004 +0000 @@ -763,6 +763,8 @@ #ifdef ENABLE_DPMS wsScreenSaverOn( wsDisplay ); #endif + + vo_x11_ewmh_fullscreen( _NET_WM_STATE_REMOVE ); // removes fullscreen state if wm supports EWMH } else { @@ -774,6 +776,8 @@ #ifdef ENABLE_DPMS wsScreenSaverOff( wsDisplay ); #endif + + vo_x11_ewmh_fullscreen( _NET_WM_STATE_ADD ); // adds fullscreen state if wm supports EWMH } vo_x11_decoration( wsDisplay,win->WindowID,decoration );
--- a/help/help_mp-de.h Wed Jun 02 00:58:05 2004 +0000 +++ b/help/help_mp-de.h Wed Jun 02 02:34:39 2004 +0000 @@ -3,7 +3,7 @@ // Moritz Bunkus <moritz@bunkus.org> // Alexander Strasser <eclipse7@gmx.net> -// In synch with rev 1.116 +// In synch with rev 1.117 // ========================= MPlayer help =========================== @@ -363,6 +363,9 @@ #define MSGTR_MovieAspectIsSet "Seitenverhältnis ist %.2f:1 - Skaliere zur korrekten Videogröße.\n" #define MSGTR_MovieAspectUndefined "Seitenverhältnis ist undefiniert - skaliere nicht.\n" +// x11_common.c +#define MSGTR_EwmhFullscreenStateFailed "\nX11: Konnte EWMH-Fullscreen-Event nicht senden!\n" + // ====================== GUI messages/buttons ======================== #ifdef HAVE_NEW_GUI
--- a/help/help_mp-en.h Wed Jun 02 00:58:05 2004 +0000 +++ b/help/help_mp-en.h Wed Jun 02 02:34:39 2004 +0000 @@ -360,6 +360,9 @@ #define MSGTR_MovieAspectIsSet "Movie-Aspect is %.2f:1 - prescaling to correct movie aspect.\n" #define MSGTR_MovieAspectUndefined "Movie-Aspect is undefined - no prescaling applied.\n" +// x11_common.c +#define MSGTR_EwmhFullscreenStateFailed "\nX11: Couldn't send EWMH fullscreen Event!\n" + // ====================== GUI messages/buttons ======================== #ifdef HAVE_NEW_GUI
--- a/libvo/x11_common.c Wed Jun 02 00:58:05 2004 +0000 +++ b/libvo/x11_common.c Wed Jun 02 02:34:39 2004 +0000 @@ -14,6 +14,7 @@ #include <unistd.h> #include <sys/mman.h> #include <signal.h> +#include <assert.h> #include "video_out.h" #include "aspect.h" @@ -115,6 +116,48 @@ static int vo_x11_get_fs_type(int supported); + +/* + * Sends the EWMH fullscreen state event. + * + * action: could be on of _NET_WM_STATE_REMOVE -- remove state + * _NET_WM_STATE_ADD -- add state + * _NET_WM_STATE_TOGGLE -- toggle + */ +void vo_x11_ewmh_fullscreen( int action ) +{ + assert( action == _NET_WM_STATE_REMOVE || + action == _NET_WM_STATE_ADD || + action == _NET_WM_STATE_TOGGLE ); + + if ( vo_fs_type & vo_wm_FULLSCREEN ) + { + XEvent xev; + + /* init X event structure for _NET_WM_FULLSCREEN client msg */ + xev.xclient.type = ClientMessage; + xev.xclient.serial = 0; + xev.xclient.send_event = True; + xev.xclient.message_type = XInternAtom( mDisplay, + "_NET_WM_STATE", False ); + xev.xclient.window = vo_window; + xev.xclient.format = 32; + xev.xclient.data.l[0] = action; + xev.xclient.data.l[1] = XInternAtom( mDisplay, + "_NET_WM_STATE_FULLSCREEN", False ); + xev.xclient.data.l[2] = 0; + xev.xclient.data.l[3] = 0; + xev.xclient.data.l[4] = 0; + + /* finally send that damn thing */ + if ( !XSendEvent( mDisplay, DefaultRootWindow( mDisplay ), False, + SubstructureRedirectMask | SubstructureNotifyMask, &xev ) ) + { + mp_msg( MSGT_VO,MSGL_ERR, MSGTR_EwmhFullscreenStateFailed ); + } + } +} + void vo_hidecursor ( Display *disp , Window win ) { Cursor no_ptr; @@ -1060,11 +1103,15 @@ if ( vo_fs ){ // fs->win + vo_x11_ewmh_fullscreen( _NET_WM_STATE_REMOVE ); // removes fullscreen state if wm supports EWMH + if(vo_dwidth != vo_screenwidth && vo_dheight != vo_screenheight) return; vo_fs=VO_FALSE; x=vo_old_x; y=vo_old_y; w=vo_old_width; h=vo_old_height; } else { // win->fs + vo_x11_ewmh_fullscreen( _NET_WM_STATE_ADD ); // sends fullscreen state to be added if wm supports EWMH + if(vo_old_width && (vo_dwidth==vo_screenwidth && vo_dwidth!=vo_old_width) && (vo_dheight==vo_screenheight && vo_dheight!=vo_old_height) ) return;
--- a/libvo/x11_common.h Wed Jun 02 00:58:05 2004 +0000 +++ b/libvo/x11_common.h Wed Jun 02 02:34:39 2004 +0000 @@ -14,6 +14,12 @@ #define vo_wm_BELOW 16 #define vo_wm_NETWM (vo_wm_FULLSCREEN | vo_wm_STAYS_ON_TOP | vo_wm_ABOVE | vo_wm_BELOW) +/* EWMH state actions, see + http://freedesktop.org/Standards/wm-spec/index.html#id2768769 */ +#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */ +#define _NET_WM_STATE_ADD 1 /* add/set property */ +#define _NET_WM_STATE_TOGGLE 2 /* toggle property */ + extern int metacity_hack; extern int vo_fsmode; @@ -62,6 +68,7 @@ int img_width, int img_height, int use_fs); extern void vo_x11_clearwindow( Display *mDisplay, Window vo_window ); extern void vo_x11_ontop(); +extern void vo_x11_ewmh_fullscreen( int action ); #endif