
    Eg                         d dl Z  e j                  dd       d dlmZmZmZmZ d dlZd dl	m
Z
 d dlZd dlmZ  G d dej                        Zy)	    NCScreensaverz1.0)Gtkr   GioGObject)ScreensaverManager)DEBUGc                   Z     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zdd
Zd Z xZS )ScreensaverServicez
    This is the dbus service we run ourselves.  It is the owner
    of our ScreensaverManager, and implements the org.cinnamon.Screensaver
    dbus interface.  It is through this service that the screensaver
    is controlled.
    c                    t         t        |           	 t        j                  t        j
                  j                  d       | _        t        j                  j                         | _        | j                  j                  d| j                         | j                  j                  d| j                          | j                  j                  d| j"                         | j                  j                  d| j$                         | j                  j                  d| j&                         | j                  j                  d| j(                         t+               | _        | j,                  j                  d	| j.                         	 g | _        | j                  j3                  | j                  t4        j6                         y #  t        d       t        d       Y xY w)
Nz(Unable to get session connection, fatal!   zhandle-lockzhandle-quitzhandle-set-activezhandle-get-activezhandle-get-active-timezhandle-simulate-user-activityzactive-changed)superr
   __init__r   bus_get_syncBusTypeSESSIONbusprintexitr   ScreenSaverSkeletonnew	interfaceconnecthandle_lockhandle_quithandle_set_activehandle_get_activehandle_get_active_timehandle_simulate_user_activityr   manageron_active_changed
lock_queueexportcSS_PATH)self	__class__s    */usr/share/cinnamon-screensaver/service.pyr   zScreensaverService.__init__   sS    $02	''(;(;TBDH
 &99==?}d.>.>?}d.>.>?2D4J4JK2D4J4JK79T9TU>@b@bc)+-t/E/EF	" dhh		2G	<=Gs   3G Gc                     t         j                  st        d|z         t        j                  j                         }|j                          |j                          y )Nz+service: '%s' received, poking application.)statusAwaker   r   Applicationget_defaultholdrelease)r%   method_nameapps      r'   poke_processzScreensaverService.poke_process>   s;    ||?+MNoo))+
    c                     | j                  d       | j                  j                  |      r|j                  |       y| j                  j                  |       y)a  
        We want to be able to respond to locking synchronously for security reasons.
        Things like cinnamon-settings-daemon (power) and cinnamon-session use the
        cinnamon-screensaver-command helper script to lock the screen during certain events
        like sleep, hibernate, user switching, etc...

        If we receive a lock request, we forward it to the manager.  It returns True if we were
        already active (or active and locked.)  If so, we can complete the invocation immediately.
        Otherwise, we queue the invocation, and wait for an "active-changed" signal from the manager,
        and then complete the invocations (in the same order they were received.)
        LockT)r1   r   lockcomplete_lockr!   append)r%   ifaceinvmsgs       r'   r   zScreensaverService.handle_lockG   sN     	&!<<S!$  OO""3'r2   c                     | j                   j                          |j                  |       t        j                  j                         j                          y)NT)r   unlockcomplete_quitr   r+   r,   quitr%   r8   r9   s      r'   r   zScreensaverService.handle_quit]   s<    C ##%**,r2   c                     | j                  d       |r| j                  j                  |       n| j                  j                          |j	                  |       y)N	SetActiveT)r1   r   
set_activer<   complete_set_activer%   r8   r9   actives       r'   r   z$ScreensaverService.handle_set_activef   sF    +&LL##F+LL!!!#&r2   c                 ~    | j                  d       | j                  j                         }|j                  ||       y)N	GetActiveT)r1   r   
get_activecomplete_get_activerD   s       r'   r   z$ScreensaverService.handle_get_activer   s5    +&((*!!#v.r2   c                 ~    | j                  d       | j                  j                         }|j                  ||       y)NGetActiveTimeT)r1   r   get_active_timecomplete_get_active_time)r%   r8   r9   atimes       r'   r   z)ScreensaverService.handle_get_active_time{   s5    /*,,.&&sE2r2   c                    | j                  d       | j                  j                         r| j                  j                          n)t	        d       t
        j                  j                          |j                  |       y)NSimulateUserActivityzCalling XResetScreenSaverT)	r1   r   	is_lockedsimulate_user_activityr   r   Screenreset_screensavercomplete_simulate_user_activityr?   s      r'   r   z0ScreensaverService.handle_simulate_user_activity   s]    01<<!!#LL//1-.113--c2r2   c                 D    t        j                  | j                  |       y N)r   idle_addon_active_changed_idle)r%   r   statedatas       r'   r    z$ScreensaverService.on_active_changed   s    44e<r2   c                 H   | j                   j                          t        | j                         dkD  rN| j                   j                         }| j                  j                  |       t        | j                         dkD  rNg | _         | j                  j                  |       y )Nr   )r!   reverselenpopr   r6   emit_active_changed)r%   rZ   
invocations      r'   rY   z)ScreensaverService.on_active_changed_idle   su    !$//"Q&,,.JNN((4 $//"Q& **51r2   rW   )__name__
__module____qualname____doc__r   r1   r   r   r   r   r   r   r    rY   __classcell__)r&   s   @r'   r
   r
      s;    (3T,
=	2r2   r
   )girequire_versiongi.repositoryr   r   r   r   	constantsr#   r   r   r)   
util.utilsr   Objectr
    r2   r'   <module>rn      s@    
   >5 ) 9 9  &  Q2 Q2r2   