[evolution] Give all preview panes a search bar.



commit 39ee1b7890e06779b47f0fc11925d12caa206c39
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Jan 17 17:47:08 2010 -0500

    Give all preview panes a search bar.
    
    Use Shift+Ctrl+F as the accelerator for consistency with the mailer.

 mail/Makefile.am                                   |    4 -
 mail/e-mail-browser.c                              |   30 +--
 mail/e-mail-search-bar.h                           |   87 ------
 modules/addressbook/e-book-shell-content.c         |   61 +++---
 modules/addressbook/e-book-shell-content.h         |    7 +-
 modules/addressbook/e-book-shell-view-actions.c    |   37 ++-
 modules/addressbook/e-book-shell-view-actions.h    |    2 +
 modules/addressbook/e-book-shell-view.c            |    4 +
 modules/calendar/e-memo-shell-content.c            |   59 +++--
 modules/calendar/e-memo-shell-content.h            |    7 +-
 modules/calendar/e-memo-shell-view-actions.c       |   37 ++-
 modules/calendar/e-memo-shell-view-actions.h       |    2 +
 modules/calendar/e-memo-shell-view-private.c       |    7 +-
 modules/calendar/e-memo-shell-view.c               |   13 +-
 modules/calendar/e-task-shell-content.c            |   59 +++--
 modules/calendar/e-task-shell-content.h            |    7 +-
 modules/calendar/e-task-shell-view-actions.c       |   37 ++-
 modules/calendar/e-task-shell-view-actions.h       |    2 +
 modules/calendar/e-task-shell-view-private.c       |    7 +-
 modules/calendar/e-task-shell-view.c               |   13 +-
 modules/mail/e-mail-shell-content.c                |   45 +---
 ui/evolution-contacts.ui                           |    2 +
 ui/evolution-memos.ui                              |    2 +
 ui/evolution-tasks.ui                              |    2 +
 widgets/misc/Makefile.am                           |    6 +
 widgets/misc/e-preview-pane.c                      |  275 ++++++++++++++++++++
 widgets/misc/e-preview-pane.h                      |   74 ++++++
 .../misc/e-search-bar.c                            |  256 +++++++++---------
 widgets/misc/e-search-bar.h                        |   87 ++++++
 {mail => widgets/misc}/e-searching-tokenizer.c     |    0
 {mail => widgets/misc}/e-searching-tokenizer.h     |    0
 31 files changed, 830 insertions(+), 401 deletions(-)
---
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 2e6a69a..c31b4cd 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -48,11 +48,9 @@ mailinclude_HEADERS =					\
 	e-mail-migrate.h				\
 	e-mail-reader.h					\
 	e-mail-reader-utils.h				\
-	e-mail-search-bar.h				\
 	e-mail-sidebar.h				\
 	e-mail-store.h					\
 	e-mail-tag-editor.h				\
-	e-searching-tokenizer.h				\
 	em-account-editor.h				\
 	em-composer-utils.h				\
 	em-config.h					\
@@ -107,11 +105,9 @@ libevolution_mail_la_SOURCES =				\
 	e-mail-migrate.c				\
 	e-mail-reader.c					\
 	e-mail-reader-utils.c				\
-	e-mail-search-bar.c				\
 	e-mail-sidebar.c				\
 	e-mail-store.c					\
 	e-mail-tag-editor.c				\
-	e-searching-tokenizer.c				\
 	em-account-editor.c				\
 	em-composer-utils.c				\
 	em-config.c					\
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index ab27694..b0172ad 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -29,10 +29,10 @@
 #include "e-util/e-plugin-ui.h"
 #include "e-util/gconf-bridge.h"
 #include "shell/e-shell.h"
+#include "widgets/misc/e-preview-pane.h"
 
 #include "mail/e-mail-reader.h"
 #include "mail/e-mail-reader-utils.h"
-#include "mail/e-mail-search-bar.h"
 #include "mail/em-folder-tree-model.h"
 #include "mail/em-format-html-display.h"
 #include "mail/message-list.h"
@@ -388,6 +388,7 @@ mail_browser_constructed (GObject *object)
 	EMailReader *reader;
 	EShellBackend *shell_backend;
 	EShell *shell;
+	ESearchBar *search_bar;
 	GConfBridge *bridge;
 	GtkAccelGroup *accel_group;
 	GtkActionGroup *action_group;
@@ -468,15 +469,6 @@ mail_browser_constructed (GObject *object)
 	priv->statusbar = g_object_ref (widget);
 	gtk_widget_show (widget);
 
-	widget = e_mail_search_bar_new (web_view);
-	gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0);
-	priv->search_bar = g_object_ref (widget);
-	gtk_widget_hide (widget);
-
-	g_signal_connect_swapped (
-		widget, "changed",
-		G_CALLBACK (em_format_redraw), html_display);
-
 	widget = gtk_ui_manager_get_widget (ui_manager, "/main-menu");
 	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
 	priv->main_menu = g_object_ref (widget);
@@ -487,20 +479,18 @@ mail_browser_constructed (GObject *object)
 	priv->main_toolbar = g_object_ref (widget);
 	gtk_widget_show (widget);
 
-	widget = gtk_scrolled_window_new (NULL, NULL);
-	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_show (GTK_WIDGET (web_view));
+
+	widget = e_preview_pane_new (web_view);
 	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
 	gtk_widget_show (widget);
 
-	container = widget;
+	search_bar = e_preview_pane_get_search_bar (E_PREVIEW_PANE (widget));
+	priv->search_bar = g_object_ref (search_bar);
 
-	widget = GTK_WIDGET (EM_FORMAT_HTML (html_display)->html);
-	gtk_container_add (GTK_CONTAINER (container), widget);
-	gtk_widget_show (widget);
+	g_signal_connect_swapped (
+		search_bar, "changed",
+		G_CALLBACK (em_format_redraw), priv->html_display);
 
 	/* Bind GObject properties to GConf keys. */
 
diff --git a/modules/addressbook/e-book-shell-content.c b/modules/addressbook/e-book-shell-content.c
index a7a616f..55b8332 100644
--- a/modules/addressbook/e-book-shell-content.c
+++ b/modules/addressbook/e-book-shell-content.c
@@ -28,6 +28,7 @@
 #include "e-util/gconf-bridge.h"
 #include "shell/e-shell-utils.h"
 #include "widgets/misc/e-paned.h"
+#include "widgets/misc/e-preview-pane.h"
 #include "e-book-shell-view.h"
 
 #define E_BOOK_SHELL_CONTENT_GET_PRIVATE(obj) \
@@ -37,7 +38,7 @@
 struct _EBookShellContentPrivate {
 	GtkWidget *paned;
 	GtkWidget *notebook;
-	GtkWidget *preview;
+	GtkWidget *preview_pane;
 
 	GtkOrientation orientation;
 
@@ -171,9 +172,9 @@ book_shell_content_dispose (GObject *object)
 		priv->notebook = NULL;
 	}
 
-	if (priv->preview != NULL) {
-		g_object_unref (priv->preview);
-		priv->preview = NULL;
+	if (priv->preview_pane != NULL) {
+		g_object_unref (priv->preview_pane);
+		priv->preview_pane = NULL;
 	}
 
 	/* Chain up to parent's dispose() method. */
@@ -221,32 +222,24 @@ book_shell_content_constructed (GObject *object)
 	priv->notebook = g_object_ref (widget);
 	gtk_widget_show (widget);
 
-	widget = gtk_scrolled_window_new (NULL, NULL);
-	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_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
-	gtk_widget_show (widget);
-
-	e_binding_new (object, "preview-visible", widget, "visible");
-
-	container = widget;
-
 	widget = eab_contact_display_new ();
 	eab_contact_display_set_mode (
 		EAB_CONTACT_DISPLAY (widget),
 		EAB_CONTACT_DISPLAY_RENDER_NORMAL);
 	e_shell_configure_web_view (shell, E_WEB_VIEW (widget));
-	gtk_container_add (GTK_CONTAINER (container), widget);
-	priv->preview = g_object_ref (widget);
 	gtk_widget_show (widget);
 
 	g_signal_connect_swapped (
 		widget, "send-message",
 		G_CALLBACK (book_shell_content_send_message_cb), object);
 
+	widget = e_preview_pane_new (E_WEB_VIEW (widget));
+	gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
+	priv->preview_pane = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	e_binding_new (object, "preview-visible", widget, "visible");
+
 	/* Bind GObject properties to GConf keys. */
 
 	bridge = gconf_bridge_get ();
@@ -569,24 +562,19 @@ e_book_shell_content_set_current_view (EBookShellContent *book_shell_content,
 	g_object_notify (G_OBJECT (book_shell_content), "current-view");
 }
 
-EABContactDisplay *
-e_book_shell_content_get_preview (EBookShellContent *book_shell_content)
-{
-	g_return_val_if_fail (
-		E_IS_BOOK_SHELL_CONTENT (book_shell_content), NULL);
-
-	return EAB_CONTACT_DISPLAY (book_shell_content->priv->preview);
-}
-
 EContact *
 e_book_shell_content_get_preview_contact (EBookShellContent *book_shell_content)
 {
+	EPreviewPane *preview_pane;
 	EABContactDisplay *display;
+	EWebView *web_view;
 
 	g_return_val_if_fail (
 		E_IS_BOOK_SHELL_CONTENT (book_shell_content), NULL);
 
-	display = EAB_CONTACT_DISPLAY (book_shell_content->priv->preview);
+	preview_pane = E_PREVIEW_PANE (book_shell_content->priv->preview_pane);
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	display = EAB_CONTACT_DISPLAY (web_view);
 
 	return eab_contact_display_get_contact (display);
 }
@@ -595,16 +583,29 @@ void
 e_book_shell_content_set_preview_contact (EBookShellContent *book_shell_content,
                                           EContact *preview_contact)
 {
+	EPreviewPane *preview_pane;
 	EABContactDisplay *display;
+	EWebView *web_view;
 
 	g_return_if_fail (E_IS_BOOK_SHELL_CONTENT (book_shell_content));
 
-	display = EAB_CONTACT_DISPLAY (book_shell_content->priv->preview);
+	preview_pane = E_PREVIEW_PANE (book_shell_content->priv->preview_pane);
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	display = EAB_CONTACT_DISPLAY (web_view);
 
 	eab_contact_display_set_contact (display, preview_contact);
 	g_object_notify (G_OBJECT (book_shell_content), "preview-contact");
 }
 
+EPreviewPane *
+e_book_shell_content_get_preview_pane (EBookShellContent *book_shell_content)
+{
+	g_return_val_if_fail (
+		E_IS_BOOK_SHELL_CONTENT (book_shell_content), NULL);
+
+	return E_PREVIEW_PANE (book_shell_content->priv->preview_pane);
+}
+
 gboolean
 e_book_shell_content_get_preview_visible (EBookShellContent *book_shell_content)
 {
diff --git a/modules/addressbook/e-book-shell-content.h b/modules/addressbook/e-book-shell-content.h
index 6ed5b38..595e366 100644
--- a/modules/addressbook/e-book-shell-content.h
+++ b/modules/addressbook/e-book-shell-content.h
@@ -28,6 +28,8 @@
 #include <shell/e-shell-searchbar.h>
 #include <shell/e-shell-view.h>
 
+#include <misc/e-preview-pane.h>
+
 #include "addressbook/gui/widgets/e-addressbook-view.h"
 #include "eab-composer-util.h"
 
@@ -90,14 +92,13 @@ EAddressbookView *
 void		e_book_shell_content_set_current_view
 					(EBookShellContent *book_shell_content,
 					 EAddressbookView *addressbook_view);
-EABContactDisplay *
-		e_book_shell_content_get_preview
-					(EBookShellContent *book_shell_content);
 EContact *	e_book_shell_content_get_preview_contact
 					(EBookShellContent *book_shell_content);
 void		e_book_shell_content_set_preview_contact
 					(EBookShellContent *book_shell_content,
 					 EContact *preview_contact);
+EPreviewPane *	e_book_shell_content_get_preview_pane
+					(EBookShellContent *book_shell_content);
 gboolean	e_book_shell_content_get_preview_visible
 					(EBookShellContent *book_shell_content);
 void		e_book_shell_content_set_preview_visible
diff --git a/modules/addressbook/e-book-shell-view-actions.c b/modules/addressbook/e-book-shell-view-actions.c
index e791f8e..32b227c 100644
--- a/modules/addressbook/e-book-shell-view-actions.c
+++ b/modules/addressbook/e-book-shell-view-actions.c
@@ -341,6 +341,19 @@ action_contact_delete_cb (GtkAction *action,
 }
 
 static void
+action_contact_find_cb (GtkAction *action,
+                        EBookShellView *book_shell_view)
+{
+	EBookShellContent *book_shell_content;
+	EPreviewPane *preview_pane;
+
+	book_shell_content = book_shell_view->priv->book_shell_content;
+	preview_pane = e_book_shell_content_get_preview_pane (book_shell_content);
+
+	e_preview_pane_show_search_bar (preview_pane);
+}
+
+static void
 action_contact_forward_cb (GtkAction *action,
                            EBookShellView *book_shell_view)
 {
@@ -722,6 +735,13 @@ static GtkActionEntry contact_entries[] = {
 	  N_("Delete selected contacts"),
 	  G_CALLBACK (action_contact_delete_cb) },
 
+	{ "contact-find",
+	  GTK_STOCK_FIND,
+	  N_("_Find in Contact..."),
+	  "<Shift><Control>f",
+	  N_("Search for text in the displayed contact"),
+	  G_CALLBACK (action_contact_find_cb) },
+
 	{ "contact-forward",
 	  "mail-forward",
 	  N_("_Forward Contact..."),
@@ -961,7 +981,8 @@ e_book_shell_view_actions_init (EBookShellView *book_shell_view)
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSearchbar *searchbar;
-	EABContactDisplay *contact_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	GtkActionGroup *action_group;
 	GConfBridge *bridge;
 	GtkAction *action;
@@ -973,7 +994,8 @@ e_book_shell_view_actions_init (EBookShellView *book_shell_view)
 
 	book_shell_content = book_shell_view->priv->book_shell_content;
 	searchbar = e_book_shell_content_get_searchbar (book_shell_content);
-	contact_preview = e_book_shell_content_get_preview (book_shell_content);
+	preview_pane = e_book_shell_content_get_preview_pane (book_shell_content);
+	web_view = e_preview_pane_get_web_view (preview_pane);
 
 	/* Contact Actions */
 	action_group = ACTION_GROUP (CONTACTS);
@@ -1050,14 +1072,9 @@ e_book_shell_view_actions_init (EBookShellView *book_shell_view)
 		ACTION (CONTACT_PREVIEW), "active",
 		ACTION (CONTACT_VIEW_VERTICAL), "sensitive");
 
-	e_web_view_set_open_proxy (
-		E_WEB_VIEW (contact_preview), ACTION (CONTACT_OPEN));
-
-	e_web_view_set_print_proxy (
-		E_WEB_VIEW (contact_preview), ACTION (CONTACT_PRINT));
-
-	e_web_view_set_save_as_proxy (
-		E_WEB_VIEW (contact_preview), ACTION (CONTACT_SAVE_AS));
+	e_web_view_set_open_proxy (web_view, ACTION (CONTACT_OPEN));
+	e_web_view_set_print_proxy (web_view, ACTION (CONTACT_PRINT));
+	e_web_view_set_save_as_proxy (web_view, ACTION (CONTACT_SAVE_AS));
 }
 
 void
diff --git a/modules/addressbook/e-book-shell-view-actions.h b/modules/addressbook/e-book-shell-view-actions.h
index 250ec5f..ef40dd1 100644
--- a/modules/addressbook/e-book-shell-view-actions.h
+++ b/modules/addressbook/e-book-shell-view-actions.h
@@ -49,6 +49,8 @@
 	E_SHELL_WINDOW_ACTION ((window), "contact-copy")
 #define E_SHELL_WINDOW_ACTION_CONTACT_DELETE(window) \
 	E_SHELL_WINDOW_ACTION ((window), "contact-delete")
+#define E_SHELL_WINDOW_ACTION_CONTACT_FIND(window) \
+	E_SHELL_WINDOW_ACTION ((window), "contact-find")
 #define E_SHELL_WINDOW_ACTION_CONTACT_FORWARD(window) \
 	E_SHELL_WINDOW_ACTION ((window), "contact-forward")
 #define E_SHELL_WINDOW_ACTION_CONTACT_MOVE(window) \
diff --git a/modules/addressbook/e-book-shell-view.c b/modules/addressbook/e-book-shell-view.c
index 555ab13..3ecea2c 100644
--- a/modules/addressbook/e-book-shell-view.c
+++ b/modules/addressbook/e-book-shell-view.c
@@ -327,6 +327,10 @@ book_shell_view_update_actions (EShellView *shell_view)
 	sensitive = source_is_editable && any_contacts_selected;
 	gtk_action_set_sensitive (action, sensitive);
 
+	action = ACTION (CONTACT_FIND);
+	sensitive = single_contact_selected;
+	gtk_action_set_sensitive (action, sensitive);
+
 	action = ACTION (CONTACT_FORWARD);
 	sensitive = any_contacts_selected;
 	gtk_action_set_sensitive (action, sensitive);
diff --git a/modules/calendar/e-memo-shell-content.c b/modules/calendar/e-memo-shell-content.c
index 852c0bb..e34af1f 100644
--- a/modules/calendar/e-memo-shell-content.c
+++ b/modules/calendar/e-memo-shell-content.c
@@ -29,8 +29,10 @@
 #include "shell/e-shell-utils.h"
 #include "widgets/menus/gal-view-etable.h"
 #include "widgets/misc/e-paned.h"
+#include "widgets/misc/e-preview-pane.h"
 
 #include "calendar/gui/comp-util.h"
+#include "calendar/gui/e-cal-component-preview.h"
 #include "calendar/gui/e-cal-model-memos.h"
 #include "calendar/gui/e-memo-table.h"
 
@@ -50,7 +52,7 @@
 struct _EMemoShellContentPrivate {
 	GtkWidget *paned;
 	GtkWidget *memo_table;
-	GtkWidget *memo_preview;
+	GtkWidget *preview_pane;
 
 	ECalModel *memo_model;
 	GalViewInstance *view_instance;
@@ -192,10 +194,15 @@ memo_shell_content_cursor_change_cb (EMemoShellContent *memo_shell_content,
 	ECalModel *memo_model;
 	ECalModelComponent *comp_data;
 	ECalComponent *comp;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	const gchar *uid;
 
 	memo_model = e_memo_shell_content_get_memo_model (memo_shell_content);
-	memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content);
+	preview_pane = e_memo_shell_content_get_preview_pane (memo_shell_content);
+
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	memo_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 
 	if (e_table_selected_count (table) != 1) {
 		e_cal_component_preview_clear (memo_preview);
@@ -223,8 +230,13 @@ memo_shell_content_selection_change_cb (EMemoShellContent *memo_shell_content,
                                         ETable *table)
 {
 	ECalComponentPreview *memo_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
+
+	preview_pane = e_memo_shell_content_get_preview_pane (memo_shell_content);
 
-	memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content);
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	memo_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 
 	/* XXX Old code emits a "selection-changed" signal here. */
 
@@ -347,9 +359,9 @@ memo_shell_content_dispose (GObject *object)
 		priv->memo_table = NULL;
 	}
 
-	if (priv->memo_preview != NULL) {
-		g_object_unref (priv->memo_preview);
-		priv->memo_preview = NULL;
+	if (priv->preview_pane != NULL) {
+		g_object_unref (priv->preview_pane);
+		priv->preview_pane = NULL;
 	}
 
 	if (priv->memo_model != NULL) {
@@ -445,25 +457,10 @@ memo_shell_content_constructed (GObject *object)
 
 	container = priv->paned;
 
-	widget = gtk_scrolled_window_new (NULL, NULL);
-	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_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
-	gtk_widget_show (widget);
-
-	e_binding_new (object, "preview-visible", widget, "visible");
-
-	container = widget;
-
 	widget = e_cal_component_preview_new ();
 	e_cal_component_preview_set_default_timezone (
 		E_CAL_COMPONENT_PREVIEW (widget), timezone);
 	e_shell_configure_web_view (shell, E_WEB_VIEW (widget));
-	gtk_container_add (GTK_CONTAINER (container), widget);
-	priv->memo_preview = g_object_ref (widget);
 	gtk_widget_show (widget);
 
 	g_signal_connect_swapped (
@@ -471,6 +468,13 @@ memo_shell_content_constructed (GObject *object)
 		G_CALLBACK (e_shell_taskbar_set_message),
 		shell_taskbar);
 
+	widget = e_preview_pane_new (E_WEB_VIEW (widget));
+	gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
+	priv->preview_pane = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	e_binding_new (object, "preview-visible", widget, "visible");
+
 	/* Configure the memo table. */
 
 	e_table_set_state (
@@ -681,23 +685,22 @@ e_memo_shell_content_get_memo_model (EMemoShellContent *memo_shell_content)
 	return memo_shell_content->priv->memo_model;
 }
 
-ECalComponentPreview *
-e_memo_shell_content_get_memo_preview (EMemoShellContent *memo_shell_content)
+EMemoTable *
+e_memo_shell_content_get_memo_table (EMemoShellContent *memo_shell_content)
 {
 	g_return_val_if_fail (
 		E_IS_MEMO_SHELL_CONTENT (memo_shell_content), NULL);
 
-	return E_CAL_COMPONENT_PREVIEW (
-		memo_shell_content->priv->memo_preview);
+	return E_MEMO_TABLE (memo_shell_content->priv->memo_table);
 }
 
-EMemoTable *
-e_memo_shell_content_get_memo_table (EMemoShellContent *memo_shell_content)
+EPreviewPane *
+e_memo_shell_content_get_preview_pane (EMemoShellContent *memo_shell_content)
 {
 	g_return_val_if_fail (
 		E_IS_MEMO_SHELL_CONTENT (memo_shell_content), NULL);
 
-	return E_MEMO_TABLE (memo_shell_content->priv->memo_table);
+	return E_PREVIEW_PANE (memo_shell_content->priv->preview_pane);
 }
 
 gboolean
diff --git a/modules/calendar/e-memo-shell-content.h b/modules/calendar/e-memo-shell-content.h
index 16aae22..4567a94 100644
--- a/modules/calendar/e-memo-shell-content.h
+++ b/modules/calendar/e-memo-shell-content.h
@@ -27,9 +27,9 @@
 #include <shell/e-shell-view.h>
 
 #include <calendar/gui/e-memo-table.h>
-#include <calendar/gui/e-cal-component-preview.h>
 
 #include <menus/gal-view-instance.h>
+#include <misc/e-preview-pane.h>
 
 /* Standard GObject macros */
 #define E_TYPE_MEMO_SHELL_CONTENT \
@@ -78,11 +78,10 @@ void		e_memo_shell_content_register_type
 GtkWidget *	e_memo_shell_content_new(EShellView *shell_view);
 ECalModel *	e_memo_shell_content_get_memo_model
 					(EMemoShellContent *memo_shell_conent);
-ECalComponentPreview *
-		e_memo_shell_content_get_memo_preview
-					(EMemoShellContent *memo_shell_content);
 EMemoTable *	e_memo_shell_content_get_memo_table
 					(EMemoShellContent *memo_shell_content);
+EPreviewPane *	e_memo_shell_content_get_preview_pane
+					(EMemoShellContent *memo_shell_content);
 gboolean	e_memo_shell_content_get_preview_visible
 					(EMemoShellContent *memo_shell_content);
 void		e_memo_shell_content_set_preview_visible
diff --git a/modules/calendar/e-memo-shell-view-actions.c b/modules/calendar/e-memo-shell-view-actions.c
index 1c0a7ef..24aced8 100644
--- a/modules/calendar/e-memo-shell-view-actions.c
+++ b/modules/calendar/e-memo-shell-view-actions.c
@@ -56,6 +56,19 @@ action_memo_delete_cb (GtkAction *action,
 }
 
 static void
+action_memo_find_cb (GtkAction *action,
+                     EMemoShellView *memo_shell_view)
+{
+	EMemoShellContent *memo_shell_content;
+	EPreviewPane *preview_pane;
+
+	memo_shell_content = memo_shell_view->priv->memo_shell_content;
+	preview_pane = e_memo_shell_content_get_preview_pane (memo_shell_content);
+
+	e_preview_pane_show_search_bar (preview_pane);
+}
+
+static void
 action_memo_forward_cb (GtkAction *action,
                         EMemoShellView *memo_shell_view)
 {
@@ -564,6 +577,13 @@ static GtkActionEntry memo_entries[] = {
 	  N_("Delete selected memos"),
 	  G_CALLBACK (action_memo_delete_cb) },
 
+	{ "memo-find",
+	  GTK_STOCK_FIND,
+	  N_("_Find in Memo..."),
+	  "<Shift><Control>f",
+	  N_("Search for text in the displayed memo"),
+	  G_CALLBACK (action_memo_find_cb) },
+
 	{ "memo-forward",
 	  "mail-forward",
 	  N_("_Forward as iCalendar..."),
@@ -831,7 +851,8 @@ e_memo_shell_view_actions_init (EMemoShellView *memo_shell_view)
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSearchbar *searchbar;
-	ECalComponentPreview *memo_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	GtkActionGroup *action_group;
 	GConfBridge *bridge;
 	GtkAction *action;
@@ -843,7 +864,8 @@ e_memo_shell_view_actions_init (EMemoShellView *memo_shell_view)
 
 	memo_shell_content = memo_shell_view->priv->memo_shell_content;
 	searchbar = e_memo_shell_content_get_searchbar (memo_shell_content);
-	memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content);
+	preview_pane = e_memo_shell_content_get_preview_pane (memo_shell_content);
+	web_view = e_preview_pane_get_web_view (preview_pane);
 
 	/* Memo Actions */
 	action_group = ACTION_GROUP (MEMOS);
@@ -920,14 +942,9 @@ e_memo_shell_view_actions_init (EMemoShellView *memo_shell_view)
 		ACTION (MEMO_PREVIEW), "active",
 		ACTION (MEMO_VIEW_VERTICAL), "sensitive");
 
-	e_web_view_set_open_proxy (
-		E_WEB_VIEW (memo_preview), ACTION (MEMO_OPEN));
-
-	e_web_view_set_print_proxy (
-		E_WEB_VIEW (memo_preview), ACTION (MEMO_PRINT));
-
-	e_web_view_set_save_as_proxy (
-		E_WEB_VIEW (memo_preview), ACTION (MEMO_SAVE_AS));
+	e_web_view_set_open_proxy (web_view, ACTION (MEMO_OPEN));
+	e_web_view_set_print_proxy (web_view, ACTION (MEMO_PRINT));
+	e_web_view_set_save_as_proxy (web_view, ACTION (MEMO_SAVE_AS));
 }
 
 void
diff --git a/modules/calendar/e-memo-shell-view-actions.h b/modules/calendar/e-memo-shell-view-actions.h
index 5b49ca0..c9d144b 100644
--- a/modules/calendar/e-memo-shell-view-actions.h
+++ b/modules/calendar/e-memo-shell-view-actions.h
@@ -27,6 +27,8 @@
 /* Memo Actions */
 #define E_SHELL_WINDOW_ACTION_MEMO_DELETE(window) \
 	E_SHELL_WINDOW_ACTION ((window), "memo-delete")
+#define E_SHELL_WINDOW_ACTION_MEMO_FIND(window) \
+	E_SHELL_WINDOW_ACTION ((window), "memo-find")
 #define E_SHELL_WINDOW_ACTION_MEMO_FORWARD(window) \
 	E_SHELL_WINDOW_ACTION ((window), "memo-forward")
 #define E_SHELL_WINDOW_ACTION_MEMO_NEW(window) \
diff --git a/modules/calendar/e-memo-shell-view-private.c b/modules/calendar/e-memo-shell-view-private.c
index 583af2a..9e2be0f 100644
--- a/modules/calendar/e-memo-shell-view-private.c
+++ b/modules/calendar/e-memo-shell-view-private.c
@@ -430,18 +430,23 @@ e_memo_shell_view_update_timezone (EMemoShellView *memo_shell_view)
 	EMemoShellContent *memo_shell_content;
 	EMemoShellSidebar *memo_shell_sidebar;
 	ECalComponentPreview *memo_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	icaltimezone *timezone;
 	ECalModel *model;
 	GList *clients, *iter;
 
 	memo_shell_content = memo_shell_view->priv->memo_shell_content;
-	memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content);
+	preview_pane = e_memo_shell_content_get_preview_pane (memo_shell_content);
 	model = e_memo_shell_content_get_memo_model (memo_shell_content);
 	timezone = e_cal_model_get_timezone (model);
 
 	memo_shell_sidebar = memo_shell_view->priv->memo_shell_sidebar;
 	clients = e_memo_shell_sidebar_get_clients (memo_shell_sidebar);
 
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	memo_preview = E_CAL_COMPONENT_PREVIEW (web_view);
+
 	for (iter = clients; iter != NULL; iter = iter->next) {
 		ECal *client = iter->data;
 
diff --git a/modules/calendar/e-memo-shell-view.c b/modules/calendar/e-memo-shell-view.c
index 07a58aa..870d5ae 100644
--- a/modules/calendar/e-memo-shell-view.c
+++ b/modules/calendar/e-memo-shell-view.c
@@ -61,7 +61,9 @@ memo_shell_view_execute_search (EShellView *shell_view)
 	EActionComboBox *combo_box;
 	GtkRadioAction *action;
 	ECalComponentPreview *memo_preview;
+	EPreviewPane *preview_pane;
 	EMemoTable *memo_table;
+	EWebView *web_view;
 	ECalModel *model;
 	gchar *query;
 	gchar *temp;
@@ -155,8 +157,11 @@ memo_shell_view_execute_search (EShellView *shell_view)
 	e_cal_model_set_search_query (model, query);
 	g_free (query);
 
-	memo_preview =
-		e_memo_shell_content_get_memo_preview (memo_shell_content);
+	preview_pane =
+		e_memo_shell_content_get_preview_pane (memo_shell_content);
+
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	memo_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 	e_cal_component_preview_clear (memo_preview);
 }
 
@@ -220,6 +225,10 @@ memo_shell_view_update_actions (EShellView *shell_view)
 		label = _("Delete Memo");
 	g_object_set (action, "label", label, NULL);
 
+	action = ACTION (MEMO_FIND);
+	sensitive = single_memo_selected;
+	gtk_action_set_sensitive (action, sensitive);
+
 	action = ACTION (MEMO_FORWARD);
 	sensitive = single_memo_selected;
 	gtk_action_set_sensitive (action, sensitive);
diff --git a/modules/calendar/e-task-shell-content.c b/modules/calendar/e-task-shell-content.c
index 11bc28a..fd76fe7 100644
--- a/modules/calendar/e-task-shell-content.c
+++ b/modules/calendar/e-task-shell-content.c
@@ -29,8 +29,10 @@
 #include "shell/e-shell-utils.h"
 #include "widgets/menus/gal-view-etable.h"
 #include "widgets/misc/e-paned.h"
+#include "widgets/misc/e-preview-pane.h"
 
 #include "calendar/gui/comp-util.h"
+#include "calendar/gui/e-cal-component-preview.h"
 #include "calendar/gui/e-cal-model-tasks.h"
 
 #define E_TASK_SHELL_CONTENT_GET_PRIVATE(obj) \
@@ -50,7 +52,7 @@
 struct _ETaskShellContentPrivate {
 	GtkWidget *paned;
 	GtkWidget *task_table;
-	GtkWidget *task_preview;
+	GtkWidget *preview_pane;
 
 	ECalModel *task_model;
 	GalViewInstance *view_instance;
@@ -192,10 +194,15 @@ task_shell_content_cursor_change_cb (ETaskShellContent *task_shell_content,
 	ECalModel *task_model;
 	ECalModelComponent *comp_data;
 	ECalComponent *comp;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	const gchar *uid;
 
 	task_model = e_task_shell_content_get_task_model (task_shell_content);
-	task_preview = e_task_shell_content_get_task_preview (task_shell_content);
+	preview_pane = e_task_shell_content_get_preview_pane (task_shell_content);
+
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	task_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 
 	if (e_table_selected_count (table) != 1) {
 		e_cal_component_preview_clear (task_preview);
@@ -223,8 +230,13 @@ task_shell_content_selection_change_cb (ETaskShellContent *task_shell_content,
                                         ETable *table)
 {
 	ECalComponentPreview *task_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
+
+	preview_pane = e_task_shell_content_get_preview_pane (task_shell_content);
 
-	task_preview = e_task_shell_content_get_task_preview (task_shell_content);
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	task_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 
 	if (e_table_selected_count (table) != 1)
 		e_cal_component_preview_clear (task_preview);
@@ -345,9 +357,9 @@ task_shell_content_dispose (GObject *object)
 		priv->task_table = NULL;
 	}
 
-	if (priv->task_preview != NULL) {
-		g_object_unref (priv->task_preview);
-		priv->task_preview = NULL;
+	if (priv->preview_pane != NULL) {
+		g_object_unref (priv->preview_pane);
+		priv->preview_pane = NULL;
 	}
 
 	if (priv->task_model != NULL) {
@@ -442,25 +454,10 @@ task_shell_content_constructed (GObject *object)
 
 	container = priv->paned;
 
-	widget = gtk_scrolled_window_new (NULL, NULL);
-	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_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
-	gtk_widget_show (widget);
-
-	e_binding_new (object, "preview-visible", widget, "visible");
-
-	container = widget;
-
 	widget = e_cal_component_preview_new ();
 	e_cal_component_preview_set_default_timezone (
 		E_CAL_COMPONENT_PREVIEW (widget), timezone);
 	e_shell_configure_web_view (shell, E_WEB_VIEW (widget));
-	gtk_container_add (GTK_CONTAINER (container), widget);
-	priv->task_preview = g_object_ref (widget);
 	gtk_widget_show (widget);
 
 	g_signal_connect_swapped (
@@ -468,6 +465,13 @@ task_shell_content_constructed (GObject *object)
 		G_CALLBACK (e_shell_taskbar_set_message),
 		shell_taskbar);
 
+	widget = e_preview_pane_new (E_WEB_VIEW (widget));
+	gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
+	priv->preview_pane = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	e_binding_new (object, "preview-visible", widget, "visible");
+
 	/* Configure the task table. */
 
 	e_table_set_state (
@@ -703,23 +707,22 @@ e_task_shell_content_get_task_model (ETaskShellContent *task_shell_content)
 	return task_shell_content->priv->task_model;
 }
 
-ECalComponentPreview *
-e_task_shell_content_get_task_preview (ETaskShellContent *task_shell_content)
+ETaskTable *
+e_task_shell_content_get_task_table (ETaskShellContent *task_shell_content)
 {
 	g_return_val_if_fail (
 		E_IS_TASK_SHELL_CONTENT (task_shell_content), NULL);
 
-	return E_CAL_COMPONENT_PREVIEW (
-		task_shell_content->priv->task_preview);
+	return E_TASK_TABLE (task_shell_content->priv->task_table);
 }
 
-ETaskTable *
-e_task_shell_content_get_task_table (ETaskShellContent *task_shell_content)
+EPreviewPane *
+e_task_shell_content_get_preview_pane (ETaskShellContent *task_shell_content)
 {
 	g_return_val_if_fail (
 		E_IS_TASK_SHELL_CONTENT (task_shell_content), NULL);
 
-	return E_TASK_TABLE (task_shell_content->priv->task_table);
+	return E_PREVIEW_PANE (task_shell_content->priv->preview_pane);
 }
 
 gboolean
diff --git a/modules/calendar/e-task-shell-content.h b/modules/calendar/e-task-shell-content.h
index dd39f8c..d4e67d1 100644
--- a/modules/calendar/e-task-shell-content.h
+++ b/modules/calendar/e-task-shell-content.h
@@ -27,10 +27,10 @@
 #include <shell/e-shell-view.h>
 
 #include <calendar/gui/e-cal-model.h>
-#include <calendar/gui/e-cal-component-preview.h>
 #include <calendar/gui/e-task-table.h>
 
 #include <menus/gal-view-instance.h>
+#include <misc/e-preview-pane.h>
 
 /* Standard GObject macros */
 #define E_TYPE_TASK_SHELL_CONTENT \
@@ -82,11 +82,10 @@ void		e_task_shell_content_register_type
 GtkWidget *	e_task_shell_content_new(EShellView *shell_view);
 ECalModel *	e_task_shell_content_get_task_model
 					(ETaskShellContent *task_shell_content);
-ECalComponentPreview *
-		e_task_shell_content_get_task_preview
-					(ETaskShellContent *task_shell_content);
 ETaskTable *	e_task_shell_content_get_task_table
 					(ETaskShellContent *task_shell_content);
+EPreviewPane *	e_task_shell_content_get_preview_pane
+					(ETaskShellContent *task_shell_content);
 gboolean	e_task_shell_content_get_preview_visible
 					(ETaskShellContent *task_shell_content);
 void		e_task_shell_content_set_preview_visible
diff --git a/modules/calendar/e-task-shell-view-actions.c b/modules/calendar/e-task-shell-view-actions.c
index bd3d062..c18882d 100644
--- a/modules/calendar/e-task-shell-view-actions.c
+++ b/modules/calendar/e-task-shell-view-actions.c
@@ -87,6 +87,19 @@ action_task_delete_cb (GtkAction *action,
 }
 
 static void
+action_task_find_cb (GtkAction *action,
+                     ETaskShellView *task_shell_view)
+{
+	ETaskShellContent *task_shell_content;
+	EPreviewPane *preview_pane;
+
+	task_shell_content = task_shell_view->priv->task_shell_content;
+	preview_pane = e_task_shell_content_get_preview_pane (task_shell_content);
+
+	e_preview_pane_show_search_bar (preview_pane);
+}
+
+static void
 action_task_forward_cb (GtkAction *action,
                         ETaskShellView *task_shell_view)
 {
@@ -688,6 +701,13 @@ static GtkActionEntry task_entries[] = {
 	  N_("Delete selected tasks"),
 	  G_CALLBACK (action_task_delete_cb) },
 
+	{ "task-find",
+	  GTK_STOCK_FIND,
+	  N_("_Find in Task..."),
+	  "<Shift><Control>f",
+	  N_("Search for text in the displayed task"),
+	  G_CALLBACK (action_task_find_cb) },
+
 	{ "task-forward",
 	  "mail-forward",
 	  N_("_Forward as iCalendar..."),
@@ -1030,7 +1050,8 @@ e_task_shell_view_actions_init (ETaskShellView *task_shell_view)
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSearchbar *searchbar;
-	ECalComponentPreview *task_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	GtkActionGroup *action_group;
 	GConfBridge *bridge;
 	GtkAction *action;
@@ -1042,7 +1063,8 @@ e_task_shell_view_actions_init (ETaskShellView *task_shell_view)
 
 	task_shell_content = task_shell_view->priv->task_shell_content;
 	searchbar = e_task_shell_content_get_searchbar (task_shell_content);
-	task_preview = e_task_shell_content_get_task_preview (task_shell_content);
+	preview_pane = e_task_shell_content_get_preview_pane (task_shell_content);
+	web_view = e_preview_pane_get_web_view (preview_pane);
 
 	/* Task Actions */
 	action_group = ACTION_GROUP (TASKS);
@@ -1119,14 +1141,9 @@ e_task_shell_view_actions_init (ETaskShellView *task_shell_view)
 		ACTION (TASK_PREVIEW), "active",
 		ACTION (TASK_VIEW_VERTICAL), "sensitive");
 
-	e_web_view_set_open_proxy (
-		E_WEB_VIEW (task_preview), ACTION (TASK_OPEN));
-
-	e_web_view_set_print_proxy (
-		E_WEB_VIEW (task_preview), ACTION (TASK_PRINT));
-
-	e_web_view_set_save_as_proxy (
-		E_WEB_VIEW (task_preview), ACTION (TASK_SAVE_AS));
+	e_web_view_set_open_proxy (web_view, ACTION (TASK_OPEN));
+	e_web_view_set_print_proxy (web_view, ACTION (TASK_PRINT));
+	e_web_view_set_save_as_proxy (web_view, ACTION (TASK_SAVE_AS));
 }
 
 void
diff --git a/modules/calendar/e-task-shell-view-actions.h b/modules/calendar/e-task-shell-view-actions.h
index f323fb3..afa9fe3 100644
--- a/modules/calendar/e-task-shell-view-actions.h
+++ b/modules/calendar/e-task-shell-view-actions.h
@@ -29,6 +29,8 @@
 	E_SHELL_WINDOW_ACTION ((window), "task-assign")
 #define E_SHELL_WINDOW_ACTION_TASK_DELETE(window) \
 	E_SHELL_WINDOW_ACTION ((window), "task-delete")
+#define E_SHELL_WINDOW_ACTION_TASK_FIND(window) \
+	E_SHELL_WINDOW_ACTION ((window), "task-find")
 #define E_SHELL_WINDOW_ACTION_TASK_FORWARD(window) \
 	E_SHELL_WINDOW_ACTION ((window), "task-forward")
 #define E_SHELL_WINDOW_ACTION_TASK_MARK_COMPLETE(window) \
diff --git a/modules/calendar/e-task-shell-view-private.c b/modules/calendar/e-task-shell-view-private.c
index 6704a3b..4b04185 100644
--- a/modules/calendar/e-task-shell-view-private.c
+++ b/modules/calendar/e-task-shell-view-private.c
@@ -580,18 +580,23 @@ e_task_shell_view_update_timezone (ETaskShellView *task_shell_view)
 	ETaskShellContent *task_shell_content;
 	ETaskShellSidebar *task_shell_sidebar;
 	ECalComponentPreview *task_preview;
+	EPreviewPane *preview_pane;
+	EWebView *web_view;
 	icaltimezone *timezone;
 	ECalModel *model;
 	GList *clients, *iter;
 
 	task_shell_content = task_shell_view->priv->task_shell_content;
-	task_preview = e_task_shell_content_get_task_preview (task_shell_content);
+	preview_pane = e_task_shell_content_get_preview_pane (task_shell_content);
 	model = e_task_shell_content_get_task_model (task_shell_content);
 	timezone = e_cal_model_get_timezone (model);
 
 	task_shell_sidebar = task_shell_view->priv->task_shell_sidebar;
 	clients = e_task_shell_sidebar_get_clients (task_shell_sidebar);
 
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	task_preview = E_CAL_COMPONENT_PREVIEW (web_view);
+
 	for (iter = clients; iter != NULL; iter = iter->next) {
 		ECal *client = iter->data;
 
diff --git a/modules/calendar/e-task-shell-view.c b/modules/calendar/e-task-shell-view.c
index 36b9db5..b2146f5 100644
--- a/modules/calendar/e-task-shell-view.c
+++ b/modules/calendar/e-task-shell-view.c
@@ -100,7 +100,9 @@ task_shell_view_execute_search (EShellView *shell_view)
 	EActionComboBox *combo_box;
 	GtkRadioAction *action;
 	ECalComponentPreview *task_preview;
+	EPreviewPane *preview_pane;
 	ETaskTable *task_table;
+	EWebView *web_view;
 	ECalModel *model;
 	time_t start_range;
 	time_t end_range;
@@ -268,8 +270,11 @@ task_shell_view_execute_search (EShellView *shell_view)
 	e_cal_model_set_search_query (model, query);
 	g_free (query);
 
-	task_preview =
-		e_task_shell_content_get_task_preview (task_shell_content);
+	preview_pane =
+		e_task_shell_content_get_preview_pane (task_shell_content);
+
+	web_view = e_preview_pane_get_web_view (preview_pane);
+	task_preview = E_CAL_COMPONENT_PREVIEW (web_view);
 	e_cal_component_preview_clear (task_preview);
 }
 
@@ -348,6 +353,10 @@ task_shell_view_update_actions (EShellView *shell_view)
 		label = _("Delete Task");
 	g_object_set (action, "label", label, NULL);
 
+	action = ACTION (TASK_FIND);
+	sensitive = single_task_selected;
+	gtk_action_set_sensitive (action, sensitive);
+
 	action = ACTION (TASK_FORWARD);
 	sensitive = single_task_selected;
 	gtk_action_set_sensitive (action, sensitive);
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 5ba85b2..423f3ec 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -30,6 +30,8 @@
 #include "widgets/menus/gal-view-etable.h"
 #include "widgets/menus/gal-view-instance.h"
 #include "widgets/misc/e-paned.h"
+#include "widgets/misc/e-preview-pane.h"
+#include "widgets/misc/e-search-bar.h"
 
 #include "em-utils.h"
 #include "mail-config.h"
@@ -37,7 +39,6 @@
 #include "message-list.h"
 
 #include "e-mail-reader.h"
-#include "e-mail-search-bar.h"
 #include "e-mail-shell-backend.h"
 #include "e-mail-shell-view-actions.h"
 
@@ -361,6 +362,7 @@ mail_shell_content_constructed (GObject *object)
 	EShellContent *shell_content;
 	EShellBackend *shell_backend;
 	EShellView *shell_view;
+	ESearchBar *search_bar;
 	EMailReader *reader;
 	GtkWidget *message_list;
 	GConfBridge *bridge;
@@ -390,9 +392,7 @@ mail_shell_content_constructed (GObject *object)
 	priv->paned = g_object_ref (widget);
 	gtk_widget_show (widget);
 
-	e_binding_new (
-		object, "orientation",
-		widget, "orientation");
+	e_binding_new (object, "orientation", widget, "orientation");
 
 	container = priv->paned;
 
@@ -415,34 +415,19 @@ mail_shell_content_constructed (GObject *object)
 
 	container = priv->paned;
 
-	widget = gtk_vbox_new (FALSE, 1);
+	gtk_widget_show (GTK_WIDGET (web_view));
+
+	widget = e_preview_pane_new (web_view);
 	gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE);
 	gtk_widget_show (widget);
 
-	e_binding_new (
-		object, "preview-visible",
-		widget, "visible");
-
-	container = widget;
-
-	widget = gtk_scrolled_window_new (NULL, NULL);
-	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_container_add (GTK_CONTAINER (widget), GTK_WIDGET (web_view));
-	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
-	gtk_widget_show (GTK_WIDGET (web_view));
-	gtk_widget_show (widget);
+	e_binding_new (object, "preview-visible", widget, "visible");
 
-	widget = e_mail_search_bar_new (web_view);
-	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
-	priv->search_bar = g_object_ref (widget);
-	gtk_widget_hide (widget);
+	search_bar = e_preview_pane_get_search_bar (E_PREVIEW_PANE (widget));
+	priv->search_bar = g_object_ref (search_bar);
 
 	g_signal_connect_swapped (
-		widget, "changed",
+		search_bar, "changed",
 		G_CALLBACK (em_format_redraw), priv->html_display);
 
 	/* Load the view instance. */
@@ -928,13 +913,13 @@ void
 e_mail_shell_content_set_search_strings (EMailShellContent *mail_shell_content,
                                          GSList *search_strings)
 {
-	EMailSearchBar *search_bar;
+	ESearchBar *search_bar;
 	ESearchingTokenizer *tokenizer;
 
 	g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content));
 
-	search_bar = E_MAIL_SEARCH_BAR (mail_shell_content->priv->search_bar);
-	tokenizer = e_mail_search_bar_get_tokenizer (search_bar);
+	search_bar = E_SEARCH_BAR (mail_shell_content->priv->search_bar);
+	tokenizer = e_search_bar_get_tokenizer (search_bar);
 
 	e_searching_tokenizer_set_secondary_case_sensitivity (tokenizer, FALSE);
 	e_searching_tokenizer_set_secondary_search_string (tokenizer, NULL);
@@ -945,7 +930,7 @@ e_mail_shell_content_set_search_strings (EMailShellContent *mail_shell_content,
 		search_strings = g_slist_next (search_strings);
 	}
 
-	e_mail_search_bar_changed (search_bar);
+	e_search_bar_changed (search_bar);
 }
 
 void
diff --git a/ui/evolution-contacts.ui b/ui/evolution-contacts.ui
index 1dc66b4..11dc1f2 100644
--- a/ui/evolution-contacts.ui
+++ b/ui/evolution-contacts.ui
@@ -15,6 +15,8 @@
       <placeholder name='edit-actions'>
         <menuitem action='contact-delete'/>
         <menuitem action='address-book-delete'/>
+        <separator/>
+        <menuitem action='contact-find'/>
       </placeholder>
     </menu>
     <menu action='view-menu'>
diff --git a/ui/evolution-memos.ui b/ui/evolution-memos.ui
index c20ebc5..dbe42c7 100644
--- a/ui/evolution-memos.ui
+++ b/ui/evolution-memos.ui
@@ -13,6 +13,8 @@
       <placeholder name='edit-actions'>
         <menuitem action='memo-delete'/>
         <menuitem action='memo-list-delete'/>
+        <separator/>
+        <menuitem action='memo-find'/>
       </placeholder>
     </menu>
     <menu action='view-menu'>
diff --git a/ui/evolution-tasks.ui b/ui/evolution-tasks.ui
index 4483c95..62d9f02 100644
--- a/ui/evolution-tasks.ui
+++ b/ui/evolution-tasks.ui
@@ -14,6 +14,8 @@
         <menuitem action='task-delete'/>
         <menuitem action='task-list-delete'/>
         <separator/>
+        <menuitem action='task-find'/>
+        <separator/>
         <menuitem action='task-mark-complete'/>
         <menuitem action='task-mark-incomplete'/>
       </placeholder>
diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am
index 5853039..44d8c9a 100644
--- a/widgets/misc/Makefile.am
+++ b/widgets/misc/Makefile.am
@@ -58,7 +58,10 @@ widgetsinclude_HEADERS =			\
 	e-popup-action.h			\
 	e-popup-menu.h				\
 	e-preferences-window.h			\
+	e-preview-pane.h			\
 	e-printable.h				\
+	e-search-bar.h				\
+	e-searching-tokenizer.h			\
 	e-selectable.h				\
 	e-selection-model.h			\
 	e-selection-model-array.h		\
@@ -133,7 +136,10 @@ libemiscwidgets_la_SOURCES =			\
 	e-popup-action.c			\
 	e-popup-menu.c				\
 	e-preferences-window.c			\
+	e-preview-pane.c			\
 	e-printable.c				\
+	e-search-bar.c				\
+	e-searching-tokenizer.c			\
 	e-selectable.c				\
 	e-selection-model.c			\
 	e-selection-model-array.c		\
diff --git a/widgets/misc/e-preview-pane.c b/widgets/misc/e-preview-pane.c
new file mode 100644
index 0000000..240bfbd
--- /dev/null
+++ b/widgets/misc/e-preview-pane.c
@@ -0,0 +1,275 @@
+/*
+ * e-preview-pane.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#include "e-preview-pane.h"
+
+#include <gdk/gdkkeysyms.h>
+
+#define E_PREVIEW_PANE_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE \
+	((obj), E_TYPE_PREVIEW_PANE, EPreviewPanePrivate))
+
+struct _EPreviewPanePrivate {
+	GtkWidget *web_view;
+	GtkWidget *search_bar;
+};
+
+enum {
+	PROP_0,
+	PROP_SEARCH_BAR,
+	PROP_WEB_VIEW
+};
+
+enum {
+	SHOW_SEARCH_BAR,
+	LAST_SIGNAL
+};
+
+static gpointer parent_class;
+static guint signals[LAST_SIGNAL];
+
+static void
+preview_pane_set_web_view (EPreviewPane *preview_pane,
+                           EWebView *web_view)
+{
+	g_return_if_fail (E_IS_WEB_VIEW (web_view));
+	g_return_if_fail (preview_pane->priv->web_view == NULL);
+
+	preview_pane->priv->web_view = g_object_ref_sink (web_view);
+}
+
+static void
+preview_pane_set_property (GObject *object,
+                           guint property_id,
+                           const GValue *value,
+                           GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_WEB_VIEW:
+			preview_pane_set_web_view (
+				E_PREVIEW_PANE (object),
+				g_value_get_object (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+preview_pane_get_property (GObject *object,
+                           guint property_id,
+                           GValue *value,
+                           GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_SEARCH_BAR:
+			g_value_set_object (
+				value, e_preview_pane_get_search_bar (
+				E_PREVIEW_PANE (object)));
+			return;
+
+		case PROP_WEB_VIEW:
+			g_value_set_object (
+				value, e_preview_pane_get_web_view (
+				E_PREVIEW_PANE (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+preview_pane_dispose (GObject *object)
+{
+	EPreviewPanePrivate *priv;
+
+	priv = E_PREVIEW_PANE_GET_PRIVATE (object);
+
+	if (priv->search_bar != NULL) {
+		g_object_unref (priv->search_bar);
+		priv->search_bar = NULL;
+	}
+
+	if (priv->web_view != NULL) {
+		g_object_unref (priv->web_view);
+		priv->web_view = NULL;
+	}
+
+	/* Chain up to parent's dispose() method. */
+	G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+preview_pane_constructed (GObject *object)
+{
+	EPreviewPanePrivate *priv;
+	GtkWidget *widget;
+
+	priv = E_PREVIEW_PANE_GET_PRIVATE (object);
+
+	widget = gtk_scrolled_window_new (NULL, NULL);
+	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_box_pack_start (GTK_BOX (object), widget, TRUE, TRUE, 0);
+	gtk_container_add (GTK_CONTAINER (widget), priv->web_view);
+	gtk_widget_show (widget);
+
+	widget = e_search_bar_new (E_WEB_VIEW (priv->web_view));
+	gtk_box_pack_start (GTK_BOX (object), widget, FALSE, FALSE, 0);
+	priv->search_bar = g_object_ref (widget);
+	gtk_widget_hide (widget);
+}
+
+static void
+preview_pane_show_search_bar (EPreviewPane *preview_pane)
+{
+	GtkWidget *search_bar;
+
+	search_bar = preview_pane->priv->search_bar;
+
+	if (!gtk_widget_get_visible (search_bar))
+		gtk_widget_show (search_bar);
+}
+
+static void
+preview_pane_class_init (EPreviewPaneClass *class)
+{
+	GObjectClass *object_class;
+	GtkBindingSet *binding_set;
+
+	parent_class = g_type_class_peek_parent (class);
+	g_type_class_add_private (class, sizeof (EPreviewPanePrivate));
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->set_property = preview_pane_set_property;
+	object_class->get_property = preview_pane_get_property;
+	object_class->dispose = preview_pane_dispose;
+	object_class->constructed = preview_pane_constructed;
+
+	class->show_search_bar = preview_pane_show_search_bar;
+
+	g_object_class_install_property (
+		object_class,
+		PROP_SEARCH_BAR,
+		g_param_spec_object (
+			"search-bar",
+			"Search Bar",
+			NULL,
+			E_TYPE_SEARCH_BAR,
+			G_PARAM_READABLE));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_WEB_VIEW,
+		g_param_spec_object (
+			"web-view",
+			"Web View",
+			NULL,
+			E_TYPE_WEB_VIEW,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT_ONLY));
+
+	signals[SHOW_SEARCH_BAR] = g_signal_new (
+		"show-search-bar",
+		G_TYPE_FROM_CLASS (class),
+		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+		G_STRUCT_OFFSET (EPreviewPaneClass, show_search_bar),
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+		G_TYPE_NONE, 0);
+
+	binding_set = gtk_binding_set_by_class (class);
+
+	gtk_binding_entry_add_signal (
+		binding_set, GDK_f, GDK_SHIFT_MASK | GDK_CONTROL_MASK,
+		"show-search-bar", 0);
+}
+
+static void
+preview_pane_init (EPreviewPane *preview_pane)
+{
+	preview_pane->priv = E_PREVIEW_PANE_GET_PRIVATE (preview_pane);
+
+	gtk_box_set_spacing (GTK_BOX (preview_pane), 1);
+}
+
+GType
+e_preview_pane_get_type (void)
+{
+	static GType type = 0;
+
+	if (G_UNLIKELY (type == 0)) {
+		static const GTypeInfo type_info = {
+			sizeof (EPreviewPaneClass),
+			(GBaseInitFunc) NULL,
+			(GBaseFinalizeFunc) NULL,
+			(GClassInitFunc) preview_pane_class_init,
+			(GClassFinalizeFunc) NULL,
+			NULL,  /* class_data */
+			sizeof (EPreviewPane),
+			0,     /* n_preallocs */
+			(GInstanceInitFunc) preview_pane_init,
+			NULL   /* value_table */
+		};
+
+		type = g_type_register_static (
+			GTK_TYPE_VBOX, "EPreviewPane", &type_info, 0);
+	}
+
+	return type;
+}
+
+GtkWidget *
+e_preview_pane_new (EWebView *web_view)
+{
+	g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
+
+	return g_object_new (
+		E_TYPE_PREVIEW_PANE,
+		"web-view", web_view, NULL);
+}
+
+EWebView *
+e_preview_pane_get_web_view (EPreviewPane *preview_pane)
+{
+	g_return_val_if_fail (E_IS_PREVIEW_PANE (preview_pane), NULL);
+
+	return E_WEB_VIEW (preview_pane->priv->web_view);
+}
+
+ESearchBar *
+e_preview_pane_get_search_bar (EPreviewPane *preview_pane)
+{
+	g_return_val_if_fail (E_IS_PREVIEW_PANE (preview_pane), NULL);
+
+	return E_SEARCH_BAR (preview_pane->priv->search_bar);
+}
+
+void
+e_preview_pane_show_search_bar (EPreviewPane *preview_pane)
+{
+	g_return_if_fail (E_IS_PREVIEW_PANE (preview_pane));
+
+	g_signal_emit (preview_pane, signals[SHOW_SEARCH_BAR], 0);
+}
diff --git a/widgets/misc/e-preview-pane.h b/widgets/misc/e-preview-pane.h
new file mode 100644
index 0000000..bd965ed
--- /dev/null
+++ b/widgets/misc/e-preview-pane.h
@@ -0,0 +1,74 @@
+/*
+ * e-preview-pane.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef E_PREVIEW_PANE_H
+#define E_PREVIEW_PANE_H
+
+#include <gtk/gtk.h>
+#include <misc/e-search-bar.h>
+#include <misc/e-web-view.h>
+
+/* Standard GObject macros */
+#define E_TYPE_PREVIEW_PANE \
+	(e_preview_pane_get_type ())
+#define E_PREVIEW_PANE(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_PREVIEW_PANE, EPreviewPane))
+#define E_PREVIEW_PANE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), E_TYPE_PREVIEW_PANE, EPreviewPaneClass))
+#define E_IS_PREVIEW_PANE(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_PREVIEW_PANE))
+#define E_IS_PREVIEW_PANE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), E_TYPE_PREVIEW_PANE))
+#define E_PREVIEW_PANE_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_PREVIEW_PANE, EPreviewPaneClass))
+
+G_BEGIN_DECLS
+
+typedef struct _EPreviewPane EPreviewPane;
+typedef struct _EPreviewPaneClass EPreviewPaneClass;
+typedef struct _EPreviewPanePrivate EPreviewPanePrivate;
+
+struct _EPreviewPane {
+	GtkVBox parent;
+	EPreviewPanePrivate *priv;
+};
+
+struct _EPreviewPaneClass {
+	GtkVBoxClass parent_class;
+
+	/* Signals */
+	void		(*show_search_bar)	(EPreviewPane *preview_pane);
+};
+
+GType		e_preview_pane_get_type		(void);
+GtkWidget *	e_preview_pane_new		(EWebView *web_view);
+EWebView *	e_preview_pane_get_web_view	(EPreviewPane *preview_pane);
+ESearchBar *	e_preview_pane_get_search_bar	(EPreviewPane *preview_pane);
+void		e_preview_pane_show_search_bar	(EPreviewPane *preview_pane);
+
+G_END_DECLS
+
+#endif /* E_PREVIEW_PANE_H */
diff --git a/mail/e-mail-search-bar.c b/widgets/misc/e-search-bar.c
similarity index 70%
rename from mail/e-mail-search-bar.c
rename to widgets/misc/e-search-bar.c
index c4b552a..120f114 100644
--- a/mail/e-mail-search-bar.c
+++ b/widgets/misc/e-search-bar.c
@@ -1,5 +1,5 @@
 /*
- * e-mail-search-bar.c
+ * e-search-bar.c
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -19,7 +19,7 @@
  *
  */
 
-#include "e-mail-search-bar.h"
+#include "e-search-bar.h"
 
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
@@ -27,11 +27,11 @@
 
 #include "e-util/e-binding.h"
 
-#define E_MAIL_SEARCH_BAR_GET_PRIVATE(obj) \
+#define E_SEARCH_BAR_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
-	((obj), E_TYPE_MAIL_SEARCH_BAR, EMailSearchBarPrivate))
+	((obj), E_TYPE_SEARCH_BAR, ESearchBarPrivate))
 
-struct _EMailSearchBarPrivate {
+struct _ESearchBarPrivate {
 	EWebView *web_view;
 	GtkWidget *entry;
 	GtkWidget *case_sensitive_button;
@@ -63,14 +63,14 @@ static gpointer parent_class;
 static guint signals[LAST_SIGNAL];
 
 static void
-mail_search_bar_update_matches (EMailSearchBar *search_bar)
+search_bar_update_matches (ESearchBar *search_bar)
 {
 	ESearchingTokenizer *tokenizer;
 	GtkWidget *matches_label;
 	gint matches;
 	gchar *text;
 
-	tokenizer = e_mail_search_bar_get_tokenizer (search_bar);
+	tokenizer = e_search_bar_get_tokenizer (search_bar);
 	matches_label = search_bar->priv->matches_label;
 
 	matches = e_searching_tokenizer_match_count (tokenizer);
@@ -83,14 +83,14 @@ mail_search_bar_update_matches (EMailSearchBar *search_bar)
 }
 
 static void
-mail_search_bar_update_tokenizer (EMailSearchBar *search_bar)
+search_bar_update_tokenizer (ESearchBar *search_bar)
 {
 	ESearchingTokenizer *tokenizer;
 	gboolean case_sensitive;
 	gchar *active_search;
 
-	tokenizer = e_mail_search_bar_get_tokenizer (search_bar);
-	case_sensitive = e_mail_search_bar_get_case_sensitive (search_bar);
+	tokenizer = e_search_bar_get_tokenizer (search_bar);
+	case_sensitive = e_search_bar_get_case_sensitive (search_bar);
 
 	if (GTK_WIDGET_VISIBLE (search_bar))
 		active_search = search_bar->priv->active_search;
@@ -102,12 +102,12 @@ mail_search_bar_update_tokenizer (EMailSearchBar *search_bar)
 	e_searching_tokenizer_set_primary_search_string (
 		tokenizer, active_search);
 
-	e_mail_search_bar_changed (search_bar);
+	e_search_bar_changed (search_bar);
 }
 
 static void
-mail_search_bar_find (EMailSearchBar *search_bar,
-                      gboolean search_forward)
+search_bar_find (ESearchBar *search_bar,
+                 gboolean search_forward)
 {
 	EWebView *web_view;
 	GtkWidget *widget;
@@ -116,12 +116,12 @@ mail_search_bar_find (EMailSearchBar *search_bar,
 	gboolean wrapped = FALSE;
 	gchar *text;
 
-	web_view = e_mail_search_bar_get_web_view (search_bar);
-	case_sensitive = e_mail_search_bar_get_case_sensitive (search_bar);
-	text = e_mail_search_bar_get_text (search_bar);
+	web_view = e_search_bar_get_web_view (search_bar);
+	case_sensitive = e_search_bar_get_case_sensitive (search_bar);
+	text = e_search_bar_get_text (search_bar);
 
 	if (text == NULL || *text == '\0') {
-		e_mail_search_bar_clear (search_bar);
+		e_search_bar_clear (search_bar);
 		g_free (text);
 		return;
 	}
@@ -147,7 +147,7 @@ mail_search_bar_find (EMailSearchBar *search_bar,
 		g_free (search_bar->priv->active_search);
 		search_bar->priv->active_search = text;
 		search_bar->priv->rerun_search = TRUE;
-		mail_search_bar_update_tokenizer (search_bar);
+		search_bar_update_tokenizer (search_bar);
 	} else if (search_bar->priv->rerun_search) {
 		gtk_html_engine_search (
 			GTK_HTML (web_view),
@@ -189,36 +189,36 @@ mail_search_bar_find (EMailSearchBar *search_bar,
 }
 
 static void
-mail_search_bar_changed_cb (EMailSearchBar *search_bar)
+search_bar_changed_cb (ESearchBar *search_bar)
 {
 	g_object_notify (G_OBJECT (search_bar), "text");
 }
 
 static void
-mail_search_bar_find_next_cb (EMailSearchBar *search_bar)
+search_bar_find_next_cb (ESearchBar *search_bar)
 {
-	mail_search_bar_find (search_bar, TRUE);
+	search_bar_find (search_bar, TRUE);
 }
 
 static void
-mail_search_bar_find_previous_cb (EMailSearchBar *search_bar)
+search_bar_find_previous_cb (ESearchBar *search_bar)
 {
-	mail_search_bar_find (search_bar, FALSE);
+	search_bar_find (search_bar, FALSE);
 }
 
 static void
-mail_search_bar_icon_release_cb (EMailSearchBar *search_bar,
-                                 GtkEntryIconPosition icon_pos,
-                                 GdkEvent *event)
+search_bar_icon_release_cb (ESearchBar *search_bar,
+                            GtkEntryIconPosition icon_pos,
+                            GdkEvent *event)
 {
 	g_return_if_fail (icon_pos == GTK_ENTRY_ICON_SECONDARY);
 
-	e_mail_search_bar_clear (search_bar);
+	e_search_bar_clear (search_bar);
 	gtk_widget_grab_focus (search_bar->priv->entry);
 }
 
 static void
-mail_search_bar_toggled_cb (EMailSearchBar *search_bar)
+search_bar_toggled_cb (ESearchBar *search_bar)
 {
 	g_free (search_bar->priv->active_search);
 	search_bar->priv->active_search = NULL;
@@ -228,8 +228,8 @@ mail_search_bar_toggled_cb (EMailSearchBar *search_bar)
 }
 
 static void
-mail_search_bar_set_web_view (EMailSearchBar *search_bar,
-                              EWebView *web_view)
+search_bar_set_web_view (ESearchBar *search_bar,
+                         EWebView *web_view)
 {
 	GtkHTML *html;
 	ESearchingTokenizer *tokenizer;
@@ -239,32 +239,32 @@ mail_search_bar_set_web_view (EMailSearchBar *search_bar,
 	search_bar->priv->web_view = g_object_ref (web_view);
 
 	html = GTK_HTML (web_view);
-	tokenizer = e_mail_search_bar_get_tokenizer (search_bar);
+	tokenizer = e_search_bar_get_tokenizer (search_bar);
 	gtk_html_set_tokenizer (html, HTML_TOKENIZER (tokenizer));
 }
 
 static void
-mail_search_bar_set_property (GObject *object,
-                              guint property_id,
-                              const GValue *value,
-                              GParamSpec *pspec)
+search_bar_set_property (GObject *object,
+                         guint property_id,
+                         const GValue *value,
+                         GParamSpec *pspec)
 {
 	switch (property_id) {
 		case PROP_CASE_SENSITIVE:
-			e_mail_search_bar_set_case_sensitive (
-				E_MAIL_SEARCH_BAR (object),
+			e_search_bar_set_case_sensitive (
+				E_SEARCH_BAR (object),
 				g_value_get_boolean (value));
 			return;
 
 		case PROP_TEXT:
-			e_mail_search_bar_set_text (
-				E_MAIL_SEARCH_BAR (object),
+			e_search_bar_set_text (
+				E_SEARCH_BAR (object),
 				g_value_get_string (value));
 			return;
 
 		case PROP_WEB_VIEW:
-			mail_search_bar_set_web_view (
-				E_MAIL_SEARCH_BAR (object),
+			search_bar_set_web_view (
+				E_SEARCH_BAR (object),
 				g_value_get_object (value));
 			return;
 	}
@@ -273,34 +273,34 @@ mail_search_bar_set_property (GObject *object,
 }
 
 static void
-mail_search_bar_get_property (GObject *object,
-                              guint property_id,
-                              GValue *value,
-                              GParamSpec *pspec)
+search_bar_get_property (GObject *object,
+                         guint property_id,
+                         GValue *value,
+                         GParamSpec *pspec)
 {
 	switch (property_id) {
 		case PROP_ACTIVE_SEARCH:
 			g_value_set_boolean (
-				value, e_mail_search_bar_get_active_search (
-				E_MAIL_SEARCH_BAR (object)));
+				value, e_search_bar_get_active_search (
+				E_SEARCH_BAR (object)));
 			return;
 
 		case PROP_CASE_SENSITIVE:
 			g_value_set_boolean (
-				value, e_mail_search_bar_get_case_sensitive (
-				E_MAIL_SEARCH_BAR (object)));
+				value, e_search_bar_get_case_sensitive (
+				E_SEARCH_BAR (object)));
 			return;
 
 		case PROP_TEXT:
 			g_value_take_string (
-				value, e_mail_search_bar_get_text (
-				E_MAIL_SEARCH_BAR (object)));
+				value, e_search_bar_get_text (
+				E_SEARCH_BAR (object)));
 			return;
 
 		case PROP_WEB_VIEW:
 			g_value_set_object (
-				value, e_mail_search_bar_get_web_view (
-				E_MAIL_SEARCH_BAR (object)));
+				value, e_search_bar_get_web_view (
+				E_SEARCH_BAR (object)));
 			return;
 	}
 
@@ -308,11 +308,11 @@ mail_search_bar_get_property (GObject *object,
 }
 
 static void
-mail_search_bar_dispose (GObject *object)
+search_bar_dispose (GObject *object)
 {
-	EMailSearchBarPrivate *priv;
+	ESearchBarPrivate *priv;
 
-	priv = E_MAIL_SEARCH_BAR_GET_PRIVATE (object);
+	priv = E_SEARCH_BAR_GET_PRIVATE (object);
 
 	if (priv->web_view != NULL) {
 		g_object_unref (priv->web_view);
@@ -354,11 +354,11 @@ mail_search_bar_dispose (GObject *object)
 }
 
 static void
-mail_search_bar_finalize (GObject *object)
+search_bar_finalize (GObject *object)
 {
-	EMailSearchBarPrivate *priv;
+	ESearchBarPrivate *priv;
 
-	priv = E_MAIL_SEARCH_BAR_GET_PRIVATE (object);
+	priv = E_SEARCH_BAR_GET_PRIVATE (object);
 
 	g_free (priv->active_search);
 
@@ -367,11 +367,11 @@ mail_search_bar_finalize (GObject *object)
 }
 
 static void
-mail_search_bar_constructed (GObject *object)
+search_bar_constructed (GObject *object)
 {
-	EMailSearchBarPrivate *priv;
+	ESearchBarPrivate *priv;
 
-	priv = E_MAIL_SEARCH_BAR_GET_PRIVATE (object);
+	priv = E_SEARCH_BAR_GET_PRIVATE (object);
 
 	e_mutual_binding_new (
 		object, "case-sensitive",
@@ -379,49 +379,51 @@ mail_search_bar_constructed (GObject *object)
 }
 
 static void
-mail_search_bar_show (GtkWidget *widget)
+search_bar_show (GtkWidget *widget)
 {
-	EMailSearchBar *search_bar;
+	ESearchBar *search_bar;
 
-	search_bar = E_MAIL_SEARCH_BAR (widget);
+	search_bar = E_SEARCH_BAR (widget);
 
 	/* Chain up to parent's show() method. */
 	GTK_WIDGET_CLASS (parent_class)->show (widget);
 
 	gtk_widget_grab_focus (search_bar->priv->entry);
 
-	mail_search_bar_update_tokenizer (search_bar);
+	search_bar_update_tokenizer (search_bar);
 }
 
 static void
-mail_search_bar_hide (GtkWidget *widget)
+search_bar_hide (GtkWidget *widget)
 {
-	EMailSearchBar *search_bar;
+	ESearchBar *search_bar;
 
-	search_bar = E_MAIL_SEARCH_BAR (widget);
+	search_bar = E_SEARCH_BAR (widget);
 
 	/* Chain up to parent's hide() method. */
 	GTK_WIDGET_CLASS (parent_class)->hide (widget);
 
-	mail_search_bar_update_tokenizer (search_bar);
+	search_bar_update_tokenizer (search_bar);
 }
 
 static gboolean
-mail_search_bar_key_press_event (GtkWidget *widget,
-                                 GdkEventKey *event)
+search_bar_key_press_event (GtkWidget *widget,
+                            GdkEventKey *event)
 {
+	GtkWidgetClass *widget_class;
+
 	if (event->keyval == GDK_Escape) {
 		gtk_widget_hide (widget);
 		return TRUE;
 	}
 
 	/* Chain up to parent's key_press_event() method. */
-	return GTK_WIDGET_CLASS (parent_class)->
-		key_press_event (widget, event);
+	widget_class = GTK_WIDGET_CLASS (parent_class);
+	return widget_class->key_press_event (widget, event);
 }
 
 static void
-mail_search_bar_clear (EMailSearchBar *search_bar)
+search_bar_clear (ESearchBar *search_bar)
 {
 	g_free (search_bar->priv->active_search);
 	search_bar->priv->active_search = NULL;
@@ -432,33 +434,33 @@ mail_search_bar_clear (EMailSearchBar *search_bar)
 	gtk_widget_hide (search_bar->priv->wrapped_prev_box);
 	gtk_widget_hide (search_bar->priv->matches_label);
 
-	mail_search_bar_update_tokenizer (search_bar);
+	search_bar_update_tokenizer (search_bar);
 
 	g_object_notify (G_OBJECT (search_bar), "active-search");
 }
 
 static void
-mail_search_bar_class_init (EMailSearchBarClass *class)
+search_bar_class_init (ESearchBarClass *class)
 {
 	GObjectClass *object_class;
 	GtkWidgetClass *widget_class;
 
 	parent_class = g_type_class_peek_parent (class);
-	g_type_class_add_private (class, sizeof (EMailSearchBarPrivate));
+	g_type_class_add_private (class, sizeof (ESearchBarPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->set_property = mail_search_bar_set_property;
-	object_class->get_property = mail_search_bar_get_property;
-	object_class->dispose = mail_search_bar_dispose;
-	object_class->finalize = mail_search_bar_finalize;
-	object_class->constructed = mail_search_bar_constructed;
+	object_class->set_property = search_bar_set_property;
+	object_class->get_property = search_bar_get_property;
+	object_class->dispose = search_bar_dispose;
+	object_class->finalize = search_bar_finalize;
+	object_class->constructed = search_bar_constructed;
 
 	widget_class = GTK_WIDGET_CLASS (class);
-	widget_class->show = mail_search_bar_show;
-	widget_class->hide = mail_search_bar_hide;
-	widget_class->key_press_event = mail_search_bar_key_press_event;
+	widget_class->show = search_bar_show;
+	widget_class->hide = search_bar_hide;
+	widget_class->key_press_event = search_bar_key_press_event;
 
-	class->clear = mail_search_bar_clear;
+	class->clear = search_bar_clear;
 
 	g_object_class_install_property (
 		object_class,
@@ -505,7 +507,7 @@ mail_search_bar_class_init (EMailSearchBarClass *class)
 		"changed",
 		G_TYPE_FROM_CLASS (class),
 		G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
-		G_STRUCT_OFFSET (EMailSearchBarClass, changed),
+		G_STRUCT_OFFSET (ESearchBarClass, changed),
 		NULL, NULL,
 		g_cclosure_marshal_VOID__VOID,
 		G_TYPE_NONE, 0);
@@ -514,25 +516,25 @@ mail_search_bar_class_init (EMailSearchBarClass *class)
 		"clear",
 		G_TYPE_FROM_CLASS (class),
 		G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
-		G_STRUCT_OFFSET (EMailSearchBarClass, clear),
+		G_STRUCT_OFFSET (ESearchBarClass, clear),
 		NULL, NULL,
 		g_cclosure_marshal_VOID__VOID,
 		G_TYPE_NONE, 0);
 }
 
 static void
-mail_search_bar_init (EMailSearchBar *search_bar)
+search_bar_init (ESearchBar *search_bar)
 {
 	GtkWidget *label;
 	GtkWidget *widget;
 	GtkWidget *container;
 
-	search_bar->priv = E_MAIL_SEARCH_BAR_GET_PRIVATE (search_bar);
+	search_bar->priv = E_SEARCH_BAR_GET_PRIVATE (search_bar);
 	search_bar->priv->tokenizer = e_searching_tokenizer_new ();
 
 	g_signal_connect_swapped (
 		search_bar->priv->tokenizer, "match",
-		G_CALLBACK (mail_search_bar_update_matches), search_bar);
+		G_CALLBACK (search_bar_update_matches), search_bar);
 
 	gtk_box_set_spacing (GTK_BOX (search_bar), 12);
 
@@ -582,15 +584,15 @@ mail_search_bar_init (EMailSearchBar *search_bar)
 
 	g_signal_connect_swapped (
 		widget, "activate",
-		G_CALLBACK (mail_search_bar_find_next_cb), search_bar);
+		G_CALLBACK (search_bar_find_next_cb), search_bar);
 
 	g_signal_connect_swapped (
 		widget, "changed",
-		G_CALLBACK (mail_search_bar_changed_cb), search_bar);
+		G_CALLBACK (search_bar_changed_cb), search_bar);
 
 	g_signal_connect_swapped (
 		widget, "icon-release",
-		G_CALLBACK (mail_search_bar_icon_release_cb), search_bar);
+		G_CALLBACK (search_bar_icon_release_cb), search_bar);
 
 	widget = gtk_button_new_with_mnemonic (_("_Previous"));
 	gtk_button_set_image (
@@ -606,7 +608,7 @@ mail_search_bar_init (EMailSearchBar *search_bar)
 
 	g_signal_connect_swapped (
 		widget, "clicked",
-		G_CALLBACK (mail_search_bar_find_previous_cb), search_bar);
+		G_CALLBACK (search_bar_find_previous_cb), search_bar);
 
 	widget = gtk_button_new_with_mnemonic (_("_Next"));
 	gtk_button_set_image (
@@ -622,7 +624,7 @@ mail_search_bar_init (EMailSearchBar *search_bar)
 
 	g_signal_connect_swapped (
 		widget, "clicked",
-		G_CALLBACK (mail_search_bar_find_next_cb), search_bar);
+		G_CALLBACK (search_bar_find_next_cb), search_bar);
 
 	widget = gtk_check_button_new_with_mnemonic (_("Mat_ch case"));
 	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
@@ -631,11 +633,11 @@ mail_search_bar_init (EMailSearchBar *search_bar)
 
 	g_signal_connect_swapped (
 		widget, "toggled",
-		G_CALLBACK (mail_search_bar_toggled_cb), search_bar);
+		G_CALLBACK (search_bar_toggled_cb), search_bar);
 
 	g_signal_connect_swapped (
 		widget, "toggled",
-		G_CALLBACK (mail_search_bar_find_next_cb), search_bar);
+		G_CALLBACK (search_bar_find_next_cb), search_bar);
 
 	container = GTK_WIDGET (search_bar);
 
@@ -690,86 +692,86 @@ mail_search_bar_init (EMailSearchBar *search_bar)
 }
 
 GType
-e_mail_search_bar_get_type (void)
+e_search_bar_get_type (void)
 {
 	static GType type = 0;
 
 	if (G_UNLIKELY (type == 0)) {
 		static const GTypeInfo type_info = {
-			sizeof (EMailSearchBarClass),
+			sizeof (ESearchBarClass),
 			(GBaseInitFunc) NULL,
 			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) mail_search_bar_class_init,
+			(GClassInitFunc) search_bar_class_init,
 			(GClassFinalizeFunc) NULL,
 			NULL,  /* class_data */
-			sizeof (EMailSearchBar),
+			sizeof (ESearchBar),
 			0,     /* n_preallocs */
-			(GInstanceInitFunc) mail_search_bar_init,
+			(GInstanceInitFunc) search_bar_init,
 			NULL   /* value_table */
 		};
 
 		type = g_type_register_static (
-			GTK_TYPE_HBOX, "EMailSearchBar", &type_info, 0);
+			GTK_TYPE_HBOX, "ESearchBar", &type_info, 0);
 	}
 
 	return type;
 }
 
 GtkWidget *
-e_mail_search_bar_new (EWebView *web_view)
+e_search_bar_new (EWebView *web_view)
 {
 	g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
 
 	return g_object_new (
-		E_TYPE_MAIL_SEARCH_BAR, "web-view", web_view, NULL);
+		E_TYPE_SEARCH_BAR, "web-view", web_view, NULL);
 }
 
 void
-e_mail_search_bar_clear (EMailSearchBar *search_bar)
+e_search_bar_clear (ESearchBar *search_bar)
 {
-	g_return_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar));
+	g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
 
 	g_signal_emit (search_bar, signals[CLEAR], 0);
 }
 
 void
-e_mail_search_bar_changed (EMailSearchBar *search_bar)
+e_search_bar_changed (ESearchBar *search_bar)
 {
-	g_return_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar));
+	g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
 
 	g_signal_emit (search_bar, signals[CHANGED], 0);
 }
 
 EWebView *
-e_mail_search_bar_get_web_view (EMailSearchBar *search_bar)
+e_search_bar_get_web_view (ESearchBar *search_bar)
 {
-	g_return_val_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar), NULL);
+	g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), NULL);
 
 	return search_bar->priv->web_view;
 }
 
 ESearchingTokenizer *
-e_mail_search_bar_get_tokenizer (EMailSearchBar *search_bar)
+e_search_bar_get_tokenizer (ESearchBar *search_bar)
 {
-	g_return_val_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar), NULL);
+	g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), NULL);
 
 	return search_bar->priv->tokenizer;
 }
 
 gboolean
-e_mail_search_bar_get_active_search (EMailSearchBar *search_bar)
+e_search_bar_get_active_search (ESearchBar *search_bar)
 {
-	g_return_val_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar), FALSE);
+	g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), FALSE);
 
 	return (search_bar->priv->active_search != NULL);
 }
 
 gboolean
-e_mail_search_bar_get_case_sensitive (EMailSearchBar *search_bar)
+e_search_bar_get_case_sensitive (ESearchBar *search_bar)
 {
 	GtkToggleButton *button;
 
-	g_return_val_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar), FALSE);
+	g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), FALSE);
 
 	button = GTK_TOGGLE_BUTTON (search_bar->priv->case_sensitive_button);
 
@@ -777,12 +779,12 @@ e_mail_search_bar_get_case_sensitive (EMailSearchBar *search_bar)
 }
 
 void
-e_mail_search_bar_set_case_sensitive (EMailSearchBar *search_bar,
-                                      gboolean case_sensitive)
+e_search_bar_set_case_sensitive (ESearchBar *search_bar,
+                                 gboolean case_sensitive)
 {
 	GtkToggleButton *button;
 
-	g_return_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar));
+	g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
 
 	button = GTK_TOGGLE_BUTTON (search_bar->priv->case_sensitive_button);
 
@@ -792,12 +794,12 @@ e_mail_search_bar_set_case_sensitive (EMailSearchBar *search_bar,
 }
 
 gchar *
-e_mail_search_bar_get_text (EMailSearchBar *search_bar)
+e_search_bar_get_text (ESearchBar *search_bar)
 {
 	GtkEntry *entry;
 	const gchar *text;
 
-	g_return_val_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar), NULL);
+	g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), NULL);
 
 	entry = GTK_ENTRY (search_bar->priv->entry);
 	text = gtk_entry_get_text (entry);
@@ -806,12 +808,12 @@ e_mail_search_bar_get_text (EMailSearchBar *search_bar)
 }
 
 void
-e_mail_search_bar_set_text (EMailSearchBar *search_bar,
-                            const gchar *text)
+e_search_bar_set_text (ESearchBar *search_bar,
+                       const gchar *text)
 {
 	GtkEntry *entry;
 
-	g_return_if_fail (E_IS_MAIL_SEARCH_BAR (search_bar));
+	g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
 
 	entry = GTK_ENTRY (search_bar->priv->entry);
 
diff --git a/widgets/misc/e-search-bar.h b/widgets/misc/e-search-bar.h
new file mode 100644
index 0000000..87e1023
--- /dev/null
+++ b/widgets/misc/e-search-bar.h
@@ -0,0 +1,87 @@
+/*
+ * e-search-bar.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef E_SEARCH_BAR_H
+#define E_SEARCH_BAR_H
+
+#include <gtk/gtk.h>
+#include <misc/e-searching-tokenizer.h>
+#include <misc/e-web-view.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SEARCH_BAR \
+	(e_search_bar_get_type ())
+#define E_SEARCH_BAR(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_SEARCH_BAR, ESearchBar))
+#define E_SEARCH_BAR_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), E_TYPE_SEARCH_BAR, ESearchBarClass))
+#define E_IS_SEARCH_BAR(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_SEARCH_BAR))
+#define E_IS_SEARCH_BAR_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), E_TYPE_SEARCH_BAR))
+#define E_SEARCH_BAR_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_SEARCH_BAR, ESearchBarClass))
+
+G_BEGIN_DECLS
+
+typedef struct _ESearchBar ESearchBar;
+typedef struct _ESearchBarClass ESearchBarClass;
+typedef struct _ESearchBarPrivate ESearchBarPrivate;
+
+struct _ESearchBar {
+	GtkHBox parent;
+	ESearchBarPrivate *priv;
+};
+
+struct _ESearchBarClass {
+	GtkHBoxClass parent_class;
+
+	/* Signals */
+	void		(*changed)		(ESearchBar *search_bar);
+	void		(*clear)		(ESearchBar *search_bar);
+};
+
+GType		e_search_bar_get_type		(void);
+GtkWidget *	e_search_bar_new		(EWebView *web_view);
+void		e_search_bar_clear		(ESearchBar *search_bar);
+void		e_search_bar_changed		(ESearchBar *search_bar);
+EWebView *	e_search_bar_get_web_view	(ESearchBar *search_bar);
+ESearchingTokenizer *
+		e_search_bar_get_tokenizer	(ESearchBar *search_bar);
+gboolean	e_search_bar_get_active_search
+						(ESearchBar *search_bar);
+gboolean	e_search_bar_get_case_sensitive
+						(ESearchBar *search_bar);
+void		e_search_bar_set_case_sensitive
+						(ESearchBar *search_bar,
+						 gboolean case_sensitive);
+gchar *		e_search_bar_get_text		(ESearchBar *search_bar);
+void		e_search_bar_set_text		(ESearchBar *search_bar,
+						 const gchar *text);
+
+G_END_DECLS
+
+#endif /* E_SEARCH_BAR_H */
diff --git a/mail/e-searching-tokenizer.c b/widgets/misc/e-searching-tokenizer.c
similarity index 100%
rename from mail/e-searching-tokenizer.c
rename to widgets/misc/e-searching-tokenizer.c
diff --git a/mail/e-searching-tokenizer.h b/widgets/misc/e-searching-tokenizer.h
similarity index 100%
rename from mail/e-searching-tokenizer.h
rename to widgets/misc/e-searching-tokenizer.h



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]