X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Fscreensaver.c;h=782333070579c3580f586f2040fe25baae510777;hb=d84f9e30a2b47c4462bc29f6517b586fe655629d;hp=1e486cceb1aaf396f769a9cb5ec2549d6194e908;hpb=51c217e7fdb723de78b9362ae94fc70bd23cf5ca;p=vlc diff --git a/modules/misc/screensaver.c b/modules/misc/screensaver.c index 1e486cceb1..7823330705 100644 --- a/modules/misc/screensaver.c +++ b/modules/misc/screensaver.c @@ -26,7 +26,12 @@ * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include #include @@ -36,9 +41,12 @@ #include #include +#ifdef HAVE_SIGNAL_H +# include +#endif + #ifdef HAVE_DBUS -#define DBUS_API_SUBJECT_TO_CHANGE #include #define GS_SERVICE "org.gnome.ScreenSaver" @@ -47,11 +55,6 @@ #endif -/* this is for dbus < 0.3 */ -#ifndef HAVE_DBUS_1 -#define dbus_bus_name_has_owner(connection, name, err) dbus_bus_service_exists(connection, name, err) -#endif - /***************************************************************************** * Local prototypes *****************************************************************************/ @@ -68,7 +71,7 @@ static void poke_screensaver( intf_thread_t *p_intf, static void screensaver_send_message_void ( intf_thread_t *p_intf, DBusConnection *p_connection, const char *psz_name ); -static vlc_bool_t screensaver_is_running( DBusConnection *p_connection ); +static bool screensaver_is_running( DBusConnection *p_connection ); struct intf_sys_t @@ -82,7 +85,7 @@ struct intf_sys_t * Module descriptor *****************************************************************************/ vlc_module_begin(); - set_description( _("X Screensaver disabler") ); + set_description( N_("X Screensaver disabler") ); set_capability( "interface", 0 ); set_callbacks( Activate, Deactivate ); vlc_module_end(); @@ -114,18 +117,11 @@ static void Deactivate( vlc_object_t *p_this ) if( p_intf->p_sys->p_connection ) { -# ifdef HAVE_DBUS_2 dbus_connection_unref( p_intf->p_sys->p_connection ); -# else - dbus_connection_disconnect( p_intf->p_sys->p_connection ); -# endif } - if( p_intf->p_sys ) - { - free( p_intf->p_sys ); - p_intf->p_sys = NULL; - } + free( p_intf->p_sys ); + p_intf->p_sys = NULL; #endif } @@ -134,17 +130,22 @@ static void Deactivate( vlc_object_t *p_this ) *****************************************************************************/ static void Execute( intf_thread_t *p_this, const char *const *ppsz_args ) { - pid_t pid; - switch( pid = fork() ) + pid_t pid = fork(); + switch( pid ) { case 0: /* we're the child */ + { + sigset_t set; + sigemptyset (&set); + pthread_sigmask (SIG_SETMASK, &set, NULL); + /* We don't want output */ - freopen( "/dev/null", "w", stdout ); - freopen( "/dev/null", "w", stderr ); - execv( ppsz_args[0] , (char *const *)ppsz_args ); + if( ( freopen( "/dev/null", "w", stdout ) != NULL ) + && ( freopen( "/dev/null", "w", stderr ) != NULL ) ) + execv( ppsz_args[0] , (char *const *)ppsz_args ); /* If the file we want to execute doesn't exist we exit() */ - exit( 1 ); - break; + exit( EXIT_FAILURE ); + } case -1: /* we're the error */ msg_Dbg( p_this, "Couldn't fork() while launching %s", ppsz_args[0] ); @@ -165,18 +166,19 @@ static void Execute( intf_thread_t *p_this, const char *const *ppsz_args ) *****************************************************************************/ static void Run( intf_thread_t *p_intf ) { + mtime_t deadline = mdate(); + + vlc_object_lock( p_intf ); #ifdef HAVE_DBUS p_intf->p_sys->p_connection = dbus_init( p_intf ); #endif - vlc_object_lock( p_intf ); - for(;;) + while( vlc_object_alive( p_intf ) ) { vlc_object_t *p_vout; - /* Check screensaver every 30 seconds */ - if( vlc_object_timedwait( p_intf, mdate() + 30000000 ) < 0 ) - break; + if( vlc_object_timedwait( p_intf, deadline ) == 0 ) + continue; p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); @@ -210,6 +212,9 @@ static void Run( intf_thread_t *p_intf ) vlc_object_release( p_input ); } } + + /* Check screensaver every 30 seconds */ + deadline = mdate() + 30000000; } vlc_object_unlock( p_intf ); } @@ -281,12 +286,12 @@ static void screensaver_send_message_void ( intf_thread_t *p_intf, dbus_message_unref( p_message ); } -static vlc_bool_t screensaver_is_running( DBusConnection *p_connection ) +static bool screensaver_is_running( DBusConnection *p_connection ) { DBusError error; - vlc_bool_t b_return; + bool b_return; - if( !p_connection ) return VLC_FALSE; + if( !p_connection ) return false; dbus_error_init( &error ); b_return = dbus_bus_name_has_owner( p_connection, GS_SERVICE, &error );