
    ?gb                     N    d dl Z d dlZd dlZd dlmZmZ d dlmZ  G d de	      Z
y)    N)CMenuGLib)utilc                   @   e Zd Zd2d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d3dZd3dZd4dZd5dZd Zd Zd6dZd Zd Zd Zd6dZd Zd Zd Zd Z d  Z!d! Z"d7d"Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d3d.Z/d/ Z0d3d0Z1d1 Z2y)8
MenuEditorc                    || _         t        j                  j                  |t        j                  j
                  t        j                  j                  z  t        j                  j                  z  t        j                  j                  z  t        j                  j                  z        | _
        | j                  j                  d| j                         | j                          t        j                  j!                  t#        j$                         | j                  j&                  j(                        | _        | j+                          y )Nchanged)namer   Treenew	TreeFlags
SHOW_EMPTYINCLUDE_EXCLUDEDINCLUDE_NODISPLAYSHOW_ALL_SEPARATORSSORT_DISPLAY_NAMEtreeconnectmenuChangedloadospathjoinr   getUserMenuPathpropsmenu_basenameloadDOM)selfr
   s     :/usr/share/cinnamon/cinnamon-menu-editor/cme/MenuEditor.py__init__zMenuEditor.__init__   s   	JJNN4)C)CEOODdDd)dejetet  fG  fG  *G  HM  HW  HW  Hk  Hk  *k  lq  l{  l{  lM  lM  *M  N			)T%5%56		GGLL!5!5!79V9VW	    c                    	 t         j                  j                  j                  | j                        | _        t        j                  | j                         y # t
        t         j                  j                  j                  f$ rU}t         j                  j                  j                  t        j                  | j                              | _        Y d }~d }~ww xY wN)xmldomminidomparser   IOErrorparsersexpat
ExpatErrorparseStringr   getUserMenuXmlr   removeWhitespaceNodes)r   es     r   r   zMenuEditor.loadDOM$   s    	Sww,,TYY7DH 	""488, **556 	Sww2243F3Ftyy3QRDHH	Ss   8A -CACCc                 h    | j                   j                         st        d| j                        y )Nzcan not load menu tree )r   	load_sync
ValueErrorr
   )r   s    r   r   zMenuEditor.load+   s)    yy""$DIIGHH %r!   c                 $    | j                          y r#   )r   )r   as     r   r   zMenuEditor.menuChanged/   s    		r!   c                     t        | j                  d      }|j                  | j                  j	                                |j                          y )Nw)openr   writer%   toprettyxmlclose)r   fds     r   savezMenuEditor.save2   s4    $))S!
%%'(

r!   c                    | j                  | j                  j                                t        j                  j                  t        j                         t        j                  j                  | j                  j                                     }	 t        j                  |       | j                          y # t        $ r Y w xY wr#   )restoreTreer   get_root_directoryr   r   r   r   r   basenameget_canonical_menu_pathunlinkOSErrorr   )r   r   s     r   restoreToSystemzMenuEditor.restoreToSystem7   s    5578ww||D002BGG4D4DTYYEfEfEh4ij	IIdO 	  		s   B8 8	CCc                    |j                         }|j                         }|t        j                  j                  k7  r|t        j                  j
                  k(  r"|j                         }| j                  |       n>|t        j                  j                  k(  r!|j                         }| j                  |       |j                         }|t        j                  j                  k7  r| j                  |       y r#   )iternextr   TreeItemTypeINVALID	DIRECTORYget_directoryr>   ENTRY	get_entryrestoreItemrestoreMenur   menu	item_iter	item_typeitems        r   r>   zMenuEditor.restoreTreeA   s    IIK	NN$	5--555E..888 ..0  &e00666 **,  &!(I 5--555 	r!   c                     | j                  |      sy 	 t        j                  |j                                | j                          y # t        $ r Y w xY wr#   )	canRevertr   removeget_desktop_file_pathrC   r<   )r   rT   s     r   rN   zMenuEditor.restoreItemN   sJ    ~~d#	IId0023 			  		s   #A 	AAc                 x   | j                  |      sy |j                         sy t        j                  j	                  |j                               d   }t        j                  j                  t        j                         |      }	 t        j                  |       | j                          y # t        $ r Y w xY w)N   )rV   rX   r   r   splitr   r   getUserDirectoryPathrW   rC   r<   )r   rQ   file_idr   s       r   rO   zMenuEditor.restoreMenuW   s    ~~d#))+''-- : : <=a@ww||D557A	IIdO 			  		s   B- -	B98B9c              #     K   || j                   j                         df y |j                         }|j                         }g }|t        j
                  j                  k7  rl|t        j
                  j                  k(  r!|j                         }|j                  |       |j                         }|t        j
                  j                  k7  rl|j                  t        j                         |D ]  }|| j                  |      f  y w)NT)key)r   r?   rF   rG   r   rH   rI   rJ   rK   appendsortr   menuSortKey	isVisible)r   parentrR   rS   itemsrT   s         r   getMenuszMenuEditor.getMenuse   s     >))..0$66KKM	NN$	5--555E..888 ..0T"!(I	 5--555
 	

t''
( 	-Dt,,,	-s   CD=Dc                    g }|j                         }|j                         }|t        j                  j                  k7  r)d }|t        j                  j
                  k(  r|j                         }n|t        j                  j                  k(  r|j                         }n|t        j                  j                  k(  r|j                         }n[|t        j                  j                  k(  r|j                         }n-|t        j                  j                  k(  r|j                         }|r|j                  |       |j                         }|t        j                  j                  k7  r)|S r#   )rF   rG   r   rH   rI   rJ   rK   rL   rM   HEADER
get_headerALIAS	get_alias	SEPARATORget_separatorr`   )r   rT   contentsrR   rS   s        r   getContentszMenuEditor.getContentsv   s   IIK	NN$	5--555DE..888 ..0e00666 **,e00777 ++-e00666 **,e00::: ..0%!(I 5--555 r!   c              #     K   |j                         }|j                         }|t        j                  j                  k7  r,d }|t        j                  j
                  k(  r|j                         }n|t        j                  j                  k(  r|j                         }n|t        j                  j                  k(  r|j                         }n[|t        j                  j                  k(  r|j                         }n-|t        j                  j                  k(  r|j                         }|| j                  |      f |j                         }|t        j                  j                  k7  r+y y wr#   )rF   rG   r   rH   rI   rL   rM   rJ   rK   rh   ri   rj   rk   rl   rm   rc   rP   s        r   getItemszMenuEditor.getItems   s    IIK	NN$	5--555DE..444 **,e00::: ..0e00777 ++-e00666 **,e00::: ..0t,,,!(I 5--555s   E(E.,E.c                    t        |t        j                        rt        j                  |j                               `t        j                         }t        j                  j                  t        j                  j                  ||j                                     ryyt        |t        j                        r|j                         r1t        j                  j                  |j                               d   }n|j                         dz   }t        j                  |      Rt        j                          }t        j                  j                  t        j                  j                  ||            ryy)NTrZ   
.directoryF)
isinstancer   	TreeEntryr   getItemPathget_desktop_file_idgetUserItemPathr   r   isfiler   TreeDirectoryrX   r[   get_menu_idgetDirectoryPathr\   )r   rT   r   r]   s       r   rV   zMenuEditor.canRevert   s    dEOO, 8 8 :;G++-77>>"'',,tT5M5M5O"PQ  e112))+''--(B(B(DEaH**,|;$$W-900277>>"'',,tW"=>r!   c                    | j                   }t        |t        j                        r| j	                  | j                  |j                               |j                  |      }|r6| j                  |||j                         d       | j                  |d       n"| j                  |||j                         d       | j                  |dt        j                         |       nt        |t        j                        r|j                         }|j!                         }|t        j"                  j$                  k(  ry | j	                  | j                  |      |j                  |      }| j'                  ddg|      D ]  }|j(                  j+                  |        | j-                  ||        | j                  |dt        j.                         |       | j1                          y )	NIncludeF)	NoDisplayExcludeAppDirDeleted
NotDeletedDirectoryDir)r%   rt   r   ru   
getXmlMenugetPath
get_parentdocumentElementaddXmlFilenamerw   	writeItemaddXmlTextElementr   rx   rz   rF   rG   rH   rI   getXmlNodesByName
parentNoderemoveChild	writeMenur\   r<   )r   rT   visibler%   menu_xmlrR   first_child_typenodes           r   
setVisiblezMenuEditor.setVisible   sy   hhdEOO,t||DOO4E'FH[H[]`aH##Hc43K3K3MyYtu5##Hc43K3K3MyY""8Xt7K7K7MsSe112		I(~~/5#5#5#=#==t||D'93;N;NPSTH..	</H(S 2++D12NN4w;N7""8^T=V=V=XZ]^		r!   c                 l     | j                   di |}| j                  ||j                         ||       y )Nr#   )r   insertExternalItemr{   )r   rd   beforeafterkwargsr]   s         r   
createItemzMenuEditor.createItem   s2     $..00););)=vuMr!   Nc                     | j                  |      }| j                  }| j                  |||       | j                  |d|f||       | j	                          y )NItem)findMenur%   addItempositionItemr<   )r   r]   	parent_idr   r   rd   r%   s          r   r   zMenuEditor.insertExternalItem   sK    y)hhVWc*&67"3VUC		r!   c                    |j                  dd      d   }| j                  |      }| j                  }| j                  | j	                  | j                  |      |j                  |      |       | j	                  | j                  |      |gz   |j                  |      }| j                  |d||       | j                  |d|f||       | j                          y )N.rZ   r   	DirectoryMenu)
rsplitr   r%   addXmlDefaultLayoutr   r   r   r   r   r<   )	r   r]   r   r   r   menu_idrd   r%   r   s	            r   insertExternalMenuzMenuEditor.insertExternalMenu   s    ..a(+y)hh  f1EsGZGZ\_!`cfg??4<<#77)#CSEXEXZ]^xgsC&67"3VUC		r!   c	                    |j                         }	||	j                         k(  rM||	j                         k(  r:||j                         k(  r'||j	                         k(  r||j                         k(  ry |s|j                         }| j                  ||||||       |r^| j                  }
| j                  | j                  |      |
j                  |
      }| j                  |dt        j                         |
       | j                          y )N)IconNameCommentExecTerminalr   )get_app_infoget_iconget_display_nameget_commentget_execget_launch_in_terminalr   r   r%   r   r   r   r   r   rx   r<   )r   rT   iconr
   commentcommanduse_termrd   finalapp_infor%   r   s               r   editItemzMenuEditor.editItem   s   $$&8$$&&483L3L3N+NSZ^b^n^n^pSpu|  AE  AN  AN  AP  vP  U]  ae  a|  a|  a~  U~__&Ft$T7[cd((Ct||F';S=P=PRUVH""8Xt7K7K7MsS		r!   c                    ||j                         k(  r'||j                         k(  r||j                         k(  ry | j                  }| j	                  | j                  |      |j                  |      }| j                  ||||       |r&| j                  |dt        j                         |       | j                          y )N)r   r   r   r   )r   get_namer   r%   r   r   r   r   r   r   r\   r<   )r   rQ   r   r
   r   r   r%   r   s           r   editMenuzMenuEditor.editMenu   s    4==?"tt}}'>7dN^N^N`C` hh??4<<#5s7J7JCPt$T7C""8^T=V=V=XZ]^		r!   c                     | j                   }|j                         }t        j                         }|j	                  |t
        j                         |d fS r#   )r%   rX   r   KeyFileload_from_filer   KEY_FILE_FLAGS)r   rT   r%   	file_pathcopy_buffers        r   copyItemzMenuEditor.copyItem   sE    hh..0	lln""9d.A.ABD  r!   c                 T    | j                  |      \  }}| j                  |      }||fS r#   )r   
deleteItem)r   rT   r   r]   s       r   cutItemzMenuEditor.cutItem   s.    #}}T2W//$'G##r!   c                    	 | j                  |      }t        j                  |t        dd             t        j                  |      }|4t        j
                  |j                  t        j                  d      d      }t        j                  j                  t        j                         |      }|j                         \  }}t        |d      }	|	j                  |       |	j                          | j!                  || j"                  j$                  | j"                        }
| j'                  |
| j"                  |d       | j)                  |
dt        j                         | j"                         | j+                          y#  Y yxY w)	NF)Hiddenr   -.desktopr6   r~   r   T)r   r   fillKeyFiledictgetNameFromKeyFilegetUniqueFileIdreplacer   sepr   r   rx   to_datar7   r8   r:   r   r%   r   r   r   r<   )r   cut_copy_bufferrQ   r]   r   r
   out_pathrn   lengthfr   s              r   	pasteItemzMenuEditor.pasteItem  s"   	<<%D_d%5.QR**?;D..t||BFFC/H*Uww||D$8$8$:GDH.668HfXs#AGGHGGItTXX-E-EtxxPH$((GYG""8Xt7K7K7MtxxXIIK	s   E>F Fc                 "   | j                  |d      }| j                  | j                  |j                               | j                  j
                  | j                        }| j                  || j                  |       | j                          |S )NT)r   )r   r   r   r   r%   r   removeXmlFilenamer<   )r   rT   r]   item_xmls       r   r   zMenuEditor.deleteItem  sk    ..d.3??4<<0A#BDHHD\D\^b^f^fgx7;		r!   c                     | j                   }| j                  | j                  |      |j                  |      }| j	                  ||       | j                          y r#   )r%   r   r   r   
addDeletedr<   )r   rQ   r%   r   s       r   
deleteMenuzMenuEditor.deleteMenu   sC    hh??4<<#5s7J7JCP#&		r!   c                 @   |j                         }| j                  |      }|j                  |       | j                  |      }| j                  }| j                  | j                  |      |j                  |      }| j                  |||       | j                          y r#   )
r   ro   rW   createLayoutr%   r   r   r   addXmlLayoutr<   )r   rT   rd   rn   layoutr%   r   s          r   deleteSeparatorzMenuEditor.deleteSeparator&  s    "##F+""8,hh??4<<#79L9LcR(FC0		r!   c                    || j                   j                         }||j                         k(  r|S |j                         }|j	                         }|t
        j                  j                  k7  r|t
        j                  j                  k(  r;|j                         }|j                         |k(  r|S | j                  ||      }||S |j	                         }|t
        j                  j                  k7  ry y r#   )r   r?   r{   rF   rG   r   rH   rI   rJ   rK   r   )r   r   rd   rR   rS   rT   rQ   s          r   r   zMenuEditor.findMenu0  s    >YY113Ff((**MKKM	NN$	5--555E..888 ..0##%0K}}Wd3#K!(I 5--555r!   c                     t        |t        j                        r3|j                         }|j	                         xs |j                          S t        |t        j                        r|j                          S yNT)rt   r   ru   r   get_is_excludedget_nodisplayrz   get_is_nodisplay)r   rT   r   s      r   rc   zMenuEditor.isVisibleC  sc    dEOO,((*H,,.J(2H2H2JKKe112,,...r!   c                     g }|}|3	 |j                  |j                                |j                         }|3|j	                  d       |d d d   S #  |j                  |j                                Y OxY wN)r`   r{   rw   r   pop)r   rQ   namescurrents       r   r   zMenuEditor.getPathK  s{    !<W0023 ((*G ! 			"TrT{<W88:;s   A !A6c                     | j                  d|      D ];  }| j                  d|      D ]$  }|j                  d   j                  |k(  s |c c S  = y )Nr   r   r   )r   
childNodes	nodeValue)r   elementr
   r   childs        r   getXmlMenuPartzMenuEditor.getXmlMenuPartZ  s]    **67; 	 D//=  ##A&00D8K 	  r!   c                 h    |D ],  }| j                  ||      }||}| j                  |||      }. |S r#   )r   addXmlMenuElement)r   r   r   r%   r
   founds         r   r   zMenuEditor.getXmlMenua  sK     	ED''6E 00$D	E r!   c                 n    |j                  d      }| j                  |d||       |j                  |      S )Nr   r   )createElementr   appendChild)r   r   r
   r%   r   s        r   r   zMenuEditor.addXmlMenuElementj  s7      (tVT37""4((r!   c                    |j                   D ]0  }|j                  |k(  s|j                   d   j                  |k(  s0 y  |j                  |      }|j	                  |      }|j                  |       |j                  |      S )Nr   )r   nodeNamer   r   createTextNoder   )r   r   r
   textr%   tempr   s          r   r   zMenuEditor.addXmlTextElemento  s~    && 	D}}$??1%//47	   &!!$'""4((r!   c                 n   | j                  ddg|      D ]Z  }|j                  d   j                  dk(  s |j                  d   j                  d   j                  |k(  sJ|j	                  |       \ |j                  |      }|j                  | j                  |d||             |j                  |      S )Nr~   r   r   Filename)r   r   r   r   r   r   r   r   )r   r   r%   filenametyper   s         r   r   zMenuEditor.addXmlFilenamey  s    **Iy+A7K 	*Dq!**j8T__Q=O=Z=Z[\=]=g=gks=s##D)	*
   &//j(CPQ""4((r!   c                     | j                  dg|      D ]Z  }|j                  d   j                  dk(  s |j                  d   j                  d   j                  |k(  sJ|j	                  |       \ y )Nr~   r   r  )r   r   r   r   r   )r   r   r%   r  r   s        r   r   zMenuEditor.removeXmlFilename  sh    **I;@ 	*Dq!**j8T__Q=O=Z=Z[\=]=g=gks=s##D)	*r!   c                 F    |j                  d      }|j                  |      S )Nr   )r   r   r   r   r%   r   s       r   r   zMenuEditor.addDeleted  s#      +""4((r!   c                     d|v r|d   S t        j                         }| |j                  |t        j                         t        j
                  ||       |S )Nr   )r   r   r   r   r   r   )r   r   r   keyfiles       r   makeKeyFilezMenuEditor.makeKeyFile  sQ    )$$,,. ""9d.A.AB&)r!   c                    ||j                         }nd }| j                  ||      }||j                         }n4t        j                  |j                  t        j                  d      d      }|j                         \  }}t        t        j                  j                  t        j                         |      d      }|j                  |       |j                          |S )Nr   r   r6   )rX   r
  rw   r   r   
get_stringr   KEY_FILE_DESKTOP_GROUPr   r7   r   r   r   rx   r8   r:   )	r   rT   r   r   r	  r]   rn   r   r   s	            r   r   zMenuEditor.writeItem  s    224II""9f5..0G**7+=+=d>Y>Y[a+bdnoG"??,&d224g>D			r!   c                 |   |ut         j                  j                  |j                               d   }|j                         }t	        j
                         }|j                  |t        j                         n>|d|vrt        d      t        j                  |d   d      }t	        j
                         }t        j                  ||       |j                         \  }}t        t         j                  j                  t        j                         |      d      }|j!                  |       |j#                          |S )NrZ   r   zNew menus need a namers   r6   )r   r   r[   rX   r   r   r   r   r   	Exceptionr   r   r   r7   r   r\   r8   r:   )	r   rQ   r   r]   r   r	  rn   r   r   s	            r   r   zMenuEditor.writeMenu  s    ggmmD$>$>$@A!DG224IllnG""9d.A.AB\fF2344**6&><HGllnG&)"??,&d7797CSI			r!   c              #   B  K   |j                   D ]  }|j                  t        j                  j                  j
                  k(  s5t        |t              r|j                  |k(  r| Yt        |t              st        |t              sz|j                  |v s|  y wr#   )r   nodeTyper$   r%   NodeELEMENT_NODErt   strr   listtuple)r   r
   r   r   s       r   r   zMenuEditor.getXmlNodesByName  ss     '' 	$E~~!:!::dC(U^^t-CKd+z$/F~~-#	$s   ABAB	BBc                    | j                  ||||      ss|j                  d      }|j                  | j                  |d||             |j                  | j                  |d||             |j	                  ||j
                        S y )NMoveOldNew)	undoMovesr   r   r   insertBefore
firstChild)r   r   oldr   r%   r   s         r   
addXmlMovezMenuEditor.addXmlMove  s    ~~gsC5$$V,DT33D%cJKT33D%cJK''g.@.@AA 6r!   c                    | j                  d|      D ]  }|j                  |        |j                  d      }|D ]  }|d   dk(  r#|j                  d      }|j                  |       .|d   dk(  r| j	                  |d|d   |      }N|d   dk(  r| j	                  |d|d   |      }n|d   dk(  sw|j                  d      }|j                  d|d          |j                  |        |j                  |      S )	NLayoutr   	Separatorr  rZ   MenunameMerger  )r   r   r   r   r   setAttribute)r   r   r   r%   r   orderr   s          r   r   zMenuEditor.addXmlLayout  s   **8W= 	&D%	&   * 	(EQx;&))+6  'qZ'..tZq3OqZ'..tZq3OqW$))'2""6584  '	( ""4((r!   c                     | j                  d|      D ]  }|j                  |        |j                  d      }|j                  dd       |j	                  |      S )NDefaultLayoutinlinefalse)r   r   r   r%  r   r  s       r   r   zMenuEditor.addXmlDefaultLayout  s_    **?GD 	&D%	&   1(G,""4((r!   c                    dg}|D ]  }t        |t        j                        r"|j                  d|j	                         f       ?t        |t        j
                        r"|j                  d|j                         f       {t        |t        j                        r|j                  d       |j                  |        |j                  d       |S )N)r$  menusr#  r  )r"  )r$  files)rt   r   rz   r`   r{   ru   rw   TreeSeparator)r   re   r   rT   s       r   r   zMenuEditor.createLayout  s    $% 	$D$ 3 34z4+;+;+=>?D%//2z4+C+C+EFGD%"5"56n-d#	$ 	()r!   c                     | j                  | j                  |      |j                  |      }| j                  |||d       y )Nr~   )r   r   r   r   )r   rd   r]   r%   
xml_parents        r   r   zMenuEditor.addItem   s8    __T\\&%93;N;NPST
JWi@r!   c                 N    | j                  ||||       | j                          y )N)r   r   )r   r<   )r   rd   rT   r   r   s        r   moveItemzMenuEditor.moveItem  s"    &$vUC		r!   c                    d}t        |t        j                        r_t        t	        |            D ]F  }t        |      t        ||         ur|j                         ||   j                         k(  sB|}|c S  |S t        |t        j                        r]t        t	        |            D ]F  }t        |      t        ||         ur|j                         ||   j                         k(  sB|}|c S  |S r   )	rt   r   rz   rangelenr  r{   ru   rw   )r   rT   rn   indexis        r   getIndexzMenuEditor.getIndex  s    dE//03x=) !:T(1+%66##%!)@)@)BBE L!  eoo.3x=) !:T(1+%66++-!1P1P1RRE L! r!   c                    | j                  |      }d}|r| j                  ||      dz   }n |r| j                  ||      }nt        |      }| j                  ||      }|dkD  r*|r||k  s
|r||dz
  k  r|dz  }|j                  ||          |j	                  ||       | j                  |      }| j                  }	| j                  | j                  |      |	j                  |	      }
| j                  |
||	       y )Nr   rZ   )ro   r8  r5  rW   insertr   r%   r   r   r   r   )r   rd   rT   r   r   rn   r6  
item_indexr   r%   r   s              r   r   zMenuEditor.positionItem  s    ##F+MM%2Q6EMM&(3E ME]]42
?J.:	#9
OOHZ01t$""8,hh??4<<#79L9LcR(FC0r!   c                 ,   g }g }|}|}| j                  dg|      D ]  }	|j                  d|	        |D ]q  }	|	j                  d      d   }
|	j                  d      d   }|j                  d   j                  |k(  sH|j                  |	       |
j                  d   j                  }s |D ]  }	|j                  |	        t        |      dkD  r|D ]Q  }	|	j                  d      d   }
|	j                  d      d   }t        j                  j                  |j                  d   j                        }|d   |k(  sk|j                  |	       |j                  d      D ]!  }	|	j                  d      d   }|j                  d   j                  }|t        j                  j                  |      d   k(  sW|j                  d      d   j                  d      d   j                  d   j                  }| j                  |dz   |z   |j                  |      }|	j                  d	      D ]  }|j                  |        |	j                  d
      D ]  }|j                  |        |	j                  }|j                  |	       $ |j                  d      }	|	j                  | j!                  |	d|
j                  d   j                  |             |	j                  | j!                  |	dt        j                  j#                  ||d         |             |j                  |	       T ||k(  ry|j                  d      }	|	j                  | j!                  |	d||             |	j                  | j!                  |	d||             |j                  |	      S y )Nr  r   r  r  r   r   rZ   /r   r   T)r   r:  getElementsByTagNamer   r   r`   r   r5  r   r   r[   r   r   r   r   r   r   r   )r   r   r  r   r%   nodesmatchesoriginal_old	final_oldr   xml_oldxml_newr   	name_noder
   	root_pathxml_menuapp_dirdir_dirrd   s                       r   r  zMenuEditor.undoMoves4  sz   	**F8W= 	"DLLD!	"  	<D//6q9G//6q9G!!!$..#5t$#..q1;;		<  	&D%	&w<! .33E:1=33E:1=ww}}W%7%7%:%D%DE7l*''- # 8 8 @ 5$($=$=f$Ea$H	(33A6@@277==#5a#88(+(@(@(H(K(`(`ag(hij(k(v(vwx(y  )D  )DI'+y37LcNaNacf'gH+/+D+DX+N > ( 4 4W =>+/+D+D^+T > ( 4 4W =>%)__F"..t45 ,,V4D$$T%;%;D%I[I[\]I^IhIhjm%no$$T%;%;D%VY[_`a[bIceh%ij''--.. C$$V,DT33D%CPQT33D%cJK&&t,,; r!   )zcinnamon-applications.menu)NNr   )Tr#   )r~   )3__name__
__module____qualname__r    r   r   r   r<   rD   r>   rN   rO   rf   ro   rq   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r
  r   r   r   r  r   r   r   r   r2  r8  r   r   r!   r   r   r      s    -I
-",)$".N!$
()&)
)	)*
)
(*$B)*)A$140-r!   r   )r   xml.dom.minidomr$   xml.parsers.expatgi.repositoryr   r   cmer   objectr   rM  r!   r   <module>rS     s$   & 
   % K	- K	-r!   