diff -r -u -up evolution-2.26.1.orig/composer/e-composer-private.c evolution-2.26.1/composer/e-composer-private.c
--- evolution-2.26.1.orig/composer/e-composer-private.c	2009-04-13 06:57:58.000000000 +0200
+++ evolution-2.26.1/composer/e-composer-private.c	2009-05-12 00:02:11.377522700 +0200
@@ -18,6 +18,9 @@
 #include "e-composer-private.h"
 #include "e-util/e-util-private.h"
 
+#include <libgnomeui/libgnomeui.h>
+
+
 static void
 composer_setup_charset_menu (EMsgComposer *composer)
 {
@@ -76,6 +79,80 @@ composer_setup_recent_menu (EMsgComposer
 	gtk_ui_manager_ensure_update (manager);
 }
 
+static gboolean 
+image_gallery_loading_func(gpointer data)
+{
+	GtkIconView* icon_view = GTK_ICON_VIEW(data);
+	GError *gerror = 0;
+	GtkListStore* list_store = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
+	GtkTreeIter iter;
+
+	const char* images_folder;
+	if(g_getenv("EVOLUTION_GALLERY_PATH")) {
+		images_folder = g_getenv("EVOLUTION_GALLERY_PATH");
+	} else {
+		images_folder = "~/Pictures";
+	}
+
+	GDir* dir = g_dir_open(images_folder, 0, NULL);
+	if (dir) {
+		GnomeThumbnailFactory* thumb_fact = gnome_thumbnail_factory_new(GNOME_THUMBNAIL_SIZE_NORMAL);
+		const gchar* filename = 0;
+		while ((filename = g_dir_read_name(dir))) {
+			char* name = g_strconcat(images_folder, filename, NULL);
+			GFile* file = g_file_new_for_path(name);
+			if (file!=NULL) {
+				char* uri = g_file_get_uri(file);
+				GFileInfo* file_info = g_file_query_info(file, 
+					G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE","G_FILE_ATTRIBUTE_TIME_MODIFIED, 
+					G_FILE_QUERY_INFO_NONE, 
+					NULL, 
+					&gerror);
+
+				if (file_info!=NULL) {
+					const char* mime_type = g_file_info_get_attribute_string(file_info, 
+						G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE);
+					time_t mtime = g_file_info_get_attribute_uint64(file_info, 
+						G_FILE_ATTRIBUTE_TIME_MODIFIED);
+	 
+					if (gnome_thumbnail_factory_can_thumbnail(thumb_fact, uri, mime_type, mtime)) {
+						char* existing_thumb = gnome_thumbnail_factory_lookup (thumb_fact, uri, mtime);
+						GdkPixbuf* pixbuf;
+
+						if (existing_thumb==NULL) {
+							pixbuf = gnome_thumbnail_factory_generate_thumbnail(thumb_fact, uri, mime_type);
+							if (pixbuf) {
+								gnome_thumbnail_factory_save_thumbnail(thumb_fact, pixbuf, uri, mtime);
+							} else {
+								gnome_thumbnail_factory_create_failed_thumbnail(thumb_fact, uri, mtime);
+							}
+						} else {
+							pixbuf = gdk_pixbuf_new_from_file(existing_thumb, &gerror);
+							g_free(existing_thumb);
+						}
+
+
+						if (pixbuf) {
+							gtk_list_store_append (list_store, &iter);
+							gtk_list_store_set(list_store, &iter, 0, pixbuf, 1, uri, -1);
+						}
+					}
+					g_object_unref(file_info);
+				}
+				g_free(uri);				
+				g_object_unref(file);
+			}
+			g_free(name);
+		}
+
+		g_dir_close(dir);
+	}
+
+	gtk_icon_view_set_model(icon_view, GTK_TREE_MODEL (list_store));
+	g_object_unref (icon_view);
+	return FALSE;
+}
+
 void
 e_composer_private_init (EMsgComposer *composer)
 {
@@ -145,7 +222,6 @@ e_composer_private_init (EMsgComposer *c
 
 	/* Construct attachment widgets.
 	 * XXX Move this stuff into a new custom widget. */
-
 	widget = gtk_expander_new (NULL);
 	gtk_expander_set_expanded (GTK_EXPANDER (widget), FALSE);
 	gtk_container_set_border_width (GTK_CONTAINER (widget), 6);
@@ -197,6 +273,50 @@ e_composer_private_init (EMsgComposer *c
 	priv->attachment_expander_num = g_object_ref (widget);
 	gtk_widget_show (widget);
 
+	/* gallery widget */
+	widget = gtk_expander_new_with_mnemonic (_("Show _Gallery Bar"));
+	gtk_expander_set_expanded (GTK_EXPANDER (widget), FALSE);
+	gtk_container_set_border_width (GTK_CONTAINER (widget), 6);
+	gtk_box_pack_start (GTK_BOX (editor->vbox), widget, FALSE, FALSE, 0);
+	gtk_box_reorder_child (GTK_BOX (editor->vbox), widget, 3);
+	priv->gallery_expander = g_object_ref (widget);
+	gtk_widget_show (widget);
+	expander = widget;
+
+	widget = gtk_scrolled_window_new (0, 0);
+	gtk_scrolled_window_set_policy (
+		GTK_SCROLLED_WINDOW (widget),
+		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type (
+		GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN);
+	gtk_widget_set_size_request (widget, -1, 150);
+	priv->gallery_scrolled_window = g_object_ref (widget);
+	gtk_widget_show (widget);
+	gtk_container_add (GTK_CONTAINER (expander), widget);
+	container = widget;
+
+	widget = gtk_icon_view_new ();
+	// gtk_icon_view_set_item_width (GTK_ICON_VIEW(widget), 128);
+	gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW(widget), 0);
+	gtk_icon_view_set_text_column(GTK_ICON_VIEW(widget), -1);
+	gtk_container_add (GTK_CONTAINER (container), widget);
+	priv->gallery_icon_view = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	/* drag'n'drop setup */
+	GtkTargetEntry target_list[] = { { "text/uri-list",     0, 0 }};
+	guint n_targets = G_N_ELEMENTS (target_list);
+	gtk_icon_view_enable_model_drag_source(GTK_ICON_VIEW(widget), 
+		GDK_BUTTON1_MASK,
+		target_list,
+		n_targets,
+		GDK_ACTION_COPY
+		);
+
+	/* thumbnail loading */
+	g_object_ref (widget);
+	g_idle_add(image_gallery_loading_func, widget);
+
 	composer_setup_recent_menu (composer);
 }
 
diff -r -u -up evolution-2.26.1.orig/composer/e-composer-private.h evolution-2.26.1/composer/e-composer-private.h
--- evolution-2.26.1.orig/composer/e-composer-private.h	2009-04-13 06:57:58.000000000 +0200
+++ evolution-2.26.1/composer/e-composer-private.h	2009-05-11 23:44:15.238100231 +0200
@@ -109,6 +109,10 @@ struct _EMsgComposerPrivate {
 	GtkWidget *attachment_expander_icon;
 	GtkWidget *attachment_expander_num;
 
+	GtkWidget *gallery_expander;
+	GtkWidget *gallery_scrolled_window;
+	GtkWidget *gallery_icon_view;
+
 	GtkWidget *address_dialog;
 
 	GHashTable *inline_images;
diff -r -u -up evolution-2.26.1.orig/composer/e-msg-composer.c evolution-2.26.1/composer/e-msg-composer.c
--- evolution-2.26.1.orig/composer/e-msg-composer.c	2009-04-13 06:57:58.000000000 +0200
+++ evolution-2.26.1/composer/e-msg-composer.c	2009-05-11 23:49:03.840396751 +0200
@@ -1576,6 +1576,22 @@ attachment_expander_notify_cb (GtkExpand
 }
 
 static void
+gallery_expander_notify_cb (GtkExpander *expander,
+                               GParamSpec *pspec,
+                               EMsgComposer *composer)
+{
+	const gchar *text;
+
+	/* Update the expander label */
+	if (gtk_expander_get_expanded (expander))
+		text = _("Hide _Gallery Bar");
+	else
+		text = _("Show _Gallery Bar");
+
+	gtk_expander_set_label (expander, text);
+}
+
+static void
 msg_composer_subject_changed_cb (EMsgComposer *composer)
 {
 	EComposerHeaderTable *table;
@@ -2429,6 +2445,34 @@ msg_composer_drag_data_received (GtkWidg
 }
 
 static void
+msg_composer_gallery_drag_data_get
+(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data,
+        guint target_type, guint time, gpointer user_data)
+{
+	GtkTreePath* path;
+	GtkCellRenderer* cell;
+	GtkTreeModel* list_store;
+	GtkTreeIter iter;
+	char *str_data;
+
+	if (!gtk_icon_view_get_cursor(GTK_ICON_VIEW(widget), &path, &cell)) {
+		return;
+	}
+	list_store = gtk_icon_view_get_model(GTK_ICON_VIEW(widget));
+	gtk_tree_model_get_iter (list_store, &iter, path);
+	gtk_tree_model_get(list_store, &iter, 1, &str_data, -1);
+	gtk_tree_path_free (path);
+
+	/* only supports "text/uri-list" */
+	gtk_selection_data_set(selection_data,
+		                selection_data-> target,
+		                8,
+		                (guchar*) str_data,
+		                strlen (str_data));
+	g_free (str_data);
+}
+
+static void
 msg_composer_cut_clipboard (GtkhtmlEditor *editor)
 {
 	EMsgComposer *composer;
@@ -2845,6 +2889,9 @@ msg_composer_init (EMsgComposer *compose
 		html, "drag-data-received",
 		G_CALLBACK (msg_composer_drag_data_received), NULL);
 
+        g_signal_connect (composer->priv->gallery_icon_view, "drag-data-get",
+                G_CALLBACK (msg_composer_gallery_drag_data_get), NULL);
+
 	/* Configure Headers */
 
 	e_composer_header_table_set_account_list (
@@ -2901,6 +2948,11 @@ msg_composer_init (EMsgComposer *compose
 		composer->priv->attachment_expander, "notify::expanded",
 		G_CALLBACK (attachment_expander_notify_cb), composer);
 
+	/* Gallery Bar */
+	g_signal_connect_after (
+		composer->priv->gallery_expander, "notify::expanded",
+		G_CALLBACK (gallery_expander_notify_cb), composer);
+
 	e_composer_autosave_register (composer);
 
 	/* Initialization may have tripped the "changed" state. */
diff -r -u -up evolution-2.26.1.orig/po/en_GB.po evolution-2.26.1/po/en_GB.po
--- evolution-2.26.1.orig/po/en_GB.po	2009-04-13 06:57:52.000000000 +0200
+++ evolution-2.26.1/po/en_GB.po	2009-05-11 23:21:14.043042121 +0200
@@ -10992,6 +10992,10 @@ msgstr "Click here to select folders to 
 msgid "Show _Attachment Bar"
 msgstr "Show _Attachment Bar"
 
+#: ../composer/e-composer-private.c:315 ../composer/e-msg-composer.c:1589
+msgid "Show _Gallery Bar"
+msgstr "Show _Gallery Bar"
+
 #: ../composer/e-msg-composer.c:866
 msgid ""
 "Cannot sign outgoing message: No signing certificate set for this account"
@@ -11018,6 +11022,10 @@ msgstr[1] "Attachments"
 msgid "Hide _Attachment Bar"
 msgstr "Hide _Attachment Bar"
 
+#: ../composer/e-msg-composer.c:1587
+msgid "Hide _Gallery Bar"
+msgstr "Hide _Gallery Bar"
+
 #: ../composer/e-msg-composer.c:1588 ../composer/e-msg-composer.c:2813
 msgid "Compose Message"
 msgstr "Compose Message"
