[Pkg-cli-apps-commits] [SCM] f-spot branch, master, updated. debian/0.8.2-2-2-g37e8f12

Iain Lane laney at ubuntu.com
Fri May 20 09:56:46 UTC 2011


The following commit has been merged in the master branch:
commit f187b28548c55168dc5f24efd904baee25a7bdc9
Author: Iain Lane <laney at ubuntu.com>
Date:   Fri May 20 10:37:17 2011 +0100

    Add new patch to fix compilation with new gtk#/mono 2.10
    
    Also switched to gbp-pq for patch management.

diff --git a/debian/patches/ubuntu_xdg-photo-dir.patch b/debian/patches/0001-ubuntu_xdg-photo-dir.patch
similarity index 65%
rename from debian/patches/ubuntu_xdg-photo-dir.patch
rename to debian/patches/0001-ubuntu_xdg-photo-dir.patch
index aa4f037..d9e03a6 100644
--- a/debian/patches/ubuntu_xdg-photo-dir.patch
+++ b/debian/patches/0001-ubuntu_xdg-photo-dir.patch
@@ -1,14 +1,22 @@
+From: Debian CLI Applications Team <pkg-cli-apps-team at lists.alioth.debian.org>
+Date: Fri, 20 May 2011 10:27:46 +0100
+Subject: ubuntu_xdg-photo-dir
+
 # ubuntu_xdg_photo_dir.patch: Patch by Andrew Higginson to set the default import target to
 # XDG pictures dir/Photos (as translated). This only affects the first run, existing users
 # will see no change
 -- f-spot-0.6.0.0.orig/debian/patches/ubuntu_xdg_photo_dir.patch
 ++ f-spot-0.6.0.0/debian/patches/ubuntu_xdg_photo_dir.patch
 @ -0,0 +1,16 @@
-Index: f-spot.git/src/Clients/MainApp/FSpot/Preferences.cs
-===================================================================
---- f-spot.git.orig/src/Clients/MainApp/FSpot/Preferences.cs	2010-08-11 19:48:53.000000000 +0100
-+++ f-spot.git/src/Clients/MainApp/FSpot/Preferences.cs	2010-08-11 20:14:35.092511532 +0100
-@@ -155,7 +155,14 @@
+---
+ src/Clients/MainApp/FSpot/Preferences.cs |    9 ++++++++-
+ 1 files changed, 8 insertions(+), 1 deletions(-)
+
+diff --git a/src/Clients/MainApp/FSpot/Preferences.cs b/src/Clients/MainApp/FSpot/Preferences.cs
+index 5996b5f..676c1f5 100644
+--- a/src/Clients/MainApp/FSpot/Preferences.cs
++++ b/src/Clients/MainApp/FSpot/Preferences.cs
+@@ -155,7 +155,14 @@ namespace FSpot
  			case SCREENSAVER_DELAY:
  				return 4.0;
  			case STORAGE_PATH:
@@ -24,3 +32,4 @@ Index: f-spot.git/src/Clients/MainApp/FSpot/Preferences.cs
  			case EXPORT_EMAIL_SIZE:
  				return 3;	// medium size 640px
  			case EXPORT_EMAIL_ROTATE:
+-- 
diff --git a/debian/patches/0002-PixbufLoader-from-gtk-sharp-master-does-not-have-a-C.patch b/debian/patches/0002-PixbufLoader-from-gtk-sharp-master-does-not-have-a-C.patch
new file mode 100644
index 0000000..823e671
--- /dev/null
+++ b/debian/patches/0002-PixbufLoader-from-gtk-sharp-master-does-not-have-a-C.patch
@@ -0,0 +1,23 @@
+From: Marek Habersack <grendel at twistedcode.net>
+Date: Wed, 15 Sep 2010 23:21:52 +0200
+Subject: PixbufLoader from gtk-sharp/master does not have a Close () overload which takes a boolean parameter
+
+https://bugzilla.gnome.org/show_bug.cgi?id=629224
+---
+ .../MainApp/FSpot.Loaders/GdkImageLoader.cs        |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
+index 1249e3a..aa9d870 100644
+--- a/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
++++ b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
+@@ -112,7 +112,7 @@ namespace FSpot.Loaders {
+ 		public new bool Close ()
+ 		{
+ 			lock (sync_handle) {
+-				return base.Close (true);
++				return base.Close ();
+ 			}
+ 		}
+ #endregion
+-- 
diff --git a/debian/patches/series b/debian/patches/series
index 1edd940..4120107 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,14 +1,2 @@
-# Patches from Ubuntu
-
-# ubuntu_importer-targetdir-selector.patch
-
-ubuntu_xdg-photo-dir.patch
-
-#ubuntu_add_editing_to_view_mode.patch
-#ubuntu_fix_disposed_pixbuf_errors_in_adjustment.patch
-#ubuntu_add_save_and_undo.patch
-#ubuntu_add_filmstrip_browsing_to_view_mode.patch
-#ubuntu_add_other_files_in_directory_in_view_mode.patch
-#ubuntu_clear_selection_on_crop.patch
-#ubuntu_only_update_timestamp_of_unprotected_versions.patch
-#ubuntu_handle_broken_uris_to_view_mode.patch
+0001-ubuntu_xdg-photo-dir.patch
+0002-PixbufLoader-from-gtk-sharp-master-does-not-have-a-C.patch
diff --git a/debian/patches/ubuntu_add_editing_to_view_mode.patch b/debian/patches/ubuntu_add_editing_to_view_mode.patch
deleted file mode 100644
index e17ef1c..0000000
--- a/debian/patches/ubuntu_add_editing_to_view_mode.patch
+++ /dev/null
@@ -1,341 +0,0 @@
-Description: Enable editing in View mode
-Author: Christopher Halse Rogers <christopher.halse.rogers at canonical.com>
-Author: Ken VanDine <ken.vandine at canonical.com>
-Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/484888
-Bug: https://bugzilla.gnome.org/show_bug.cgi?id=513561	
-
-=== modified file 'src/Editors/Editor.cs'
-Index: f-spot.git/src/Editors/Editor.cs
-===================================================================
---- f-spot.git.orig/src/Editors/Editor.cs	2010-05-19 13:51:16.967958461 +0100
-+++ f-spot.git/src/Editors/Editor.cs	2010-05-19 13:51:50.877959347 +0100
-@@ -18,6 +18,7 @@
- using Mono.Unix;
- 
- using System;
-+using System.IO;
- 
- namespace FSpot.Editors {
- 	[ExtensionNode ("Editor")]
-@@ -61,6 +62,9 @@
- 		public event ProcessingStepHandler ProcessingStep;
- 		public event ProcessingFinishedHandler ProcessingFinished;
- 
-+		public PhotoImageView View { get; set; }
-+		public Gtk.Window ParentWindow {get; set; }
-+
- 		// Contains the current selection, the items being edited, ...
- 		private EditorState state;
- 		public EditorState State {
-@@ -96,7 +100,7 @@
- 		}
- 
- 
--		protected void LoadPhoto (Photo photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
-+		protected void LoadPhoto (IBrowsableItem photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
- 			// FIXME: We might get this value from the PhotoImageView.
- 			using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
- 				photo_pixbuf = img.Load ();
-@@ -143,18 +147,29 @@
- 			}
- 
- 			int done = 0;
--			foreach (Photo photo in State.Items) {
-+			foreach (IBrowsableItem item in State.Items) {
- 				Pixbuf input;
- 				Cms.Profile input_profile;
--				LoadPhoto (photo, out input, out input_profile);
-+				LoadPhoto (item, out input, out input_profile);
- 
- 				Pixbuf edited = Process (input, input_profile);
- 				input.Dispose ();
- 
--				bool create_version = photo.DefaultVersion.IsProtected;
--				photo.SaveVersion (edited, create_version);
--				photo.Changes.DataChanged = true;
--				App.Instance.Database.Photos.Commit (photo);
-+				if (item is Photo) {
-+					var photo = item as Photo;
-+					bool create_version = photo.DefaultVersion.IsProtected;
-+					photo.SaveVersion (edited, create_version);
-+					photo.Changes.DataChanged = true;
-+					App.Instance.Database.Photos.Commit (photo);
-+				} else {
-+					var pb = edited.Copy ();
-+					using (ImageFile img = ImageFile.Create (item.DefaultVersionUri)) {
-+						using (Stream stream = System.IO.File.OpenWrite (item.DefaultVersionUri.LocalPath)) {
-+							img.Save (edited, stream);
-+						}
-+					}
-+					State.PhotoImageView.Pixbuf = pb; 
-+				}
- 
- 				done++;
- 				if (ProcessingStep != null) {
-@@ -205,7 +220,11 @@
- 			Pixbuf previewed = ProcessFast (preview, null);
- 			State.PhotoImageView.Pixbuf = previewed;
- 			State.PhotoImageView.ZoomFit (false);
--			MainWindow.Toplevel.InfoBox.UpdateHistogram (previewed);
-+			if (MainWindow.Toplevel != null) {
-+				//MainWindow.Toplevel is null if we're in View mode.
-+				//If we're in View mode we don't have a histogram, so we don't need to update it.
-+				MainWindow.Toplevel.InfoBox.UpdateHistogram (previewed);
-+			}
- 
- 			if (old_preview != null) {
- 				old_preview.Dispose ();
-@@ -238,7 +257,11 @@
- 				State.PhotoImageView.Pixbuf = original;
- 				State.PhotoImageView.ZoomFit (false);
- 
--				MainWindow.Toplevel.InfoBox.UpdateHistogram (null);
-+				if (MainWindow.Toplevel != null) {
-+					//MainWindow.Toplevel is null if we're in View mode.
-+					//If we're in View mode we don't have a histogram, so we dont' need to update it.
-+					MainWindow.Toplevel.InfoBox.UpdateHistogram (null);
-+				}
- 			}
- 
- 			Reset ();
-Index: f-spot.git/src/FSpot.addin.xml
-===================================================================
---- f-spot.git.orig/src/FSpot.addin.xml	2010-05-19 13:51:16.927958582 +0100
-+++ f-spot.git/src/FSpot.addin.xml	2010-05-19 13:51:50.877959347 +0100
-@@ -61,8 +61,8 @@
- 
- 	<Extension path = "/FSpot/Sidebar">
- 		<SidebarPage sidebar_page_type = "FSpot.Widgets.MetadataDisplayPage" />
-+		<SidebarPage sidebar_page_type = "FSpot.Widgets.EditorPage" />
- 		<Condition id="ViewMode" mode="library">
--			<SidebarPage sidebar_page_type = "FSpot.Widgets.EditorPage" />
- 			<SidebarPage sidebar_page_type = "FSpot.Widgets.FolderTreePage" />
- 		</Condition>
- 	</Extension>
-Index: f-spot.git/src/MainWindow.cs
-===================================================================
---- f-spot.git.orig/src/MainWindow.cs	2010-05-19 13:51:16.867959974 +0100
-+++ f-spot.git/src/MainWindow.cs	2010-05-19 13:51:50.877959347 +0100
-@@ -375,10 +375,8 @@
- 	
- 			Sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");
- 	
--			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
--	
- 			Sidebar.Context = ViewContext.Library;
--	 		
-+			
- 			Sidebar.CloseRequested += HideSidebar;
- 			Sidebar.Show ();
- 	
-@@ -454,7 +452,7 @@
- 			new FSpot.PreviewPopup (icon_view);
- 	
- 			Gtk.Drag.SourceSet (icon_view, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
--					    icon_source_target_table, DragAction.Copy | DragAction.Move);
-+						icon_source_target_table, DragAction.Copy | DragAction.Move);
- 			
- 			icon_view.DragBegin += HandleIconViewDragBegin;
- 			icon_view.DragDataGet += HandleIconViewDragDataGet;
-@@ -487,6 +485,9 @@
- 			photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;
- 	
- 			photo_view.View.ZoomChanged += HandleZoomChanged;
-+
-+ 			// Sidebar extensions need access to PhotoView, so this has to be delayed until after we've constructed photo_view
-+ 			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
- 	
- 			// Tag typing: focus the tag entry if the user starts typing a tag
- 			icon_view.KeyPressEvent += HandlePossibleTagTyping;
-@@ -567,8 +568,12 @@
- 	
- 		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
- 			// FIXME: No sidebar page removal yet!
--			if (args.Change == ExtensionChange.Add)
--				Sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
-+ 			if (args.Change == ExtensionChange.Add) {
-+				var page = ((SidebarPageNode)args.ExtensionNode).GetPage ();
-+				page.PhotoImageView = PhotoView.View;
-+				page.ParentWindow = Window;
-+				Sidebar.AppendPage (page);
-+			}
- 		}
- 	
- 		private Photo CurrentPhoto {
-Index: f-spot.git/src/SingleView.cs
-===================================================================
---- f-spot.git.orig/src/SingleView.cs	2010-05-19 13:51:16.887960131 +0100
-+++ f-spot.git/src/SingleView.cs	2010-05-19 13:51:50.877959347 +0100
-@@ -114,9 +114,6 @@
- 			info_vbox.Add (sidebar);
- 			sidebar.AppendPage (directory_scrolled, Catalog.GetString ("Folder"), "gtk-directory");
- 
--			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
-- 		
--			sidebar.Context = ViewContext.Single;
- 
- 			sidebar.CloseRequested += HandleHideSidePane;
- 			sidebar.Show ();
-@@ -136,6 +133,9 @@
- 			
- 			Window.ShowAll ();
- 
-+			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);	
-+			sidebar.Context = ViewContext.Single;
-+
- 			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
- 		
- 			LoadPreference (Preferences.VIEWER_SHOW_TOOLBAR);
-@@ -143,7 +143,9 @@
- 			LoadPreference (Preferences.VIEWER_TRANSPARENCY);
- 			LoadPreference (Preferences.VIEWER_TRANS_COLOR);
- 
--			ShowSidebar = collection.Count > 1;
-+			// We always want to start by showing the sidebar to make it
-+			// more obvious how to edit.
-+			ShowSidebar = true;
- 
- 			LoadPreference (Preferences.VIEWER_SHOW_FILENAMES);
- 
-@@ -176,8 +178,13 @@
- 
- 		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
- 			// FIXME: No sidebar page removal yet!
--			if (args.Change == ExtensionChange.Add)
--				sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
-+			if (args.Change == ExtensionChange.Add) {
-+				var page = (args.ExtensionNode as SidebarPageNode).GetPage ();
-+				Log.Debug ("OnSidebarExtensionAdded {0}  / {1} / {2}", page, image_view, window);
-+				page.PhotoImageView = image_view;
-+				page.ParentWindow = window;
-+				sidebar.AppendPage (page); 
-+			}
- 		}
- 
- 		void HandleExportActivated (object o, EventArgs e)
-Index: f-spot.git/src/Widgets/EditorPage.cs
-===================================================================
---- f-spot.git.orig/src/Widgets/EditorPage.cs	2010-05-19 13:51:16.947959526 +0100
-+++ f-spot.git/src/Widgets/EditorPage.cs	2010-05-19 13:51:50.877959347 +0100
-@@ -24,7 +24,7 @@
- namespace FSpot.Widgets {
- 	public class EditorPage : SidebarPage {
- 		internal bool InPhotoView;
--		private readonly EditorPageWidget EditorPageWidget;
-+		readonly EditorPageWidget EditorPageWidget;
- 
- 		public EditorPage () : base (new EditorPageWidget (),
- 									   Catalog.GetString ("Edit"),
-@@ -35,6 +35,16 @@
- 			EditorPageWidget.Page = this;
- 		}
- 
-+		public override PhotoImageView PhotoImageView {
-+			get { return EditorPageWidget.PhotoImageView; }
-+			set { EditorPageWidget.PhotoImageView = value; }
-+		}
-+
-+		public override Gtk.Window ParentWindow {
-+			get { return EditorPageWidget.ParentWindow; }
-+			set { EditorPageWidget.ParentWindow = value ;}
-+		}
-+
- 		protected override void AddedToSidebar () {
- 			(Sidebar as Sidebar).SelectionChanged += delegate (IBrowsableCollection collection) { EditorPageWidget.ShowTools (); };
- 			(Sidebar as Sidebar).ContextChanged += HandleContextChanged;
-@@ -42,18 +52,21 @@
- 
- 		private void HandleContextChanged (object sender, EventArgs args)
- 		{
--			InPhotoView = ((Sidebar as Sidebar).Context == ViewContext.Edit);
-+            InPhotoView = (Sidebar.Context == ViewContext.Edit) || (Sidebar.Context == ViewContext.Single);
- 			EditorPageWidget.ChangeButtonVisibility ();
- 		}
- 	}
- 
- 	public class EditorPageWidget : ScrolledWindow {
--		private VBox widgets;
--		private VButtonBox buttons;
--		private Widget active_editor;
-+		VBox widgets;
-+		VButtonBox buttons;
-+		Widget active_editor;
-+
-+		List<Editor> editors;
-+		Editor current_editor;
- 
--		private List<Editor> editors;
--		private Editor current_editor;
-+        public PhotoImageView PhotoImageView { get; set;}
-+        public Gtk.Window ParentWindow { get; set; }
- 
- 		// Used to make buttons insensitive when selecting multiple images.
- 		private Dictionary<Editor, Button> editor_buttons;
-@@ -79,6 +92,8 @@
- 				editor.ProcessingStarted += OnProcessingStarted;
- 				editor.ProcessingStep += OnProcessingStep;
- 				editor.ProcessingFinished += OnProcessingFinished;
-+				editor.View = PhotoImageView;
-+				editor.ParentWindow = ParentWindow;
- 				editors.Add (editor);
- 				PackButton (editor);
- 			}
-@@ -87,7 +102,7 @@
- 		private ProgressDialog progress;
- 
- 		private void OnProcessingStarted (string name, int count) {
--			progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, MainWindow.Toplevel.Window);
-+			progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, ParentWindow);
- 		}
- 
- 		private void OnProcessingStep (int done) {
-@@ -172,8 +187,7 @@
- 		private bool SetupEditor (Editor editor) {
- 			EditorState state = editor.CreateState ();
- 
--			PhotoImageView photo_view = MainWindow.Toplevel.PhotoView.View;
--
-+			PhotoImageView photo_view = PhotoImageView;
- 			if (Page.InPhotoView && photo_view != null) {
- 				state.Selection = photo_view.Selection;
- 				state.PhotoImageView = photo_view;
-@@ -197,7 +211,7 @@
- 				string msg = Catalog.GetString ("No selection available");
- 				string desc = Catalog.GetString ("This tool requires an active selection. Please select a region of the photo and try the operation again");
- 
--				HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window,
-+				HigMessageDialog md = new HigMessageDialog (ParentWindow,
- 										DialogFlags.DestroyWithParent,
- 										Gtk.MessageType.Error, ButtonsType.Ok,
- 										msg,
-@@ -218,7 +232,7 @@
- 				string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."),
- 							     e.Message);
- 
--				HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window,
-+				HigMessageDialog md = new HigMessageDialog (ParentWindow,
- 									    DialogFlags.DestroyWithParent,
- 									    Gtk.MessageType.Error, ButtonsType.Ok,
- 									    msg,
-Index: f-spot.git/src/Extensions/SidebarPage.cs
-===================================================================
---- f-spot.git.orig/src/Extensions/SidebarPage.cs	2010-05-19 13:51:16.907958803 +0100
-+++ f-spot.git/src/Extensions/SidebarPage.cs	2010-05-19 13:52:47.296709401 +0100
-@@ -9,6 +9,7 @@
-  * This is free software. See COPYING for details.
-  */
- 
-+using FSpot.Widgets;
- using FSpot.Extensions;
- using FSpot.Utils;
- using Gtk;
-@@ -64,6 +65,9 @@
- 		// Can be overriden to get notified as soon as we're added to a sidebar.
- 		protected virtual void AddedToSidebar () { }
- 
-+        public virtual PhotoImageView PhotoImageView { get; set; }
-+        public virtual Gtk.Window ParentWindow { get; set; }
-+
- //		// Whether this page is currently visible
- //		public bool IsActive {
- //			get { return Sidebar.IsActive (this); }
diff --git a/debian/patches/ubuntu_add_filmstrip_browsing_to_view_mode.patch b/debian/patches/ubuntu_add_filmstrip_browsing_to_view_mode.patch
deleted file mode 100644
index 817a81a..0000000
--- a/debian/patches/ubuntu_add_filmstrip_browsing_to_view_mode.patch
+++ /dev/null
@@ -1,274 +0,0 @@
-Description: Add a filmstrip and previous/next buttons to View mode
- Without this, it's frustrating to switch between images to edit.
-Author: Christopher Halse Rogers <christopher.halse.rogers at canonical.com>
-Forwarded: No
-
-=== modified file 'src/PhotoImageView.cs'
-Index: f-spot.git/src/PhotoImageView.cs
-===================================================================
---- f-spot.git.orig/src/PhotoImageView.cs	2010-05-19 14:28:58.127960001 +0100
-+++ f-spot.git/src/PhotoImageView.cs	2010-05-19 14:28:58.147959007 +0100
-@@ -24,7 +24,7 @@
- 		{
- 		}
- 		
--		public PhotoImageView (IBrowsableCollection query, UndoCache history) : this(query)
-+		public PhotoImageView (BrowsablePointer query, UndoCache history) : this(query)
- 		{
- 			history_cache = history;
- 		}
-Index: f-spot.git/src/SingleView.cs
-===================================================================
---- f-spot.git.orig/src/SingleView.cs	2010-05-19 14:28:58.127960001 +0100
-+++ f-spot.git/src/SingleView.cs	2010-05-19 14:30:47.816709694 +0100
-@@ -21,6 +21,7 @@
- 		[Glade.Widget] Gtk.ScrolledWindow image_scrolled;
- 		[Glade.Widget] Gtk.HPaned info_hpaned;
- 
-+		[Glade.Widget] Gtk.VBox display_vbox;
- 		Gtk.ScrolledWindow directory_scrolled;
- 
- 		[Glade.Widget] Gtk.CheckMenuItem side_pane_item;
-@@ -41,12 +42,17 @@
- 
- 		ToolButton rr_button, rl_button;
- 		ToolButton undo;
-+		
-+		ToolButton prev_image;
-+		ToolButton next_image;
-+		Label count_label;
- 
- 		Sidebar sidebar;
- 
- 		protected Glade.XML xml;
- 		private Gtk.Window window;
- 		PhotoImageView image_view;
-+		Filmstrip filmstrip;
- 		FSpot.Widgets.IconView directory_view;
- 		private Uri uri;
- 		
-@@ -93,7 +99,6 @@
- 			toolbar.Insert (undo, -1);
- 			
- 			toolbar.Insert (new SeparatorToolItem (), -1);
--
- 			
- 			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
- 			fs_button.Clicked += HandleViewFullscreen;
-@@ -104,12 +109,33 @@
- 			ss_button.Clicked += HandleViewSlideshow;
- 			ss_button.SetTooltip (toolTips, Catalog.GetString ("View photos in a slideshow"), null);
- 			toolbar.Insert (ss_button, -1);
-+			
-+			SeparatorToolItem white_space = new SeparatorToolItem ();
-+			white_space.Draw = false;
-+			white_space.Expand = true;
-+			toolbar.Insert (white_space, -1);
-+			
-+			ToolItem label_item = new ToolItem ();
-+			count_label = new Label (String.Empty);
-+			label_item.Child = count_label;
-+			toolbar.Insert (label_item, -1);
-+			
-+			prev_image = new ToolButton (Stock.GoBack);
-+			toolbar.Insert (prev_image, -1);
-+			prev_image.TooltipText = Catalog.GetString ("Previous photo");
-+			prev_image.Clicked += (sender, args) => { image_view.Item.MovePrevious (); };
-+			
-+			next_image = new ToolButton (Stock.GoForward);
-+			toolbar.Insert (next_image, -1);
-+			next_image.TooltipText = Catalog.GetString ("Next photo");
-+			next_image.Clicked += (sender, args) => { image_view.Item.MoveNext (); };
- 
-+			
- 			collection = new UriCollection (uris);
- 			undo_history = new UndoCache ();
- 			undo_history.UndoStateChanged += HandleUndoStateChanged;
- 
--			TargetEntry [] dest_table = {
-+			TargetEntry[] dest_table = {
- 				FSpot.DragDropTargets.UriListEntry,
- 				FSpot.DragDropTargets.PlainTextEntry
- 			};
-@@ -118,12 +144,12 @@
- 			directory_view.Selection.Changed += HandleSelectionChanged;
- 			directory_view.DragDataReceived += HandleDragDataReceived;
- 			Gtk.Drag.DestSet (directory_view, DestDefaults.All, dest_table, 
--					DragAction.Copy | DragAction.Move); 
-+					DragAction.Copy | DragAction.Move);
- 			directory_view.DisplayTags = false;
- 			directory_view.DisplayDates = false;
- 			directory_view.DisplayRatings = false;
- 
--			directory_scrolled = new ScrolledWindow();
-+			directory_scrolled = new ScrolledWindow ();
- 			directory_scrolled.Add (directory_view);
- 
- 			sidebar = new Sidebar ();
-@@ -137,7 +163,8 @@
- 
- 			ThumbnailGenerator.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
- 
--			image_view = new PhotoImageView (collection, undo_history);
-+			BrowsablePointer bp = new BrowsablePointer (collection, -1);
-+			image_view = new PhotoImageView (bp, undo_history);
- 			GtkUtil.ModifyColors (image_view);
- 			GtkUtil.ModifyColors (image_scrolled);
- 			image_view.ZoomChanged += HandleZoomChanged;
-@@ -145,9 +172,19 @@
- 			image_view.ButtonPressEvent += HandleImageViewButtonPressEvent;
- 			image_view.DragDataReceived += HandleDragDataReceived;
- 			Gtk.Drag.DestSet (image_view, DestDefaults.All, dest_table,
--					DragAction.Copy | DragAction.Move); 
-+					DragAction.Copy | DragAction.Move);
- 			image_scrolled.Add (image_view);
- 			
-+			filmstrip = new Filmstrip (bp);
-+			Gdk.Pixbuf bg = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 1, 69);
-+			bg.Fill (0x00000000);
-+			filmstrip.BackgroundTile = bg;
-+			filmstrip.ThumbOffset = 1;
-+			filmstrip.Spacing = 4;
-+			ToggleFilmstrip (true);
-+			filmstrip.Visible = true;
-+			GtkUtil.ModifyColors (filmstrip);
-+			
- 			Window.ShowAll ();
- 
- 			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);	
-@@ -184,6 +221,7 @@
- 			image_view.Item.Collection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
- 
- 			UpdateStatusLabel ();
-+			UpdateToolbar (image_view.Item.Collection);
- 			
- 			if (collection.Count > 0)
- 				directory_view.Selection.Add (0);
-@@ -193,6 +231,28 @@
- 			export.Activated += HandleExportActivated ;
- 		}
- 
-+		void ToggleFilmstrip (bool enabled)
-+		{
-+			Gtk.Widget packed_filmstrip = display_vbox.AllChildren.Cast<Gtk.Widget> ().FirstOrDefault ((widget) => {return widget == filmstrip;});
-+			if (enabled && packed_filmstrip == null) {
-+				// Filmstrip isn't in the vbox, add it
-+				Log.Debug ("Packing filmstrip");
-+				display_vbox.PackStart (filmstrip, false, false, 0);
-+			} else if (!enabled && packed_filmstrip != null) {
-+				// Filmstrip is in the vbox, remove it
-+				display_vbox.Remove (packed_filmstrip);
-+			}
-+		}
-+		
-+		void UpdateToolbar (IBrowsableCollection collection)
-+		{
-+			// Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-+			count_label.Text = String.Format (Catalog.GetString ("{0} of {1}"), 
-+				collection.Count == 0 ? 0 : image_view.Item.Index + 1, collection.Count);
-+			prev_image.Sensitive = collection.Count > 0 && image_view.Item.Index != 0;
-+			next_image.Sensitive = collection.Count > 0 && image_view.Item.Index != image_view.Item.Collection.Count - 1;
-+		}
-+		
- 		void HandleUndoStateChanged (object sender, UndoStateChangedArgs e)
- 		{
- 			if (e.ChangedFor == image_view.Item.Current.DefaultVersionUri) {
-@@ -244,6 +304,7 @@
- 			rotate_left.Sensitive = rotate_right.Sensitive = rr_button.Sensitive = rl_button.Sensitive = collection.Count != 0;
- 
- 			UpdateStatusLabel ();
-+			UpdateToolbar (collection);
- 		}
- 
- 		public bool ShowSidebar {
-@@ -308,6 +369,7 @@
- 				undo.Sensitive = false;
- 			}
- 			UpdateStatusLabel ();
-+			UpdateToolbar (image_view.Item.Collection);
- 		}
- 
- 		void UpdateTitle ()
-@@ -370,8 +432,9 @@
- 	
- 		private void HandleViewFilenames (object sender, System.EventArgs args)
- 		{
--			directory_view.DisplayFilenames = filenames_item.Active; 
-+			directory_view.DisplayFilenames = filenames_item.Active;
- 			UpdateStatusLabel ();
-+			UpdateToolbar (image_view.Item.Collection);
- 		}
- 
- 		private void HandleAbout (object sender, System.EventArgs args)
-@@ -672,6 +735,7 @@
- 		{
- 			if (PresentUnsavedChangesDialog ()) {
- 				SavePreferences ();
-+				filmstrip.Dispose ();
- 				undo_history.Dispose ();
- 				this.Window.Destroy ();
- 			}
-@@ -714,6 +778,7 @@
- 			if (PresentUnsavedChangesDialog ()) {
- 				SavePreferences ();
- 				undo_history.Dispose ();
-+				filmstrip.Dispose ();
- 				this.Window.Destroy ();
- 			}
- 		}
-Index: f-spot.git/src/f-spot.glade
-===================================================================
---- f-spot.git.orig/src/f-spot.glade	2010-05-19 14:28:58.127960001 +0100
-+++ f-spot.git/src/f-spot.glade	2010-05-19 14:28:58.147959007 +0100
-@@ -2699,15 +2699,28 @@
-               </packing>
-             </child>
-             <child>
--              <widget class="GtkScrolledWindow" id="image_scrolled">
-+              <widget class="GtkVBox" id="display_vbox">
-                 <property name="visible">True</property>
--                <property name="can_focus">True</property>
--                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
--                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
--                <property name="shadow_type">GTK_SHADOW_IN</property>
-+                <property name="orientation">vertical</property>
-                 <child>
-                   <placeholder/>
-                 </child>
-+                <child>
-+                  <widget class="GtkScrolledWindow" id="image_scrolled">
-+                    <property name="visible">True</property>
-+                    <property name="can_focus">True</property>
-+                    <property name="hscrollbar_policy">automatic</property>
-+                    <property name="vscrollbar_policy">automatic</property>
-+                    <property name="shadow_type">in</property>
-+                    <child>
-+                      <placeholder/>
-+                    </child>
-+                  </widget>
-+                  <packing>
-+                    <property name="pack_type">end</property>
-+                    <property name="position">0</property>
-+                  </packing>
-+                </child>
-               </widget>
-               <packing>
-                 <property name="resize">True</property>
-Index: f-spot.git/src/Widgets/Filmstrip.cs
-===================================================================
---- f-spot.git.orig/src/Widgets/Filmstrip.cs	2010-05-19 13:49:44.436739359 +0100
-+++ f-spot.git/src/Widgets/Filmstrip.cs	2010-05-19 14:28:58.147959007 +0100
-@@ -587,8 +587,11 @@
- 
- 		protected override bool OnButtonPressEvent (EventButton evnt)
- 		{
--			if (evnt.Button == 3)
--				return DrawOrientationMenu (evnt); 
-+			// We don't handle changing the orientation in View mode at this point
-+			if (MainWindow.Toplevel != null) {
-+				if (evnt.Button == 3)
-+					return DrawOrientationMenu (evnt); 
-+			}
- 
- 			if (evnt.Button != 1 || (
- 				(Orientation == Orientation.Horizontal && (evnt.X > filmstrip_end_pos || evnt.X < filmstrip_start_pos)) || 
diff --git a/debian/patches/ubuntu_add_other_files_in_directory_in_view_mode.patch b/debian/patches/ubuntu_add_other_files_in_directory_in_view_mode.patch
deleted file mode 100644
index 565cd37..0000000
--- a/debian/patches/ubuntu_add_other_files_in_directory_in_view_mode.patch
+++ /dev/null
@@ -1,382 +0,0 @@
-Description: Display all images in directories passed to --view
- When a file is passed to --view, also view all the other images in the same
- directory.
-Author: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-Bug-LP: https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/484887
-Bug: https://bugzilla.gnome.org/show_bug.cgi?id=333189
-
-Index: f-spot.git/src/SingleView.cs
-===================================================================
---- f-spot.git.orig/src/SingleView.cs	2010-05-19 14:28:58.147959007 +0100
-+++ f-spot.git/src/SingleView.cs	2010-05-19 14:28:58.167959093 +0100
-@@ -60,6 +60,8 @@
- 		UndoCache undo_history;
- 		
- 		FullScreenView fsview;
-+		
-+		List<FileSystemWatcher> directory_watchers;
- 
- 		private static Gtk.Tooltips toolTips = new Gtk.Tooltips ();
- 
-@@ -68,28 +70,53 @@
- 			string glade_name = "single_view";
- 			this.uri = uris[0];
- 			
-+			directory_watchers = new List<FileSystemWatcher> ();
-+			// If we are passed the URI to a file we want to
-+			// (a) Display & select that file, and 
-+			// (b) Display the other files in the same directory.
-+			List<Uri> uris_to_display = new List<Uri> ();
-+			foreach (var uri in uris) {
-+				Uri candidate_uri;
-+				if (!Directory.Exists (uri.LocalPath)) {
-+					candidate_uri = uri.GetDirectoryUri ();
-+				} else {
-+					candidate_uri = uri;
-+				}
-+				if (!uris_to_display.Contains (candidate_uri)) {
-+					uris_to_display.Add (candidate_uri);
-+					var directory_watcher = new FileSystemWatcher (candidate_uri.LocalPath);
-+					Log.Debug ("Watching directory {0} for changes.", candidate_uri.LocalPath);
-+					directory_watcher.IncludeSubdirectories = false;
-+					directory_watcher.Changed += HandleFileChangedEvent;
-+					directory_watcher.Created += HandleFileCreatedEvent;
-+					directory_watcher.Deleted += HandleFileDeletedEvent;
-+					directory_watcher.EnableRaisingEvents = true;
-+					directory_watchers.Add (directory_watcher);
-+				}
-+			}
-+			
- 			xml = new Glade.XML (null, "f-spot.glade", glade_name, "f-spot");
- 			xml.Autoconnect (this);
- 			window = (Gtk.Window)xml.GetWidget (glade_name);
--		
-+			
- 			LoadPreference (Preferences.VIEWER_WIDTH);
- 			LoadPreference (Preferences.VIEWER_MAXIMIZED);
--
-+			
- 			Gtk.Toolbar toolbar = new Gtk.Toolbar ();
- 			toolbar_hbox.PackStart (toolbar);
--		
-+			
- 			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), true);
- 			rl_button.Clicked += HandleRotate270Command;
- 			rl_button.SetTooltip (toolTips, Catalog.GetString ("Rotate photo left"), null);
- 			toolbar.Insert (rl_button, -1);
--
-+			
- 			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), true);
- 			rr_button.Clicked += HandleRotate90Command;
- 			rr_button.SetTooltip (toolTips, Catalog.GetString ("Rotate photo right"), null);
- 			toolbar.Insert (rr_button, -1);
--
-+			
- 			toolbar.Insert (new SeparatorToolItem (), -1);
--
-+			
- 			StockItem undo_info = Stock.Lookup (Stock.Undo);
- 			undo = new ToolButton (undo_info.StockId);
- 			undo.Label = undo_info.Label;
-@@ -104,7 +131,7 @@
- 			fs_button.Clicked += HandleViewFullscreen;
- 			fs_button.SetTooltip (toolTips, Catalog.GetString ("View photos fullscreen"), null);
- 			toolbar.Insert (fs_button, -1);
--
-+			
- 			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), true);
- 			ss_button.Clicked += HandleViewSlideshow;
- 			ss_button.SetTooltip (toolTips, Catalog.GetString ("View photos in a slideshow"), null);
-@@ -129,9 +156,10 @@
- 			toolbar.Insert (next_image, -1);
- 			next_image.TooltipText = Catalog.GetString ("Next photo");
- 			next_image.Clicked += (sender, args) => { image_view.Item.MoveNext (); };
--
- 			
--			collection = new UriCollection (uris);
-+			collection = new UriCollection (uris_to_display.ToArray ());
-+			collection.LoadingComplete += HandleCollectionLoadingComplete;
-+			
- 			undo_history = new UndoCache ();
- 			undo_history.UndoStateChanged += HandleUndoStateChanged;
- 
-@@ -187,7 +215,7 @@
- 			
- 			Window.ShowAll ();
- 
--			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);	
-+			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
- 			sidebar.Context = ViewContext.Single;
- 
- 			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
-@@ -223,14 +251,119 @@
- 			UpdateStatusLabel ();
- 			UpdateToolbar (image_view.Item.Collection);
- 			
--			if (collection.Count > 0)
--				directory_view.Selection.Add (0);
-+			if (collection.Count > 0) {
-+				if (File.Exists (uris[0].AbsolutePath)) {
-+					Log.Debug ("File {0} exists, displaying", uris[0].AbsolutePath);
-+					var selected_image = collection.Items.FirstOrDefault ((item) => item.DefaultVersionUri == uris[0]);
-+					if (selected_image != null) {
-+						directory_view.Selection.Add (selected_image);
-+					} else {
-+						Log.Warning ("Unable to open requested file {0}", uris[0].AbsolutePath);
-+					}
-+				} else {
-+					directory_view.Selection.Add (0);
-+				}
-+			}
- 
- 			export.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetMenuItem (this).Submenu;
- 			export.Submenu.ShowAll ();
- 			export.Activated += HandleExportActivated ;
- 		}
- 
-+		void HandleFileCreatedEvent (object sender, FileSystemEventArgs e)
-+		{
-+			Log.Debug ("Trying to add new file {0} to viewer", e.FullPath);
-+			GLib.Timeout.Add (500, () =>
-+			{
-+				if (!File.Exists (e.FullPath)) {
-+					// The file may have been deleted after being created, particularly if it was a temporary file
-+					// for write => rename over save methods.  In this case, we've got nothing to do now.
-+					return false;
-+				}
-+				if ((DateTime.Now - File.GetLastWriteTime (e.FullPath)).TotalMilliseconds < 400) {
-+					Log.Debug ("A process is still writing to {0}.  Waiting another 500ms then trying again", e.FullPath);
-+					return true;
-+				}
-+				collection.Add (new Uri (e.FullPath));
-+				return false;
-+			});
-+		}
-+		
-+		void HandleFileDeletedEvent (object sender, FileSystemEventArgs e)
-+		{
-+			Log.Debug ("File {0} deleted, removing references from viewer", e.FullPath);
-+			Uri deleted_uri = new Uri (e.FullPath);
-+			// File monitor events will come from an arbitrary thread.  Proxy them to the main thread via the main loop to make things easier.
-+			GLib.Timeout.Add(0, () => {
-+				foreach (var deleted_item in collection.Items.Where ((item) => item.DefaultVersionUri == deleted_uri)) {
-+					if (deleted_item != null) {
-+						var current_item = image_view.Item.Current;
-+						if (current_item == deleted_item) {
-+							if (collection.Count == 1) {
-+								// Someone's deleted our only file!  Waaaa!
-+								// The user can still edit this copy, though.
-+								return false;
-+							}
-+							if (image_view.Item.Index < collection.Count - 1) {
-+								// We're not at the last item, so we can move to the next one
-+								current_item = collection[image_view.Item.Index + 1];
-+							} else {
-+								// We are at the last item.  Move to the previous item
-+								current_item = collection[image_view.Item.Index - 1];
-+							}
-+						}
-+						while (undo_history.ContainsUndoInformationFor (deleted_uri)) {
-+							undo_history.PopEdit (deleted_uri);
-+						}
-+						collection.Items = collection.Items.Where ((item) => item != deleted_item).ToArray ();
-+						image_view.Item.MoveFirst ();
-+						image_view.Item.Index = collection.IndexOf (current_item);
-+					}
-+				}
-+				return false;
-+			});
-+		}
-+		
-+		HashSet<string> file_change_processors = new HashSet<string> ();
-+		void HandleFileChangedEvent (object sender, FileSystemEventArgs e)
-+		{
-+			Uri changed_uri = new Uri (e.FullPath);
-+			var changed_item = collection.Items.FirstOrDefault ((item) => item.DefaultVersionUri == changed_uri);
-+			if (changed_item != null) {
-+				if (!file_change_processors.Contains (e.FullPath)) {
-+					Log.Debug ("File {0} changed, triggering update.", e.FullPath);
-+					file_change_processors.Add (e.FullPath);
-+					GLib.Timeout.Add (500, () => {
-+						if ((DateTime.Now - File.GetLastWriteTime (e.FullPath)).TotalMilliseconds < 400) {
-+							Log.Debug ("A process is still writing to {0}.  Waiting 500ms for it to finish", e.FullPath);
-+							return true;
-+						}
-+						collection.MarkChanged (new BrowsableEventArgs (collection.IndexOf (changed_item), new FullInvalidate ()));
-+						file_change_processors.Remove (e.FullPath);
-+						return false;
-+					});
-+				}
-+			}
-+		}
-+		
-+		void HandleCollectionLoadingComplete (object sender, EventArgs e)
-+		{
-+			if (collection.Count > 0) {
-+				if (File.Exists (Uri.UnescapeDataString (uri.AbsolutePath))) {
-+					Log.Debug ("{0} exists, displaying", uri);
-+					var selected_image = collection.Items.FirstOrDefault ((item) => item.DefaultVersionUri == uri);
-+					
-+					if (selected_image != null && directory_view != null) {
-+						directory_view.Selection.Clear ();
-+						directory_view.Selection.Add (selected_image);
-+					}
-+				} else {
-+					Log.Warning ("Unable to open requested file {0}", uri);
-+				}
-+			}
-+			collection.LoadingComplete -= HandleCollectionLoadingComplete;
-+		}
-+
- 		void ToggleFilmstrip (bool enabled)
- 		{
- 			Gtk.Widget packed_filmstrip = display_vbox.AllChildren.Cast<Gtk.Widget> ().FirstOrDefault ((widget) => {return widget == filmstrip;});
-Index: f-spot.git/src/UriCollection.cs
-===================================================================
---- f-spot.git.orig/src/UriCollection.cs	2010-05-19 13:49:44.436739359 +0100
-+++ f-spot.git/src/UriCollection.cs	2010-05-19 14:28:58.167959093 +0100
-@@ -21,25 +21,31 @@
- 
- namespace FSpot {
- 	public class UriCollection : PhotoList {
--		public UriCollection () : base (new IBrowsableItem [0])
-+		public UriCollection () : base(new IBrowsableItem[0])
- 		{
-+			loading_count = 0;
- 		}
- 
--		public UriCollection (System.IO.FileInfo [] files) : this ()
-+		public UriCollection (System.IO.FileInfo[] files) : this()
- 		{
-+			loading_count = 0;
-+			LoaderStarting ();
- 			LoadItems (files);
- 		}
- 
--		public UriCollection (Uri [] uri) : this ()
-+		public UriCollection (Uri[] uri) : this()
- 		{
-+			loading_count = 0;
- 			LoadItems (uri);
- 		}
- 
- 		public void Add (Uri uri)
- 		{
-+			LoaderStarting ();
- 			if (FSpot.ImageFile.HasLoader (uri)) {
- 				//Console.WriteLine ("using image loader {0}", uri.ToString ());
- 				Add (new FileBrowsableItem (uri));
-+				LoaderComplete ();
- 			} else {
- 				GLib.FileInfo info = FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", FileQueryInfoFlags.None, null);
- 
-@@ -57,13 +63,37 @@
- 			}
- 		}
- 
--		public void LoadItems (Uri [] uris)
-+		public void LoadItems (Uri[] uris)
- 		{
-+			// Prime the count with 1, so that if everything is synchronous the LoadingCount-- at the end
-+			// will trigger LoadingComplete.
-+			LoaderStarting ();
- 			foreach (Uri uri in uris) {
- 				Add (uri);
- 			}
-+			LoaderComplete ();
- 		}
- 
-+		public event EventHandler LoadingComplete;
-+		
-+		int loading_count;
-+		void LoaderStarting ()
-+		{
-+			System.Threading.Interlocked.Increment (ref loading_count);
-+		}
-+		
-+		void LoaderComplete ()
-+		{
-+			if (System.Threading.Interlocked.Decrement (ref loading_count) == 0) {
-+				FSpot.Utils.Log.Debug ("Final loader finished, triggering LoadingComplete signal");
-+				var handler = LoadingComplete;
-+				if (handler != null) {
-+					handler (this, EventArgs.Empty);
-+				}
-+			}
-+		}
-+		
-+		
- 		private class RssLoader
- 		{
- 			public RssLoader (UriCollection collection, System.Uri uri)
-@@ -74,15 +104,15 @@
- 				ns.AddNamespace ("media", "http://search.yahoo.com/mrss/");
- 				ns.AddNamespace ("pheed", "http://www.pheed.com/pheed/");
- 				ns.AddNamespace ("apple", "http://www.apple.com/ilife/wallpapers");
--
-+				
- 				ArrayList items = new ArrayList ();
- 				XmlNodeList list = doc.SelectNodes ("/rss/channel/item/media:content", ns);
- 				foreach (XmlNode item in list) {
--					Uri image_uri = new Uri (item.Attributes ["url"].Value);
-+					Uri image_uri = new Uri (item.Attributes["url"].Value);
- 					System.Console.WriteLine ("flickr uri = {0}", image_uri.ToString ());
- 					items.Add (new FileBrowsableItem (image_uri));
- 				}
--
-+				
- 				if (list.Count < 1) {
- 					list = doc.SelectNodes ("/rss/channel/item/pheed:imgsrc", ns);
- 					foreach (XmlNode item in list) {
-@@ -91,7 +121,7 @@
- 						items.Add (new FileBrowsableItem (image_uri));
- 					}
- 				}
--
-+				
- 				if (list.Count < 1) {
- 					list = doc.SelectNodes ("/rss/channel/item/apple:image", ns);
- 					foreach (XmlNode item in list) {
-@@ -100,7 +130,8 @@
- 						items.Add (new FileBrowsableItem (image_uri));
- 					}
- 				}
--				collection.Add (items.ToArray (typeof (FileBrowsableItem)) as FileBrowsableItem []);
-+				collection.Add (items.ToArray (typeof(FileBrowsableItem)) as FileBrowsableItem[]);
-+				collection.LoaderComplete ();
- 			}
- 		}
- 
-@@ -120,7 +151,6 @@
- 							     500,
- 							     null,
- 							     InfoLoaded);
--										    
- 			}
- 
- 			void InfoLoaded (GLib.Object o, GLib.AsyncResult res)
-@@ -132,13 +162,14 @@
- 					if (FSpot.ImageFile.HasLoader (i))
- 						items.Add (new FileBrowsableItem (i));
- 				}
--				Gtk.Application.Invoke (items, System.EventArgs.Empty, delegate (object sender, EventArgs args) {
-+				Gtk.Application.Invoke (items, System.EventArgs.Empty, delegate(object sender, EventArgs args) {
- 					collection.Add (items.ToArray ());
-+					collection.LoaderComplete ();
- 				});
- 			}
- 		}
- 
--		protected void LoadItems (System.IO.FileInfo [] files)
-+		protected void LoadItems (System.IO.FileInfo[] files)
- 		{
- 			List<IBrowsableItem> items = new List<IBrowsableItem> ();
- 			foreach (var f in files) {
-@@ -149,6 +180,7 @@
- 			}
- 
- 			list = items;
-+			LoaderComplete ();
- 			this.Reload ();
- 		}
- 	}
diff --git a/debian/patches/ubuntu_add_save_and_undo.patch b/debian/patches/ubuntu_add_save_and_undo.patch
deleted file mode 100644
index 9421c94..0000000
--- a/debian/patches/ubuntu_add_save_and_undo.patch
+++ /dev/null
@@ -1,921 +0,0 @@
-Description: Add Save & Undo to editing in View mode
-Author: Christopher Halse Rogers <christopher.halse.rogers at canonical.com>
-Forwarded: No
-
-=== modified file 'src/Editors/Editor.cs'
-Index: f-spot.git/src/Editors/Editor.cs
-===================================================================
---- f-spot.git.orig/src/Editors/Editor.cs	2010-05-19 14:28:58.077959584 +0100
-+++ f-spot.git/src/Editors/Editor.cs	2010-05-19 14:28:58.117959302 +0100
-@@ -18,7 +18,6 @@
- using Mono.Unix;
- 
- using System;
--using System.IO;
- 
- namespace FSpot.Editors {
- 	[ExtensionNode ("Editor")]
-@@ -50,6 +49,9 @@
- 		public bool InBrowseMode {
- 			get { return PhotoImageView == null; }
- 		}
-+		
-+		// Undo history
-+		public UndoCache History;
- 	}
- 
- 	// This is the base class from which all editors inherit.
-@@ -100,11 +102,31 @@
- 		}
- 
- 
--		protected void LoadPhoto (IBrowsableItem photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
--			// FIXME: We might get this value from the PhotoImageView.
--			using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
--				photo_pixbuf = img.Load ();
--				photo_profile = img.GetProfile ();
-+		protected void LoadPhoto (IBrowsableItem photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile)
-+		{
-+			if (State.History != null) {
-+				if (State.History.ContainsImageFor (photo.DefaultVersionUri)) {
-+					photo_pixbuf = State.History.Pixbuf (photo.DefaultVersionUri);
-+					photo_profile = State.History.Profile (photo.DefaultVersionUri);
-+					return;
-+				}
-+				// FIXME: We might get this value from the PhotoImageView.
-+				PixbufOrientation orientation;
-+				using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
-+					photo_pixbuf = img.Load ();
-+					orientation = img.Orientation;
-+					var temp = FSpot.Utils.PixbufUtils.TransformOrientation (photo_pixbuf, FSpot.Utils.PixbufUtils.ReverseTransformation (orientation));
-+					photo_pixbuf.Dispose ();
-+					photo_pixbuf = temp;
-+					photo_profile = img.GetProfile ();
-+				}
-+				State.History.InitialiseImage (photo.DefaultVersionUri, photo_pixbuf, orientation, photo_profile);
-+			} else {
-+				// FIXME: We might get this value from the PhotoImageView.
-+				using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
-+					photo_pixbuf = img.Load ();
-+					photo_profile = img.GetProfile ();
-+				}
- 			}
- 		}
- 
-@@ -141,7 +163,8 @@
- 			}
- 		}
- 
--		private void TryApply () {
-+		private void TryApply ()
-+		{
- 			if (NeedsSelection && !State.HasSelection) {
- 				throw new Exception ("Cannot apply without selection!");
- 			}
-@@ -152,9 +175,27 @@
- 				Cms.Profile input_profile;
- 				LoadPhoto (item, out input, out input_profile);
- 
-+				if (State.History != null) {
-+					// If we're loading from history, then we've got the pixbuf in the original orientation
-+					// and are transforming it on display.  We need to transform it before editing.
-+					var transformed_input = Utils.PixbufUtils.TransformOrientation (input, State.History.Orientation (item.DefaultVersionUri));
-+					input.Dispose ();
-+					input = transformed_input;
-+				}
-+				
- 				Pixbuf edited = Process (input, input_profile);
- 				input.Dispose ();
--
-+				
-+				
-+				if (State.History != null) {
-+					// And now we need to reverse the transformation, so that the pixbuf remains in the
-+					// original orientation.
-+					var transformed_edited = Utils.PixbufUtils.TransformOrientation (edited, 
-+						Utils.PixbufUtils.ReverseTransformation (State.History.Orientation (item.DefaultVersionUri)));
-+					edited.Dispose ();
-+					edited = transformed_edited;
-+				}
-+				
- 				if (item is Photo) {
- 					var photo = item as Photo;
- 					bool create_version = photo.DefaultVersion.IsProtected;
-@@ -162,13 +203,10 @@
- 					photo.Changes.DataChanged = true;
- 					App.Instance.Database.Photos.Commit (photo);
- 				} else {
--					var pb = edited.Copy ();
--					using (ImageFile img = ImageFile.Create (item.DefaultVersionUri)) {
--						using (Stream stream = System.IO.File.OpenWrite (item.DefaultVersionUri.LocalPath)) {
--							img.Save (edited, stream);
--						}
--					}
--					State.PhotoImageView.Pixbuf = pb; 
-+					State.History.PushEdit (item.DefaultVersionUri, edited);
-+					Pixbuf prev = State.PhotoImageView.Pixbuf;
-+					State.PhotoImageView.Pixbuf = edited;
-+					prev.Dispose ();
- 				}
- 
- 				done++;
-Index: f-spot.git/src/Makefile.am
-===================================================================
---- f-spot.git.orig/src/Makefile.am	2010-05-19 14:27:22.516709468 +0100
-+++ f-spot.git/src/Makefile.am	2010-05-19 14:28:58.127960001 +0100
-@@ -59,6 +59,7 @@
- 	$(srcdir)/Utils/Log.cs			\
- 	$(srcdir)/Utils/PixbufOrientation.cs	\
- 	$(srcdir)/Utils/PixbufUtils.cs		\
-+	$(srcdir)/Utils/UndoCache.cs		\
- 	$(srcdir)/Utils/Unix.cs			\
- 	$(srcdir)/Utils/UriExtensions.cs			\
- 	$(srcdir)/Utils/UriUtils.cs
-@@ -343,6 +344,7 @@
- 	-pkg:gnome-sharp-2.0			\
- 	-r:Mono.Posix				\
- 	-r:Mono.Cairo				\
-+    -r:Cms.dll                  \
- 	$(GCONF_PKG)
- 
- JOBSCHEDULER_ASSEMBLIES =			\
-@@ -502,7 +504,7 @@
- 
- FSpot.Utils.dll.mdb: FSpot.Utils.dll
- 
--FSpot.Utils.dll: $(UTILS_CSFILES)
-+FSpot.Utils.dll: $(UTILS_CSFILES) Cms.dll
- 	@echo -e "\n*** Compiling $@"
- 	$(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(UTILS_CSFILES) $(UTILS_ASSEMBLIES)
- 
-Index: f-spot.git/src/PhotoImageView.cs
-===================================================================
---- f-spot.git.orig/src/PhotoImageView.cs	2010-05-19 14:27:22.536710442 +0100
-+++ f-spot.git/src/PhotoImageView.cs	2010-05-19 14:30:51.287958810 +0100
-@@ -20,9 +20,14 @@
- namespace FSpot.Widgets {
- 	public class PhotoImageView : ImageView {
- #region public API
--		public PhotoImageView (IBrowsableCollection query) : this (new BrowsablePointer (query, -1))
-+		public PhotoImageView (IBrowsableCollection query) : this(new BrowsablePointer (query, -1))
- 		{
- 		}
-+		
-+		public PhotoImageView (IBrowsableCollection query, UndoCache history) : this(query)
-+		{
-+			history_cache = history;
-+		}
- 
- 		public PhotoImageView (BrowsablePointer item) : base ()
- 		{
-@@ -166,8 +171,25 @@
- #region loader		
- 		uint timer;
- 		IImageLoader loader;
-+		UndoCache history_cache;
- 		void Load (Uri uri)
- 		{
-+			if (history_cache != null && history_cache.ContainsImageFor (uri)) {
-+				// We can get the pixmap faster out of the cache.  Just load up the orientation from the file
-+				using (ImageFile img = ImageFile.Create (uri)) {
-+					PixbufOrientation = Accelerometer.GetViewOrientation (img.Orientation);
-+				}
-+				Pixbuf prev = Pixbuf;
-+				Pixbuf = history_cache.Pixbuf (uri);
-+				if (prev != null) {
-+					prev.Dispose ();
-+				}
-+				ZoomFit ();
-+				Gdk.Rectangle area = ImageCoordsToWindow (new Gdk.Rectangle (0, 0, Pixbuf.Width, Pixbuf.Height));
-+				QueueDrawArea (area.X, area.Y, area.Width, area.Height);
-+				return;
-+			}
-+			
- 			timer = Log.DebugTimerStart ();
- 			if (loader != null)
- 				loader.Dispose ();
-Index: f-spot.git/src/SingleView.cs
-===================================================================
---- f-spot.git.orig/src/SingleView.cs	2010-05-19 14:28:58.077959584 +0100
-+++ f-spot.git/src/SingleView.cs	2010-05-19 14:30:51.267959290 +0100
-@@ -1,6 +1,8 @@
- using Gtk;
- using Gdk;
- using System;
-+using System.IO;
-+using System.Linq;
- using System.Collections.Generic;
- 
- using Mono.Addins;
-@@ -38,6 +40,7 @@
- 		[Glade.Widget] ImageMenuItem rotate_right;
- 
- 		ToolButton rr_button, rl_button;
-+		ToolButton undo;
- 
- 		Sidebar sidebar;
- 
-@@ -48,19 +51,20 @@
- 		private Uri uri;
- 		
- 		UriCollection collection;
-+		UndoCache undo_history;
- 		
- 		FullScreenView fsview;
- 
- 		private static Gtk.Tooltips toolTips = new Gtk.Tooltips ();
- 
--		public SingleView (Uri [] uris) 
-+		public SingleView (Uri[] uris)
- 		{
- 			string glade_name = "single_view";
--			this.uri = uris [0];
-+			this.uri = uris[0];
- 			
- 			xml = new Glade.XML (null, "f-spot.glade", glade_name, "f-spot");
- 			xml.Autoconnect (this);
--			window = (Gtk.Window) xml.GetWidget (glade_name);
-+			window = (Gtk.Window)xml.GetWidget (glade_name);
- 		
- 			LoadPreference (Preferences.VIEWER_WIDTH);
- 			LoadPreference (Preferences.VIEWER_MAXIMIZED);
-@@ -80,6 +84,17 @@
- 
- 			toolbar.Insert (new SeparatorToolItem (), -1);
- 
-+			StockItem undo_info = Stock.Lookup (Stock.Undo);
-+			undo = new ToolButton (undo_info.StockId);
-+			undo.Label = undo_info.Label;
-+			undo.IsImportant = true;
-+			undo.UseUnderline = true;
-+			undo.Clicked += HandleUndoClicked;
-+			toolbar.Insert (undo, -1);
-+			
-+			toolbar.Insert (new SeparatorToolItem (), -1);
-+
-+			
- 			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
- 			fs_button.Clicked += HandleViewFullscreen;
- 			fs_button.SetTooltip (toolTips, Catalog.GetString ("View photos fullscreen"), null);
-@@ -91,6 +106,8 @@
- 			toolbar.Insert (ss_button, -1);
- 
- 			collection = new UriCollection (uris);
-+			undo_history = new UndoCache ();
-+			undo_history.UndoStateChanged += HandleUndoStateChanged;
- 
- 			TargetEntry [] dest_table = {
- 				FSpot.DragDropTargets.UriListEntry,
-@@ -120,7 +137,7 @@
- 
- 			ThumbnailGenerator.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
- 
--			image_view = new PhotoImageView (collection);
-+			image_view = new PhotoImageView (collection, undo_history);
- 			GtkUtil.ModifyColors (image_view);
- 			GtkUtil.ModifyColors (image_scrolled);
- 			image_view.ZoomChanged += HandleZoomChanged;
-@@ -176,6 +193,23 @@
- 			export.Activated += HandleExportActivated ;
- 		}
- 
-+		void HandleUndoStateChanged (object sender, UndoStateChangedArgs e)
-+		{
-+			if (e.ChangedFor == image_view.Item.Current.DefaultVersionUri) {
-+				undo.Sensitive = undo_history.ContainsUndoInformationFor (e.ChangedFor);
-+				UpdateTitle ();
-+			}
-+		}
-+
-+		void HandleUndoClicked (object sender, EventArgs e)
-+		{
-+			undo_history.PopEdit (image_view.Item.Current.DefaultVersionUri);
-+			Pixbuf prev = image_view.Pixbuf;
-+			image_view.Pixbuf = undo_history.Pixbuf (image_view.Item.Current.DefaultVersionUri);
-+			prev.Dispose ();
-+			undo.Sensitive = undo_history.ContainsUndoInformationFor (image_view.Item.Current.DefaultVersionUri);
-+		}
-+
- 		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
- 			// FIXME: No sidebar page removal yet!
- 			if (args.Change == ExtensionChange.Add) {
-@@ -184,6 +218,11 @@
- 				page.PhotoImageView = image_view;
- 				page.ParentWindow = window;
- 				sidebar.AppendPage (page); 
-+				if (page is EditorPage) {
-+					// Pass undo history to Editors
-+					((EditorPage)page).History = undo_history;
-+					sidebar.SwitchTo (page.Label);
-+				}
- 			}
- 		}
- 
-@@ -255,23 +294,41 @@
- 				collection.MarkChanged (image_view.Item.Index, FullInvalidate.Instance);
- 		}		
- 
--		private void HandleSelectionChanged (FSpot.IBrowsableCollection selection) 
-+		private void HandleSelectionChanged (FSpot.IBrowsableCollection selection)
- 		{
- 			
- 			if (selection.Count > 0) {
- 				image_view.Item.Index = ((FSpot.Widgets.IconView.SelectionCollection)selection).Ids[0];
--
-+				
- 				zoom_scale.Value = image_view.NormalizedZoom;
- 			}
-+			if (selection.Count == 1) {
-+				undo.Sensitive = undo_history.ContainsUndoInformationFor (image_view.Item.Current.DefaultVersionUri);
-+			} else {
-+				undo.Sensitive = false;
-+			}
- 			UpdateStatusLabel ();
- 		}
- 
-+		void UpdateTitle ()
-+		{
-+			if (image_view.Item.IsValid) {
-+				Window.Title = String.Format ("{0}{1} - F-Spot View",
-+					image_view.Item.Current.Name,
-+					undo_history.ContainsUndoInformationFor (image_view.Item.Current.DefaultVersionUri) ? "*" : "");
-+			} else {
-+				Window.Title = "F-Spot View";
-+			}
-+		}
-+
- 		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs old)
- 		{
- 			BrowsablePointer pointer = sender as BrowsablePointer;
- 			if (pointer == null)
- 				return;
- 
-+			UpdateTitle ();
-+
- 			directory_view.FocusCell = pointer.Index;
- 			directory_view.Selection.Clear ();
- 			if (collection.Count > 0) {
-@@ -343,6 +400,115 @@
- 			Open (FileChooserAction.Open);
- 		}
- 
-+		void SafeSaveFile (Uri original, Uri saveTo, Pixbuf image, PixbufOrientation orientation)
-+		{
-+			//Get file permissions... (mkstemp does not keep permissions or ownership)
-+			Mono.Unix.Native.Stat stat;
-+			int stat_err = Mono.Unix.Native.Syscall.stat (original.LocalPath, out stat);
-+			
-+			string temp_path = saveTo.LocalPath;
-+			using (ImageFile img = ImageFile.Create (original)) {
-+				using (Stream stream = FSpot.Utils.Unix.MakeSafeTemp (ref temp_path)) {
-+					img.Save (image, stream);
-+				}
-+				if (img is JpegFile) {
-+					((JpegFile)img).SetOrientation (orientation);
-+					Log.Debug ("Saving orientation {0}", orientation);
-+					((JpegFile)img).SaveMetaData (temp_path);
-+				}
-+			}
-+			File.SetAttributes (temp_path, File.GetAttributes (original.LocalPath));
-+			
-+			if (FSpot.Utils.Unix.Rename (temp_path, saveTo.LocalPath) < 0) {
-+				System.IO.File.Delete (temp_path);
-+				throw new System.Exception (System.String.Format ("Unable to rename {0} to {1}",
-+						temp_path, saveTo.LocalPath));
-+			}
-+			
-+			//Set file permissions and gid...
-+			if (stat_err == 0) {
-+				try {
-+					Mono.Unix.Native.Syscall.chmod (saveTo.LocalPath, stat.st_mode |
-+						Mono.Unix.Native.FilePermissions.S_IRUSR | 
-+						Mono.Unix.Native.FilePermissions.S_IWUSR);
-+					Mono.Unix.Native.Syscall.chown (saveTo.LocalPath, Mono.Unix.Native.Syscall.getuid (), stat.st_gid);
-+				} catch (Exception) {
-+				}
-+			}
-+		}
-+		
-+		private void HandleSave (object sender, System.EventArgs args)
-+		{
-+			IBrowsableItem current_item = image_view.Item.Current;
-+			if (!undo_history.ChangedUris ().Contains (current_item.DefaultVersionUri)) {
-+				Log.Debug ("Not saving unchanged file: {0}", current_item.DefaultVersionUri.AbsoluteUri);
-+				return;
-+			}
-+			Pixbuf current_image = undo_history.Pixbuf (current_item.DefaultVersionUri);
-+			PixbufOrientation current_orientation = undo_history.Orientation (current_item.DefaultVersionUri);
-+			
-+			SafeSaveFile (current_item.DefaultVersionUri, current_item.DefaultVersionUri, current_image, current_orientation);
-+			
-+			Log.Debug ("Saved changes to {0}", current_item.DefaultVersionUri.LocalPath);
-+			undo_history.MarkImageSaved (current_item.DefaultVersionUri);
-+			directory_view.UpdateThumbnail (collection.IndexOf (current_item));
-+		}
-+		
-+		private void HandleSaveAs (object sender, System.EventArgs args)
-+		{
-+			IBrowsableItem current_item = image_view.Item.Current;
-+			Pixbuf current_image;
-+			PixbufOrientation current_orientation;
-+			if (!undo_history.ContainsImageFor (current_item.DefaultVersionUri)) {
-+				//TODO: This should probably load from the image file, instead.
-+				//TODO: Or possibly just do a filesystem copy?
-+				current_image = image_view.Pixbuf;
-+				current_orientation = image_view.PixbufOrientation;
-+			} else {
-+				current_image = undo_history.Pixbuf (current_item.DefaultVersionUri);
-+				current_orientation = undo_history.Orientation (current_item.DefaultVersionUri);
-+			}
-+			FileChooserDialog chooser = new FileChooserDialog (Catalog.GetString ("Save As..."),
-+				window,
-+				FileChooserAction.Save);
-+			
-+			chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
-+			chooser.AddButton (Stock.Save, ResponseType.Ok);
-+			
-+			// TODO: In an ideal world, this would be using GIO and we wouldn't have the "local only" constraint.
-+			chooser.LocalOnly = true;
-+			chooser.DoOverwriteConfirmation = true;
-+			
-+			chooser.SelectUri (current_item.DefaultVersionUri.AbsoluteUri);
-+			int response = chooser.Run ();
-+			
-+			if ((ResponseType)response == ResponseType.Ok) {
-+				Uri saveTo = new Uri (chooser.Uri);
-+				SafeSaveFile (current_item.DefaultVersionUri, saveTo, current_image, current_orientation);
-+				
-+				Log.Debug ("Saved changes to {0} to {1}", current_item.DefaultVersionUri.AbsoluteUri, chooser.Filename);
-+				
-+				if (current_item.DefaultVersionUri != saveTo) {
-+					// We're saving to a new file name
-+					if (undo_history.ContainsUndoInformationFor (current_item.DefaultVersionUri)) {
-+						undo_history.Clear (current_item.DefaultVersionUri);
-+					}
-+					
-+					Uri new_item_uri = new Uri (chooser.Uri);
-+					collection.Add (new_item_uri);
-+					// We know that chooser.Uri points to a local file, so collection.Add will be synchronous
-+					var new_item = collection.Items.FirstOrDefault ((item) => item.DefaultVersionUri == new_item_uri);
-+					directory_view.Selection.Clear ();
-+					directory_view.Selection.Add (new_item);
-+				} else if (undo_history.ContainsUndoInformationFor (saveTo)) {
-+					// We've decided to save to the original file.
-+					undo_history.MarkImageSaved (saveTo);
-+				}
-+			}
-+			
-+			chooser.Destroy ();
-+		}
-+		
- 		private void Open (FileChooserAction action)
- 		{
- 			string title = Catalog.GetString ("Open");
-@@ -437,10 +603,78 @@
- 			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
- 		}
- 
-+
-+		bool PresentUnsavedChangesDialog ()
-+		{
-+			var changed_uris = undo_history.ChangedUris ().ToList ();
-+			if (changed_uris.Count == 0) {
-+				// We've got no changed files, so we can just allow the quit to proceed.
-+				return true;
-+			}
-+
-+			System.Text.StringBuilder changed_filenames = new System.Text.StringBuilder (GLib.Markup.EscapeText (Uri.UnescapeDataString (changed_uris[0].GetFilename ())));
-+			for (int i = 1; i < changed_uris.Count; ++i) {
-+				changed_filenames.Append ("\n");
-+				changed_filenames.Append (GLib.Markup.EscapeText (Uri.UnescapeDataString (changed_uris[i].GetFilename ())));
-+			}
-+			string message;
-+			message = Catalog.GetPluralString ("Save changes to image: {0} before closing?", "Save changes to images:\n{0}\nbefore closing?", changed_uris.Count);
-+			var save_dialogue = new HigMessageDialog (Window,
-+				DialogFlags.Modal,
-+				MessageType.Warning,
-+				ButtonsType.None,
-+				String.Format (message, changed_filenames),
-+				Catalog.GetPluralString ("If you don't save, the changes you have made to this image will be permanently lost",
-+					"If you don't save, the changes you have made to these images will be permanently lost",
-+					changed_uris.Count));
-+			
-+			Gtk.Button button = new Gtk.Button ();
-+			button.Label = Catalog.GetString ("Discard changes");
-+			button.CanDefault = true;
-+			button.Show ();
-+			save_dialogue.AddActionWidget (button, ResponseType.Close);
-+			
-+			button = new Gtk.Button ();
-+			button.Label = Catalog.GetString ("Continue editing");
-+			button.CanDefault = true;
-+			button.Show ();
-+			save_dialogue.AddActionWidget (button, ResponseType.Cancel);
-+			
-+			button = new Gtk.Button ();
-+			button.Label = Catalog.GetPluralString ("Save", "Save all", changed_uris.Count);
-+			button.CanDefault = true;
-+			button.Show ();
-+			save_dialogue.AddActionWidget (button, ResponseType.Accept);
-+			save_dialogue.Default = button;
-+			save_dialogue.DefaultResponse = ResponseType.Accept;
-+			button.GrabDefault ();
-+			
-+			ResponseType response = (ResponseType)save_dialogue.Run ();
-+			save_dialogue.Destroy ();
-+			switch (response) {
-+			case ResponseType.Close:
-+				return true;
-+			case ResponseType.Cancel:
-+				return false;
-+			case ResponseType.Accept:
-+				foreach (var uri in changed_uris) {
-+					Pixbuf current_image = undo_history.Pixbuf (uri);
-+					PixbufOrientation current_orientation = undo_history.Orientation (uri);
-+					SafeSaveFile (uri, uri, current_image, current_orientation);
-+					Log.Debug ("Saved changes to {0}", uri.AbsoluteUri);
-+				}
-+				break;
-+			}
-+			return true;
-+		}
-+		
- 		void HandleDeleteEvent (object sender, DeleteEventArgs args)
- 		{
--			SavePreferences ();
--			this.Window.Destroy ();
-+			if (PresentUnsavedChangesDialog ()) {
-+				SavePreferences ();
-+				undo_history.Dispose ();
-+				this.Window.Destroy ();
-+			}
- 			args.RetVal = true;
- 		}
- 
-@@ -477,8 +711,11 @@
- 
- 		private void HandleFileClose (object sender, System.EventArgs args)
- 		{
--			SavePreferences ();
--			this.Window.Destroy ();
-+			if (PresentUnsavedChangesDialog ()) {
-+				SavePreferences ();
-+				undo_history.Dispose ();
-+				this.Window.Destroy ();
-+			}
- 		}
- 
- 		private void SavePreferences  ()
-Index: f-spot.git/src/Utils/UndoCache.cs
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ f-spot.git/src/Utils/UndoCache.cs	2010-05-19 14:28:58.127960001 +0100
-@@ -0,0 +1,244 @@
-+// 
-+//  UndoCache.cs
-+//  
-+//  Author:
-+//       Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-+// 
-+//  Copyright © 2010 Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-+// 
-+//  This program is free software; you can redistribute it and/or modify
-+//  it under the terms of the GNU General Public License as published by
-+//  the Free Software Foundation; either version 2 of the License, or
-+//  (at your option) any later version.
-+// 
-+//  This program is distributed in the hope that it will be useful,
-+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+//  GNU General Public License for more details.
-+//  
-+//  You should have received a copy of the GNU General Public License
-+//  along with this program; if not, write to the Free Software
-+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+// 
-+
-+using System;
-+using System.Collections.Generic;
-+using System.Threading;
-+using System.IO;
-+
-+using Gdk;
-+
-+using Cms;
-+
-+namespace FSpot.Utils
-+{
-+	public class UndoStateChangedArgs : EventArgs
-+	{
-+		public UndoStateChangedArgs (Uri changedFor)
-+		{
-+			ChangedFor = changedFor;
-+		}
-+		
-+		public Uri ChangedFor { get; private set; }
-+	}
-+	
-+	public class UndoCache : IDisposable
-+	{
-+		class CachedPixbuf : IDisposable
-+		{
-+			Pixbuf mem_cache;
-+			FileStream file_cache;
-+			ManualResetEvent write_done;
-+			
-+			public CachedPixbuf (Gdk.Pixbuf image)
-+			{
-+				// TODO: We can be smarter than always disc caching or always mem caching
-+				// Making the cache memory-backed with eviction to disc should be investigated.
-+				mem_cache = image.Copy ();
-+				
-+				write_done = new ManualResetEvent (false);
-+				ThreadPool.QueueUserWorkItem ((state) => {
-+					uint id = Log.DebugTimerStart ("Saving undo information");
-+					// PNG is lossless, and can handle all the bitdepths we're likely to encounter
-+					byte[] buffer = mem_cache.SaveToBuffer ("png");
-+					
-+					file_cache = File.Create (Path.GetTempFileName (), 4096, FileOptions.DeleteOnClose);
-+					
-+					file_cache.Write (buffer, 0, buffer.Length);
-+					Log.DebugTimerPrint (id, "Saving undo information took: {0}");
-+					lock (mem_cache) {
-+						mem_cache.Dispose ();
-+					}
-+					write_done.Set ();
-+				});
-+			}
-+			
-+			public Pixbuf GetPixbuf ()
-+			{
-+				lock (mem_cache) {
-+					if (mem_cache.Handle != IntPtr.Zero) {
-+						// Pixbuf.Dispose sets the handle to IntPtr.Zero
-+						return mem_cache.Copy ();
-+					}
-+				}
-+				write_done.WaitOne ();
-+				file_cache.Seek (0, SeekOrigin.Begin);
-+				return new Pixbuf (file_cache);
-+			}
-+			
-+			public void Dispose ()
-+			{
-+				if (write_done.WaitOne (0)) {
-+					//We've written to disc, which means we've already disposed mem_cache.
-+					file_cache.Dispose ();
-+				} else {
-+					//We're still writing out to disc.  Wait for for it to finish, then dispose.
-+					//Do this on the threadpool, as it might take some time.
-+					//TODO: Use a cancellable write method.
-+					ThreadPool.QueueUserWorkItem ((state) => {
-+						write_done.WaitOne ();
-+						file_cache.Dispose ();
-+					});
-+				}
-+			}
-+		}
-+		
-+		class PixbufProfilePair
-+		{
-+			public PixbufProfilePair ()
-+			{
-+				pixbuf_history = new Stack<CachedPixbuf> ();
-+			}
-+			public Stack<CachedPixbuf> pixbuf_history;
-+			public Profile profile;
-+			public PixbufOrientation orientation;
-+			public bool on_disc;
-+		}
-+	
-+		Dictionary<Uri, UndoCache.PixbufProfilePair> history;
-+		public UndoCache ()
-+		{
-+			history = new Dictionary<Uri, UndoCache.PixbufProfilePair> ();
-+		}
-+		
-+		public void InitialiseImage (Uri photoUri, Pixbuf baseImage, PixbufOrientation orientation, Profile profile)
-+		{
-+			if (history.ContainsKey (photoUri)) {
-+				throw new ApplicationException (String.Format ("Attempted to initialise the undo cache twice for image {0}", photoUri.AbsolutePath));
-+			}
-+			history[photoUri] = new PixbufProfilePair ();
-+			history[photoUri].profile = profile;
-+			history[photoUri].orientation = orientation;
-+			history[photoUri].pixbuf_history.Push (new CachedPixbuf (baseImage));
-+			history[photoUri].on_disc = true;
-+		}
-+		
-+		public void MarkImageSaved (Uri photoUri)
-+		{
-+			history[photoUri].on_disc = true;
-+			
-+			var handler = UndoStateChanged;
-+			if (handler != null) {
-+				handler (this, new UndoStateChangedArgs (photoUri));
-+			}
-+		}
-+		
-+		public void PushEdit (Uri photoUri, Pixbuf image)
-+		{
-+			if (!history.ContainsKey (photoUri)) {
-+				throw new ApplicationException ("Must initialise the undo cache before adding a new edit");
-+			}
-+			history[photoUri].pixbuf_history.Push (new CachedPixbuf (image));
-+			history[photoUri].on_disc = false;
-+
-+			var handler = UndoStateChanged;
-+			if (handler != null) {
-+				handler (this, new UndoStateChangedArgs (photoUri));
-+			}
-+		}
-+		
-+		public bool ContainsImageFor (Uri uri)
-+		{
-+			return history.ContainsKey (uri);
-+		}
-+		
-+		public bool ContainsUndoInformationFor (Uri uri)
-+		{
-+			return ContainsImageFor (uri) && history[uri].pixbuf_history.Count > 1;
-+		}
-+		
-+		public IEnumerable<Uri> ChangedUris ()
-+		{
-+			foreach (var uri in history.Keys) {
-+				if (ContainsUndoInformationFor (uri) && !history[uri].on_disc) {
-+					yield return uri;
-+				}
-+			}
-+			yield break;
-+		}
-+		
-+		public Profile Profile (Uri uri)
-+		{
-+			if (!history.ContainsKey (uri)) {
-+				throw new KeyNotFoundException (String.Format ("Undo cache has not yet been initialised for {0}", uri.AbsolutePath));
-+			}
-+			return history[uri].profile;
-+		}
-+		
-+		public Pixbuf Pixbuf (Uri uri)
-+		{
-+			if (!history.ContainsKey (uri)) {
-+				throw new KeyNotFoundException (String.Format ("Undo cache has not yet been initialised for {0}", uri.AbsolutePath));
-+			}
-+			return history[uri].pixbuf_history.Peek ().GetPixbuf ();
-+		}
-+		
-+		public PixbufOrientation Orientation (Uri uri)
-+		{
-+			if (!history.ContainsKey (uri)) {
-+				throw new KeyNotFoundException (String.Format ("Undo cache has not yet been initialised for {0}", uri.AbsolutePath));
-+			}
-+			return history[uri].orientation;
-+		}
-+		
-+		public void PopEdit (Uri photoUri)
-+		{
-+			if (!ContainsUndoInformationFor (photoUri)) {
-+				throw new KeyNotFoundException (String.Format ("No Undo info for image {0}!", photoUri.AbsolutePath));
-+			}
-+			history[photoUri].pixbuf_history.Pop ().Dispose ();
-+			history[photoUri].on_disc = false;
-+			
-+			var handler = UndoStateChanged;
-+			if (handler != null) {
-+				handler (this, new UndoStateChangedArgs (photoUri));
-+			}
-+		}
-+		
-+		public void Clear (Uri uri)
-+		{
-+			if (history.ContainsKey (uri)) {
-+				foreach (var pixbuf in history[uri].pixbuf_history) {
-+					pixbuf.Dispose ();
-+				}
-+				history.Remove (uri);
-+				
-+				var handler = UndoStateChanged;
-+				if (handler != null) {
-+					handler (this, new UndoStateChangedArgs (uri));
-+				}
-+			}
-+		}
-+		
-+		public void Dispose ()
-+		{
-+			foreach (var pair in history.Values) {
-+				foreach (var pixbuf in pair.pixbuf_history) {
-+					pixbuf.Dispose ();
-+				}
-+			}
-+		}
-+		
-+		public event EventHandler<UndoStateChangedArgs> UndoStateChanged;
-+	}
-+}
-Index: f-spot.git/src/Widgets/EditorPage.cs
-===================================================================
---- f-spot.git.orig/src/Widgets/EditorPage.cs	2010-05-19 14:28:58.077959584 +0100
-+++ f-spot.git/src/Widgets/EditorPage.cs	2010-05-19 14:30:15.747958503 +0100
-@@ -42,7 +42,12 @@
- 
- 		public override Gtk.Window ParentWindow {
- 			get { return EditorPageWidget.ParentWindow; }
--			set { EditorPageWidget.ParentWindow = value ;}
-+			set { EditorPageWidget.ParentWindow = value; }
-+		}
-+		
-+		public UndoCache History {
-+			get { return EditorPageWidget.History; }
-+			set { EditorPageWidget.History = value; } 
- 		}
- 
- 		protected override void AddedToSidebar () {
-@@ -52,7 +57,7 @@
- 
- 		private void HandleContextChanged (object sender, EventArgs args)
- 		{
--            InPhotoView = (Sidebar.Context == ViewContext.Edit) || (Sidebar.Context == ViewContext.Single);
-+            InPhotoView = ((Sidebar as Sidebar).Context == ViewContext.Edit) || ((Sidebar as Sidebar).Context == ViewContext.Single);
- 			EditorPageWidget.ChangeButtonVisibility ();
- 		}
- 	}
-@@ -65,7 +70,8 @@
- 		List<Editor> editors;
- 		Editor current_editor;
- 
--        public PhotoImageView PhotoImageView { get; set;}
-+        public PhotoImageView PhotoImageView { get; set; }
-+        public UndoCache History { get; set; }
-         public Gtk.Window ParentWindow { get; set; }
- 
- 		// Used to make buttons insensitive when selecting multiple images.
-@@ -184,7 +190,8 @@
- 				Apply (editor); // Instant apply
- 		}
- 
--		private bool SetupEditor (Editor editor) {
-+		private bool SetupEditor (Editor editor)
-+		{
- 			EditorState state = editor.CreateState ();
- 
- 			PhotoImageView photo_view = PhotoImageView;
-@@ -199,6 +206,8 @@
- 				return false;
- 			state.Items = (Page.Sidebar as Sidebar).Selection.Items;
- 
-+            state.History = History;
-+
- 			editor.Initialize (state);
- 			return true;
- 		}
-Index: f-spot.git/src/f-spot.glade
-===================================================================
---- f-spot.git.orig/src/f-spot.glade	2010-05-19 14:28:57.987959630 +0100
-+++ f-spot.git/src/f-spot.glade	2010-05-19 14:30:51.307958832 +0100
-@@ -2440,6 +2440,31 @@
-                       </widget>
-                     </child>
-                     <child>
-+                      <widget class="GtkImageMenuItem" id="save">
-+                        <property name="label">gtk-save</property>
-+                        <property name="visible">True</property>
-+                        <property name="use_underline">True</property>
-+                        <property name="use_stock">True</property>
-+                        <signal name="activate" handler="HandleSave"/>
-+                        <accelerator key="N" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-+                      </widget>
-+                    </child>
-+                    <child>
-+                      <widget class="GtkImageMenuItem" id="save_as">
-+                        <property name="label">gtk-save-as</property>
-+                        <property name="visible">True</property>
-+                        <property name="use_underline">True</property>
-+                        <property name="use_stock">True</property>
-+                        <signal name="activate" handler="HandleSaveAs"/>
-+                        <accelerator key="N" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-+                      </widget>
-+                    </child>
-+                    <child>
-+                      <widget class="GtkSeparatorMenuItem" id="separator1">
-+                        <property name="visible">True</property>
-+                      </widget>
-+                    </child>
-+                    <child>
-                       <widget class="GtkMenuItem" id="export">
-                         <property name="visible">True</property>
-                         <property name="label" translatable="yes">_Export</property>
-Index: f-spot.git/src/UI.Dialog/HigMessageDialog.cs
-===================================================================
---- f-spot.git.orig/src/UI.Dialog/HigMessageDialog.cs	2010-05-19 14:27:22.496709303 +0100
-+++ f-spot.git/src/UI.Dialog/HigMessageDialog.cs	2010-05-19 14:28:58.127960001 +0100
-@@ -77,6 +77,7 @@
- 			label.Justify = Gtk.Justification.Left;
- 			label.LineWrap = true;
- 			label.SetAlignment (0.0f, 0.5f);
-+			label.UseUnderline = false;
- 			label.Show ();
- 			label_vbox.PackStart (label, false, false, 0);
- 	
diff --git a/debian/patches/ubuntu_clear_selection_on_crop.patch b/debian/patches/ubuntu_clear_selection_on_crop.patch
deleted file mode 100644
index 0549cda..0000000
--- a/debian/patches/ubuntu_clear_selection_on_crop.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Description: Clear the selection after crop
-Author: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-Bug-LP: https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/535186
-Forwarded: No
-
-------------------------------------------------------------
-revno: 99
-committer: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-branch nick: edit-fixes
-timestamp: Thu 2010-03-11 15:08:26 +1100
-message:
-  Clear selection after crop
-modified:
-  src/Editors/CropEditor.cs
-diff:
-=== modified file 'src/Editors/CropEditor.cs'
-Index: f-spot-0.6.1.5/src/Editors/CropEditor.cs
-===================================================================
---- f-spot-0.6.1.5.orig/src/Editors/CropEditor.cs	2010-03-18 10:17:40.334269406 +1100
-+++ f-spot-0.6.1.5/src/Editors/CropEditor.cs	2010-03-18 10:24:25.564260496 +1100
-@@ -178,7 +178,8 @@
- 						 selection.Width, selection.Height);
- 
- 			input.CopyArea (selection.X, selection.Y,
--					selection.Width, selection.Height, edited, 0, 0);
-+				selection.Width, selection.Height, edited, 0, 0);
-+			State.PhotoImageView.Selection = Rectangle.Zero;
- 			return edited;
- 		}
- 	}
diff --git a/debian/patches/ubuntu_fix_disposed_pixbuf_errors_in_adjustment.patch b/debian/patches/ubuntu_fix_disposed_pixbuf_errors_in_adjustment.patch
deleted file mode 100644
index 0445826..0000000
--- a/debian/patches/ubuntu_fix_disposed_pixbuf_errors_in_adjustment.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Description: Fix disposed pixmap bug in Adjust Colours tool
- The code paths in Adjustment.Adjust () for the alpha- and non- alpha channel
- cases have an important difference - the alpha channel codepath modifies
- Input and returns it, the non-alpha channel path returns a modified copy of 
- Input.
- .
- In the alpha case, returning Input eventually results in the preview pixmap
- being disposed, causing debug spew and (in View mode) the window to display
- garbage.
-Author: Christopher Halse Rogers <christopher.halse.rogers at canonical.com>
-Bug: https://bugzilla.gnome.org/show_bug.cgi?id=611773
-
-=== modified file 'src/ColorAdjustment/Adjustment.cs'
---- a/src/ColorAdjustment/Adjustment.cs	2008-10-06 23:11:41 +0000
-+++ b/src/ColorAdjustment/Adjustment.cs	2010-03-04 04:24:09 +0000
-@@ -64,16 +64,17 @@
- 			Cms.Profile [] list = GenerateAdjustments ().ToArray ();
- 			
- 			if (Input.HasAlpha) {
-+				Gdk.Pixbuf input_copy = (Gdk.Pixbuf)Input.Clone ();
- 				Pixbuf alpha = PixbufUtils.Flatten (Input);
- 				Transform transform = new Transform (list,
- 								     PixbufUtils.PixbufCmsFormat (alpha),
- 								     PixbufUtils.PixbufCmsFormat (final),
- 								     intent, 0x0000);
- 				PixbufUtils.ColorAdjust (alpha, final, transform);
--				PixbufUtils.ReplaceColor (final, Input);
-+				PixbufUtils.ReplaceColor (final, input_copy);
- 				alpha.Dispose ();
- 				final.Dispose ();
--				final = Input;
-+				final = input_copy;
- 			} else {
- 				Cms.Transform transform = new Cms.Transform (list,
- 									     PixbufUtils.PixbufCmsFormat (Input),
-
diff --git a/debian/patches/ubuntu_handle_broken_uris_to_view_mode.patch b/debian/patches/ubuntu_handle_broken_uris_to_view_mode.patch
deleted file mode 100644
index b0edfe5..0000000
--- a/debian/patches/ubuntu_handle_broken_uris_to_view_mode.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-------------------------------------------------------------
-revno: 109
-committer: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
-branch nick: edit-fixes
-timestamp: Thu 2010-03-18 10:13:37 +1100
-message:
-  Catch exceptions in creating the URI list
-modified:
-  src/Util.cs
-diff:
-=== modified file 'src/Util.cs'
-Index: f-spot-0.6.1.5/src/Util.cs
-===================================================================
---- f-spot-0.6.1.5.orig/src/Util.cs	2010-04-01 13:13:49.305538478 +1100
-+++ f-spot-0.6.1.5/src/Util.cs	2010-04-01 13:13:55.915539697 +1100
-@@ -84,12 +84,16 @@
- 		{
- 			Uri uri;
- 			
--			if (File.Exists (unknown) || Directory.Exists (unknown))
--				uri = UriUtils.PathToFileUri (unknown);
--			else 
--				uri = new Uri (unknown);
--			
--			Add (uri);
-+			try {
-+				if (File.Exists (unknown) || Directory.Exists (unknown))
-+					uri = UriUtils.PathToFileUri (unknown);
-+				else
-+					uri = new Uri (unknown);
-+				
-+				Add (uri);
-+			} catch (Exception e) {
-+				Log.Exception ("Error handling file or directory to view", e);
-+			}
- 		}
- 	
- 		public UriList (string data) 
diff --git a/debian/patches/ubuntu_importer-targetdir-selector.patch b/debian/patches/ubuntu_importer-targetdir-selector.patch
deleted file mode 100644
index 4cfe695..0000000
--- a/debian/patches/ubuntu_importer-targetdir-selector.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-#! /bin/sh /usr/share/dpatch/dpatch-run
-## ubuntu_importer-targetdir-selector.dpatch by Martin Pitt <martin.pitt at ubuntu.com>
-##
-## DP: Add a target directory selector to the camera import dialog, so that
-## DP: people can continue to use their customized directory layout.
-## DP: LP: #182858, http://bugzilla.gnome.org/show_bug.cgi?id=511569
-
- at DPATCH@
-Index: f-spot.git/src/CameraFileSelectionDialog.cs
-===================================================================
---- f-spot.git.orig/src/CameraFileSelectionDialog.cs	2009-10-29 14:18:29.198756433 +0000
-+++ f-spot.git/src/CameraFileSelectionDialog.cs	2009-10-29 14:19:07.933765187 +0000
-@@ -33,6 +33,7 @@
- 		[Widget] Gtk.OptionMenu tag_option_menu;
- 		[Widget] Gtk.CheckButton attach_check;
- 		[Widget] Gtk.CheckButton duplicate_check;
-+		[Widget] Gtk.FileChooserButton dest_dir_chooser;
- 
- 		GPhotoCamera camera;
- 		ListStore preview_list_store;
-@@ -90,6 +91,9 @@
- 			CreateTagMenu ();
- 			attach_check.Toggled += HandleTagToggled;
- 			HandleTagToggled (null, null);
-+		
-+                        if (Directory.Exists(FSpot.Global.PhotoDirectory))	
-+			    dest_dir_chooser.SetCurrentFolder(FSpot.Global.PhotoDirectory);
- 			
- 			GetPreviews ();
- 		}
-@@ -276,7 +280,11 @@
- 
- 				return new SaveResult (path, true);
- 			} else {
--				string dest = FileImportBackend.ChooseLocation (path);
-+				string dest;
-+				if (dest_dir_chooser.Filename == FSpot.Global.PhotoDirectory)
-+					dest = FileImportBackend.ChooseLocation (path);
-+				else
-+					dest = Path.Combine (dest_dir_chooser.Filename, camfile.FileName.ToLower ());
- 				System.IO.File.Move (path, dest);
- 
- 				return new SaveResult (dest, false);
-Index: f-spot.git/src/f-spot.glade
-===================================================================
---- f-spot.git.orig/src/f-spot.glade	2009-10-29 14:18:29.214766595 +0000
-+++ f-spot.git/src/f-spot.glade	2009-10-29 14:19:07.933765187 +0000
-@@ -668,10 +668,44 @@
-               </widget>
-               <packing>
-                 <property name="expand">False</property>
-+                <property name="fill">False</property>
-                 <property name="position">2</property>
-               </packing>
-             </child>
-             <child>
-+              <widget class="GtkHBox" id="hbox7">
-+                <property name="visible">True</property>
-+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-+                <child>
-+                  <widget class="GtkLabel" id="label6">
-+                    <property name="visible">True</property>
-+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-+                    <property name="label" translatable="yes">Target location:	</property>
-+                  </widget>
-+                  <packing>
-+                    <property name="expand">False</property>
-+                    <property name="fill">False</property>
-+                  </packing>
-+                </child>
-+                <child>
-+                  <widget class="GtkFileChooserButton" id="dest_dir_chooser">
-+                    <property name="visible">True</property>
-+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-+                    <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
-+                    <property name="title" translatable="yes">Choose destination directory</property>
-+                  </widget>
-+                  <packing>
-+                    <property name="position">1</property>
-+                  </packing>
-+                </child>
-+              </widget>
-+              <packing>
-+                <property name="expand">False</property>
-+                <property name="fill">False</property>
-+                <property name="position">3</property>
-+              </packing>
-+            </child>
-+            <child>
-               <widget class="GtkCheckButton" id="duplicate_check">
-                 <property name="visible">True</property>
-                 <property name="can_focus">True</property>
diff --git a/debian/patches/ubuntu_only_update_timestamp_of_unprotected_versions.patch b/debian/patches/ubuntu_only_update_timestamp_of_unprotected_versions.patch
deleted file mode 100644
index 4acdfb4..0000000
--- a/debian/patches/ubuntu_only_update_timestamp_of_unprotected_versions.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: f-spot.git/src/Jobs/SyncMetadataJob.cs
-===================================================================
---- f-spot.git.orig/src/Jobs/SyncMetadataJob.cs	2010-05-18 17:30:51.000000000 +0100
-+++ f-spot.git/src/Jobs/SyncMetadataJob.cs	2010-05-19 12:07:32.506709827 +0100
-@@ -53,7 +53,11 @@
- 					FSpot.JpegFile jimg = img as FSpot.JpegFile;
- 				
- 					jimg.SetDescription (photo.Description);
--					jimg.SetDateTimeOriginal (photo.Time);
-+					if (!photo.DefaultVersion.IsProtected) {
-+						// If the version is protected we should be able to assume that the data hasn't changed.
-+						// Thus, the DateTime shouldn't change, either.
-+						jimg.SetDateTimeOriginal (photo.Time);
-+					}
- 					jimg.SetXmp (UpdateXmp (photo, jimg.Header.GetXmp ()));
- 	
- 					jimg.SaveMetaData (path);
diff --git a/debian/patches/ubuntu_slider_animation_tweaking.patch b/debian/patches/ubuntu_slider_animation_tweaking.patch
deleted file mode 100644
index a8ef22b..0000000
--- a/debian/patches/ubuntu_slider_animation_tweaking.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-# Description: tweak the slider animation value
-# Ubuntu: https://bugs.launchpad.net/hundredpapercuts/+bug/513004
-# Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=608443
-From 77800058c950021f2c26bd07a1aef149fb42d753 Mon Sep 17 00:00:00 2001
-From: Alex Launi <alex at jolicloud.org>
-Date: Sat, 20 Feb 2010 23:48:51 -0500
-Subject: [PATCH] Decreases the animation time for the filmstrip slider from 4 seconds to 1.5
-
----
- src/Widgets/Filmstrip.cs |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/src/Widgets/Filmstrip.cs b/src/Widgets/Filmstrip.cs
-index fbd6745..d6a47bd 100644
---- a/src/Widgets/Filmstrip.cs
-+++ b/src/Widgets/Filmstrip.cs
-@@ -308,7 +308,7 @@ namespace FSpot.Widgets
- 			thumb_cache = new DisposableCache<Uri, Pixbuf> (30);
- 			ThumbnailGenerator.Default.OnPixbufLoaded += HandlePixbufLoaded;
- 
--			animation = new DoubleAnimation (0, 0, TimeSpan.FromSeconds (4), SetPositionCore, new CubicEase (EasingMode.EaseOut));
-+			animation = new DoubleAnimation (0, 0, TimeSpan.FromSeconds (1.5), SetPositionCore, new CubicEase (EasingMode.EaseOut));
- 		}
- 	
- 		int min_length = 400;
--- 
-1.6.3.3
-

-- 
f-spot



More information about the Pkg-cli-apps-commits mailing list