o
    g-`  ã                   @   s|   d Z ddlmZmZmZmZ ddlmZmZ G dd„ de	ƒZ
G dd„ deje
ƒZe e¡ G dd	„ d	eje
ƒZe e¡ d
S )aÓ  pyudev.glib
    ===========

    Glib integration.

    :class:`MonitorObserver` integrates device monitoring into the Glib
    mainloop by turing device events into Glib signals.

    :mod:`gi.repository.GLib` and :mod:`gi.repository.GObject` from PyGObject_
    must be available when importing this module. PyGtk is not required.

    .. _PyGObject: http://www.pygtk.org/

    .. moduleauthor::  Sebastian Wiesner  <lunaryorn@gmail.com>
    .. versionadded:: 0.7

é    )Úprint_functionÚdivisionÚunicode_literalsÚabsolute_import)ÚGLibÚGObjectc                   @   sB   e Zd ZdZdd„ Zedd„ ƒZejdd„ ƒZdd„ Zd	d
„ Z	dS )Ú_ObserverMixinz>Mixin to provide observer behavior to the old and the new API.c                 C   s   || _ d | _d| _d S )NT)ÚmonitorÚevent_sourceÚenabled©Úselfr	   © r   ú-/usr/lib/python3/dist-packages/pyudev/glib.pyÚ_setup_observer.   s   
z_ObserverMixin._setup_observerc                 C   s
   | j duS )zé
        Whether this observer is enabled or not.

        If ``True`` (the default), this observer is enabled, and emits events.
        Otherwise it is disabled and does not emit any events.

        .. versionadded:: 0.14
        N)r
   )r   r   r   r   r   4   s   

z_ObserverMixin.enabledc                 C   sN   |r| j d u rt | jtj| j¡| _ d S |s#| j d ur%t | j ¡ d S d S d S ©N)r
   r   Úio_add_watchr	   ÚIO_INÚ_process_udev_eventÚsource_remove)r   Úvaluer   r   r   r   @   s   
ÿþc                 C   s.   |t jkr| jjdd�}|d ur|  |¡ dS )Nr   )ÚtimeoutT)r   r   r	   ÚpollÚ_emit_event)r   ÚsourceÚ	conditionÚdevicer   r   r   r   K   s
   

z"_ObserverMixin._process_udev_eventc                 C   s   |   d|¡ d S ©Núdevice-event)Úemit)r   r   r   r   r   r   T   s   z_ObserverMixin._emit_eventN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr   r   r   r   r   r   r   )   s    


	r   c                   @   s2   e Zd ZdZedƒejejejffiZ	dd„ Z
dS )ÚMonitorObserveraÞ  
    An observer for device events integrating into the :mod:`gi.repository.GLib`
    mainloop.

    This class inherits :class:`~gi.repository.GObject.Object` to turn device
    events into glib signals.

    >>> from pyudev import Context, Monitor
    >>> from pyudev.glib import MonitorObserver
    >>> context = Context()
    >>> monitor = Monitor.from_netlink(context)
    >>> monitor.filter_by(subsystem='input')
    >>> observer = MonitorObserver(monitor)
    >>> def device_event(observer, device):
    ...     print('event {0} on device {1}'.format(device.action, device))
    >>> observer.connect('device-event', device_event)
    >>> monitor.start()

    This class is a child of :class:`gi.repository.GObject.Object`.
    r   c                 C   s   t j | ¡ |  |¡ d S r   )r   ÚObjectÚ__init__r   r   r   r   r   r(   z   s   zMonitorObserver.__init__N)r    r!   r"   r#   Ústrr   ÚSIGNAL_RUN_LASTÚ	TYPE_NONEÚTYPE_PYOBJECTÚ__gsignals__r(   r   r   r   r   r&   X   s    ÿùr&   c                   @   s¤   e Zd ZdZdddddœZedƒejejej	ej
ffedƒejejej
ffedƒejejej
ffedƒejejej
ffedƒejejej
ffiZdd	„ Zd
d„ ZdS )ÚGUDevMonitorObserverzÄ
    An observer for device events integrating into the :mod:`gi.repository.GLib`
    mainloop.

    .. deprecated:: 0.17
       Will be removed in 1.0.  Use :class:`MonitorObserver` instead.
    zdevice-addedzdevice-removedzdevice-changedzdevice-moved)ÚaddÚremoveÚchangeÚmover   c                 C   s.   t j | ¡ |  |¡ dd l}| dt¡ d S )Nr   z@Will be removed in 1.0. Use pyudev.glib.MonitorObserver instead.)r   r'   r(   r   ÚwarningsÚwarnÚDeprecationWarning)r   r	   r3   r   r   r   r(       s   
þzGUDevMonitorObserver.__init__c                 C   s:   |   d|j|¡ | j |j¡}|d ur|   ||¡ d S d S r   )r   ÚactionÚ_action_signal_mapÚget)r   r   Úsignalr   r   r   r   ¨   s
   ÿz GUDevMonitorObserver._emit_eventN)r    r!   r"   r#   r7   r)   r   r*   r+   ÚTYPE_STRINGr,   r-   r(   r   r   r   r   r   r.   ‚   s2    	ü
ÿÿÿÿÿ÷r.   N)r#   Ú
__future__r   r   r   r   Úgi.repositoryr   r   Úobjectr   r'   r&   Útype_registerr.   r   r   r   r   Ú<module>   s   /
'-