aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2005-05-29 05:58:47 +0800
committerChristian Persch <chpe@src.gnome.org>2005-05-29 05:58:47 +0800
commitd0cc3530df347aed28b20fb884321a42b1b1958d (patch)
treeec070c45a016178c79322d426114bcde3b596ce6 /src
parent995f6539fb26444a0496b6311fecdbe9ad9cc8ff (diff)
downloadgsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar.gz
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar.bz2
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar.lz
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar.xz
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.tar.zst
gsoc2013-epiphany-d0cc3530df347aed28b20fb884321a42b1b1958d.zip
Check for toolkit nsITypeAheadFind.
2005-05-28 Christian Persch <chpe@cvs.gnome.org> * configure.ac: Check for toolkit nsITypeAheadFind. * embed/Makefile.am: * embed/ephy-embed-factory.c: (ephy_embed_factory_new_object): * embed/ephy-embed-find.c: (ephy_embed_find_set_embed), (ephy_embed_find_set_properties), (ephy_embed_find_find), (ephy_embed_find_find_again), (ephy_embed_find_get_type): * embed/ephy-embed-find.h: * embed/ephy-embed.c: * embed/ephy-embed.h: * embed/mozilla/EphyBrowser.cpp: * embed/mozilla/EphyBrowser.h: * embed/mozilla/EphyFind.cpp: * embed/mozilla/EphyFind.h: * embed/mozilla/Makefile.am: * embed/mozilla/mozilla-embed-find.cpp: * embed/mozilla/mozilla-embed-find.h: * embed/mozilla/mozilla-embed.cpp: * src/bookmarks/ephy-bookmarks-import.c: (gul_general_read_line_from_file): * src/ephy-find-toolbar.c: (get_find), (set_controls), (tab_content_changed_cb), (entry_changed_cb), (ephy_find_toolbar_init), (ephy_find_toolbar_finalize), (ephy_find_toolbar_class_init), (ephy_find_toolbar_new), (ephy_find_toolbar_get_text), (ephy_find_toolbar_set_embed), (ephy_find_toolbar_find_next), (ephy_find_toolbar_find_previous): * src/ephy-find-toolbar.h: * src/ephy-window.c: (ephy_window_set_active_tab), (ephy_window_init), (ephy_window_get_find_toolbar), (ephy_window_notebook_switch_page_cb): * src/ephy-window.h: * src/window-commands.c: (window_cmd_edit_find_next), (window_cmd_edit_find_prev): Implement typeaheadfind for the find toolbar.
Diffstat (limited to 'src')
-rw-r--r--src/ephy-find-toolbar.c165
-rw-r--r--src/ephy-find-toolbar.h15
-rw-r--r--src/ephy-window.c94
-rw-r--r--src/ephy-window.h2
-rw-r--r--src/window-commands.c17
5 files changed, 153 insertions, 140 deletions
diff --git a/src/ephy-find-toolbar.c b/src/ephy-find-toolbar.c
index 93ce237fe..10e244a1a 100644
--- a/src/ephy-find-toolbar.c
+++ b/src/ephy-find-toolbar.c
@@ -22,6 +22,8 @@
#include "config.h"
#include "ephy-find-toolbar.h"
+#include "ephy-embed-find.h"
+#include "ephy-embed-factory.h"
#include "ephy-debug.h"
#include <gdk/gdkkeysyms.h>
@@ -34,6 +36,7 @@
#include <gtk/gtkseparatortoolitem.h>
#include <gtk/gtkstock.h>
#include <gtk/gtktoolbutton.h>
+#include <gtk/gtkalignment.h>
#include <gtk/gtkmain.h>
#include <string.h>
@@ -41,7 +44,8 @@
struct _EphyFindToolbarPrivate
{
- EphyWindow *window;
+ EphyEmbedFind *find;
+ EphyEmbed *embed;
GtkWidget *entry;
GtkToolItem *next;
GtkToolItem *prev;
@@ -66,20 +70,29 @@ static guint signals[LAST_SIGNAL] = { 0 };
static GObjectClass *parent_class = NULL;
-/* public functions */
+/* private functions */
-const char *
-ephy_find_toolbar_get_text (EphyFindToolbar *toolbar)
+static EphyEmbedFind *
+get_find (EphyFindToolbar *toolbar)
{
EphyFindToolbarPrivate *priv = toolbar->priv;
- return gtk_entry_get_text (GTK_ENTRY (priv->entry));
+ if (priv->find == NULL)
+ {
+ priv->find = EPHY_EMBED_FIND (ephy_embed_factory_new_object (EPHY_TYPE_EMBED_FIND));
+
+ g_return_val_if_fail (priv->embed == NULL || GTK_WIDGET_REALIZED (GTK_WIDGET (priv->embed)), priv->find);
+
+ ephy_embed_find_set_embed (priv->find, priv->embed);
+ }
+
+ return priv->find;
}
-void
-ephy_find_toolbar_set_controls (EphyFindToolbar *toolbar,
- gboolean can_find_next,
- gboolean can_find_prev)
+static void
+set_controls (EphyFindToolbar *toolbar,
+ gboolean can_find_next,
+ gboolean can_find_prev)
{
EphyFindToolbarPrivate *priv = toolbar->priv;
@@ -87,7 +100,13 @@ ephy_find_toolbar_set_controls (EphyFindToolbar *toolbar,
gtk_widget_set_sensitive (GTK_WIDGET (priv->prev), can_find_prev);
}
-/* private functions */
+static void
+tab_content_changed_cb (EphyEmbed *embed,
+ const char *uri,
+ EphyFindToolbar *toolbar)
+{
+ set_controls (toolbar, TRUE, TRUE);
+}
static void
find_next_cb (EphyFindToolbar *toolbar)
@@ -103,9 +122,19 @@ find_prev_cb (EphyFindToolbar *toolbar)
static void
entry_changed_cb (GtkEntry *entry,
- GObject *toolbar)
+ EphyFindToolbar *toolbar)
{
- g_object_notify (toolbar, "text");
+ EphyFindToolbarPrivate *priv = toolbar->priv;
+ const char *text;
+ gboolean found = TRUE;
+
+ text = gtk_entry_get_text (GTK_ENTRY (priv->entry));
+#ifdef HAVE_TYPEAHEADFIND
+ found = ephy_embed_find_find (get_find (toolbar), text, FALSE);
+#else
+ ephy_embed_find_set_properties (get_find (toolbar), text, FALSE);
+#endif
+ set_controls (toolbar, found, found);
}
static gboolean
@@ -200,7 +229,7 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
EphyFindToolbarPrivate *priv;
GtkToolbar *gtoolbar;
GtkToolItem *item;
- GtkWidget *arrow, *box, *label;
+ GtkWidget *alignment, *arrow, *box, *label;
priv = toolbar->priv = EPHY_FIND_TOOLBAR_GET_PRIVATE (toolbar);
gtoolbar = GTK_TOOLBAR (toolbar);
@@ -208,7 +237,11 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
gtk_toolbar_set_style (gtoolbar, GTK_TOOLBAR_BOTH_HORIZ);
/* Find: |_____| */
+ alignment = gtk_alignment_new (0.0, 0.5, 1.0, 0.0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 2, 2);
+
box = gtk_hbox_new (FALSE, 12);
+ gtk_container_add (GTK_CONTAINER (alignment), box);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), _("Find:"));
@@ -220,7 +253,7 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
gtk_box_pack_start (GTK_BOX (box), priv->entry, TRUE, TRUE, 0);
item = gtk_tool_item_new ();
- gtk_container_add (GTK_CONTAINER (item), box);
+ gtk_container_add (GTK_CONTAINER (item), alignment);
//gtk_tool_item_set_expand (item, TRUE);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
gtk_widget_show_all (GTK_WIDGET (item));
@@ -265,53 +298,35 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
}
static void
-ephy_find_toolbar_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+ephy_find_toolbar_finalize (GObject *object)
{
EphyFindToolbar *toolbar = EPHY_FIND_TOOLBAR (object);
EphyFindToolbarPrivate *priv = toolbar->priv;
- switch (prop_id)
+ if (priv->find != NULL)
{
- case PROP_TEXT:
- gtk_entry_set_text (GTK_ENTRY (priv->entry),
- g_value_get_string (value));
- break;
+ g_object_unref (priv->find);
}
-}
-
-static void
-ephy_find_toolbar_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EphyFindToolbar *toolbar = EPHY_FIND_TOOLBAR (object);
- switch (prop_id)
- {
- case PROP_TEXT:
- g_value_set_string (value, ephy_find_toolbar_get_text (toolbar));
- break;
- }
+ parent_class->finalize (object);
}
static void
ephy_find_toolbar_class_init (EphyFindToolbarClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
- object_class->set_property = ephy_find_toolbar_set_property;
- object_class->get_property = ephy_find_toolbar_get_property;
+ object_class->finalize = ephy_find_toolbar_finalize;
widget_class->parent_set = ephy_find_toolbar_parent_set;
widget_class->grab_focus = ephy_find_toolbar_grab_focus;
+ klass->next = ephy_find_toolbar_find_next;
+ klass->previous = ephy_find_toolbar_find_previous;
+
signals[NEXT] =
g_signal_new ("next",
G_OBJECT_CLASS_TYPE (object_class),
@@ -339,18 +354,11 @@ ephy_find_toolbar_class_init (EphyFindToolbarClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- g_object_class_install_property
- (object_class,
- PROP_TEXT,
- g_param_spec_string ("text",
- "Search string",
- "Search string",
- "",
- G_PARAM_READWRITE));
-
g_type_class_add_private (klass, sizeof (EphyFindToolbarPrivate));
}
+/* public functions */
+
GType
ephy_find_toolbar_get_type (void)
{
@@ -384,3 +392,60 @@ ephy_find_toolbar_new (void)
{
return EPHY_FIND_TOOLBAR (g_object_new (EPHY_TYPE_FIND_TOOLBAR, NULL));
}
+
+const char *
+ephy_find_toolbar_get_text (EphyFindToolbar *toolbar)
+{
+ EphyFindToolbarPrivate *priv = toolbar->priv;
+
+ return gtk_entry_get_text (GTK_ENTRY (priv->entry));
+}
+
+void
+ephy_find_toolbar_set_embed (EphyFindToolbar *toolbar,
+ EphyEmbed *embed)
+{
+ EphyFindToolbarPrivate *priv = toolbar->priv;
+
+ if (priv->embed == embed) return;
+
+ if (priv->embed != NULL)
+ {
+ g_signal_handlers_disconnect_by_func
+ (embed, G_CALLBACK (tab_content_changed_cb), toolbar);
+ }
+
+ priv->embed = embed;
+ if (embed != NULL)
+ {
+ set_controls (toolbar, TRUE, TRUE);
+ g_signal_connect_object (embed, "ge-content-change",
+ G_CALLBACK (tab_content_changed_cb),
+ toolbar, G_CONNECT_AFTER);
+
+ if (priv->find != NULL)
+ {
+ g_return_if_fail (GTK_WIDGET_REALIZED (GTK_WIDGET (priv->embed)));
+
+ ephy_embed_find_set_embed (priv->find, embed);
+ }
+ }
+}
+
+void
+ephy_find_toolbar_find_next (EphyFindToolbar *toolbar)
+{
+ gboolean found;
+
+ found = ephy_embed_find_find_again (get_find (toolbar), TRUE);
+ set_controls (toolbar, found, found);
+}
+
+void
+ephy_find_toolbar_find_previous (EphyFindToolbar *toolbar)
+{
+ gboolean found;
+
+ found = ephy_embed_find_find_again (get_find (toolbar), FALSE);
+ set_controls (toolbar, found, found);
+}
diff --git a/src/ephy-find-toolbar.h b/src/ephy-find-toolbar.h
index 8f3ef4567..b55a2f2cf 100644
--- a/src/ephy-find-toolbar.h
+++ b/src/ephy-find-toolbar.h
@@ -57,15 +57,18 @@ struct _EphyFindToolbarClass
void (* close) (EphyFindToolbar *toolbar);
};
-GType ephy_find_toolbar_get_type (void) G_GNUC_CONST;
+GType ephy_find_toolbar_get_type (void) G_GNUC_CONST;
-EphyFindToolbar *ephy_find_toolbar_new (void);
+EphyFindToolbar *ephy_find_toolbar_new (void);
-const char *ephy_find_toolbar_get_text (EphyFindToolbar *toolbar);
+const char *ephy_find_toolbar_get_text (EphyFindToolbar *toolbar);
-void ephy_find_toolbar_set_controls (EphyFindToolbar *toolbar,
- gboolean next,
- gboolean previous);
+void ephy_find_toolbar_set_embed (EphyFindToolbar *toolbar,
+ EphyEmbed *embed);
+
+void ephy_find_toolbar_find_next (EphyFindToolbar *toolbar);
+
+void ephy_find_toolbar_find_previous (EphyFindToolbar *toolbar);
G_END_DECLS
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 79c5efee4..e48c73704 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -1790,18 +1790,6 @@ tab_context_menu_cb (EphyEmbed *embed,
return TRUE;
}
-static void
-tab_content_changed_cb (EphyEmbed *embed,
- const char *uri,
- EphyWindow *window)
-{
- EphyWindowPrivate *priv = window->priv;
-
- if (priv->closing) return;
-
- ephy_find_toolbar_set_controls (priv->find_toolbar, TRUE, TRUE);
-}
-
static gboolean
let_me_resize_hack (EphyWindow *window)
{
@@ -1922,9 +1910,8 @@ ephy_window_set_active_tab (EphyWindow *window, EphyTab *new_tab)
g_signal_handlers_disconnect_by_func
(embed, G_CALLBACK (tab_context_menu_cb), window);
g_signal_handlers_disconnect_by_func
- (embed, G_CALLBACK (tab_content_changed_cb), window);
- g_signal_handlers_disconnect_by_func
(embed, G_CALLBACK (tab_size_to_cb), window);
+
}
window->priv->active_tab = new_tab;
@@ -1985,9 +1972,6 @@ ephy_window_set_active_tab (EphyWindow *window, EphyTab *new_tab)
g_signal_connect_object (embed, "ge-context-menu",
G_CALLBACK (tab_context_menu_cb),
window, G_CONNECT_AFTER);
- g_signal_connect_object (embed, "ge-content-change",
- G_CALLBACK (tab_content_changed_cb),
- window, G_CONNECT_AFTER);
g_signal_connect_object (embed, "size-to",
G_CALLBACK (tab_size_to_cb),
window, 0);
@@ -2690,56 +2674,6 @@ ephy_window_open_link (EphyLink *link,
}
static void
-sync_find_toolbar_text_cb (EphyFindToolbar *toolbar,
- GParamSpec *pspec,
- EphyWindow *window)
-{
- EphyEmbed *embed;
- const char *text;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
-
- text = ephy_find_toolbar_get_text (toolbar);
- ephy_embed_find_set_properties (embed, text, FALSE, TRUE);
- ephy_find_toolbar_set_controls (toolbar, TRUE, TRUE);
-}
-
-static void
-find_toolbar_find_next_cb (EphyFindToolbar *toolbar,
- EphyWindow *window)
-{
- EphyEmbed *embed;
- const char *text;
- gboolean found;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
-
- text = ephy_find_toolbar_get_text (toolbar);
- ephy_embed_find_set_properties (embed, text, FALSE, TRUE);
- found = ephy_embed_find_next (embed, FALSE);
- ephy_find_toolbar_set_controls (toolbar, found, found);
-}
-
-static void
-find_toolbar_find_previous_cb (EphyFindToolbar *toolbar,
- EphyWindow *window)
-{
- EphyEmbed *embed;
- const char *text;
- gboolean found;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
-
- text = ephy_find_toolbar_get_text (toolbar);
- ephy_embed_find_set_properties (embed, text, FALSE, TRUE);
- found = ephy_embed_find_next (embed, TRUE);
- ephy_find_toolbar_set_controls (toolbar, found, found);
-}
-
-static void
find_toolbar_close_cb (EphyFindToolbar *toolbar,
EphyWindow *window)
{
@@ -2777,12 +2711,6 @@ ephy_window_init (EphyWindow *window)
gtk_widget_show (GTK_WIDGET (window->priv->notebook));
priv->find_toolbar = ephy_find_toolbar_new ();
- g_signal_connect (priv->find_toolbar, "notify::text",
- G_CALLBACK (sync_find_toolbar_text_cb), window);
- g_signal_connect (priv->find_toolbar, "next",
- G_CALLBACK (find_toolbar_find_next_cb), window);
- g_signal_connect (priv->find_toolbar, "previous",
- G_CALLBACK (find_toolbar_find_previous_cb), window);
g_signal_connect (priv->find_toolbar, "close",
G_CALLBACK (find_toolbar_close_cb), window);
gtk_box_pack_start (GTK_BOX (window->priv->main_vbox),
@@ -3057,6 +2985,22 @@ ephy_window_get_notebook (EphyWindow *window)
}
/**
+ * ephy_window_get_find_toolbar:
+ * @window: an #EphyWindow
+ *
+ * Returns the #EphyFindToolbar used by this window.
+ *
+ * Return value: the @window's #EphyFindToolbar
+ **/
+GtkWidget *
+ephy_window_get_find_toolbar (EphyWindow *window)
+{
+ g_return_val_if_fail (EPHY_IS_WINDOW (window), NULL);
+
+ return GTK_WIDGET (window->priv->find_toolbar);
+}
+
+/**
* ephy_window_get_statusbar:
* @window: an #EphyWindow
*
@@ -3291,16 +3235,18 @@ ephy_window_notebook_switch_page_cb (GtkNotebook *notebook,
{
EphyWindowPrivate *priv = window->priv;
EphyTab *tab;
+ EphyEmbed *embed;
if (priv->closing) return;
/* get the new tab */
tab = real_get_active_tab (window, page_num);
+ embed = ephy_tab_get_embed (tab);
/* update new tab */
ephy_window_set_active_tab (window, tab);
- ephy_find_toolbar_set_controls (priv->find_toolbar, TRUE, TRUE);
+ ephy_find_toolbar_set_embed (priv->find_toolbar, embed);
/* update window controls */
update_tabs_menu_sensitivity (window);
diff --git a/src/ephy-window.h b/src/ephy-window.h
index df0486c8f..6cd3fa9bc 100644
--- a/src/ephy-window.h
+++ b/src/ephy-window.h
@@ -72,6 +72,8 @@ GtkWidget *ephy_window_get_bookmarksbar (EphyWindow *window);
GtkWidget *ephy_window_get_notebook (EphyWindow *window);
+GtkWidget *ephy_window_get_find_toolbar (EphyWindow *window);
+
GtkWidget *ephy_window_get_statusbar (EphyWindow *window);
void ephy_window_add_tab (EphyWindow *window,
diff --git a/src/window-commands.c b/src/window-commands.c
index f6f59b1ee..7f4893aab 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -44,6 +44,7 @@
#include "ephy-zoom.h"
#include "ephy-notebook.h"
#include "ephy-toolbar-editor.h"
+#include "ephy-find-toolbar.h"
#include <string.h>
#include <glib.h>
@@ -559,24 +560,20 @@ void
window_cmd_edit_find_next (GtkAction *action,
EphyWindow *window)
{
- EphyEmbed *embed;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
+ EphyFindToolbar *toolbar;
- ephy_embed_find_next (embed, FALSE);
+ toolbar = EPHY_FIND_TOOLBAR (ephy_window_get_find_toolbar (window));
+ ephy_find_toolbar_find_next (toolbar);
}
void
window_cmd_edit_find_prev (GtkAction *action,
EphyWindow *window)
{
- EphyEmbed *embed;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
+ EphyFindToolbar *toolbar;
- ephy_embed_find_next (embed, TRUE);
+ toolbar = EPHY_FIND_TOOLBAR (ephy_window_get_find_toolbar (window));
+ ephy_find_toolbar_find_previous (toolbar);
}
void