roundabout,
created on Tuesday, 20 May 2025, 19:40:17 (1747770017),
received on Tuesday, 20 May 2025, 19:40:34 (1747770034)
Author identity: vlad <vlad.muntoiu@gmail.com>
9581bdfc2cba24e9868166465b7218e62e6c4895
panthera-www.cc
@@ -71,8 +71,24 @@ protected:
auto parent = gtk_widget_get_parent(gtk_widget_get_parent(GTK_WIDGET(object))); if(auto page = dynamic_cast<gPanthera::ContentPage*>(Glib::wrap(parent))) { if(g_strcmp0(pspec->name, "title") == 0) { if(auto label = dynamic_cast<Gtk::Label*>(page->tab_widget)) {label->set_label(webkit_web_view_get_title(WEBKIT_WEB_VIEW(object)));if(auto label = dynamic_cast<Gtk::Label*>(page->tab_widget->get_last_child())) { if(strlen(webkit_web_view_get_title(WEBKIT_WEB_VIEW(object))) == 0) { label->set_label("Untitled"); } else { label->set_label(webkit_web_view_get_title(WEBKIT_WEB_VIEW(object))); } } } else if(g_strcmp0(pspec->name, "favicon") == 0) { // Update favicons if(auto image = dynamic_cast<Gtk::Image*>(page->tab_widget->get_first_child())) { image->set_from_icon_name("image-loading-symbolic"); if(auto favicon = webkit_web_view_get_favicon(WEBKIT_WEB_VIEW(object))) { if(G_IS_OBJECT(favicon)) { if(Glib::RefPtr<Gdk::Texture> texture = Glib::wrap(favicon)) { image->set(texture); } } }} } }
@@ -104,7 +120,6 @@ protected:
static gboolean on_decide_policy(WebKitWebView *source, WebKitPolicyDecision *decision, WebKitPolicyDecisionType type, gpointer user_data) { // Middle-click opens in a new window if(auto self = static_cast<PantheraWww*>(user_data)) { std::cout << type << '\n';if(type == WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION) { auto action = webkit_navigation_policy_decision_get_navigation_action(WEBKIT_NAVIGATION_POLICY_DECISION(decision)); if(webkit_navigation_action_get_mouse_button(action) == 2) {
@@ -133,7 +148,12 @@ protected:
gtk_widget_set_vexpand(GTK_WIDGET(webview), true); auto page_content = Gtk::make_managed<Gtk::Box>(); gtk_box_append(page_content->gobj(), GTK_WIDGET(webview)); auto page_tab = new Gtk::Label("Untitled");auto page_tab = new Gtk::Box(); page_tab->set_orientation(Gtk::Orientation::HORIZONTAL); auto initial_icon = Gtk::make_managed<Gtk::Image>(Gio::Icon::create("image-loading-symbolic")); page_tab->append(*initial_icon); page_tab->append(*Gtk::make_managed<Gtk::Label>("Untitled")); page_tab->set_spacing(4);auto page = Gtk::make_managed<gPanthera::ContentPage>(content_manager, stack, page_content, page_tab); g_signal_connect(webview, "notify", G_CALLBACK(notify_callback), page->gobj()); g_signal_connect(webview, "decide-policy", G_CALLBACK(on_decide_policy), this);
@@ -141,6 +161,8 @@ protected:
auto cookie_manager = webkit_network_session_get_cookie_manager(webkit_web_view_get_network_session(webview)); webkit_cookie_manager_set_persistent_storage(cookie_manager, cookie_file.c_str(), WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); webkit_cookie_manager_set_accept_policy(cookie_manager, WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); auto website_data_manager = webkit_network_session_get_website_data_manager(webkit_web_view_get_network_session(webview)); webkit_website_data_manager_set_favicons_enabled(website_data_manager, true);GtkEventController *click_controller_back = GTK_EVENT_CONTROLLER(gtk_gesture_click_new()); gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(click_controller_back), 8); g_signal_connect(click_controller_back, "pressed", G_CALLBACK(on_back_pressed), webview);