
    ?g                        d dl Z d dlZd dlZd dlZd dlmZ ej                  dd dk\  rd dlm	Z	 nd dl
m	Z	 d dlmZmZmZmZmZ ej"                  Zej&                  j(                  ej&                  j*                  z  ZddZd	 Zd
 ZdefdZdefdZdee   fdZdefdZdee   fdZdefdZ defdZ!dee   fdZ"defdZ# G d d      Z$de$fdZ%ddZ&d Z'y)    N)Optional   )      )Sequence)Gtk	GdkPixbufCMenuGLibGdkreturnc                 *   |j                         D ]  \  }}|	t        |t              r| j                  t        ||       1t        |t
              r| j                  t        ||       Yt        |t              sj| j                  t        ||        y N)	items
isinstanceboolset_booleanDESKTOP_GROUPstr
set_stringr   set_string_list)keyfiler   keyitems       4/usr/share/cinnamon/cinnamon-menu-editor/cme/util.pyfillKeyFiler   "   sw    [[] 	>	T<dD!sD9c"}c48h'##M3=	>    c                 .    | j                  t        d      S )NName)
get_stringr   )r   s    r   getNameFromKeyFiler!   .   s    mV44r   c                    	 | dz   t        t        j                               z   |z   }|dk(  rUt               }t        j
                  j                  t        j
                  j                  ||            sht        |      s]	 |S |dk(  rUt               }t        j
                  j                  t        j
                  j                  ||            st        |      s	 |S )N-z.desktopz
.directory)r   uuiduuid1getUserItemPathospathisfilejoingetItemPathgetUserDirectoryPathgetDirectoryPath)name	extensionfilenamer(   s       r   getUniqueFileIdr1   1   s    
#:DJJL 11I=
""$D77>>"'',,tX">?T\H]
 O	 ,&')D77>>"'',,tX">?HXYaHbO r   c                     	 | dz   t        t        j                               z   }t        j                  j                  |      s	 |S F)Nz.redo-)r   r$   r%   r'   r(   r)   )filepathnew_filepaths     r   getUniqueRedoFiler5   >   s=    
(*S->>ww~~l+	 r   c                    t         j                  j                  |       d   j                  dd      \  }}	 |dk(  rt	               }n|dk(  rt               }n|dk(  r
t               }t         j                  j                  |dz   |z   dz   t        t        j                               z         }t         j                  j                  |      s	 |S )N   .desktop	directorymenuz.undo-)r'   r(   splitrsplitr&   r,   getUserMenuPathr*   r   r$   r%   r)   )r3   r0   r/   r(   r4   s        r   getUniqueUndoFiler?   E   s    ''--1!4;;CCHi
	!"$D+%')D& "$Dww||D(S.9*Dx*ORUVZV`V`VbRc*cdww~~l+ r   c                     t        j                         D ]F  }t        j                  j	                  |d|       }t        j                  j                  |      sD|c S  y Napplicationsr   get_system_data_dirsr'   r(   r*   r)   file_idr(   	file_paths      r   r+   r+   S   sK    ))+ GGLL~w?	77>>)$ r   c                      t         j                  j                  t        j                         d      } t         j                  j                  |       st        j                  |        | S rA   r'   r(   r*   r   get_user_data_dirisdirmakedirs)item_dirs    r   r&   r&   Z   s@    ww||D224nEH77=="
HOr   c                     t        j                         D ]F  }t        j                  j	                  |d|       }t        j                  j                  |      sD|c S  y Nzdesktop-directoriesrC   rE   s      r   r-   r-   `   sL    ))+ GGLL'<gF	77>>)$ r   c                      t         j                  j                  t        j                         d      } t         j                  j                  |       st        j                  |        | S rO   rI   menu_dirs    r   r,   r,   g   sA    ww||D2246KLH77=="
HOr   c                      t         j                  j                  t        j                         d      } t         j                  j                  |       st        j                  |        | S Nmenus)r'   r(   r*   r   get_user_config_dirrK   rL   rQ   s    r   r>   r>   m   s@    ww||D446@H77=="
HOr   c                     t        j                         D ]F  }t        j                  j	                  |d|       }t        j                  j                  |      sD|c S  y rT   )r   get_system_config_dirsr'   r(   r*   r)   rE   s      r   getSystemMenuPathrY   s   sK    ++- GGLLw8	77>>)$ r   c                     t        t        j                  j                  | j	                                     }| j                         j                         }d}|d|z   dz   z  }|d|z   dz   z  }|S )Nzt<!DOCTYPE Menu PUBLIC '-//freedesktop//DTD Menu 1.0//EN' 'http://standards.freedesktop.org/menu-spec/menu-1.0.dtd'>
z<Menu>
  <Name>z
</Name>
  z<MergeFile type="parent">z</MergeFile>
</Menu>
)rY   r'   r(   basenameget_canonical_menu_pathget_root_directoryget_menu_id)treesystem_filer.   menu_xmls       r   getUserMenuXmlrb   z   ss    #BGG$4$4T5Q5Q5S$TUK""$002D GH"T)M99H-;AZZZHOr   c                       e Zd Zd Zy)SurfaceWrapperc                     || _         y r   )surface)selfrf   s     r   __init__zSurfaceWrapper.__init__   s	    r   N)__name__
__module____qualname__rh    r   r   rd   rd      s    r   rd   c                    t        d       }d }| |S t        | t        j                        r| j	                         }n=t        | t        j
                        r!| j                         }|j	                         }n|S ||S t        j                  j                         }d|j                         z  }|j                  ||d      }||S 	 |j                         }||S |j                         |k7  s|j!                         |k7  r+|j#                  ||t$        j&                  j(                        }t+        j,                  ||j                         |j/                               |_        |S # t        j                  $ r |cY S w xY w)N   r   )rd   r   r
   TreeDirectoryget_icon	TreeEntryget_app_infor   	IconThemeget_defaultget_scale_factorlookup_by_gicon	load_iconr   GError	get_width
get_heightscale_simpler	   
InterpTypeHYPERr    cairo_surface_create_from_pixbuf
get_windowrf   )	r   widgetwrapperpixbufgiconapp_info
icon_themesizeinfos	            r   getIconr      sX   T"GF|$++,	D%//	*$$&!!#}**,J''))D%%eT15D|! ~T!V%6%6%8D%@$$T41E1E1K1KL::FFD[D[D]_e_p_p_rsGON ;; s   E& &E>=E>c                    g }| j                   D ]  }|j                  t        j                  j                  j
                  j                  k(  rL|j                  j                         |_        |j                  j                         rx|j                  |       |j                         st        |        |D ]  } | j                  j                  |         y r   )
childNodesnodeTypexmldomminidomNode	TEXT_NODEdatastripappendhasChildNodesremoveWhitespaceNodes
parentNoderemoveChild)noderemove_listchilds      r   r   r      s    K )>>SWW__11;;;))+EJ::##%""5)  "!%()  *##D)*r   c                     ddg}| j                         j                         }| j                         j                         }||v rd|z   }|S )Nadministrationpreferenceszzzz)r^   lowerget_name)r   prefCatsr   r.   s       r   menuSortKeyr      sK     -0H




"
"
$C==?  "D
hv}Kr   )r   N)(r'   xml.dom.minidomr   r$   systypingr   version_infocollections.abcr   collectionsgi.repositoryr   r	   r
   r   r   KEY_FILE_DESKTOP_GROUPr   KeyFileFlagsKEEP_COMMENTSKEEP_TRANSLATIONSKEY_FILE_FLAGSr   r!   r1   r   r5   r?   r+   r&   r-   r,   r>   rY   rb   rd   r   r   r   rl   r   r   <module>r      s  & 
   
 BQ6!($ : :++""0043D3D3V3VV
>53 3 HSM  # c  (3- C   ^  D
*r   