U
    u1‘Wä  ã                   @   s|   d Z ddlmZmZmZmZ ddlZddl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:`glib` and :mod:`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_importNc                   @   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_observer2   s    z_ObserverMixin._setup_observerc                 C   s
   | j dk	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	   8   s    
z_ObserverMixin.enabledc                 C   sD   |r&| j d kr&t | jtj| j¡| _ n|s@| j d k	r@t | j ¡ d S ©N)r   ÚglibZio_add_watchr   ÚIO_INÚ_process_udev_eventZsource_remove)r   Úvaluer   r   r   r	   D   s      ÿc                 C   s.   |t jkr*| jjdd�}|d k	r*|  |¡ dS )Nr   )ZtimeoutT)r   r   r   ZpollÚ_emit_event)r   ÚsourceZ	conditionÚdevicer   r   r   r   M   s
    

z"_ObserverMixin._process_udev_eventc                 C   s   |   d|¡ d S ©Núdevice-event)Úemit)r   r   r   r   r   r   U   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:`glib` mainloop.

    This class inherits :class:`~gobject.GObject` 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:`gobject.GObject`.
    r   c                 C   s   t j | ¡ |  |¡ d S r   )ÚgobjectÚGObjectÚ__init__r   r
   r   r   r   r#   y   s    zMonitorObserver.__init__N)r   r   r   r   Ústrr!   ÚSIGNAL_RUN_LASTÚ	TYPE_NONEÚTYPE_PYOBJECTÚ__gsignals__r#   r   r   r   r   r    Y   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:`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ÚremoveZchangeZ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   r,   r   r   r   r#   š   s    
þzGUDevMonitorObserver.__init__c                 C   s6   |   d|j|¡ | j |j¡}|d k	r2|   ||¡ d S r   )r   ÚactionÚ_action_signal_mapÚget)r   r   Úsignalr   r   r   r   ¢   s    z GUDevMonitorObserver._emit_eventN)r   r   r   r   r0   r$   r!   r%   r&   ZTYPE_STRINGr'   r(   r#   r   r   r   r   r   r)   �   s:     þ 
ÿ ÿ ÿ ÿ ÿ÷r)   )r   Z
__future__r   r   r   r   r   r!   Úobjectr   r"   r    Ztype_registerr)   r   r   r   r   Ú<module>   s   +%
(