roundabout,
created on Wednesday, 9 April 2025, 13:35:39 (1744205739),
received on Wednesday, 9 April 2025, 18:44:56 (1744224296)
Author identity: vlad <vlad.muntoiu@gmail.com>
2c71f9f9022d513eb1e3ca1e49d8d5923d2e659f
CMakeLists.txt
@@ -7,12 +7,15 @@ add_library(gpanthera SHARED gpanthera.cc)
add_executable(panthera-www panthera-www.cc)
target_link_libraries(panthera-www gpanthera)
target_link_libraries(panthera-www webkitgtk-6.0)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM REQUIRED gtkmm-4.0)
pkg_check_modules(WebKit REQUIRED webkitgtk-6.0)
include_directories(${GTKMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS})
include_directories(${WebKit_INCLUDE_DIRS})
add_definitions(${GTKMM_CFLAGS_OTHER})
target_link_libraries(gpanthera ${GTKMM_LIBRARIES})
gpanthera.cc
@@ -942,14 +942,10 @@ namespace gPanthera {
}
}
Gtk::Widget *ContentPage::get_child() const {
return this->child;
}
ContentPage::ContentPage(std::shared_ptr<ContentManager> content_manager, ContentStack *stack, Gtk::Widget *child, Gtk::Widget *tab_widget) :
Gtk::Box(Gtk::Orientation::VERTICAL, 0), content_manager(std::move(content_manager)), child(child), tab_widget(tab_widget) {
Gtk::Overlay(), content_manager(std::move(content_manager)), child(child), tab_widget(tab_widget) {
this->set_name("gpanthera_content_page");
this->append(*child);
this->set_child(*child);
this->set_tab_widget(tab_widget);
this->set_margin_top(0);
this->set_margin_bottom(0);
gpanthera.hh
@@ -119,7 +119,7 @@ namespace gPanthera {
void remove_stack(ContentStack *stack);
};
class ContentPage : public Gtk::Box {
class ContentPage : public Gtk::Overlay {
private:
Gtk::Widget *tab_widget;
ContentStack *stack = nullptr;
@@ -128,12 +128,10 @@ namespace gPanthera {
std::shared_ptr<ContentManager> content_manager;
ContentStack *last_stack = nullptr;
ContentPage(std::shared_ptr<ContentManager> content_manager, ContentStack *stack, Gtk::Widget *child, Gtk::Widget *tab_widget);
Gtk::Widget *get_child() const;
sigc::signal<bool()> signal_close;
Gtk::Widget *get_tab_widget() const;
void redock(ContentStack *stack);
void set_tab_widget(Gtk::Widget *tab_widget);
void set_child(Gtk::Widget *child);
ContentStack *get_stack() const;
void lose_visibility();
};
panthera-www.cc
@@ -6,6 +6,8 @@
#include <memory>
#include <libintl.h>
#include <locale.h>
#include <gtk/gtk.h>
#include <webkit/webkit.h>
class PantheraWww : public Gtk::Application {
Gtk::Window *window = Gtk::make_managed<Gtk::Window>();
@@ -76,7 +78,12 @@ protected:
auto content_stack = Gtk::make_managed<gPanthera::ContentStack>(content_manager, detach_handler);
auto content_stack_switcher = Gtk::make_managed<gPanthera::ContentTabBar>(content_stack, Gtk::Orientation::HORIZONTAL, return_extra_child);
content_manager->add_stack(content_stack);
auto page_1_content = Gtk::make_managed<Gtk::Label>("Page 1...");
WebKitWebView *webview = WEBKIT_WEB_VIEW(webkit_web_view_new());
webkit_web_view_load_uri(webview, "https://www.example.com");
gtk_widget_set_hexpand(GTK_WIDGET(webview), true);
gtk_widget_set_vexpand(GTK_WIDGET(webview), true);
auto page_1_content = Gtk::make_managed<Gtk::Box>();
gtk_box_append(page_1_content->gobj(), GTK_WIDGET(webview));
auto page_1_tab = new Gtk::Label("Page 1");
auto page_1 = Gtk::make_managed<gPanthera::ContentPage>(content_manager, content_stack, page_1_content, page_1_tab);
auto page_2_content = Gtk::make_managed<Gtk::Label>("Page 2...");