1616# License along with this library; if not, write to the Free Software
1717# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1818
19- import matemenu
2019import gi
2120gi .require_version ('Gtk' , '3.0' )
2221gi .require_version ('Gdk' , '3.0' )
22+ gi .require_version ('MateMenu' , '2.0' )
2323from gi .repository import GLib , Gio
2424from gi .repository import Gtk , Gdk , GdkPixbuf
25+ from gi .repository import MateMenu
2526import cgi
2627import os
2728import gettext
4041from Mozo import util
4142
4243class MainWindow :
43- timer = None
4444 #hack to make editing menu properties work
4545 allow_update = True
4646 #drag-and-drop stuff
@@ -77,40 +77,38 @@ def __init__(self, datadir, version, argv):
7777 keyval , modifier = Gtk .accelerator_parse ('F1' )
7878 accelgroup .connect (keyval , modifier , Gtk .AccelFlags .VISIBLE , self .on_help_button_clicked )
7979 self .tree .get_object ('mainwindow' ).add_accel_group (accelgroup )
80+ self .main_window = self .tree .get_object ('mainwindow' )
8081
8182 def run (self ):
8283 self .loadMenus ()
83- self .editor .applications .tree .add_monitor ( self .menuChanged , None )
84- self .editor .settings .tree .add_monitor ( self .menuChanged , None )
84+ self .editor .applications .tree .connect ( "changed" , self .menuChanged )
85+ self .editor .settings .tree .connect ( "changed" , self .menuChanged )
8586 self .tree .get_object ('mainwindow' ).show_all ()
8687 Gtk .main ()
8788
8889 def menuChanged (self , * a ):
89- if self .timer :
90- GLib .Source .remove (self .timer )
91- self .timer = None
92- self .timer = GLib .timeout_add (3 , self .loadUpdates )
90+ self .loadUpdates ()
9391
9492 def loadUpdates (self ):
9593 if not self .allow_update :
96- self .timer = None
9794 return False
9895 menu_tree = self .tree .get_object ('menu_tree' )
9996 item_tree = self .tree .get_object ('item_tree' )
10097 items , iter = item_tree .get_selection ().get_selected ()
10198 update_items = False
102- item_id , separator_path = None , None
99+ update_type = None
100+ item_id = None
103101 if iter :
104102 update_items = True
105- if items [iter ][3 ]. get_type () == matemenu . TYPE_DIRECTORY :
103+ if isinstance ( items [iter ][3 ], MateMenu . TreeDirectory ) :
106104 item_id = os .path .split (items [iter ][3 ].get_desktop_file_path ())[1 ]
107- update_items = True
108- elif items [iter ][3 ]. get_type () == matemenu . TYPE_ENTRY :
105+ update_type = MateMenu . TreeItemType . DIRECTORY
106+ elif isinstance ( items [iter ][3 ], MateMenu . TreeEntry ) :
109107 item_id = items [iter ][3 ].get_desktop_file_id ()
110- update_items = True
111- elif items [iter ][3 ]. get_type () == matemenu . TYPE_SEPARATOR :
112- item_id = items .get_path (iter ). to_string ()
113- update_items = True
108+ update_type = MateMenu . TreeItemType . ENTRY
109+ elif isinstance ( items [iter ][3 ], MateMenu . TreeSeparator ) :
110+ item_id = items .get_path (iter )
111+ update_type = MateMenu . TreeItemType . SEPARATOR
114112 menus , iter = menu_tree .get_selection ().get_selected ()
115113 update_menus = False
116114 menu_id = None
@@ -132,12 +130,13 @@ def loadUpdates(self):
132130 i = 0
133131 for item in item_tree .get_model ():
134132 found = False
135- if item [3 ].get_type () == matemenu .TYPE_ENTRY and item [3 ].get_desktop_file_id () == item_id :
136- found = True
137- if item [3 ].get_type () == matemenu .TYPE_DIRECTORY and item [3 ].get_desktop_file_path ():
138- if os .path .split (item [3 ].get_desktop_file_path ())[1 ] == item_id :
133+ if update_type != MateMenu .TreeItemType .SEPARATOR :
134+ if isinstance (item [3 ], MateMenu .TreeEntry ) and item [3 ].get_desktop_file_id () == item_id :
139135 found = True
140- if item [3 ].get_type () == matemenu .TYPE_SEPARATOR :
136+ if isinstance (item [3 ], MateMenu .TreeDirectory ) and item [3 ].get_desktop_file_path () and update_type == MateMenu .TreeItemType .DIRECTORY :
137+ if os .path .split (item [3 ].get_desktop_file_path ())[1 ] == item_id :
138+ found = True
139+ if isinstance (item [3 ], MateMenu .TreeSeparator ):
141140 if not isinstance (item_id , tuple ):
142141 #we may not skip the increment via "continue"
143142 i += 1
@@ -155,7 +154,6 @@ def loadUpdates(self):
155154 self .on_item_tree_cursor_changed (item_tree )
156155 break
157156 i += 1
158- self .timer = None
159157 return False
160158
161159 def findMenu (self , menus , path , iter , menu_id ):
@@ -179,43 +177,44 @@ def setupMenuTree(self):
179177 column .set_spacing (4 )
180178 cell = Gtk .CellRendererPixbuf ()
181179 column .pack_start (cell , False )
182- column .set_attributes (cell , pixbuf = 0 )
180+ column .add_attribute (cell , ' pixbuf' , 0 )
183181 cell = Gtk .CellRendererText ()
184182 cell .set_fixed_size (- 1 , 25 )
185183 column .pack_start (cell , True )
186- column .set_attributes (cell , markup = 1 )
184+ column .add_attribute (cell , ' markup' , 1 )
187185 column .set_sizing (Gtk .TreeViewColumnSizing .FIXED )
188186 menus .append_column (column )
189187 menus .enable_model_drag_source (Gdk .ModifierType .BUTTON1_MASK , self .dnd_menus , Gdk .DragAction .COPY )
190188 menus .enable_model_drag_dest (self .dnd_both , Gdk .DragAction .PRIVATE )
189+ menus .get_selection ().set_mode (Gtk .SelectionMode .BROWSE )
191190
192191 def setupItemTree (self ):
193192 items = self .tree .get_object ('item_tree' )
194193 column = Gtk .TreeViewColumn (_ ('Show' ))
195194 cell = Gtk .CellRendererToggle ()
196195 cell .connect ('toggled' , self .on_item_tree_show_toggled )
197196 column .pack_start (cell , True )
198- column .set_attributes (cell , active = 0 )
197+ column .add_attribute (cell , ' active' , 0 )
199198 #hide toggle for separators
200199 column .set_cell_data_func (cell , self ._cell_data_toggle_func )
201200 items .append_column (column )
202201 column = Gtk .TreeViewColumn (_ ('Item' ))
203202 column .set_spacing (4 )
204203 cell = Gtk .CellRendererPixbuf ()
205204 column .pack_start (cell , False )
206- column .set_attributes (cell , pixbuf = 1 )
205+ column .add_attribute (cell , ' pixbuf' , 1 )
207206 cell = Gtk .CellRendererText ()
208207 cell .set_fixed_size (- 1 , 25 )
209208 column .pack_start (cell , True )
210- column .set_attributes (cell , markup = 2 )
209+ column .add_attribute (cell , ' markup' , 2 )
211210 items .append_column (column )
212211 self .item_store = Gtk .ListStore (bool , GdkPixbuf .Pixbuf , str , object )
213212 items .set_model (self .item_store )
214213 items .enable_model_drag_source (Gdk .ModifierType .BUTTON1_MASK , self .dnd_items , Gdk .DragAction .COPY )
215214 items .enable_model_drag_dest (self .dnd_items , Gdk .DragAction .PRIVATE )
216215
217216 def _cell_data_toggle_func (self , tree_column , renderer , model , treeiter , data = None ):
218- if model [treeiter ][3 ]. get_type () == matemenu . TYPE_SEPARATOR :
217+ if isinstance ( model [treeiter ][3 ], MateMenu . TreeSeparator ) :
219218 renderer .set_property ('visible' , False )
220219 else :
221220 renderer .set_property ('visible' , True )
@@ -254,22 +253,19 @@ def loadMenu(self, iters, parent, depth=0):
254253 def loadItems (self , menu , menu_path ):
255254 self .item_store .clear ()
256255 for item , show in self .editor .getItems (menu ):
257- menu_icon = None
258- if item . get_type () == matemenu . TYPE_SEPARATOR :
256+ icon = util . getIcon ( item )
257+ if isinstance ( item , MateMenu . TreeSeparator ) :
259258 name = '---'
260- icon = None
261- elif item .get_type () == matemenu .TYPE_ENTRY :
259+ elif isinstance (item , MateMenu .TreeEntry ):
262260 if show :
263- name = cgi .escape (item .get_display_name ())
261+ name = cgi .escape (item .get_app_info (). get_display_name ())
264262 else :
265- name = '<small><i>' + cgi .escape (item .get_display_name ()) + '</i></small>'
266- icon = util .getIcon (item )
263+ name = '<small><i>' + cgi .escape (item .get_app_info ().get_display_name ()) + '</i></small>'
267264 else :
268265 if show :
269266 name = cgi .escape (item .get_name ())
270267 else :
271268 name = '<small><i>' + cgi .escape (item .get_name ()) + '</i></small>'
272- icon = util .getIcon (item )
273269 self .item_store .append ((show , icon , name , item ))
274270
275271 #this is a little timeout callback to insert new items after
@@ -346,11 +342,11 @@ def on_edit_delete_activate(self, menu):
346342 if not iter :
347343 return
348344 item = items [iter ][3 ]
349- if item . get_type () == matemenu . TYPE_ENTRY :
345+ if isinstance ( item , MateMenu . TreeEntry ) :
350346 self .editor .deleteItem (item )
351- elif item . get_type () == matemenu . TYPE_DIRECTORY :
347+ elif isinstance ( item , MateMenu . TreeDirectory ) :
352348 self .editor .deleteMenu (item )
353- elif item . get_type () == matemenu . TYPE_SEPARATOR :
349+ elif isinstance ( item , MateMenu . TreeSeparator ) :
354350 self .editor .deleteSeparator (item )
355351
356352 def on_edit_revert_to_original_activate (self , menu ):
@@ -359,9 +355,9 @@ def on_edit_revert_to_original_activate(self, menu):
359355 if not iter :
360356 return
361357 item = items [iter ][3 ]
362- if item . get_type () == matemenu . TYPE_ENTRY :
358+ if isinstance ( item , MateMenu . TreeEntry ) :
363359 self .editor .revertItem (item )
364- elif item . get_type () == matemenu . TYPE_DIRECTORY :
360+ elif isinstance ( item , MateMenu . TreeDirectory ) :
365361 self .editor .revertMenu (item )
366362
367363 def on_edit_properties_activate (self , menu ):
@@ -370,13 +366,13 @@ def on_edit_properties_activate(self, menu):
370366 if not iter :
371367 return
372368 item = items [iter ][3 ]
373- if item . get_type () not in ( matemenu . TYPE_ENTRY , matemenu . TYPE_DIRECTORY ):
369+ if not isinstance ( item , MateMenu . TreeEntry ) and not isinstance ( item , MateMenu . TreeDirectory ):
374370 return
375371
376- if item . get_type () == matemenu . TYPE_ENTRY :
372+ if isinstance ( item , MateMenu . TreeEntry ) :
377373 file_path = os .path .join (util .getUserItemPath (), item .get_desktop_file_id ())
378374 file_type = 'Item'
379- elif item . get_type () == matemenu . TYPE_DIRECTORY :
375+ elif isinstance ( item , MateMenu . TreeDirectory ) :
380376 file_path = os .path .join (util .getUserDirectoryPath (), os .path .split (item .get_desktop_file_path ())[1 ])
381377 file_type = 'Menu'
382378
@@ -391,7 +387,10 @@ def on_edit_properties_activate(self, menu):
391387 GLib .timeout_add (100 , self .waitForEditProcess , process , file_path )
392388
393389 def on_menu_tree_cursor_changed (self , treeview ):
394- menus , iter = treeview .get_selection ().get_selected ()
390+ selection = treeview .get_selection ()
391+ if selection is None :
392+ return
393+ menus , iter = selection .get_selected ()
395394 if iter is None :
396395 return
397396 menu_path = menus .get_path (iter )
@@ -404,6 +403,8 @@ def on_menu_tree_cursor_changed(self, treeview):
404403 self .tree .get_object ('move_up_button' ).set_sensitive (False )
405404 self .tree .get_object ('move_down_button' ).set_sensitive (False )
406405 self .tree .get_object ('new_separator_button' ).set_sensitive (False )
406+ self .tree .get_object ('properties_button' ).set_sensitive (False )
407+ self .tree .get_object ('delete_button' ).set_sensitive (False )
407408
408409 def on_menu_tree_drag_data_get (self , treeview , context , selection , target_id , etime ):
409410 menus , iter = treeview .get_selection ().get_selected ()
@@ -423,12 +424,12 @@ def on_menu_tree_drag_data_received(self, treeview, context, x, y, selection, in
423424 return False
424425 item = self .drag_data
425426 new_parent = menus [path ][2 ]
426- if item . get_type () == matemenu . TYPE_ENTRY :
427+ if isinstance ( item , MateMenu . TreeEntry ) :
427428 self .editor .copyItem (item , new_parent )
428- elif item . get_type () == matemenu . TYPE_DIRECTORY :
429+ elif isinstance ( item , MateMenu . TreeDirectory ) :
429430 if not self .editor .moveMenu (item , new_parent ):
430431 self .loadUpdates ()
431- elif item . get_type () == matemenu . TYPE_SEPARATOR :
432+ elif isinstance ( item , MateMenu . TreeSeparator ) :
432433 self .editor .moveSeparator (item , new_parent )
433434 else :
434435 context .finish (False , False , etime )
@@ -437,7 +438,7 @@ def on_menu_tree_drag_data_received(self, treeview, context, x, y, selection, in
437438
438439 def on_item_tree_show_toggled (self , cell , path ):
439440 item = self .item_store [path ][3 ]
440- if item . get_type () == matemenu . TYPE_SEPARATOR :
441+ if isinstance ( item , MateMenu . TreeSeparator ) :
441442 return
442443 if self .item_store [path ][0 ]:
443444 self .editor .setVisible (item , False )
@@ -446,7 +447,10 @@ def on_item_tree_show_toggled(self, cell, path):
446447 self .item_store [path ][0 ] = not self .item_store [path ][0 ]
447448
448449 def on_item_tree_cursor_changed (self , treeview ):
449- items , iter = treeview .get_selection ().get_selected ()
450+ selection = treeview .get_selection ()
451+ if selection is None :
452+ return
453+ items , iter = selection .get_selected ()
450454 if iter is None :
451455 return
452456
@@ -458,7 +462,7 @@ def on_item_tree_cursor_changed(self, treeview):
458462 can_revert = self .editor .canRevert (item )
459463 self .tree .get_object ('edit_revert_to_original' ).set_sensitive (can_revert )
460464
461- can_edit = not item . get_type () == matemenu . TYPE_SEPARATOR
465+ can_edit = not isinstance ( item , MateMenu . TreeSeparator )
462466 self .tree .get_object ('edit_properties' ).set_sensitive (can_edit )
463467 self .tree .get_object ('properties_button' ).set_sensitive (can_edit )
464468
@@ -517,7 +521,7 @@ def on_item_tree_drag_data_received(self, treeview, context, x, y, selection, in
517521 path , position = drop_info
518522 target = items [path ][3 ]
519523 # move the item to the directory, if the item was dropped into it
520- if (target . get_type () == matemenu . TYPE_DIRECTORY ) and (position in types_into ):
524+ if isinstance (target , MateMenu . TreeDirectory ) and (position in types_into ):
521525 # append the selected item to the choosen menu
522526 destination = target
523527 elif position in types_before :
@@ -530,12 +534,12 @@ def on_item_tree_drag_data_received(self, treeview, context, x, y, selection, in
530534 else :
531535 path = (len (items ) - 1 ,)
532536 after = items [path ][3 ]
533- if item . get_type () == matemenu . TYPE_ENTRY :
537+ if isinstance ( item , MateMenu . TreeEntry ) :
534538 self .editor .moveItem (item , destination , before , after )
535- elif item . get_type () == matemenu . TYPE_DIRECTORY :
539+ elif isinstance ( item , MateMenu . TreeDirectory ) :
536540 if not self .editor .moveMenu (item , destination , before , after ):
537541 self .loadUpdates ()
538- elif item . get_type () == matemenu . TYPE_SEPARATOR :
542+ elif isinstance ( item , MateMenu . TreeSeparator ) :
539543 self .editor .moveSeparator (item , destination , before , after )
540544 context .finish (True , True , etime )
541545 elif str (selection .get_target ()) == 'text/plain' :
@@ -587,12 +591,12 @@ def on_move_up_button_clicked(self, button):
587591 if path .get_indices ()[0 ] == 0 :
588592 return
589593 item = items [path ][3 ]
590- before = items [(path [0 ] - 1 ,)][3 ]
591- if item . get_type () == matemenu . TYPE_ENTRY :
594+ before = items [(path . get_indices () [0 ] - 1 ,)][3 ]
595+ if isinstance ( item , MateMenu . TreeEntry ) :
592596 self .editor .moveItem (item , item .get_parent (), before = before )
593- elif item . get_type () == matemenu . TYPE_DIRECTORY :
597+ elif isinstance ( item , MateMenu . TreeDirectory ) :
594598 self .editor .moveMenu (item , item .get_parent (), before = before )
595- elif item . get_type () == matemenu . TYPE_SEPARATOR :
599+ elif isinstance ( item , MateMenu . TreeSeparator ) :
596600 self .editor .moveSeparator (item , item .get_parent (), before = before )
597601
598602 def on_move_down_button_clicked (self , button ):
@@ -606,11 +610,11 @@ def on_move_down_button_clicked(self, button):
606610 return
607611 item = items [path ][3 ]
608612 after = items [path ][3 ]
609- if item . get_type () == matemenu . TYPE_ENTRY :
613+ if isinstance ( item , MateMenu . TreeEntry ) :
610614 self .editor .moveItem (item , item .get_parent (), after = after )
611- elif item . get_type () == matemenu . TYPE_DIRECTORY :
615+ elif isinstance ( item , MateMenu . TreeDirectory ) :
612616 self .editor .moveMenu (item , item .get_parent (), after = after )
613- elif item . get_type () == matemenu . TYPE_SEPARATOR :
617+ elif isinstance ( item , MateMenu . TreeSeparator ) :
614618 self .editor .moveSeparator (item , item .get_parent (), after = after )
615619
616620 def on_mainwindow_undo (self , accelgroup , window , keyval , modifier ):
0 commit comments