roundabout,
created on Saturday, 15 March 2025, 10:16:25 (1742033785),
received on Saturday, 15 March 2025, 10:16:28 (1742033788)
Author identity: vlad <vlad.muntoiu@gmail.com>
7f7fda8000b027c264908f44fde7ae9a90e9a2cb
gpanthera.cc
@@ -533,10 +533,51 @@ namespace gPanthera {
drag_source->set_actions(Gdk::DragAction::MOVE); auto const paintable = Gtk::WidgetPaintable::create(); paintable->set_widget(*this); drag_source->set_icon(paintable, 0, 0);drag_source->set_icon(paintable->get_current_image(), 0, 0);return Gdk::ContentProvider::create(value); }, false); update_active_style(); drag_source->signal_drag_begin().connect([this](const Glib::RefPtr<Gdk::Drag>&) { this->set_opacity(0); }, 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) { const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get(); if(widget) { if(auto page = dynamic_cast<ContentPage*>(widget)) { if(page->content_manager != this->page->content_manager) { // If the pane is not in the same layout manager, reject return false; } auto switcher = dynamic_cast<ContentTabBar*>(this->get_parent()); if(switcher) { auto *stack = switcher->get_stack(); // Move the button to the new position page->redock(stack); if(switcher->get_orientation() == Gtk::Orientation::HORIZONTAL) { if(x < static_cast<double>(this->get_allocated_width()) / 2) { page->insert_before(*stack, *this->page); } else { page->insert_after(*stack, *this->page); } } else if(switcher->get_orientation() == Gtk::Orientation::VERTICAL) { if(y < static_cast<double>(this->get_allocated_height()) / 2) { page->insert_before(*stack, *this->page); } else { page->insert_after(*stack, *this->page); } } switcher->update_buttons(); } } } return true; // Drop OK }, false); this->add_controller(drop_target);// Pop out if dragged to an external location // TODO: Implement this, allow defining custom behavior at the content manager level }
gpanthera.hh
@@ -136,6 +136,7 @@ namespace gPanthera {
class ContentTab : public Gtk::ToggleButton { private: std::shared_ptr<Gtk::DragSource> drag_source; std::shared_ptr<Gtk::DropTarget> drop_target;Glib::Value<ContentPage*> value; void update_active_style(); sigc::connection active_style_handler;