roundabout,
created on Monday, 21 April 2025, 19:08:31 (1745262511),
received on Monday, 21 April 2025, 19:08:51 (1745262531)
Author identity: vlad <vlad.muntoiu@gmail.com>
a7adfec32f48ab7ec7f439d928eab90d69f63710
gpanthera.cc
@@ -497,7 +497,7 @@ namespace gPanthera {
enable_children();
}, false);
// Process dropped buttons
drop_target->signal_drop().connect([this](const Glib::ValueBase &value, double x, double y) {
drop_target->signal_drop().connect([this, content_manager](const Glib::ValueBase &value, double x, double y) {
enable_children();
const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get();
@@ -528,6 +528,7 @@ namespace gPanthera {
auto new_notebook = Gtk::make_managed<ContentNotebook>(new_stack, new_switcher, this_notebook ? this_notebook->get_tab_position() : Gtk::PositionType::TOP);
new_stack->add_page(*page);
new_stack->set_visible_child(*page);
content_manager->set_last_operated_page(page);
if(x < width / 4) {
this->make_paned(Gtk::Orientation::HORIZONTAL, Gtk::PackType::START);
if(auto paned = dynamic_cast<Gtk::Paned*>(this->get_parent()->get_parent())) {
@@ -754,6 +755,7 @@ namespace gPanthera {
this->add_controller(drag_source);
this->signal_clicked().connect([this, page]() {
page->get_stack()->set_visible_child(*page);
page->content_manager->set_last_operated_page(page);
update_active_style();
});
// Switch tabs on depress
@@ -762,6 +764,7 @@ namespace gPanthera {
this->add_controller(gesture_click);
gesture_click->signal_pressed().connect([this, page](int num_presses, double x, double y) {
page->get_stack()->set_visible_child(*page);
page->content_manager->set_last_operated_page(page);
update_active_style();
});
// Provide the drag data
@@ -842,8 +845,10 @@ namespace gPanthera {
close_action->signal_activate().connect([this](const Glib::VariantBase&) {
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());
}
this->page->redock(nullptr);
@@ -931,8 +936,10 @@ namespace gPanthera {
void ContentPage::lose_visibility() {
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());
}
}
@@ -991,6 +998,18 @@ namespace gPanthera {
stack->add_page(*this);
this->content_manager->add_stack(this->stack);
}
auto click_controller = Gtk::GestureClick::create();
click_controller->set_button(0);
click_controller->signal_pressed().connect([this](int num_presses, double x, double y) {
this->content_manager->set_last_operated_page(this);
});
this->property_has_focus().signal_changed().connect([this]() {
if(this->property_has_focus()) {
this->content_manager->set_last_operated_page(this);
}
});
click_controller->set_propagation_phase(Gtk::PropagationPhase::CAPTURE);
this->add_controller(click_controller);
}
ContentManager::ContentManager() : Glib::ObjectBase("ContentManager") {
@@ -1017,4 +1036,13 @@ namespace gPanthera {
ContentStack *ContentNotebook::get_stack() const {
return this->stack;
}
ContentPage *ContentManager::get_last_operated_page() const {
return this->last_operated_page;
}
void ContentManager::set_last_operated_page(ContentPage *page) {
this->last_operated_page = page;
this->signal_page_operated.emit(page);
}
} // namespace gPanthera
gpanthera.hh
@@ -108,10 +108,15 @@ namespace gPanthera {
};
class ContentStack;
class ContentPage;
class ContentManager : public Glib::ObjectBase {
private:
ContentPage *last_operated_page = nullptr;
public:
ContentPage *get_last_operated_page() const;
void set_last_operated_page(ContentPage *page);
sigc::signal<void(ContentPage*)> signal_page_operated;
std::vector<ContentStack*> stacks;
ContentManager();
locales/ro/LC_MESSAGES/gpanthera.mo
panthera-www.cc
@@ -23,7 +23,8 @@ protected:
auto dock_stack_2 = Gtk::make_managed<gPanthera::DockStack>(layout_manager, "Two");
auto switcher_2 = Gtk::make_managed<gPanthera::DockStackSwitcher>(dock_stack_2, Gtk::Orientation::VERTICAL);
auto pane_1_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
pane_1_content->append(*Gtk::make_managed<Gtk::Label>("Pane 1 content"));
auto debug_button = Gtk::make_managed<Gtk::Button>("Debug");
pane_1_content->append(*debug_button);
auto pane_2_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
pane_2_content->append(*Gtk::make_managed<Gtk::Label>("Pane 2 content"));
auto pane_3_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
@@ -98,6 +99,9 @@ protected:
outer_paned->set_end_child(*inner_paned);
outer_grid->attach(*outer_paned, 1, 1, 1, 1);
window->set_child(*outer_grid);
debug_button->signal_clicked().connect([this, content_manager]() {
std::cout << "Last operated page: " << content_manager->get_last_operated_page()->get_name() << std::endl;
});
}
void on_activate() override {