Blob Blame History Raw
--- 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)