roundabout,
created on Friday, 25 April 2025, 12:11:18 (1745583078),
received on Friday, 25 April 2025, 12:11:24 (1745583084)
Author identity: vlad <vlad.muntoiu@gmail.com>
a23d1282a96e911cd0f497e78799ff43c3614c62
gpanthera.cc
@@ -633,10 +633,7 @@ namespace gPanthera {
drop_target->signal_drop().connect([this](const Glib::ValueBase &value, double x, double y) {
if(const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get()) {
if(auto page = dynamic_cast<ContentPage*>(widget)) {
if(page->get_parent() == this->stack) {
this->stack->remove(*page);
}
this->stack->add(*page);
this->stack->add_page(*page);
}
}
@@ -920,15 +917,19 @@ namespace gPanthera {
}
void ContentTab::close() {
if(!this->page->signal_close.emit()) {
if(this->page->get_next_sibling()) {
this->page->content_manager->set_last_operated_page(static_cast<ContentPage*>(this->page->get_next_sibling()));
this->page->get_stack()->set_visible_child(*this->page->get_next_sibling());
} else if(this->page->get_prev_sibling()) {
this->page->content_manager->set_last_operated_page(static_cast<ContentPage*>(this->page->get_prev_sibling()));
this->page->get_stack()->set_visible_child(*this->page->get_prev_sibling());
page->close();
}
void ContentPage::close() {
if(!this->signal_close.emit()) {
if(this->get_next_sibling()) {
this->content_manager->set_last_operated_page(static_cast<ContentPage*>(this->get_next_sibling()));
this->get_stack()->set_visible_child(*this->get_next_sibling());
} else if(this->get_prev_sibling()) {
this->content_manager->set_last_operated_page(static_cast<ContentPage*>(this->get_prev_sibling()));
this->get_stack()->set_visible_child(*this->get_prev_sibling());
}
this->page->redock(nullptr);
this->redock(nullptr);
}
}
gpanthera.hh
@@ -140,6 +140,7 @@ namespace gPanthera {
ContentStack *last_stack = nullptr;
ContentPage(std::shared_ptr<ContentManager> content_manager, ContentStack *stack, Gtk::Widget *child, Gtk::Widget *tab_widget);
sigc::signal<bool()> signal_close;
void close();
Gtk::Widget *get_tab_widget() const;
void redock(ContentStack *stack);
void set_tab_widget(Gtk::Widget *tab_widget);
panthera-www.cc
@@ -18,6 +18,9 @@ protected:
std::shared_ptr<gPanthera::ContentManager> content_manager;
static void notify_callback(GObject *object, GParamSpec *pspec, gpointer data) {
if(!gtk_widget_get_parent(GTK_WIDGET(object))) {
return;
}
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) {
@@ -44,6 +47,8 @@ protected:
g_signal_connect(webview, "notify", G_CALLBACK(notify_callback), page->gobj());
webkit_web_view_load_uri(webview, "about:blank");
stack->add_page(*page);
stack->set_visible_child(*page);
content_manager->set_last_operated_page(page);
}
void on_startup() override {
@@ -134,7 +139,11 @@ protected:
outer_grid->attach(*outer_paned, 1, 1, 1, 1);
window->set_child(*outer_grid);
debug_button->signal_clicked().connect([this]() {
std::cout << "Last operated page: " << content_manager->get_last_operated_page()->get_name() << std::endl;
if(content_manager->get_last_operated_page()) {
std::cout << "Last operated page: " << content_manager->get_last_operated_page()->get_name() << std::endl;
} else {
std::cout << "No page operated!" << std::endl;
}
});
// TODO: Use the last operated page and allow opening tabs next to the last operated page using certain panes
// Load the existing layout, if it exists
@@ -162,6 +171,22 @@ protected:
layout_file_out.close();
std::cout << "Layout changed: " << layout_manager->get_layout_as_json() << std::endl;
});
auto new_tab_action = Gio::SimpleAction::create("new_tab");
new_tab_action->signal_activate().connect([this](const Glib::VariantBase&) {
on_new_tab(nullptr);
});
add_action(new_tab_action);
set_accels_for_action("app.new_tab", {"<Primary>T"});
auto close_tab_action = Gio::SimpleAction::create("close_tab");
close_tab_action->signal_activate().connect([this](const Glib::VariantBase&) {
auto page = content_manager->get_last_operated_page();
if(page) {
page->close();
}
});
add_action(close_tab_action);
set_accels_for_action("app.close_tab", {"<Primary>W"});
}
void on_activate() override {