--- wallpapoz-0.6.1/src/wallpapoz.deletelastone 2011-12-30 15:20:41.000000000 +0900
+++ wallpapoz-0.6.1/src/wallpapoz 2011-12-30 15:29:05.000000000 +0900
@@ -832,6 +832,16 @@
# list to put our lowest iter in every related workspace
lowest_iter_list = []
+ # FIXME
+ # FIXME
+ # Currently copy_iter_list can be NoneType, e.g. when
+ # - Select one wallpaper in a workspace
+ # - and delete it
+ # - next choose "Edit -> "Delete Wallpaperz""
+ # Well, bugish, however anyway workaround...
+ if not copy_iter_list:
+ return lowest_iter_list
+
# indication we have done with this workspace
done_workspace = True
@@ -898,8 +908,16 @@
# do the remaining job, get the lowest iter from last workspace if we have not done withlast workspace
if not done_workspace:
- lowest_iter_list.append(
- self.store.get_iter( (parent_number_index, iter_workspace_index+1) ) )
+ # Umm... the original code raises ValueError if trying to delete
+ # a wallpaper from a workspace, if only one wallpaper existed.
+ # Need further investigation, however anyway workaround...
+ new_iter = []
+ try:
+ new_iter = self.store.get_iter((parent_number_index, iter_workspace_index + 1))
+ except ValueError:
+ pass
+ if new_iter:
+ lowest_iter_list.append(new_iter)
return lowest_iter_list
@@ -975,6 +993,11 @@
def cut_and_reordering_treeiter(self):
lowest_iter_list = self.reordering_node_after_cut_and_paste( self.selected_iter )
+ # workaround for the case that trying to remove a wallpaper from
+ # the workspace where only one wallpaper exists
+ if not lowest_iter_list:
+ return
+
# iterate to cut ( really!!! ) the iter from selected iter list
for single_iter in self.selected_iter:
@@ -985,6 +1008,9 @@
for single_iter in lowest_iter_list:
self.order_treeiter_from_lowest_iter(single_iter)
+ # Finally update selection view
+ self.treeview_selection_changed(None)
+
# order treeiter in one workspace or in list mode from lowest iter ( more efficient )
def order_treeiter_from_lowest_iter(self, single_iter):
# get the path
@@ -1201,6 +1227,22 @@
# it display another image, and disable/enable some menu
def treeview_selection_changed(self, widget):
position_iter = self.get_selected_iter_of_treeview("anything")
+
+ if not position_iter:
+ # Nothing is selected, unfortunately this can happen
+ self.main_window.get_widget("rename_workspace").set_sensitive(False)
+ self.rename_workspace_menu.set_sensitive(False)
+ self.main_window.get_widget("change_wallpaper").set_sensitive(False)
+ self.change_wallpaper_menu.set_sensitive(False)
+ self.main_window.get_widget("cut").set_sensitive(False)
+ self.cut_menu.set_sensitive(False)
+ self.main_window.get_widget("copy").set_sensitive(False)
+ self.copy_menu.set_sensitive(False)
+ self.main_window.get_widget("delete_wallpapers").set_sensitive(False)
+ self.delete_wallpapers_menu.set_sensitive(False)
+ # Nothing left
+ return
+
if type(self.store) == gtk.TreeStore:
parent = self.store.iter_parent(position_iter)
# parent node, enable: rename_workspace
@@ -1216,8 +1258,21 @@
self.cut_menu.set_sensitive(True)
self.main_window.get_widget("copy").set_sensitive(True)
self.copy_menu.set_sensitive(True)
- self.main_window.get_widget("delete_wallpapers").set_sensitive(True)
- self.delete_wallpapers_menu.set_sensitive(True)
+
+ # See create_configuration_file
+ # Check if there are at least 2 wallpapers
+ childiter = self.store.iter_children(parent)
+ childiter = self.store.iter_next(childiter)
+
+ # Only show "Delete wallpapers" menu if there are at least 2 wallpapers
+ # in a workspace
+ if childiter:
+ self.main_window.get_widget("delete_wallpapers").set_sensitive(True)
+ self.delete_wallpapers_menu.set_sensitive(True)
+ else:
+ self.main_window.get_widget("delete_wallpapers").set_sensitive(False)
+ self.delete_wallpapers_menu.set_sensitive(False)
+
# parent node
else:
self.main_window.get_widget("rename_workspace").set_sensitive(True)