@@ -182,7 +182,6 @@ def __init__(self, window, builder=None):
182182 self .clear_icon_button = self .builder .get_object ("clear_icon_button" )
183183 self .icon_selector_menu_button = self .builder .get_object ("icon_selector_menu_button" )
184184 self .icon_selector_image = self .builder .get_object ("icon_selector_image" )
185- self .action_enabled_switch = self .builder .get_object ("action_enabled_switch" )
186185 self .selected_item_widgets_group = XApp .VisibilityGroup .new (True , True , [
187186 self .icon_selector_menu_button ,
188187 self .name_entry
@@ -244,11 +243,16 @@ def __init__(self, window, builder=None):
244243 visible = True
245244 )
246245
247- # Icon and label
246+ # Checkbox, Icon and label
248247 column = Gtk .TreeViewColumn ()
249248 self .treeview .append_column (column )
250249 column .set_expand (True )
250+ column .set_spacing (2 )
251251
252+ cell = Gtk .CellRendererToggle (activatable = True )
253+ cell .connect ("toggled" , self .on_action_row_toggled )
254+ column .pack_start (cell , False )
255+ column .set_cell_data_func (cell , self .toggle_render_func )
252256 cell = Gtk .CellRendererPixbuf ()
253257 column .pack_start (cell , False )
254258 column .set_cell_data_func (cell , self .menu_icon_render_func )
@@ -286,7 +290,7 @@ def __init__(self, window, builder=None):
286290 self .name_entry .connect ("changed" , self .on_name_entry_changed )
287291 self .name_entry .connect ("icon-press" , self .on_name_entry_icon_clicked )
288292 self .remove_submenu_button .connect ("clicked" , self .on_remove_submenu_clicked )
289- self . action_enabled_switch . connect ( "notify::active" , self . on_action_enabled_switch_notify )
293+
290294 self .treeview .connect ("row-activated" , self .on_row_activated )
291295
292296 # DND
@@ -686,8 +690,6 @@ def update_row_controls(self):
686690 orig_icon = row .get_icon_string (original = True )
687691 self .original_icon_menu_item .set_sensitive (orig_icon is not None and orig_icon != row .get_icon_string ())
688692 self .selected_item_widgets_group .set_sensitive (row .enabled and row_type != ROW_TYPE_SEPARATOR )
689- self .action_enabled_switch .set_active (row .enabled )
690- self .action_enabled_switch .set_sensitive (row_type == ROW_TYPE_ACTION )
691693 self .remove_submenu_button .set_sensitive (row_type in (ROW_TYPE_SUBMENU , ROW_TYPE_SEPARATOR ))
692694
693695 if row_type == ROW_TYPE_ACTION and row .get_custom_label () is not None :
@@ -699,12 +701,25 @@ def update_row_controls(self):
699701
700702 self .updating_row_edit_fields = False
701703
702- def on_row_activated (self , path , column , data = None ):
703- row_type = self .get_selected_row_field (ROW_TYPE )
704- if row_type != ROW_TYPE_ACTION :
704+ def _toggle_row_enabled (self , row ):
705+ row .enabled = not row .enabled
706+ self .selected_row_changed (needs_saved = False )
707+ self .save_disabled_list ()
708+
709+ def on_row_activated (self , treeview , path , column , data = None ):
710+ if self .updating_row_edit_fields :
705711 return
706712
707- self .action_enabled_switch .set_active (not self .action_enabled_switch .get_active ())
713+ row = self .get_selected_row_field (ROW_OBJ )
714+ if row is not None :
715+ self ._toggle_row_enabled (row )
716+
717+ def on_action_row_toggled (self , renderer , path , data = None ):
718+ iter = self .model .get_iter (path )
719+ row = self .model .get_value (iter , ROW_OBJ )
720+
721+ if row is not None :
722+ self ._toggle_row_enabled (row )
708723
709724 def set_icon_button (self , row ):
710725 for image , use_orig in ([self .icon_selector_image , False ], [self .original_icon_menu_image , True ]):
@@ -890,18 +905,6 @@ def on_name_entry_icon_clicked(self, entry, icon_pos, event, data=None):
890905 row .set_custom_label (None )
891906 self .selected_row_changed ()
892907
893- def on_action_enabled_switch_notify (self , switch , pspec ):
894- if self .updating_row_edit_fields :
895- return
896-
897- row = self .get_selected_row_field (ROW_OBJ )
898- if row is not None :
899- row .enabled = switch .get_active ()
900- # The layout file does not track active/inactive actions,
901- # so this shouldn't prompt a layout save.
902- self .selected_row_changed (needs_saved = False )
903- self .save_disabled_list ()
904-
905908 def on_accel_edited (self , accel , path , key , mods , kc , data = None ):
906909 if not self .validate_accelerator (key , mods ):
907910 return
@@ -988,6 +991,15 @@ def check_for_action_conflict(iter):
988991 return not conflict
989992
990993 # Cell render functions
994+ def toggle_render_func (self , column , cell , model , iter , data ):
995+ row_type = model .get_value (iter , ROW_TYPE )
996+ row = model .get_value (iter , ROW_OBJ )
997+
998+ if row_type in (ROW_TYPE_SUBMENU , ROW_TYPE_SEPARATOR ):
999+ cell .set_property ("visible" , False )
1000+ else :
1001+ cell .set_property ("visible" , True )
1002+ cell .set_property ("active" , row .enabled )
9911003
9921004 def menu_icon_render_func (self , column , cell , model , iter , data ):
9931005 row = model .get_value (iter , ROW_OBJ )
@@ -1009,6 +1021,7 @@ def menu_label_render_func(self, column, cell, model, iter, data):
10091021 else :
10101022 cell .set_property ("markup" , row .get_label ())
10111023 cell .set_property ("weight" , Pango .Weight .NORMAL if row .enabled else Pango .Weight .ULTRALIGHT )
1024+ cell .set_property ("style" , Pango .Style .NORMAL if row .enabled else Pango .Style .ITALIC )
10121025
10131026 def accel_render_func (self , column , cell , model , iter , data ):
10141027 row_type = model .get_value (iter , ROW_TYPE )
0 commit comments