X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Fscreensaver.c;h=14efcbffe25087cee7e1b78cabb2888f4dda19cc;hb=dbded71fbba7011b19f5839dd7e69559549de640;hp=3983518df25e83f1f2e8d93160bdd6602f1aeb5d;hpb=9cbc1e852c40541aef57361f870f57feeef541f9;p=vlc diff --git a/modules/misc/screensaver.c b/modules/misc/screensaver.c index 3983518df2..14efcbffe2 100644 --- a/modules/misc/screensaver.c +++ b/modules/misc/screensaver.c @@ -25,12 +25,12 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include #include -#include -#include -#include +#include +#include +#include +#include #ifdef HAVE_DBUS @@ -134,50 +134,50 @@ static void Deactivate( vlc_object_t *p_this ) *****************************************************************************/ static void Run( intf_thread_t *p_intf ) { - int i_lastcall = 0; - #ifdef HAVE_DBUS p_intf->p_sys->p_connection = dbus_init( p_intf ); #endif - while( !p_intf->b_die ) + vlc_object_lock( p_intf ); + for(;;) { - msleep( INTF_IDLE_SLEEP*5 ); // 250ms + vlc_object_t *p_vout; + vlc_bool_t b_quit; /* Check screensaver every 30 seconds */ - if( ++i_lastcall > 120 ) + if( vlc_object_timedwait( p_intf, mdate() + 30000000 ) < 0 ) + break; + + p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); + + /* If there is a video output, disable xscreensaver */ + if( p_vout ) { - vlc_object_t *p_vout; - p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); - /* If there is a video output, disable xscreensaver */ - if( p_vout ) + input_thread_t *p_input; + p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT ); + vlc_object_release( p_vout ); + if( p_input ) { - input_thread_t *p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT ); - vlc_object_release( p_vout ); - if( p_input ) + if( PLAYING_S == p_input->i_state ) { - if( PLAYING_S == p_input->i_state ) - { - /* http://www.jwz.org/xscreensaver/faq.html#dvd */ - - system( "xscreensaver-command -deactivate >&- 2>&- &" ); + /* http://www.jwz.org/xscreensaver/faq.html#dvd */ + system( "xscreensaver-command -deactivate >&- 2>&- &" ); - /* If we have dbus support, let's communicate directly - with gnome-screensave else, run - gnome-screensaver-command */ + /* If we have dbus support, let's communicate directly + with gnome-screensave else, run + gnome-screensaver-command */ #ifdef HAVE_DBUS - poke_screensaver( p_intf, p_intf->p_sys->p_connection ); + poke_screensaver( p_intf, p_intf->p_sys->p_connection ); #else - system( "gnome-screensaver-command --poke >&- 2>&- &" ); + system( "gnome-screensaver-command --poke >&- 2>&- &" ); #endif - /* FIXME: add support for other screensavers */ - } - vlc_object_release( p_input ); + /* FIXME: add support for other screensavers */ } + vlc_object_release( p_input ); } - i_lastcall = 0; } } + vlc_object_unlock( p_intf ); } #ifdef HAVE_DBUS @@ -208,7 +208,10 @@ static void poke_screensaver( intf_thread_t *p_intf, # ifdef SCREENSAVER_DEBUG msg_Dbg( p_intf, "found a running gnome-screensaver instance" ); # endif + /* gnome-screensaver changed it's D-Bus interface, so we need both */ screensaver_send_message_void( p_intf, p_connection, "Poke" ); + screensaver_send_message_void( p_intf, p_connection, + "SimulateUserActivity" ); } # ifdef SCREENSAVER_DEBUG else