--- mplayer-export-2007-04-21.orig/configure 2007-04-21 02:57:09.000000000 +0800 +++ mplayer-export-2007-04-21/configure 2007-04-22 13:54:42.000000000 +0800 @@ -270,6 +270,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 subtitle support [autodetect] --enable-rpath enable runtime linker path for extra libs [disabled] @@ -642,6 +643,7 @@ _musepack=auto _vstream=auto _pthreads=auto +_dbus_glib=auto _ass=auto _rpath=no _asmalign_pot=auto @@ -1063,6 +1065,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 ;; @@ -3747,6 +3751,21 @@ # VIDEO # ######### +echocheck "D-BUS GLib interface" +if test "$_dbus_glib" = auto && pkg-config --exists dbus-glib-1; then + _dbus_glib=yes + _vosrc="$_vosrc gnome_screensaver.c" + _vomodules="gnome_screensaver $_vomodules" + _inc_extra="$_inc_extra `pkg-config --cflags dbus-glib-1 2>/dev/null`" + _ld_extra="$_ld_extra `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" echocheck "3dfx" if test "$_3dfx" = yes ; then @@ -7106,7 +7125,6 @@ fi echores "$_gethostbyname2" - # --------------- GUI specific tests begin ------------------- echocheck "GUI" echo "$_gui" @@ -8588,6 +8606,7 @@ $_def_tga $_def_toolame $_def_twolame +$_def_dbus_glib /* used by GUI: */ $_def_xshape --- mplayer-export-2007-04-21.orig/help/help_mp-en.h 2007-04-21 05:49:49.000000000 +0800 +++ mplayer-export-2007-04-21/help/help_mp-en.h 2007-04-22 13:42:25.000000000 +0800 @@ -707,6 +707,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 --- mplayer-export-2007-04-21.orig/libvo/gnome_screensaver.c 1970-01-01 08:00:00.000000000 +0800 +++ mplayer-export-2007-04-21/libvo/gnome_screensaver.c 2007-04-22 13:46:38.000000000 +0800 @@ -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); +} --- mplayer-export-2007-04-21.orig/libvo/gnome_screensaver.h 1970-01-01 08:00:00.000000000 +0800 +++ mplayer-export-2007-04-21/libvo/gnome_screensaver.h 2007-04-22 13:47:08.000000000 +0800 @@ -0,0 +1,6 @@ +#ifndef _GNOME_SCREENSAVER_H +#define _GNOME_SCREENSAVER_H + +extern void gnome_screensaver_control(int enable); + +#endif /* !_GNOME_SCREENSAVER_H */ --- mplayer-export-2007-04-21.orig/libvo/x11_common.c 2007-04-02 05:59:54.000000000 +0800 +++ mplayer-export-2007-04-21/libvo/x11_common.c 2007-04-22 13:56:57.000000000 +0800 @@ -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 @@ -1695,7 +1699,12 @@ } if (stop_xscreensaver) + { xscreensaver_enable(); + #ifdef HAVE_DBUS_GLIB + gnome_screensaver_control(1); + #endif + } if (kdescreensaver_was_running && stop_xscreensaver) { system @@ -1741,7 +1750,12 @@ } // turning off screensaver if (stop_xscreensaver) + { xscreensaver_disable(mDisplay); + #ifdef HAVE_DBUS_GLIB + gnome_screensaver_control(0); + #endif + } if (stop_xscreensaver && !kdescreensaver_was_running) { kdescreensaver_was_running =