Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > cfd5a9dd583fb1ae0fd3ada5d6b760fc > files > 5

wallpapoz-0.5-2.fc13.src.rpm

--- wallpapoz-0.4.1-svn92_trunk/src/wallpapoz.deleteone	2010-06-13 03:08:43.000000000 +0900
+++ wallpapoz-0.4.1-svn92_trunk/src/wallpapoz	2010-06-13 17:33:06.000000000 +0900
@@ -833,6 +833,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
 
@@ -899,8 +909,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
 
@@ -983,6 +1001,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:
 
@@ -993,6 +1016,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
@@ -1209,6 +1235,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
@@ -1224,8 +1266,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)