mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 12:02:23 +02:00
Metacity fullscreen issues, patch by Alexander Strasser <eclipse7@gmx.net>,
approved by Attila. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12521 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
eef80d2874
commit
b753d80209
@ -763,6 +763,8 @@ void wsFullScreen( wsTWindow * win )
|
||||
#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 @@ void wsFullScreen( wsTWindow * win )
|
||||
#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 );
|
||||
|
@ -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 @@ static char help_text[]=
|
||||
#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
|
||||
|
@ -360,6 +360,9 @@ static char help_text[]=
|
||||
#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
|
||||
|
@ -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 @@ XF86VidModeModeLine modeline;
|
||||
|
||||
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 @@ void vo_x11_fullscreen( void )
|
||||
|
||||
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;
|
||||
|
@ -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 @@ extern void vo_x11_clearwindow_part(Display *mDisplay, Window vo_window,
|
||||
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user