diff options
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.c | 51 |
@@ -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"); |