
    f                        d dl mZmZmZ d dlZd dlmZ  e        d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlZ ej@                  d	      Z!d d
l"m#Z#  e#       Z$ G d d      Z% G d d	e%eejL                        Z' G d de%eejP                        Z) G d d      Z* G d de*      Z+ G d de*      Z, G d de*      Z-y)    )divisionprint_functionunicode_literalsN)require_gi_versions)GObjectGLibGdkX11GdkGtk)DockingMonitor)RectVersion)CallOnceTimer)OrientationWindowRectPersistWindowRectTrackerset_unity_propertygtk_has_resize_grip_supportget_monitor_dimensionsphysical_to_monitor_pixel_size	KbdWindow)Configc                        e Zd ZdZd Zd Zd&dZd Zd Zd Z	d Z
d	 Z fd
Zd Zd Zd Zd Zd Zd'dZd Zd Zd Zd Zd'dZd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z' xZ(S )(KbdWindowBasez
    Very messy class holds the keyboard widget. The mess is the docked
    window support which is disable because of numerous metacity bugs.
    c                 n   t         j                  d       t        j                         | _        t        j
                         | _        d | _        || _        || _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d | _        t%               | _        d | _        d| _        d| _        d | _        d | _        i | _        t5               r| j7                         | _        nd| _        d | _        g | _        i | _        i | _         d| _!        d| _"        d| _#        | jI                  d       | jK                  d       | jM                  d       tN        jP                  jS                  d       | jU                  tW        d             | jY                  d| jZ                         | jY                  d| j\                         | jY                  d	| j^                         | jY                  d
| j`                         | jY                  d| jb                         | jY                  d| jd                         | jY                  d| jf                         | ji                          | jk                          | jm                          | jo                  | j                         t         j                  d       y )NzEntered in __init__Fr   TonboardOnboardzwindow-state-eventzvisibility-notify-eventzscreen-changedzcomposited-changedrealize	unrealizeconfigure-eventzLeaving __init__)8_loggerdebugoskUtil	_osk_utilStruts_osk_strutsapplicationkeyboard_widgeticpsupports_alpha_visible_sticky
_iconified
_maximized_screen_resizing_docking_enabled_docking_edger   _docking_rect_docking_monitor_shrink_work_area_dock_expand_current_struts_current_docking_monitor_monitor_workarear   get_has_resize_grip_default_resize_grip
_type_hint_known_window_rects_written_window_rects_written_dock_sizes_auto_position_started_desktop_switch_count_moved_desktop_switch_countset_accept_focusset_app_paintableset_keep_abover   Windowset_default_icon_name	set_title_connect_cb_window_state_event_cb_visibility_notify_cb_screen_changed_cb_composited_changed_cb_realize_event_cb_unrealize_event_on_configure_eventdetect_window_managercheck_alpha_supportupdate_unrealize_optionsaddselfr*   r+   s      3/usr/lib/python3/dist-packages/Onboard/KbdWindow.py__init__zKbdWindowBase.__init__:   s/   +,88:::<.# % %!!V $!&!#(,%!#&((,(@(@(BD%(-D%#% %'"#% &+#%&"+,(e$t$D! 	

((3q|$)0K0KL.0J0JK%0G0GH)0K0KLY0F0FG[0H0HI&0H0HI""$  "%%'%%&()    c                      y N rX   s    rY   cleanupzKbdWindowBase.cleanup~       r[   c                 d    | j                          | j                          | j                          y r]   rS   rT   
queue_draw)rX   widget
old_screens      rY   rN   z KbdWindowBase._cb_screen_changed   $    ""$  "r[   c                 d    | j                          | j                          | j                          y r]   rc   )rX   re   s     rY   rO   z$KbdWindowBase._cb_composited_changed   rg   r[   c                 &    | j                  d       y )Nquit-onboard)emitr_   s    rY   emit_quit_onboardzKbdWindowBase.emit_quit_onboard   s    		.!r[   c                    t         j                  }|s| j                  j                         }|rOdt         _        t
        t        t        fD ]0  }|j                         |j                  v s  |       t         _         n t         j                  st               t         _        t        j                  dj                  |             t        j                  dj                  t        t         j                  j                                     y)z
        Detect the WM and select WM specific behavior.

        Doctests:
        >>> osk_util = osk.Util()
        >>> len(osk_util.get_current_wm_name().lower()) > 0
        True
        Nzwindow manager: {}zquirks selected: {}T)configquirks_namer&   get_current_wm_namequirksWMQuirksCompizWMQuirksMetacityWMQuirksMutterlowerwmsWMQuirksDefaultr"   r#   formatstr	__class__)rX   wmclss      rY   rS   z#KbdWindowBase.detect_window_manager   s      335B FM&(8.I HHJ#'')$'EFM
 }}+-FM*11"56+(.s6==3J3J/K(L	Nr[   c           	      j   | j                         }|j                         }|xr3 |j                         xs! t        j                  t        j
                  k(  | _        | j                  | j                  _        t        j                  dj                  | j                               |r| j                  |       | j                  j                  |       t        t        j                  t        j                        }|t        dd      k  r| j!                  t        j"                  j$                  t'        j(                  dddd             | j                  j!                  t        j"                  j$                  t'        j(                  dddd             yt        j+                  t-        d             y)Nz!screen changed, supports_alpha={}      r   zGno window transparency available; screen doesn't support alpha channelsF)
get_screenget_rgba_visualis_compositedrn   launched_byLAUNCHER_UNITY_GREETERr,   r*   r"   r#   rx   
set_visualr   r   MAJOR_VERSIONMINOR_VERSIONoverride_background_color
StateFlagsNORMALr
   RGBAinforJ   )rX   screenvisualgtk_versions       rY   rT   z!KbdWindowBase.check_alpha_support   sZ   "'') B!!# A6#@#@@ 	
 /3.A.A+9t223	5 OOF#  ++F3
 "#"3"3S5F5FGKWQ^+..NN))388Aq!Q+?A$$>>NN))388Aq!Q+?A
  LL D E Fr[   c                     | j                          | j                  d        | j                  | j                           | j	                          y NT)update_window_optionsupdate_window_scaling_factorpre_render_keysget_sizeshowr_   s    rY   _show_first_timezKbdWindowBase._show_first_time   s;    ""$))$/dmmo.		r[   c                     | j                   j                         s| j                  ||       t        t        |   ||||       y r]   )r*   is_drag_initiatedr   superr   move_resize)rX   xywhrz   s        rY   r   zKbdWindowBase.move_resize   s:    ##557  A&mT.q!Q:r[   c                 >    | j                   j                  | ||       y r]   )r*   r   )rX   r   r   s      rY   r   zKbdWindowBase.pre_render_keys   s    ,,T1a8r[   c                      d}t        | |d      S )N)2      )   d   )r   )rX   min_mms     rY   get_min_window_sizez!KbdWindowBase.get_min_window_size   s    -dFJGGr[   c                 x   | j                         j                  t        j                  j                  t        j                  j
                  z  t        j                  j                  z  t        j                  j                  z         t        |        t        j                  sIt        j                         }|r| j                  d       | j                          | j                  d       t        j                         }| j!                         \  |_        |_        t&        j)                  t*        j,                        r| j/                         }t&        j1                  dj3                  |j5                         |j7                                      t9        |       \  }}t&        j1                  dj3                  t;        |      t;        |                   t&        j1                  dj3                  |j"                  |j$                               | j=                  | |t        j>                  j@                         y)z Gdk window created Tstartupz$_cb_realize_event, screen size {}x{}z6_cb_realize_event, monitor dimensions: {} pixel, {} mmz/_cb_realize_event, get_min_window_size(): {} {}N)!
get_windowset_functionsr
   
WMFunctionRESIZEMOVEMINIMIZECLOSEr   rn   xid_modeis_override_redirectset_override_redirectupdate_taskbar_hintrestore_window_rectGeometryr   	min_width
min_heightr"   isEnabledForloggingDEBUGr   r#   rx   widthheightr   reprset_geometry_hintsWindowHintsMIN_SIZE)rX   	user_dataordgeomr   sizesize_mms          rY   rP   zKbdWindowBase._cb_realize_event   s   
 	''(=(=(+(;(;)<(+(?(?)@ ),(<(<)= 	>
 	4 --/C**40$$&$$t$4 ||~*.*B*B*D'.__&FMM@!6&,,.&--/BD248MD'MM @!6$t*d7m<> MMK!6$..$//BD 	dCOO,D,DEr[   c                 $    | j                          y)z Gdk window destroyed N)rU   rX   r   s     rY   rQ   z!KbdWindowBase._cb_unrealize_event  s    %%'r[   c                     t         j                  sa| j                  t         j                  j                         t         j
                  j                  |       }| j                  |       || _        y y r]   )	rn   r   set_decoratedwindowwindow_decorationrq   get_window_type_hintset_type_hintr=   )rX   	type_hints     rY   rU   z&KbdWindowBase.update_unrealize_options	  sO    v}}>>?::4@Iy)'DO r[   c                    t         j                  sd}t         j                  j                  }|| j	                         k7  rd}t         j                         }|| j                         k7  rd}t         j                  j                  |       }|| j                  k7  rd}|r| j                          t               rAt         j                         r| j                  | j                         n| j                  d       | j                          y y )NFT)rn   r   r   r   get_decoratedr   get_override_redirectrq   r   r=   _recreate_windowr   has_window_decorationset_has_resize_gripr<   update_sticky_state)rX   r   recreate	decoratedr   r   s         rY   r   z#KbdWindowBase.update_window_options  s    H 77ID..00 --/Cd0022 ::4@IDOO+ %%' +,//1,,T-F-FG,,U3$$&= r[   c                    t         j                  d       d }| j                         r0| j                         }| j	                          | j                          | j                          |!t        j                  j                  | |       y y )Nz*recreating window - window options changed)
r"   r   get_realized
is_visiblehider    r   r   rG   set_visiblerX   visibles     rY   r   zKbdWindowBase._recreate_window2  sf    ABoo'GIIKNNJJ""41 r[   c                    t         j                  sut         j                         }| j                  |k7  r*|| _        |r| j	                          n| j                          | j                  r| j                  j                          y y y r]   )rn   r   get_sticky_stater.   stickunstickr+   r   )rX   stickys     rY   r   z!KbdWindowBase.update_sticky_state@  s`    ,,.F||v%%JJLLLNxx,,.  r[   c                 B    t         j                  j                  |        y r]   )rn   rq   r   r_   s    rY   r   z!KbdWindowBase.update_taskbar_hintN  s    ))$/r[   c           
         | j                          | j                          t        j                  t        j
                        rt        j                  dj                  t        |j                  |j                  |j                  |j                        | j                         | j                         f| j                         t         j"                               y y )NzEconfigure-event: event {}, allocated {}, window {}, scaling factor {})update_window_rectr   r"   r   r   r   r#   rx   r   r   r   r   r   get_allocated_widthget_allocated_heightget_rectrn   window_scaling_factorrX   re   events      rY   rR   z!KbdWindowBase._on_configure_eventQ  s    !))+.MM/UWWeggu{{ELLI113113544	67 /r[   c                 $   | j                         }t        j                  dj                  |             |t        j
                  |k7  r|t        _        t        j                  dj                  |             | j                  j                  }t        j                         r2|s0t        j                  s | j                          |j                          | j                  j                          |j                          |j                          yyy)z0 check for changes to the window-scaling-factor z&update_window_scaling_factor: scale {}Nznew window-scaling-factor '{}')get_scale_factorr"   r#   rx   rn   r   r   r*   keyboardr   r   r   release_pressed_keysinvalidate_imagesinvalidate_uicommit_ui_updates)rX   r   scaler   s       rY   r   z*KbdWindowBase.update_window_scaling_factor_  s    %%'>ve}	& }''50+0F(LL9@@GH++44H **,??%%' --/   224""$&&() 1 r[   c                 <    | j                         sy| j                  S NF)
get_mappedr-   r_   s    rY   r   zKbdWindowBase.is_visible|  s     }}r[   c                     | j                         s| j                          |s | j                         r| j                          t        j
                  j                  | |       | j                  |       y r]   )r   r   can_move_into_viewmove_home_rect_into_viewrn   rq   r   on_visibility_changedr   s     rY   r   zKbdWindowBase.set_visible  s[       "!!#
 ""$))+!!$0""7+r[   c                     |s&| j                   j                  }|j                          | j                  }|| _        | j                  sI|r"| j                  d       | j                          n%t        j                         r| j                  d       | j                  rb| j                  j                  }|r|j                          | j                  j                  }|r!|j                  |j                  d|idg       y y y )NFTVisible)r*   r   stop_raise_attemptsr-   r1   set_icp_visibler   rn   is_icon_palette_in_user)   status_iconupdate_menu_itemsservice_keyboardPropertiesChangedIFACE)rX   r   r   visible_beforer  services         rY   r   z#KbdWindowBase.on_visibility_changed  s    ++44H((*$$$$U+((* 002((. **66K--/&&77G))'--+4g*>M  r[   c                 :    | j                   j                  |       y r]   )r*   set_opacity)rX   opacitys     rY   r  zKbdWindowBase.set_opacity  s    ((1r[   c                 6    | j                   j                         S r]   )r*   get_opacityr_   s    rY   r  zKbdWindowBase.get_opacity  s    ##//11r[   c                     | j                   S r]   )r0   r_   s    rY   is_maximizedzKbdWindowBase.is_maximized  s    r[   c                 D    t         j                         ry| j                  S r   )rn   is_force_to_topr/   r_   s    rY   is_iconifiedzKbdWindowBase.is_iconified  s     !!#r[   c                     | j                   r8|r| j                   j                          y| j                   j                          yy)z Show/hide the icon palette N)r+   r   r   r   s     rY   r  zKbdWindowBase.set_icp_visible  s+    88	 r[   c                      y r]   r^   r   s      rY   rM   z#KbdWindowBase._cb_visibility_notify  ra   r[   c                    t         j                  dj                  |j                  |j                               |j                  t
        j                  j                  z  r5t        |j                  t
        j                  j                  z        | _	        |j                  t
        j                  j                  z  rPt        |j                  t
        j                  j                  z        | _        | j                  | j                         |j                  t
        j                  j                  z  r6t        |j                  t
        j                  j                  z        | _        yy)af  
        This is the callback that gets executed when the user hides the
        onscreen keyboard by using the minimize button in the decoration
        of the window.
        Fails to be called when iconifying in gnome-shell (Oneiric).
        Fails to be called when iconifying in unity (Precise).
        Still keep it around for sticky changes.
        zwindow-state-event: {}, {}N)r"   r#   rx   changed_masknew_window_stater
   WindowState	MAXIMIZEDboolr0   	ICONIFIEDr/   _on_iconification_state_changedSTICKYr.   r   s      rY   rL   z$KbdWindowBase._cb_window_state_event  s     	2ve00%2H2HI	K  9 99"5#9#9COO<U<U#UVDO 9 99"5#9#9COO<U<U#UVDO00A 6 66 6 69O9O OPDL 7r[   c                    | }| j                         }| j                  |       | j                  j                  |d       ||k7  rC|r| j                  j	                          | j                  j
                  }|j                  |       y )N        )r   r   r*   transition_visible_toupdate_transparencyr   %update_auto_show_on_visibility_change)rX   	iconifiedr   was_visibler   s        rY   r  z-KbdWindowBase._on_iconification_state_changed  s~    #mG//+K&&w/   66wDg% ((<<>
  //88>>wGr[   c                      y r]   r^   rX   r  visible_nows      rY   on_transition_donez KbdWindowBase.on_transition_done  ra   r[   c                    t         j                  d       || _        | j                         \  }}| j	                         j                  d      }| j                  }d}d}|t        j                  j                  k(  r|j                  |z
  }|dz  }| j                  ||       t        j                  | j                         y)zZ
        This will place the window on the edge corresponding to the edge gravity
        zEntered in do_set_gravityr      N)r"   r#   edgeGravityr   r   get_monitor_geometryr
   GravitySOUTHr   mover   idle_adddo_set_strut)rX   r,  r   r   r   egr   r   s           rY   do_set_gravityzKbdWindowBase.do_set_gravity  s     	12&v 55a8"""f$AGA		!Qd''(r[   c                    t         j                  d       g d}	 | j                         }d}t        |j	                               D ]%  }|j                  |      j                  }||k  s$|}' | j                  }| j                  j                         \  }}| j                         \  }	}
|t        j                  j                  k(  r|
|z   |d<   |	|d<   ni|t        j                  j                  k(  rL|dk7  rG||z
  |d<   |	dz
  |d<   | j                  j                  d	d
dt        j                   j"                  |       | j%                          y )NzEntered in do_set_strut)r   r   r   r   r   r   r   r   r   r   r   r   r      	   r~         _NET_WM_STRUT_PARTIALCARDINAL    )r"   r#   r   rangeget_n_monitorsr-  r   r,  r   
get_originr   r
   r.  NORTHr/  property_changePropModeREPLACEqueue_resize_no_redraw)rX   propvalsr   biggestHeightn
tempHeightr3  r   r   r   r   s              rY   r2  zKbdWindowBase.do_set_strut  s4   /0,	& "v,,./ 	+A44Q7>>Jz) *	+
 {{%%'1}}f""" 1*HQKHQK3;;$$$a'!+HQK 19HRL KK''(?(2(*(+(<(<(0	2
 	##%r[   c                     t         j                   xr, t         j                          xr t         j                          S r]   )rn   r   r   is_docking_enabledr_   s    rY   r   z KbdWindowBase.can_move_into_view<  s9    ??" +++--+((**	+r[   c                      y r]   r^   r_   s    rY   get_orientation_config_objectz+KbdWindowBase.get_orientation_config_objectB  s    r[   r]   F))__name__
__module____qualname____doc__rZ   r`   rN   rO   rl   rS   rT   r   r   r   r   rP   rQ   rU   r   r   r   r   rR   r   r   r   r   r  r  r  r  r  rM   rL   r  r)  r4  r2  r   rL  __classcell__)rz   s   @rY   r   r   5   s    B*H

"< D;
9H#FJ(('B2/07):
, M<22 Q,0)*)&V+r[   r   c                      e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdAdZd Zd Zd Zd Zd ZdAdZd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-dBd,Z.d- Z/dCd.Z0d/ Z1d0 Z2d1 Z3dDd2Z4dBd3Z5d4 Z6d5 Z7d6 Z8dBd7Z9d8 Z:dCd9Z;e<d:        Z=d; Z>d< Z?d= Z@e<d>        ZAd? ZBd@ ZCy)Er   r   Nc                     d  _         g  _        d _        t                _        t
        j                  j                   d j                   j                         t        j                   ||       t        j                          t        j                  dt        t        j                  j                  t        j                   d       t#                _         j'                  d        j)                  d j*                          j)                  d j,                          j)                  d	 j.                          j0                  j3                  d
dg j4                         t7        d      j8                   fd}t:        j<                  j?                  |       t:        j<                  jA                  |        fd}t:        j<                  jC                  |       y )NF)urgency_hintwidth_requestheight_requestrj   r^   Tr   mapunmapzdelete-event_NET_WORKAREA_NET_CURRENT_DESKTOPr   c                 (     j                         S r]   )_on_config_rect_changedr   oncerX   s    rY   <lambda>z$KbdWindow.__init__.<locals>.<lambda>p  s    d&B&B!C r[   c                 (     j                         S r]   )_on_config_dock_size_changedr^  s    rY   r`  z$KbdWindow.__init__.<locals>.<lambda>t  s    d4+L+L&M r[   )"_last_ignore_configure_time_last_configures_was_visibler   _user_positioning_begin_rectr   rG   rZ   MINIMUM_SIZEr   r   r   
signal_newr   SignalFlagsRUN_LASTTYPE_BOOLEANr   _auto_position_poll_timerr   rK   _on_map_event_on_unmap_event_on_delete_eventr&   connect_root_property_notify_on_root_property_notifyr   enqueuern   r   position_notify_addsize_notify_adddock_size_notify_add)rX   r*   r+   rect_changeddock_size_changedr_  s   `    @rY   rZ   zKbdWindow.__init__M  sv   +/( "!,0F)

D+0*.*;*;+/+<+< 	 	>
 	t_c:""4(>9"..77"//	5 */&  4 0U0B0BCW0D0DE^T%:%:; 	33_5K5M040M0M	O }$$C)),7%%l3M**+<=r[   c                     t        j                  |        t        j                  |        | j                  r<| j                  j                          | j                  j	                          d | _        y y r]   )r   r`   r   r+   destroyr_   s    rY   r`   zKbdWindow.cleanupw  sQ    !!$'d#88HHHHDH r[   c                 J   |dk(  rt         j                         rt         j                  s| j                         }| j	                  |      }| j
                  j                  |      }|r|j                  |j                  k7  s|j                  |j                  k7  rj|j                  |_        |j                  |_        t        j                  dj                  t        |      t        |                   | j                          yyyyy|dk(  r| xj                  dz  c_        yy)z$ Fixme: Exceptions get lost in here.rZ  z-workarea changed to {}, using {} for docking.r[  r8  N)rn   rJ  r   get_docking_monitorget_monitor_workarear:   getr   r   r"   r   rx   ry   update_dockingrB   )rX   propertymonitornew_areaareas        rY   rq  z"KbdWindow._on_root_property_notify  s     &'')//22444W=--11': vv+vv+!)!) &=&,fS]CI&FH ++- ,	 	 " *$ // &&!+& 0r[   c                      y r]   r^   r   s     rY   rm  zKbdWindow._on_map_event  ra   r[   c                 l    t         j                         r| j                          | j                          y r]   )rn   rJ  clear_strutsreset_monitor_workarear   s     rY   rn  zKbdWindow._on_unmap_event  s*     $$&
 	##%r[   c                    | j                   sb|r`t        j                         sLt        j                  s<| j	                         }|* | j
                  |  | j                  j                  |       t        j                  | |       y r]   )
r-   rn   rJ  r   get_current_rectr   r*   sync_transition_positionr   r   )rX   r   rects      rY   r   zKbdWindow.on_visibility_changed  se    }}((*((*D<   $'$$==dC++D':r[   c                 $   t         j                  st         j                         sj| j                         }| j	                  |      t        | j                  j                               }t        fd|D              s| j                          yyyy)z$ Gsettings position or size changed c              3   (   K   | ]	  }|k(    y wr]   r^   .0rr  s     rY   	<genexpr>z4KbdWindow._on_config_rect_changed.<locals>.<genexpr>  s     0Qtqy0   N)
rn   r   rJ  get_screen_orientationread_window_rectlistr?   valuesanyr   )rX   orientationrectsr  s      @rY   r]  z!KbdWindow._on_config_rect_changed  sx    ((*557K((5D
 33::<=E0%00((* 1 + r[   c                    t         j                  snt         j                         rY| j                         t	        | j
                  j                               }t        fd|D              s| j                          yyyy)z Gsettings size changed c              3   (   K   | ]	  }|k(    y wr]   r^   )r  szr   s     rY   r  z9KbdWindow._on_config_dock_size_changed.<locals>.<genexpr>  s     2btrz2r  N)	rn   r   rJ  get_dock_sizer  r@   r  r  r   )rX   sizesr   s     @rY   rb  z&KbdWindow._on_config_dock_size_changed  sh    $$&%%'D
 1188:;E2E22((* 3 ' r[   c                     | j                   j                  }| j                          | j                          |j	                          |j                  d       | j                         | _        y )Nuser-positioning)r*   r   stop_save_position_timerstop_auto_positioningr   auto_show_lockr   rf  )rX   r   s     rY   on_user_positioning_beginz#KbdWindow.on_user_positioning_begin  sT    ''00%%'""$$$& 23,0MMO)r[   c                    | j                          t        j                         r?| j                  | j	                         | j                                | j                          npd}| j                         }| j                  j                  |      j                  |      |k(  }| j                  j                         }|xs |}| j                  |       | j                  j                  }|j                  dd       y )N   r        ?)r   rn   rJ  write_docking_sizer  r   r~  get_home_rectrf  inflateintersectionr*   
was_movingupdate_home_rectr   r  )rX   	proximityrhbegan_near_homemovedupdate_home_positionr   s          rY   on_user_positioning_donez"KbdWindow.on_user_positioning_done  s    ! $$&##D$?$?$A$(MMO5! I##%B1199)Db!R(  ((335E#2#;e !!"67 ''00 2C8r[   c                 d    | j                   j                         rdt        j                  _        y y r   )r*   r  rn   r   docking_enabledr_   s    rY   detect_dockingzKbdWindow.detect_docking  s%    **,,1FMM) -r[   c                     t         j                  | ||       t        j                         s0t	        j
                  | j                  ||j                                y y r]   )r   rR   rn   rJ  r   r1  _on_configure_event_aftercopyr   s      rY   rR   zKbdWindow._on_configure_event  sC    ))$>((* MM$88&%**,O	 +r[   c                 4   | j                  | j                        }|dk(  rx| j                          t        j	                         rS| j
                  j                  }|j                  dd       | j                          | j
                  j                          yyy)a  
        Run this after KeyboardWidget's configure handler.
        After resizing Keyboard.update_layout() has to be called before
        limit_position() or the window jumps when it was close
        to the opposite screen edge of the resize handle.
        r   r!   r  N)
_filter_configure_event_window_rectr  rn   r   r*   r   r  r  touch_inactivity_timer)rX   re   r   resultr   s        rY   r  z#KbdWindow._on_configure_event_after  s     --d.?.?@Q;!!# ++-  //88''(93? **, $$;;= .	 r[   c                    t         j                  ryt         j                         ry| j                         sy| j	                         ry| j                         ryt        j                         }d}| j                  |dz
   d | _        t        | j                        r| j                  d   d	   |k(  ry| j                  j                  ||g       t        | j                        |k  ry
| j                  %t        j                         | j                  z
  dk  ry| j                  | j                        ryt         j                         s| j                  d	   }||d   z
  }|dkD  ry| j                  d   d	   }| j                  d   d	   }|j                  |j                  z
  }|j                  |j                  z
  }	||z  |	|	z  z   }
|
dkD  rg | _        yy	)z
        Returns 0 for detected user positioning/sizing.
        Multiple defenses against false positives, i.e.
        window movement by autoshow, screen rotation, whathaveyou.
           r8  Nr   r6  g      ?r~   r     i	     )rn   r   r  r   r  r  timerd  lenappendrc  is_known_rectr  r   r   r   )rX   r  now
max_eventsfirst	intervallr0r1dxdyd2s              rY   r  z!KbdWindow._filter_configure_event  s    ?? !!#     iik
 $ 5 5
Q6G6H I t$$%  $Q'4/$$dC[1 t$$%
2 //799;999C? d//0 ++- ))!,EeAhI3 &&r*1-B&&r*1-BBBb27"BEz(*%r[   c                 6    t        j                          | _        y r]   )r  rc  r_   s    rY   ignore_configure_eventsz!KbdWindow.ignore_configure_eventsj  s    +/99;(r[   c                     | j                   dd | _         | j                   j                  |       | j                          y)z
        Remember the last 3 rectangles of auto-show repositioning.
        Time and order of configure events is somewhat unpredictable,
        so don't rely only on a single remembered rect.
        r  N)r>   r  r  rX   r  s     rY   remember_rectzKbdWindow.remember_rectm  s;     $(#;#;BC#@   ''- 	$$&r[   c                    t        | j                        }t        j                  j                  }|j                  t        |j                  |j                  |j                  |j                               t        j                  j                  }|j                  t        |j                  |j                  |j                  |j                               |j                  | j                         |S )z
        Return all rects that may have resulted from internal
        window moves, not from user controlled drag operations.
        )r  r>   rn   r   	landscaper  r   r   r   r   r   portrait	home_rect)rX   r  cos      rY   get_known_rectszKbdWindow.get_known_rects|  s    
 T--.]]$$T"$$bhh		:;]]##T"$$bhh		:;T^^$r[   c                 H    t        fd| j                         D              S )ah  
        The home rect should be updated in response to user positiong/resizing.
        However we are unable to detect the end of window movement/resizing
        when window decoration is enabled. Instead we check if the current
        window rect is different from the ones auto-show knows and assume
        the user has changed it in this case.
        c              3   (   K   | ]	  }|k(    y wr]   r^   r  s     rY   r  z*KbdWindow.is_known_rect.<locals>.<genexpr>  s     =419=r  )r  r  r  s    `rY   r  zKbdWindow.is_known_rect  s     =d&:&:&<===r[   c                     | j                   j                         }|j                  |j                  }}| j                  j                  ||      \  }}||k7  s||k7  r| j                          yy)z
        Make sure the home rect is valid, move it if necessary.
        This function may be called even if the window is invisible.
        N)r  r  r   r   r*   limit_positionr  )rX   r  r   r   _x_ys         rY   r   z"KbdWindow.move_home_rect_into_view  sc    
   %%'vvtvv1%%44Q:B7bAg!!# r[   c                    t         j                         ry | j                  j                         }|s.| j                  }|j
                  |_        |j                  |_        | j                         r=| j                  j                  |j
                  |j                        \  |_        |_        |j                         | _        | j                          | j                  j                  |       y r]   )rn   rJ  r  r  r  r   r   r   r*   r  start_save_position_timerr  )rX   r  r  r  s       rY   r  zKbdWindow.update_home_rect  s    $$&   %%'#BTTDFTTDF ""$!11@@PNDFDF&&(
 	55d;r[   c                 j    t         j                         r| j                         }|S | j                  }|S )z{
        Get the un-repositioned rect, the one auto-show falls back to
        when there is nowhere else to move.
        )rn   rJ  get_dock_rectr  r  s     rY   r  zKbdWindow.get_home_rect  s5    
 $$&%%'D  >>Dr[   c                 |    | j                         }|}t        j                         r| j                  |      }||}|S )zv
        Returns the rect of the visible window rect with auto-show
        repositioning taken into account.
        )r  rn   is_auto_show_enabledget_repositioned_window_rect)rX   r  r  r  s       rY   get_visible_rectzKbdWindow.get_visible_rect  sB    
 &&(	&&(11)<A9r[   c                     d| _         | j                  d       t        j                         | _        d}| j                  j                  || j                  |       y )NTFg?)rA   update_positionr  _poll_auto_position_start_timerl  start_on_auto_position_poll)rX   start_delays     rY   auto_positionzKbdWindow.auto_position  sQ    &*# 	U# /3iik+&&,,[-1-H-H-8	:r[   c                     | j                          t        |dz  d      }t        j                         |z   | j                  dz   k  r(| j                  j                  || j                  |       yy)Ng       @r  g      @TF)r  minr  r  rl  r  r  )rX   delays     rY   r  z KbdWindow._on_auto_position_poll  sh     ECK%99;!D!Ds!JJ**00151L1L168 r[   c                 8    | j                   j                          y r]   )rl  stopr_   s    rY   r  zKbdWindow.stop_auto_positioning  s    &&++-r[   c                 ,   | j                         }| j                  |      }||}| j                         |j                         k7  rN| j                  j	                  |j
                  |j                         |r| j                  j                          y y y r]   )r  r  get_positionr*   transition_position_tor   r   commit_transition)rX   commitr  r  s       rY   r  zKbdWindow.update_position  s    &&(	00;<D$"3"3"55  77G$$668  6r[   c           	      v   t         j                         rt         j                  j                  }|}|}d }t         j	                         r"|d   d|d   df}| j                         \  }}|g}| j                         \  }}	| j                  j                  }
|
j                  | j                  ||||||	      }|S d }|S Nr   r6  )
rn   can_auto_show_reposition	auto_showwidget_clearancerJ  get_docking_monitor_rectsget_repositioning_constraintsr*   r   &get_auto_show_repositioned_window_rect)rX   r  	clearancetest_clearancemove_clearancelimit_rectsr  r   
horizontalverticalr   r  s               rY   r  z&KbdWindow.get_repositioned_window_rect   s    **,((99I&N&NK
 ((*"+A,9Q<!C ";;=
d#f#'#E#E#G J++44HBB,0,@,@,5{,:N,6	BD  Dr[   c                    | j                         \  }}| j                  t        ||||             | j                  r:d| _        t        j
                  j                         r| j                  |dz
  |       | j                  ||       y)zT
        Move the window from a transition, not meant for user positioning.
        Fr8  N)r   r  r   rA   rn   rq   must_fix_configure_eventr0  )rX   r   r   r   r   s        rY   
repositionzKbdWindow.reposition  sn    
 }}141a+,$ &&*/D'}}557		!A#q!		!Qr[   c                 N    t         j                         r| j                         ryy)zI
        Return allowed respositioning directions for auto-show.
        )FT)TT)rn   rJ  get_dock_expandr_   s    rY   r  z'KbdWindow.get_repositioning_constraints<  s"     $$&!r[   c                 j    t         j                         r| j                         S | j                         S )zp
        Returns the rect of the hidden window with auto-show
        repositioning taken into account.
        )rn   rJ  get_docking_hideout_rectr  r_   s    rY   get_hidden_rectzKbdWindow.get_hidden_rectF  s.    
 $$&0022$$&&r[   c                 j    | j                         r| j                         }|S | j                         }|S )zb
        Returns the window rect with auto-show
        repositioning taken into account.
        )r   r  r  r  s     rY   r  zKbdWindow.get_current_rectO  s8    
 ??((*D  '')Dr[   c                     t         j                         s|j                         | _        | j	                         }||k7  r| j                  |       |}| j                  j                  |       |S z1
        Overload for WindowRectPersist.
        )rn   rJ  r  r  r  r  r*   r  )rX   r  r  s      rY   on_restore_window_rectz KbdWindow.on_restore_window_rectZ  s`     ((*!YY[DN !!#9q!D55d;r[   c                     | j                   S r  )r  r  s     rY   on_save_window_rectzKbdWindow.on_save_window_rectk  s     ~~r[   c           	      P   |t         j                  k(  rt        j                  j                  }nt        j                  j
                  }| j                         \  }}t        |j                  |j                  t        |j                  |      t        |j                  |            }|S )zZ
        Read orientation dependent rect.
        Overload for WindowRectPersist.
        )r   	LANDSCAPErn   r   r  r  r   r   r   r   maxr   r   )rX   r  r  r   r   r  s         rY   r  zKbdWindow.read_window_rects  s    
 +///((B''B !% 8 8 :	:BDDDD),		:.0 r[   c                 D   |t         j                  k(  rt        j                  j                  }nt        j                  j
                  }|j                         | j                  |<   |j                          |\  |_	        |_
        |_        |_        |j                          y)z[
        Write orientation dependent rect.
        Overload for WindowRectPersist.
        N)r   r  rn   r   r  r  r  r?   r  r   r   r   r   apply)rX   r  r  r  s       rY   write_window_rectzKbdWindow.write_window_rect  sr     +///((B''B 37))+"";/ 	
*.'bdBHbi

r[   c                     | j                         }| j                         }t        |      | j                  |<   |j	                          |s
|d   |_        |d   |_        |j                          y )Nr   r8  )rL  r  tupler@   r  
dock_widthdock_heightr  )rX   r  r   r  expands        rY   r  zKbdWindow.write_docking_size  sa    //1%%' 16d  - 	
 GBMa

r[   c                     | j                         }|t        j                  k(  rt        j                  j
                  }|S t        j                  j                  }|S r]   )r  r   r  rn   r   r  r  )rX   r  r  s      rY   rL  z'KbdWindow.get_orientation_config_object  sJ    113+///((B 	 ''B	r[   c                 J    |r!| j                          | j                          y y r]   )assure_on_current_desktopr~  r'  s      rY   r)  zKbdWindow.on_transition_done  s"    **,! r[   c                    t         j                  t        j                        r3t         j	                  d|j                         |j                                t        j                         r\| j                          | j                         | _        d| _        | j                  }|r"|j                  dd       |j                          t!        j"                  | |       y)z Screen rotation, etc. on_screen_size_changedTFr   N)r"   r   r   r   r#   r   r   rn   rJ  r  r   re  r1   r*   r!  r  r   r)  rX   r   r*   s      rY   r)  z KbdWindow.on_screen_size_changed  s    .MM2 ,,.&--/; $$& 
 !% 1D$(D!"22O55eSA11300v>r[   c                 N   t         j                         rd| _        | j                          | j	                          | j
                  j                          | j
                  }|r1| j                  r$|j                  ddd       |j                          y y y | j	                          y )NFTr   g?)
rn   rJ  r1   r  r   r*   process_updatesre  r!  r  r*  s      rY   on_screen_size_changed_delayedz(KbdWindow.on_screen_size_changed_delayed  s    $$&$)D!'') $$&  002"22O4#4#455dCE113 $5 $$&r[   c                 T    | j                   r| j                   j                  |      S |S )z@
        Limits the given window rect to fit on screen.
        )r*   
limit_sizer  s     rY   r/  zKbdWindow.limit_size  s)     ''22488r[   c                 t    t         j                  j                  r| j                  ryy | j	                          y r   )rn   lockdowndisable_quitr*   rl   )rX   r   datas      rY   ro  zKbdWindow._on_delete_event  s.    ??''## $ ""$r[   c                 X    | j                          | j                  j                          y r]   )r~  r*   update_window_handlesr_   s    rY   on_docking_notifyzKbdWindow.on_docking_notify  s     224r[   c                 v   t         j                         }|r| j                         }n
t               }t         j                  j
                  }| j                         }t         j                  j                  }| j                  d      }| j                  |k7  s`| j                  r| j                  |k7  sE| j                  |k7  s6| j                  |k7  s't        | j                        |k7  s| j                  |k7  rC|| _        | j#                  |       || _        || _        || _        || _        || _	        || _
        y y y r   )rn   rJ  r  r   r   docking_shrink_workarear  docking_edger{  r2   r4   r6   r7   r  r8   r5   r9   _realize_dockingr3   )rX   force_updateenabler  shrinkr$  edger  s           rY   r~  zKbdWindow.update_docking  s   **,%%'D6D66%%'}}))**40  F*!!4'##v-&($&&'61""g-,3D)!!&)%+D" &D!%D$+D!$*D!!%D . "r[   c                    |rb| j                  t        j                  j                  t        j                  j                  | j                                | j                          y | j                          | j                          y r]   )_set_docking_strutsrn   r   r8  r9  r  r   r  )rX   r<  s     rY   r:  zKbdWindow._realize_docking  s^    $$V]]%J%J%+]]%?%?%)%9%9%;= $$&$$&r[   c                 T    | j                   }| j                  d      }|| _         ||k7  S r   )r9   r{  )rX   
mon_beforemon_nows      rY   update_docking_monitorz KbdWindow.update_docking_monitor  s0    22
**40(/%W$$r[   c                 &    | j                  d       y r   )r@  r_   s    rY   r  zKbdWindow.clear_struts  s      'r[   c                    | j                         sy | j                         }	 |j                         }|s| j	                  |d        y | j                         \  }}| j                         }| j                         }	dx}
}dx}}|rPd}|j                  |j                         z
  |	j                  z   }|	j                         }|	j                         dz
  }nB|j                         |	j                  z   }d}|	j                         }
|	j                         dz
  }dd||dddd|
|||g}t        j                  }|dk7  r|D cg c]  }||z  	 }}| j	                  ||       y # t        $ r Y y w xY wc c}w )Nr   r8  r  )r   r   get_xidAttributeError_apply_strutsr  get_rootwin_rectr  r   bottomleftrighttoprn   r   )rX   r<  r>  r$  winxidr  r   rootr  top_start_x	top_end_xbottom_start_xbottom_end_xrN  rK  strutsr   vals                      rY   r@  zKbdWindow._set_docking_struts  st     "oo	++-C
 sD)335
d$$&!!#"##i())CVVdkkm+dff4F!YY[N!ZZ\A-LXXZ$&&(CF))+K**,*I QVQ1ay.,H ,,C<-34ccEk4F43'G  		B 5s   E >E.	E+*E+c                     | j                   |k7  rB|| j                  j                  |       n| j                  j                  ||       || _         y y r]   )r8   r(   clearset)rX   rP  rV  s      rY   rI  zKbdWindow._apply_strutsL  sL    6)~  &&s+  $$S&1#)D  *r[   c                 R    | j                         }|j                  |j                  fS r]   )rL  r"  r#  rX   r  s     rY   r  zKbdWindow.get_dock_sizeT  s#    //1}}bnn,,r[   c                 :    | j                         }|j                  S r]   )rL  dock_expandr\  s     rY   r  zKbdWindow.get_dock_expandX  s    //1~~r[   c                 2   | j                         \  }}t        j                  j                  }| j	                         \  }}t        |j                  d|j                  |      }|r"|j                  |j                  z   |z
  |_        n|j                  |_        | j                         }|r$|j                  |_        |j                  |_        |S t        ||j                        |_        |j                  |j                  |j                  z
  dz  z   |_        |S r  )r  rn   r   r9  r  r   r   r   r   r   r  r  )rX   r  r   r>  r   r   r  r$  s           rY   r  zKbdWindow.get_dock_rect\  s    335
d}}))**,vDFFAtvvv.VVdff_v-DFVVDF%%'VVDFVVDF  'DFVVtvv144DFr[   c                 T   | j                         \  }}| j                         }|}|j                         \  }}|r|j                         \  }}	n|j                         \  }}	d}
|	|kD  r|j                         |
z   |_        |S |j                         |j                  z
  |
z
  |_        |S )z< Where the keyboard goes to hide when it slides off-screen. 
   )r  r  
get_centerrK  r   rN  r   )rX   reference_rectr  r   r  hideoutmcxmcycxcyr  s              rY   r  z"KbdWindow.get_docking_hideout_rectp  s    335
d!!#??$S#..0FB__&FB	8	1GI  
TVV+i7GIr[   c                 4   | j                         }| j                         }| j                  j                  |      }|| j	                  |      }|j                  |      }t        |j                  |j                  |j                  |j                        }||fS r]   )r   r{  r:   r}  update_monitor_workarear-  r   r   r   r   r   )rX   r   r  r  r   s        rY   r  z#KbdWindow.get_docking_monitor_rects  s    "**,%%))'2<//8D**73DFFDFFDJJ<Tzr[   c                    | j                   |r| j                         }t        j                  j                  }t        |      }|dk  r(|dk  s||j                         k\  rt        j                  }|t        j                  k(  r| j                  |      }|S |t        j                  k(  r|j                         }|S | j                   }|S )Nr   r   )r9   r   rn   r   docking_monitorintr>  r   PRIMARYACTIVE_get_monitor_at_active_windowget_primary_monitor)rX   r;  r   rl  r  s        rY   r{  zKbdWindow.get_docking_monitor  s    ((0L__&F$mm;;O/*G}Q;f3355&4&<&<O."7"77<<VD
 	 !N$:$:: 446  33Gr[   c                     | j                         }|rKt        j                          | j                  |      }t        j                         r| j                         }|S | j                         }|S r]   )get_active_windowr
   error_trap_pushget_monitor_at_windowerror_trap_poprq  )r   r   r  s      rY   rp  z'KbdWindow._get_monitor_at_active_window  se    ))+!226:G!!# 446  002Gr[   c                     i | _         y r]   )r:   r_   s    rY   r  z KbdWindow.reset_monitor_workarea  s
    !#r[   c                 F    | j                  |      }|| j                  |<   |S )zv
        Save the workarea, so we don't have to
        check all the time if our strut is already installed.
        )r|  r:   )rX   r  r  s      rY   rj  z!KbdWindow.update_monitor_workarea  s)    
 ((1*.w'r[   c                     t         j                  j                         }|j                  |      }|j	                         }t        |j                  |j                  |j                  |j                        }|S r]   )
r
   Displayget_defaultget_monitorget_workarear   r   r   r   r   )rX   monitor_indexdisplayr  r  s        rY   r|  zKbdWindow.get_monitor_workarea  sW    ++))+%%m4##%DFFDFFDJJ<r[   c                      t        j                         } t        j                  | j	                         | j                         | j                         f      S r]   )r
   get_default_root_windowr   from_position_sizer  	get_width
get_height)rootwins    rY   rJ  zKbdWindow.get_rootwin_rect  sJ    --/&&w';';'=!(!2!2!4g6H6H6J KM 	Mr[   c                     | j                   | j                  k7  r5| j                         }|r"|j                          | j                  | _         yyy)z
        Make sure the window is visible in the current desktop in OpenBox and
        perhaps other WMs, except Compiz/Unity. Dbus Show() then makes Onboard
        appear after switching desktop (LP: 1092166, Raring).
        N)rC   rB   r   move_to_current_desktoprX   rO  s     rY   r'  z#KbdWindow.assure_on_current_desktop  sL     ++t/I/II//#C++-373M3M0  Jr[   c                 l    | j                         }|r"| j                         r|j                          y y y r]   )r   r   raise_r  s     rY   raise_to_topzKbdWindow.raise_to_top  s*    oo4??$JJL %3r[   )Tr]   rM  r   )DrN  rO  rP  rg  r  rZ   r`   rq  rm  rn  r   r]  rb  r  r  r  rR   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rL  r)  r)  r-  r/  ro  r6  r~  r:  rD  r  r@  rI  r  r  r  r  r  r{  staticmethodrp  r  rj  r|  rJ  r'  r  r^   r[   rY   r   r   F  sk    LI(>T,@	&	;++<942P>2KZ7' >	$<.	 :".
9:>'	"$&"
?.'"%5&< %(+(Z*-(&& 
 
$ M M

Nr[   c                        e Zd ZddZd Zd Zy)KbdPlugWindowNc                     t         j                  j                  |        t        j                  |        t        j                  | ||       y r]   )r   PlugrZ   r   r   rW   s      rY   rZ   zKbdPlugWindow.__init__  s4    $""4(t_c:r[   c                 2    t         j                  | ||       y r]   )r   rR   r   s      rY   rR   z!KbdPlugWindow._on_configure_event  s    ))$>r[   c                      y r]   r^   r_   s    rY   toggle_visiblezKbdPlugWindow.toggle_visible  ra   r[   r]   )rN  rO  rP  rZ   rR   r  r^   r[   rY   r  r    s    ;
?r[   r  c                   d    e Zd ZdZdZed        Zed        Zed        Zed        Z	ed        Z
y)	rw   z2 Miscellaneous window managers, no special quirks r^   c                     | j                         r5|r2t        j                  s!| j                          | j	                          y y y t
        j                  j                  | |       y r]   )r  rn   r   	deiconifypresentr   rG   r   r   r   s     rY   r   zWMQuirksDefault.set_visible  sN     ??  "  # 
 JJ""673r[   c                 &    | j                  d       y r   )set_skip_taskbar_hintr   s    rY   r   z#WMQuirksDefault.update_taskbar_hint  s    $$T*r[   c                     t         j                         rt        j                  j                  S t        j                  j
                  S r]   )rn   rJ  r
   WindowTypeHintDOCKr   r  s    rY   r   z$WMQuirksDefault.get_window_type_hint  s2    $$&%%***%%,,,r[   c                 ,    t         j                          S r]   )rn   rJ  r  s    rY   can_set_override_redirectz)WMQuirksDefault.can_set_override_redirect  s     ,,...r[   c                       y)z# does configure-event need fixing? Fr^   r^   r[   rY   r  z(WMQuirksDefault.must_fix_configure_event  s     r[   N)rN  rO  rP  rQ  rv   r  r   r   r   r  r  r^   r[   rY   rw   rw     sl    <
C4 4 + + - - / /  r[   rw   c                   D    e Zd ZdZdZed        Zed        Zed        Zy)rr   z Unity with Compiz compizc                 V   t         j                         rt        j                  j                  S t         j                         rt        j                  j                  S t         j                  j                  rt        j                  j                  S t        j                  j                  S r]   )	rn   rJ  r
   r  r   r  r   r   UTILITYr  s    rY   r   z#WMQuirksCompiz.get_window_type_hint  sq    $$&%%,,,%%'))000==22--444 --555r[   c                      yr   r^   r  s    rY   r  z(WMQuirksCompiz.can_set_override_redirect   s    
 r[   c                  P    t         j                         xr t         j                   S r]   )rn   r  r   r^   r[   rY   r  z'WMQuirksCompiz.must_fix_configure_event'  s"    %%'  	 r[   N)	rN  rO  rP  rQ  rv   r  r   r  r  r^   r[   rY   rr   rr     sD    C6 6       r[   rr   c                   D    e Zd ZdZddj	                         fZed        Zy)rt   z Gnome-shell mutterzGNOME Shellc                     | j                         r"|r | j                          | j                          t        j	                  | |       y r]   )r  rY  rX  rw   r   r  s     rY   r   zWMQuirksMutter.set_visible2  s4     W
 LLNJJL##FG4r[   N)rN  rO  rP  rQ  ru   rv   r  r   r^   r[   rY   rt   rt   -  s*    ]((*
+C	5 	5r[   rt   c                   4    e Zd ZdZdZed        Zed        Zy)rs   z Unity-2d, Gnome Classic metacityc                    t         j                  s\t         j                         sHt         j                         s4|r!| j	                          | j                          y | j                          y t        j                  | |       y r]   )	rn   r   r  has_unhide_optionr  r  iconifyrw   r   r  s     rY   r   zWMQuirksMetacity.set_visibleD  sV     %%''')  "  ''8r[   c                     | j                  t        j                  xs* t        j                         xs t        j	                                y r]   )r  rn   r   r  r  r  s    rY   r   z$WMQuirksMetacity.update_taskbar_hintS  s;    $$V__ &@%+%;%;%=&@%+%=%=%?	Ar[   N)rN  rO  rP  rQ  rv   r  r   r   r^   r[   rY   rs   rs   ?  s2    #C9 9 A Ar[   rs   ).
__future__r   r   r   r  Onboard.Versionr   gi.repositoryr   r   r	   r
   r   Onboard.definitionsr   Onboard.utilsr   r   Onboard.Timerr   r   Onboard.WindowUtilsr   r   r   r   r   r   r   Onboard.oskr$   r   	getLoggerr"   Onboard.Configr   rn   r   rG   r   r  r  rw   rr   rt   rs   r^   r[   rY   <module>r     s   . B A  /   9 9 . - /? ? ?
  
'

K
( "	
N NbR0#** Rj
M#4chh 
! !F _  D5_ 5$A Ar[   