rosenrot-browser

A hackable browser based on Webkitgtk
Log | Files | Refs | README

commit 4f3a90daafd1ad0a8e408dd8fb0e3e3d9ba7c39d
parent e124f5c561fe62b6bc899e4ec8920eae7f940a32
Author: NunoSempere <nuno.semperelh@protonmail.com>
Date:   Sat, 20 Jul 2024 21:46:57 -0400

GTK4: Add a few more niceties

Diffstat:
Mrosenrot4_greenfield.c | 37+++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/rosenrot4_greenfield.c b/rosenrot4_greenfield.c @@ -22,7 +22,19 @@ static int custom_style_enabled = 1; void toggle_bar(GtkNotebook* notebook, Bar_entry_mode mode); void notebook_create_new_tab(GtkNotebook* notebook, const char* uri); +/* Load content */ +void load_uri(WebKitWebView* view, const char* uri) +{ + if (strlen(uri) == 0) { + webkit_web_view_load_uri(view, ""); + // toggle_bar(notebook, _SEARCH); + } else if (g_str_has_prefix(uri, "http://") || g_str_has_prefix(uri, "https://") || g_str_has_prefix(uri, "file://") || g_str_has_prefix(uri, "about:")) { + webkit_web_view_load_uri(view, uri); + } +} + +/* Create new tabs */ WebKitWebView* create_new_webview() { char* style; @@ -55,14 +67,27 @@ WebKitWebView* create_new_webview() return g_object_new(WEBKIT_TYPE_WEB_VIEW, "settings", settings, "network-session", network_session, "user-content-manager", contentmanager, NULL); } -void load_uri(WebKitWebView* view, const char* uri) +GtkWidget* handle_signal_create_new_tab(WebKitWebView* self, + WebKitNavigationAction* navigation_action, + GtkNotebook* notebook) { - if (strlen(uri) == 0) { - webkit_web_view_load_uri(view, ""); - // toggle_bar(notebook, _SEARCH); - } else if (g_str_has_prefix(uri, "http://") || g_str_has_prefix(uri, "https://") || g_str_has_prefix(uri, "file://") || g_str_has_prefix(uri, "about:")) { - webkit_web_view_load_uri(view, uri); + if (num_tabs < MAX_NUM_TABS || num_tabs == 0) { + WebKitURIRequest* uri_request = webkit_navigation_action_get_request(navigation_action); + const char* uri = webkit_uri_request_get_uri(uri_request); + printf("Creating new window: %s\n", uri); + notebook_create_new_tab(notebook, uri); + gtk_notebook_set_show_tabs(notebook, true); + } else { + webkit_web_view_evaluate_javascript(self, "alert('Too many tabs, not opening a new one')", -1, NULL, "rosenrot-alert-numtabs", NULL, NULL, NULL); } + return NULL; + /* + WebKitGTK documentation recommends returning the new webview. + I imagine that this might allow e.g., to go back in a new tab + or generally to keep track of history. + However, this would require either modifying notebook_create_new_tab + or duplicating its contents, for unclear gain. + */ } void notebook_create_new_tab(GtkNotebook* notebook, const char* uri)