
    fC                        d dl mZmZmZ d dlmZ  e        d dlmZmZm	Z	 d dl
Z
d dlmZ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 d dlmZ d d	l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eee	jJ                        Z&d Z'e(dk(  r; e&       Z)e)jU                          e)jW                  de'        e	jX                          yy)    )divisionprint_functionunicode_literals)require_gi_versions)GObjectGdkGtkN)Rectroundrect_arcFade)CallOnceTimer)WindowManipulatorWindowRectPersistOrientationset_unity_propertyDwellProgressgtk_has_resize_grip_support)InputSequence)RectKey)ContextMenuIconPalette)Configc                   6   e Zd ZdZ ed      ej                  j                  ej                  dfi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'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,y)(r   a  
    Class that creates a movable and resizable floating window without
    decorations. The window shows the icon of onboard scaled to fit to the
    window and a resize grip that honors the desktop theme in use.

    Onboard offers an option to the user to make the window appear
    whenever the user hides the onscreen keyboard. The user can then
    click on the window to hide it and make the onscreen keyboard
    reappear.
    	activated          ?Nc           
          d _         d _        d  _        t                _        d  _        d  _        d _        t        |       _	         j                         ddddd j                   j                  dd	}t               rd|d<   t        j                  j                   fi | t!        j                          t#        j                           j%                  d       t        j&                          _         j+                   j(                          j(                  j-                  d j.                          j(                  j1                          t2        j4                  j7                         j9                         }|r, j;                  |        j(                  j;                  |        j=                  t2        j>                  j@                  t2        j>                  jB                  z  t2        j>                  jD                  z          j-                  d jF                          j-                  d jH                          j-                  d jJ                          j-                  d	 jL                          j-                  d
 jN                          j-                  d jP                          j-                  d jR                          j-                  d jT                          jW                   j                   j                          jY                           j[                           j]                          t_        d      j`                  tb        jd                  jg                   fd       tb        jd                  ji                   fd       tb        jd                  jk                   fd        jm                           jo                          y )NFT)		type_hintskip_taskbar_hintskip_pager_hinturgency_hint	decoratedaccept_focuswidth_requestheight_requestapp_paintablehas_resize_gripdrawzbutton-press-eventzmotion-notify-eventzbutton-release-eventzconfigure-eventrealize	unrealizezenter-notify-eventzleave-notify-eventd   c                 (     j                         S N_on_config_rect_changedxonceselfs    5/usr/lib/python3/dist-packages/Onboard/IconPalette.py<lambda>z&IconPalette.__init__.<locals>.<lambda>       d4778     c                 (     j                         S r/   r0   r2   s    r6   r7   z&IconPalette.__init__.<locals>.<lambda>   r8   r9   c                 $    j                         S r/   )update_window_handles)r3   r5   s    r6   r7   z&IconPalette.__init__.<locals>.<lambda>   s    d002 r9   )8_visible_force_to_top	_last_posr   _dwell_progress_dwell_begin_timer_dwell_timer_no_more_dwellingr   _menu_get_window_type_hintMINIMUM_SIZEr   r	   Window__init__r   r   set_keep_aboveDrawingAreadrawing_areaaddconnect_on_drawshowr   Screenget_defaultget_rgba_visual
set_visual
add_events	EventMaskBUTTON_PRESS_MASKBUTTON_RELEASE_MASKPOINTER_MOTION_MASK_on_button_press_event_on_motion_notify_event_on_button_release_event_on_configure_event_on_realize_event_on_unrealize_event_on_mouse_enter_on_mouse_leaveset_min_window_sizerestore_window_rectupdate_window_optionshider   enqueueconfigicpposition_notify_addsize_notify_addwindow_handles_notify_addupdate_sticky_stater<   )r5   keyboardargsvisualr4   s   `   @r6   rH   zIconPalette.__init__H   s   ","& !& *
 446"& $"""//#00"

 '(&+D"#

D)D)""4(""4(D!OO-""#!!&$--8  '')99;OOF#((0 	7799:99: 	;
 	)4+F+FG*D,H,HI+T-J-JK&(@(@AY 6 67[$":":;)4+?+?@)4+?+?@ 	  !2!2D4E4EF 	  " 	""$		}$$

&&8	:

""8	:

,,2	4 	  """$r9   c                 .    t        j                  |        y r/   )r   cleanupr5   s    r6   rp   zIconPalette.cleanup   s    !!$'r9   c                 2    || _         | j                          y r/   )_layout_view
queue_draw)r5   views     r6   set_layout_viewzIconPalette.set_layout_view   s     r9   c                 P    | j                   r| j                   j                         S y r/   )rs   get_color_schemerq   s    r6   rx   zIconPalette.get_color_scheme   s#    $$5577r9   c                     | j                   S r/   )rD   rq   s    r6   get_menuzIconPalette.get_menu   s    zzr9   c                 $    | j                          y r/   )update_window_rectr5   widgetevents      r6   r\   zIconPalette._on_configure_event   s    !r9   c                 D    | j                          | j                          y r/   )stop_save_position_timer_stop_dwellingrq   s    r6   on_drag_initiatedzIconPalette.on_drag_initiated   s    %%'r9   c                 R    | j                          | j                          d| _        y )NT)r|   start_save_position_timerrC   rq   s    r6   on_drag_donezIconPalette.on_drag_done   s"    !&&(!%r9   c                     t        |        t        j                         r| j                  d       | j	                  d       y)z Gdk window created TN)r   rf   is_force_to_topset_override_redirectrb   r5   	user_datas     r6   r]   zIconPalette._on_realize_event   s2    4 !!#&&t,  &r9   c                 B    | j                  | j                                y)z Gdk window destroyed N)set_type_hintrE   r   s     r6   r^   zIconPalette._on_unrealize_event   s    45578r9   c                     t         j                         rt        j                  j                  S t        j                  j
                  S r/   )rf   r   r   WindowTypeHintNORMALUTILITYrq   s    r6   rE   z!IconPalette._get_window_type_hint   s2    !!#%%,,,%%---r9   c                 :   t         j                  st         j                         }| j                  |k7  rg|| _        | j                  }| j                         r | j                          | j                          | j                          |r| j                          y y y y r/   )
rf   xid_moder   r>   r=   get_realizedrd   r,   r+   rO   )r5   startupforce_to_topvisibles       r6   rc   z!IconPalette.update_window_options   s{     "113L!!\1%1"--$$&IIKNN$IIK  2 r9   c                     t         j                  s6t         j                         r| j                          y | j	                          y y r/   )rf   r   get_sticky_statestickunstickrq   s    r6   rk   zIconPalette.update_sticky_state   s,    &&(

	 r9   c                 V    | j                  t        j                  j                         y)z= Tell WindowManipulator about the active resize/move handles N)set_drag_handlesrf   rg   window_handlesrq   s    r6   r<   z!IconPalette.update_window_handles   s    fjj778r9   c                 *    t         j                         S )z  Overload for WindowManipulator )rf   get_drag_thresholdrq   s    r6   r   zIconPalette.get_drag_threshold   s    ((**r9   c                    |j                   | j                         k(  rt        j                  j	                  |      r5| j
                  j                  |j                  |j                                y|j                  t        j                  k(  r_| j                  d       t               }|j                  |       | j                  |d       | j                         r| j                          y)NT)move_on_background)window
get_windowr   Eventtriggers_context_menurD   popupbuttonget_timeBUTTON_PRIMARYenable_drag_protectionr   init_from_button_eventhandle_press	is_movingreset_drag_protection)r5   r~   r   sequences       r6   rY   z"IconPalette._on_button_press_event   s    <<4??,,yy..u5

  u~~/?@  !3!33++D1(?//6!!(t!D>>#..0r9   c                    t               }|j                  |       | j                  |d       | j                  |j                  |j
                  f       |j                  |j
                  f}| j                  |      }|k| j                         sZ| j                         sJ| j                  s>t        j                         s*t        j                  j                  s| j                          y| j                          y)zW
        Move the window if the pointer has moved more than the DND threshold.
        T)fallback)r   init_from_motion_eventhandle_motionset_drag_cursor_atr3   yhit_test_move_resizeis_drag_initiated_is_dwellingrC   rf   is_hover_click_activelockdowndisable_dwell_activation_start_dwellingr   )r5   r~   r   r   pointhits         r6   rZ   z#IconPalette._on_motion_notify_event   s     !?''.8d3%'' 23 %''"''.;))+$$&))//1??;;$$&  !r9   c                 F   |j                   | j                         k(  r|j                  dk(  r>|j                   | j                         k(  r!| j                         s| j	                  d       | j                          | j                  |j                  |j                  f       y)zi
        Save the window geometry, hide the IconPalette and
        emit the "activated" signal.
           r   T)	r   r   r   is_drag_activeemit	stop_dragr   r3   r   r}   s      r6   r[   z$IconPalette._on_button_release_event  sv    
 <<4??,,||q ||t00&&(		+&NN##UWWegg$67r9   c                      y r/   r   r}   s      r6   r_   zIconPalette._on_mouse_enter  s    r9   c                 2    | j                          d| _        y )NF)r   rC   r}   s      r6   r`   zIconPalette._on_mouse_leave"  s    !&r9   c           	         t        j                  ||j                               syt        ddt	        | j                               t	        | j                                     }| j                         }|j                          |j                  t        j                         |j                          |j                          t        j                  j!                         j#                         }|r|j%                          t'        |j)                  d            }t        j                  j!                         j#                         r|dxx   dz  cc<    |j*                  |  t-        |j.                  |j0                        dz  }t3        |||       |j5                          |j7                  d      }|j9                  d       t3        |||       |j;                          n |j*                  |  |j                          | j=                  |||       g d}	g d	}
|r^t?        d
      }|jA                  |d      }	t-        d|	d         |	d<   t?        d      }|jA                  |d      }
t-        d|	d         |
d<   |jC                  d      }| jD                  jG                  |||	|
       |r+|jI                          |jK                  | jL                         y)z(
        Draw the onboard icon.
        F        
background   r   皙?   )g?r   r         ?)r   r   r   r   icon0zdwell-progressicon1fillr   T)'r	   cairo_should_draw_windowr   r
   floatget_allocated_widthget_allocated_heightrx   saveset_operatorcairoOPERATOR_CLEARpaintrestorer   rP   rQ   is_composited
push_grouplistget_icon_rgbaset_source_rgbaminwhr   r   deflateset_line_widthstroke_draw_themed_iconr   get_key_rgbagrowr@   r*   pop_group_to_sourcepaint_with_alphaOPACITY)r5   r~   crrectcolor_scheme
compositedbackground_rgbacorner_radius	line_rectrgbabg_rgbakey
dwell_rects                r6   rN   zIconPalette._on_draw&  sN    ++B0A0A0CDC$2245$33568 ,,. 		
,,-




ZZ++-;;=
MMO |99,GH::!!#113A$&B0/#5M"dM2GGI QIa "i7IIKB0HHJ 	r46 $&7#C,,S2BCD$Q(DG7#C"//V<GT47+GAJYYs^
!!"j$@""$-r9   c           	         t        d      D cg c]  }t        dt        |      z          }}g dg dg dg dg}g d}g d}d}	rt        fd|D              rd	}	t	        d
d
dd      j                  d      j                  ddd      }
|j                          |j                  |j                  dz  |j                  dz         |j                  |j                  |j                         |j                  d       |j                  d       t!        |      D ]M  \  }}|
|   }|	r7j#                  |d      }j#                  |d      }j#                  |d      }n||   }t%        ||d        |j&                  |  |j)                           |j&                  |  |j+                          |dk(  s|dk(  s|dk(  rd}nd}|j-                  d       |j/                  |      \  }}}}}}|j1                  t	        dd||      dd      }|j3                  |j                  |z
  |j                  |z
          |j&                  |  |j5                  |       |j7                          P |j9                          yc c}w )z draw themed icon    icon)g?gffffff?r   r   )      ?r   r   r   )r   gHzG?r   r   )r   r   r   r   Fc              3   @   K   | ]  }j                  |        y wr/   )is_key_in_scheme).0r   r   s     r6   	<genexpr>z0IconPalette._draw_themed_icon.<locals>.<genexpr>z  s     F#<005Fs   Tr   g      Y@   r      z
sans-serifr   r   labelr   r   OB   333333?gQ?N)ranger   stranyr
   r   	subdivider   scaler   r   	translater3   r   select_font_facer   	enumerater   r   r   fill_preserver   set_font_sizetext_extents
align_rectmove_to	show_textnew_pathr   )r5   r   	icon_rectr   ikeys
fill_rgbasstroke_rgba
label_rgbathemedrectsr   r   	fill_rgbaletter	x_bearing	y_bearing_width_height	x_advance	y_advancers      `                  r6   r   zIconPalette._draw_themed_iconj  sN   27(;QQ(;;
 1//02
 /.
FFF S#ue,44Q7-6Yq!Q-? 	
	
t#Y[[5%89
Y[[)++.
L)
!o 	FAs8D*77VD	*77XF*77WE
(m	"dA&B	*B,IIKAva6 F F  $)+)@'IvwIOODAvw$?$'/

133?ACC)O<"""J/V$?	B 	

w <s   I>c                     t         j                  j                  |         | j                  | j	                           d| _        y)I
        Override Gtk.Widget.hide() to save the window geometry.
        TN)r	   rG   show_allmove_resizeget_rectr=   rq   s    r6   rO   zIconPalette.show  s3     	

D!$--/*r9   c                 P    t         j                  j                  |        d| _        y)r'  FN)r	   rG   rd   r=   rq   s    r6   rd   zIconPalette.hide  s     	

r9   c                     | j                         }| j                  |      }| j                         |k7  r| j                          yy)z$ Gsettings position or size changed N)get_screen_orientationread_window_rectr*  rb   )r5   orientationr   s      r6   r1   z#IconPalette._on_config_rect_changed  s?    113$$[1==?d"$$& #r9   c           	      *   |t         j                  k(  rt        j                  j                  }nt        j                  j
                  }t        |j                  |j                  t        |j                  d      t        |j                  d            }|S )zZ
        Read orientation dependent rect.
        Overload for WindowRectPersist.
        
   )r   	LANDSCAPErf   rg   	landscapeportraitr
   r3   r   maxwidthheight)r5   r/  cor   s       r6   r.  zIconPalette.read_window_rect  sj    
 +///%%B$$BBDDDD"%		2&( r9   c                 
   |t         j                  k(  rt        j                  j                  }nt        j                  j
                  }|j                          |\  |_        |_        |_	        |_
        |j                          y)z[
        Write orientation dependent rect.
        Overload for WindowRectPersist.
        N)r   r2  rf   rg   r3  r4  delayr3   r   r6  r7  apply)r5   r/  r   r8  s       r6   write_window_rectzIconPalette.write_window_rect  sX     +///%%B$$B

*.'bdBHbi

r9   c                     t        | j                        xr6 | j                  j                         xs | j                  j	                         S r/   )boolrA   
is_runningr@   is_dwellingrq   s    r6   r   zIconPalette._is_dwelling  sC    T,,- 4((335 3$$002	5r9   c                 h    | j                          t        d| j                        | _        d| _        y )Ng      ?T)r   r   _on_dwell_begin_timerrA   rC   rq   s    r6   r   zIconPalette._start_dwelling  s+    "'T-G-G"H!%r9   c                     | j                   rl| j                   j                          | j                  rE| j                  j                          | j                  j	                          | j                          y y y r/   )rA   stoprB   r@   stop_dwellingrt   rq   s    r6   r   zIconPalette._stop_dwelling  s^    ""##((*  !!&&($$224! ! #r9   c                 n    | j                   j                          t        d| j                        | _        y)Ng?F)r@   start_dwellingr   _on_dwell_timerrB   rq   s    r6   rB  z!IconPalette._on_dwell_begin_timer  s,    ++-!%)=)=>r9   c                 8   t        j                  | j                  j                  ddd      \  | j                  _        }| j                          | j                  j                         r2| j                         s!| j                  d       | j                          yy)Nr  r   r   r   FT)
r   sin_fader@   dwell_start_timeopacityrt   is_doner   r   r   )r5   dones     r6   rH  zIconPalette._on_dwell_timer  sv    MM$..??aM 	+$d'')&&(		+& r9   )F)-__name__
__module____qualname____doc__r  r   SignalFlagsRUN_LAST	TYPE_NONE__gsignals__rF   r   rs   rH   rp   rv   rx   rz   r\   r   r   r]   r^   rE   rc   rk   r<   r   rY   rZ   r[   r_   r`   rN   r   rO   rd   r1   r.  r<  r   r   r   rB  rH  r   r9   r6   r   r   0   s    	 	KG//88#--r3L
 ,LGLO%b(
"&
'9. (9+0 'BH=~'5
&
"
	r9   c                 ,    t        j                          y r/   )r	   	main_quitrq   s    r6   icp_activatedrY     s    MMOr9   __main__r   )-
__future__r   r   r   Onboard.Versionr   gi.repositoryr   r   r	   r   Onboard.utilsr
   r   r   Onboard.Timerr   r   Onboard.WindowUtilsr   r   r   r   r   r   Onboard.TouchInputr   Onboard.KeyGtkr   Onboard.Indicatorr   logging	getLogger_loggerOnboard.Configr   rf   rG   r   rY  rO  rg   rO   rM   mainr   r9   r6   <module>ri     s   0 B A /   + +  9 9 /M M . ' + 
'

M
* !	M#%6

 M` z
-CHHJKK]+CHHJ	 r9   