File giver-change-photo.patch of Package giver

diff -up giver-0.1.8/src/PreferencesDialog.cs.photoButtonFix giver-0.1.8/src/PreferencesDialog.cs
--- giver-0.1.8/src/PreferencesDialog.cs.photoButtonFix	2008-12-03 13:07:25.000000000 -0500
+++ giver-0.1.8/src/PreferencesDialog.cs	2008-12-03 13:07:29.000000000 -0500
@@ -45,6 +45,7 @@ namespace Giver
 		private Button 				photoButton;
 		private Entry				webEntry;
 		private Entry				gravatarEntry;
+		string					localImagePath;
 
 		public PreferencesDialog() : base ()
 		{
@@ -139,7 +140,13 @@ namespace Giver
 			table.Attach(localButton, 0, 1, 1, 2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
 			vbox = new VBox();
 			vbox.Show();
-			localImage = new Image(Utilities.GetIcon("stock_person", 48));
+			if (File.Exists(Giver.Application.Preferences.PhotoLocation)) {
+				Logger.Debug("setting image to what we chose");
+				localImage = new Image(Giver.Application.Preferences.PhotoLocation);
+			} else {
+				Logger.Debug("setting image to stock_person");
+				localImage = new Image(Utilities.GetIcon("stock_person", 48));
+			}
 			localImage.Show();
 			vbox.PackStart(localImage, false, false, 0);
 			label = new Label("File");
@@ -147,6 +154,7 @@ namespace Giver
 			vbox.PackStart(label, false, false, 0);
 			table.Attach(vbox, 1, 2, 1 ,2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
 			photoButton = new Button("Change Photo");
+			photoButton.Clicked += PhotoButtonClick;
 			photoButton.Show();
 			table.Attach(photoButton, 2,3,1,2, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Shrink, 0, 0);
 
@@ -206,6 +214,24 @@ namespace Giver
 			DeleteEvent += WindowDeleted;
 		}
 
+		private void PhotoButtonClick (object o, EventArgs args)
+		{
+			FileChooserDialog fc = new FileChooserDialog(Catalog.GetString("Image File"), this, FileChooserAction.Open);
+			fc.AddButton(Stock.Cancel, ResponseType.Cancel);
+			fc.AddButton(Stock.Open, ResponseType.Ok);
+			fc.Filter = new FileFilter();
+			fc.Filter.AddPattern ("*.gif");
+			fc.Filter.AddPattern ("*.jpg");
+			fc.Filter.AddPattern ("*.png");
+			fc.SelectMultiple = false;
+			fc.DefaultResponse = ResponseType.Ok;
+			if (fc.Run() == (int)ResponseType.Ok) {
+				localImagePath = fc.Filename;
+				Giver.Application.Preferences.PhotoLocation = localImagePath;
+			}
+			fc.Destroy();
+		}
+
 		///<summary>
 		///	WindowDeleted
 		/// Cleans up the conversation object with the ConversationManager
@@ -228,6 +254,7 @@ namespace Giver
 			if(Giver.Application.Preferences.PhotoType.CompareTo(Giver.Preferences.Local) == 0) {
 				localButton.Active = true;
 				photoButton.Sensitive = true;
+				localImagePath = Giver.Application.Preferences.PhotoLocation;
 /*
 				Logger.Debug("photo type is local");
 			   (Glade["local_radiobutton"] as RadioButton).Active = true;
@@ -274,6 +301,8 @@ namespace Giver
 			localButton.Toggled += delegate {
 				if(localButton.Active)
 				{
+					Application.Preferences.PhotoType = Preferences.Local;
+					Application.Preferences.PhotoLocation = localImagePath;
 					photoButton.Sensitive = true;
 					webEntry.Sensitive = false;
 					gravatarEntry.Sensitive = false;