Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commita222202081ba70dc8569001a975cef6e5d6791b5 (patch)
Author
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-03-09 06:25:43 +0100
Committer
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-03-09 06:26:00 +0100
Files767ecbf771a0f7a8bb6ea8e2e4778fe18a3362ae
goodwolf-a222202081ba70dc8569001a975cef6e5d6791b5.tar
goodwolf-a222202081ba70dc8569001a975cef6e5d6791b5.tar.gz
goodwolf-a222202081ba70dc8569001a975cef6e5d6791b5.zip
Parentf56f4baec44e58038d751d8043fe4e8e25248fa1 (diff)
badwolf.c: Add searching
A better UI/UX design will probably need to be done, but it works for now. Default GTK bindings are: - next-match: Ctrl-G - previous-match: Ctrl-Shift-G - stop-search: Escape
1 files changed, 51 insertions, 0 deletions
-rw-r--r--badwolf.c51
diff --git a/badwolf.c b/badwolf.c
index 9d0807a..018aad3 100644
--- a/badwolf.c
+++ b/badwolf.c
@@ -14,6 +14,7 @@ struct Client
GtkWidget *toolbar;
GtkWidget *javascript;
GtkWidget *location;
+ GtkWidget *search;
GtkWidget *statusbar;
WebKitWebView *webView;
@@ -143,6 +144,49 @@ static gboolean javascriptCb_toggled(GtkButton *javascript, gpointer user_data)
return TRUE;
}
+
+static gboolean SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_data)
+{
+ (void)search;
+ struct Client *browser = (struct Client *)user_data;
+ WebKitFindController *findController = webkit_web_view_get_find_controller(browser->webView);
+
+ webkit_find_controller_search_next(findController);
+
+ return TRUE;
+}
+
+static gboolean SearchEntryCb_previous__match(GtkSearchEntry *search, gpointer user_data)
+{
+ (void)search;
+ struct Client *browser = (struct Client *)user_data;
+ WebKitFindController *findController = webkit_web_view_get_find_controller(browser->webView);
+
+ webkit_find_controller_search_next(findController);
+
+ return TRUE;
+}
+
+static gboolean SearchEntryCb_search__changed(GtkSearchEntry *search, gpointer user_data) {
+ struct Client *browser = (struct Client *)user_data;
+ WebKitFindController *findController = webkit_web_view_get_find_controller(browser->webView);
+ const gchar *search_text = gtk_entry_get_text(GTK_ENTRY(search));
+
+ webkit_find_controller_search(findController, search_text, 0, 0);
+
+ return TRUE;
+}
+
+static gboolean SearchEntryCb_stop__search(GtkSearchEntry *search, gpointer user_data) {
+ (void)search;
+ struct Client *browser = (struct Client *)user_data;
+ WebKitFindController *findController = webkit_web_view_get_find_controller(browser->webView);
+
+ webkit_find_controller_search_finish(findController);
+
+ return TRUE;
+}
+
int main(int argc, char *argv[])
{
struct Client *browser = malloc(sizeof(struct Client));
@@ -156,6 +200,7 @@ int main(int argc, char *argv[])
browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
browser->toolbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
browser->location = gtk_entry_new();
+ browser->search = gtk_search_entry_new();
browser->javascript = gtk_check_button_new();
browser->statusbar = gtk_label_new(NULL);
browser->webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
@@ -164,6 +209,7 @@ int main(int argc, char *argv[])
gtk_box_pack_start(GTK_BOX(browser->toolbar), GTK_WIDGET(browser->javascript), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(browser->toolbar), GTK_WIDGET(browser->location), TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(browser->toolbar), GTK_WIDGET(browser->search), TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(browser->box), GTK_WIDGET(browser->toolbar), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(browser->box), GTK_WIDGET(browser->webView), TRUE, TRUE, 0);
@@ -198,6 +244,11 @@ int main(int argc, char *argv[])
G_CALLBACK(WebViewCb_notify__estimated_load_progress),
browser);
+ g_signal_connect(browser->search, "next-match", G_CALLBACK(SearchEntryCb_next__match), browser);
+ g_signal_connect(browser->search, "previous-match", G_CALLBACK(SearchEntryCb_previous__match), browser);
+ g_signal_connect(browser->search, "search-changed", G_CALLBACK(SearchEntryCb_search__changed), browser);
+ g_signal_connect(browser->search, "stop-search", G_CALLBACK(SearchEntryCb_stop__search), browser);
+
WebKitSettings *settings = webkit_web_view_get_settings(browser->webView);
webkit_settings_set_default_charset(settings, "utf-8");