diff -Nur MPlayer-1.0rc1.orig/configure MPlayer-1.0rc1/configure --- MPlayer-1.0rc1.orig/configure 2006-10-23 00:32:31.000000000 +0200 +++ MPlayer-1.0rc1/configure 2006-11-11 14:02:38.000000000 +0100 @@ -257,6 +257,7 @@ --disable-ftp Disable ftp support [enabled] --disable-vstream Disable tivo vstream client support [autodetect] --disable-pthreads Disable Posix threads support [autodetect] + --disable-dbus-glib Disable D-BUS GLib interface (required for GNOME screensaver support) [autodetect] --disable-ass Disable internal SSA/ASS subtitles support [autodetect] --enable-rpath Enable runtime linker path for extra libs [disabled] @@ -1721,6 +1722,7 @@ _musepack=auto _vstream=auto _pthreads=auto +_dbus_glib=auto _ass=auto _rpath=no _asmalign_pot=auto @@ -2033,6 +2035,8 @@ --disable-vstream) _vstream=no ;; --enable-pthreads) _pthreads=yes ;; --disable-pthreads) _pthreads=no ;; + --enable-dbus-glib) _dbus_glib=yes ;; + --disable-dbus-glib) _dbus_glib=no ;; --enable-ass) _ass=yes ;; --disable-ass) _ass=no ;; --enable-rpath) _rpath=yes ;; @@ -7029,6 +7033,19 @@ fi echores "$_gethostbyname2" +echocheck "D-BUS GLib interface" +if test "$_dbus_glib" = auto && pkg-config --exists dbus-glib-1; then + _dbus_glib=yes + _inc_dbus_glib=`pkg-config --cflags dbus-glib-1 2>/dev/null` + _ld_dbus_glib=`pkg-config --libs dbus-glib-1 2>/dev/null` +fi + +if test "$_dbus_glib" = yes; then + _def_dbus_glib='#define HAVE_DBUS_GLIB 1' +else + _def_dbus_glib='#undef HAVE_DBUS_GLIB' +fi +echores "$_dbus_glib" # --------------- GUI specific tests begin ------------------- echocheck "GUI" @@ -7521,6 +7538,10 @@ VESA_LIB = $_ld_vesa AA_LIB = $_ld_aa CACA_LIB = $_ld_caca +DBUS_GLIB_INC = $_inc_dbus_glib +DBUS_GLIB_LIB = $_ld_dbus_glib +DBUS_GLIB = $_dbus_glib + # audio output OSS = $_ossaudio @@ -8378,6 +8399,7 @@ $_def_tga $_def_toolame $_def_twolame +$_def_dbus_glib /* used by GUI: */ $_def_xshape diff -Nur MPlayer-1.0rc1.orig/help/help_mp-en.h MPlayer-1.0rc1/help/help_mp-en.h --- MPlayer-1.0rc1.orig/help/help_mp-en.h 2006-10-23 00:32:29.000000000 +0200 +++ MPlayer-1.0rc1/help/help_mp-en.h 2006-11-11 14:02:38.000000000 +0100 @@ -679,6 +679,13 @@ #define MSGTR_InsertingAfVolume "[Mixer] No hardware mixing, inserting volume filter.\n" #define MSGTR_NoVolume "[Mixer] No volume control available.\n" +// gnome_screensaver.c +#define MSGTR_OpenBusConnectionError "%s: Failed to open connection to bus: %s\n" +#define MSGTR_RemoteMethodException "%s: Caught remote method exception %s: %s\n" +#define MSGTR_GError "%s: Error: %s\n" +#define MSGTR_GNOMEScreensaverEnabled "GNOME screensaver enabled\n" +#define MSGTR_GNOMEScreensaverDisabled "GNOME screensaver disabled\n" + // ====================== GUI messages/buttons ======================== #ifdef HAVE_NEW_GUI diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c MPlayer-1.0rc1/libvo/gnome_screensaver.c --- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.c 1970-01-01 01:00:00.000000000 +0100 +++ MPlayer-1.0rc1/libvo/gnome_screensaver.c 2006-11-11 14:02:38.000000000 +0100 @@ -0,0 +1,120 @@ +/* + * gnome_screensaver.c v0.0.7 + * + * Enable/Disable the GNOME screensaver + * Supports GNOME screensaver API 2.14 and 2.15 + * + * Call gnome_screensaver_control(1) to enable and + * gnome_screensaver_control(0) to disable + * + */ + +#include +#include +#include + +#include "gnome_screensaver.h" +#include "mp_msg.h" +#include "help_mp.h" + +#define GS_SERVICE "org.gnome.ScreenSaver" +#define GS_PATH "/org/gnome/ScreenSaver" +#define GS_INTERFACE "org.gnome.ScreenSaver" + +#define GS_APPLICATION_NAME "MPlayer" +#define GS_REASON_FOR_INHIBIT "Playing a movie" + +static guint32 cookie; + +void gnome_screensaver_control(int enable) +{ + DBusGConnection *connection; + GError *error; + DBusGProxy *proxy; + gboolean ret; + char *funcname = "gnome_screensaver_control()"; + + g_type_init(); + + /* Get a connection to the session bus */ + error = NULL; + connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + if (connection == NULL) { + mp_msg(MSGT_VO, MSGL_ERR, + funcname, MSGTR_OpenBusConnectionError, error->message); + g_error_free(error); + return; + } + + /* Create a proxy object */ + proxy = dbus_g_proxy_new_for_name(connection, + GS_SERVICE, GS_PATH, GS_INTERFACE); + + /* Enable the screensaver */ + if (enable) { + /* First call the GNOME screensaver 2.15 API method */ + error = NULL; + ret = + dbus_g_proxy_call(proxy, "UnInhibit", &error, G_TYPE_UINT, + cookie, G_TYPE_INVALID); + + /* If this fails, try the GNOME screensaver 2.14 API */ + if (!ret && error->domain == DBUS_GERROR + && error->code == DBUS_GERROR_UNKNOWN_METHOD) { + mp_msg(MSGT_VO, MSGL_V, + "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n", + funcname); + g_error_free(error); + error = NULL; + ret = + dbus_g_proxy_call(proxy, "AllowActivation", &error, + G_TYPE_INVALID, G_TYPE_INVALID); + } + } + /* Disable the screensaver */ + else { + /* First call the GNOME screensaver 2.15 API method */ + error = NULL; + ret = + dbus_g_proxy_call(proxy, "Inhibit", &error, G_TYPE_STRING, + GS_APPLICATION_NAME, G_TYPE_STRING, + GS_REASON_FOR_INHIBIT, G_TYPE_INVALID, + G_TYPE_UINT, cookie, G_TYPE_INVALID); + + /* If this fails, try the GNOME screensaver 2.14 API */ + if (!ret && error->domain == DBUS_GERROR + && error->code == DBUS_GERROR_UNKNOWN_METHOD) { + mp_msg(MSGT_VO, MSGL_V, + "%s: GNOME screensaver 2.15 API failed, trying 2.14 API\n", + funcname); + g_error_free(error); + error = NULL; + ret = + dbus_g_proxy_call(proxy, "InhibitActivation", &error, + G_TYPE_STRING, GS_REASON_FOR_INHIBIT, + G_TYPE_INVALID, G_TYPE_INVALID); + } + } + + if (!ret) { + /* Check if it's a remote exception or a regular GError */ + if (error->domain == DBUS_GERROR + && error->code == DBUS_GERROR_REMOTE_EXCEPTION) { + mp_msg(MSGT_VO, MSGL_ERR, + funcname, MSGTR_RemoteMethodException, + dbus_g_error_get_name(error), error->message); + } + else { + mp_msg(MSGT_VO, MSGL_ERR, + funcname, MSGTR_GError, error->message); + } + g_error_free(error); + } + else { + mp_msg(MSGT_VO, MSGL_INFO, + enable ? MSGTR_GNOMEScreensaverEnabled : + MSGTR_GNOMEScreensaverDisabled); + } + + g_object_unref(proxy); +} diff -Nur MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h MPlayer-1.0rc1/libvo/gnome_screensaver.h --- MPlayer-1.0rc1.orig/libvo/gnome_screensaver.h 1970-01-01 01:00:00.000000000 +0100 +++ MPlayer-1.0rc1/libvo/gnome_screensaver.h 2006-11-11 14:02:38.000000000 +0100 @@ -0,0 +1,6 @@ +#ifndef _GNOME_SCREENSAVER_H +#define _GNOME_SCREENSAVER_H + +extern void gnome_screensaver_control(int enable); + +#endif /* !_GNOME_SCREENSAVER_H */ diff -Nur MPlayer-1.0rc1.orig/libvo/Makefile MPlayer-1.0rc1/libvo/Makefile --- MPlayer-1.0rc1.orig/libvo/Makefile 2006-10-23 00:32:26.000000000 +0200 +++ MPlayer-1.0rc1/libvo/Makefile 2006-11-11 14:02:38.000000000 +0100 @@ -39,6 +39,11 @@ SRCS += vosub_vidix.c endif +ifeq ($(DBUS_GLIB),yes) +SRCS += gnome_screensaver.c +LIBAV_INC += $(DBUS_GLIB_INC) +endif + INCLUDE = -I. -I.. -I../osdep $(LIBAV_INC) CFLAGS = $(INCLUDE) $(OPTFLAGS) -DMPG12PLAY diff -Nur MPlayer-1.0rc1.orig/libvo/x11_common.c MPlayer-1.0rc1/libvo/x11_common.c --- MPlayer-1.0rc1.orig/libvo/x11_common.c 2006-10-23 00:32:26.000000000 +0200 +++ MPlayer-1.0rc1/libvo/x11_common.c 2006-11-11 14:02:38.000000000 +0100 @@ -58,6 +58,10 @@ #include "mplayer.h" #endif +#ifdef HAVE_DBUS_GLIB +#include "gnome_screensaver.h" +#endif + #define WIN_LAYER_ONBOTTOM 2 #define WIN_LAYER_NORMAL 4 #define WIN_LAYER_ONTOP 6 @@ -1701,8 +1705,12 @@ timeout_save = 0; } - if (stop_xscreensaver) + if (stop_xscreensaver) { xscreensaver_enable(); +#ifdef HAVE_DBUS_GLIB + gnome_screensaver_control(1); +#endif + } if (kdescreensaver_was_running && stop_xscreensaver) { system @@ -1747,8 +1755,12 @@ allow_exp); } // turning off screensaver - if (stop_xscreensaver) + if (stop_xscreensaver) { xscreensaver_disable(mDisplay); +#ifdef HAVE_DBUS_GLIB + gnome_screensaver_control(0); +#endif + } if (stop_xscreensaver && !kdescreensaver_was_running) { kdescreensaver_was_running = diff -Nur MPlayer-1.0rc1.orig/Makefile MPlayer-1.0rc1/Makefile --- MPlayer-1.0rc1.orig/Makefile 2006-10-23 00:32:31.000000000 +0200 +++ MPlayer-1.0rc1/Makefile 2006-11-11 14:02:38.000000000 +0100 @@ -75,6 +75,7 @@ $(DIRECTFB_LIB) \ $(CACA_LIB) \ $(VESA_LIB) \ + $(DBUS_GLIB_LIB) \ ifeq ($(VIDIX),yes) VO_LIBS += vidix/libvidix.a