summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-10-08 02:56:22 (EDT)
committer Patrick McDermott <pj@pehjota.net>2017-10-08 02:56:22 (EDT)
commita048e46e0811c3812f43feaf77697488a78f988d (patch)
tree8f239503e2a63730eba9e69ceed397d4fcef7a9c /src
parentdb5f9b3fa27d12167baf5525f2aa56b283989cc3 (diff)
downloadmarquee-a048e46e0811c3812f43feaf77697488a78f988d.zip
marquee-a048e46e0811c3812f43feaf77697488a78f988d.tar.gz
marquee-a048e46e0811c3812f43feaf77697488a78f988d.tar.bz2
MqTabChrome: Make find bar functional
Diffstat (limited to 'src')
-rw-r--r--src/tab-chrome.c63
-rw-r--r--src/tab-chrome.h2
2 files changed, 61 insertions, 4 deletions
diff --git a/src/tab-chrome.c b/src/tab-chrome.c
index 3133196..72b42ba 100644
--- a/src/tab-chrome.c
+++ b/src/tab-chrome.c
@@ -557,21 +557,68 @@ navigation_toolbar_new(MqTabChrome *chrome, const gchar *uri)
}
static void
+find_search(MqTabChrome *chrome)
+{
+ guint32 find_options;
+
+ find_options = WEBKIT_FIND_OPTIONS_WRAP_AROUND;
+ if (!chrome->find_match_case) {
+ find_options |= WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE;
+ }
+ webkit_find_controller_search(chrome->find_controller,
+ gtk_entry_get_text(GTK_ENTRY(chrome->find_search_entry)),
+ find_options, G_MAXUINT);
+ chrome->find_searching = TRUE;
+}
+
+static void
+find_search_finished(MqTabChrome *chrome)
+{
+ chrome->find_searching = FALSE;
+ webkit_find_controller_search_finish(chrome->find_controller);
+}
+
+static void
+find_search_changed_cb(GtkSearchEntry G_GNUC_UNUSED *entry, MqTabChrome *chrome)
+{
+ find_search(chrome);
+}
+
+static void
+find_search_activate_cb(GtkEntry G_GNUC_UNUSED *entry, MqTabChrome *chrome)
+{
+ find_search(chrome);
+}
+
+static void
find_prev_clicked_cb(GtkButton G_GNUC_UNUSED *button, MqTabChrome *chrome)
{
- /* FIXME: Unimplemented */
+ /* Calling this method before webkit_find_controller_search() or
+ * webkit_find_controller_count_matches() is a programming error. */
+ if (chrome->find_searching) {
+ webkit_find_controller_search_previous(chrome->find_controller);
+ } else {
+ find_search(chrome);
+ }
}
static void
find_next_clicked_cb(GtkButton G_GNUC_UNUSED *button, MqTabChrome *chrome)
{
- /* FIXME: Unimplemented */
+ /* Calling this method before webkit_find_controller_search() or
+ * webkit_find_controller_count_matches() is a programming error. */
+ if (chrome->find_searching) {
+ webkit_find_controller_search_next(chrome->find_controller);
+ } else {
+ find_search(chrome);
+ }
}
static void
-find_match_case_toggled_cb(GtkButton G_GNUC_UNUSED *button, MqTabChrome *chrome)
+find_match_case_toggled_cb(GtkToggleButton *toggle_button, MqTabChrome *chrome)
{
- /* FIXME: Unimplemented */
+ chrome->find_match_case = gtk_toggle_button_get_active(toggle_button);
+ find_search(chrome);
}
static void
@@ -579,6 +626,7 @@ find_close_clicked_cb(GtkButton G_GNUC_UNUSED *button, MqTabChrome *chrome)
{
gtk_revealer_set_reveal_child(GTK_REVEALER(chrome->find_revealer),
FALSE);
+ find_search_finished(chrome);
}
static GtkWidget *
@@ -592,6 +640,10 @@ find_toolbar_new(MqTabChrome *chrome)
/* Search entry */
chrome->find_search_entry = gtk_search_entry_new();
+ g_signal_connect(chrome->find_search_entry, "search-changed",
+ G_CALLBACK(find_search_changed_cb), chrome);
+ g_signal_connect(chrome->find_search_entry, "activate",
+ G_CALLBACK(find_search_activate_cb), chrome);
/* Previous button */
prev_button = gtk_button_new_from_icon_name("go-up",
@@ -641,6 +693,9 @@ find_toolbar_new(MqTabChrome *chrome)
GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
gtk_container_add(GTK_CONTAINER(chrome->find_revealer), box);
+ chrome->find_match_case = FALSE;
+ chrome->find_searching = FALSE;
+
return chrome->find_revealer;
}
diff --git a/src/tab-chrome.h b/src/tab-chrome.h
index 257bd8b..5cb1705 100644
--- a/src/tab-chrome.h
+++ b/src/tab-chrome.h
@@ -44,6 +44,8 @@ struct MqTabChrome {
gchar *hovered_link_uri;
GtkWidget *find_revealer;
GtkWidget *find_search_entry;
+ gboolean find_match_case;
+ gboolean find_searching;
WebKitWebView *web_view;
WebKitFindController *find_controller;
gboolean load_failed;