roundabout,
created on Wednesday, 9 April 2025, 18:44:52 (1744224292),
received on Wednesday, 9 April 2025, 18:44:56 (1744224296)
Author identity: vlad <vlad.muntoiu@gmail.com>
f4fda9f0de744bc2036f845aa035b0132908bb33
gpanthera.cc
@@ -473,11 +473,10 @@ namespace gPanthera {
drop_target = Gtk::DropTarget::create(ContentPage::get_type(), Gdk::DragAction::MOVE);
this->add_controller(drop_target);
// Process dropped buttons
drop_target->signal_drop().connect([this](const Glib::ValueBase& value, double x, double y) {
drop_target->signal_drop().connect([this](const Glib::ValueBase &value, double x, double y) {
const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get();
if(auto page = dynamic_cast<ContentPage*>(widget)) {
page->lose_visibility();
if(page->get_stack() == this && !this->get_first_child()->get_next_sibling()) {
// Don't allow splitting if there are no more pages
return false;
@@ -489,10 +488,15 @@ namespace gPanthera {
double width = this->get_allocated_width(), height = this->get_allocated_height();
// Split based on the drop position
if(!(x < width / 4 || x > width * 3 / 4 || y < height / 4 || y > height * 3 / 4)) {
if(page->get_stack() == this) {
return false;
}
page->lose_visibility();
// If the drop position is not at a quarter to the edges, move to the same stack
this->add_page(*page);
return true;
}
page->lose_visibility();
auto new_stack = Gtk::make_managed<ContentStack>(this->content_manager, this->detach_handler);
auto this_notebook = dynamic_cast<ContentNotebook*>(this->get_parent());
auto new_switcher = Gtk::make_managed<ContentTabBar>(new_stack, this_notebook ? this_notebook->get_switcher()->get_orientation() : Gtk::Orientation::HORIZONTAL, this_notebook->get_switcher()->get_extra_child_function());
@@ -594,7 +598,7 @@ namespace gPanthera {
drop_target = Gtk::DropTarget::create(ContentPage::get_type(), Gdk::DragAction::MOVE);
this->add_controller(drop_target);
// Process dropped buttons
drop_target->signal_drop().connect([this](const Glib::ValueBase& value, double x, double y) {
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)) {
this->stack->add_page(*page);
@@ -749,7 +753,7 @@ namespace gPanthera {
}, false);
drop_target = Gtk::DropTarget::create(ContentPage::get_type(), Gdk::DragAction::MOVE);
// Process dropped buttons by inserting them after the current button
drop_target->signal_drop().connect([this](const Glib::ValueBase& value, double x, double y) {
drop_target->signal_drop().connect([this](const Glib::ValueBase &value, double x, double y) {
const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get();
if(widget) {
@@ -790,14 +794,15 @@ namespace gPanthera {
if(reason == Gdk::DragCancelReason::NO_TARGET) {
auto stack = dynamic_cast<ContentStack*>(this->page->get_stack());
bool result = stack->signal_detach.emit(this->page);
if(!result) {
this->set_opacity(1);
}
this->set_opacity(1);
return result;
}
this->set_opacity(1);
return false;
}, false);
drag_source->signal_drag_end().connect([this](const Glib::RefPtr<Gdk::Drag>&, bool drop_ok) {
this->set_opacity(1);
}, false);
// Provide a context menu
context_menu = Gio::Menu::create();