roundabout,
created on Saturday, 12 April 2025, 11:55:55 (1744458955),
received on Saturday, 12 April 2025, 11:55:58 (1744458958)
Author identity: vlad <vlad.muntoiu@gmail.com>
d4e6748d33214b8f2f2135efa2bccf75c2c1ef74
gpanthera.cc
@@ -6,6 +6,7 @@
#include <libintl.h>
#include <locale.h>
#include <filesystem>
#include <ranges>
#define _(STRING) gettext(STRING)
namespace gPanthera {
@@ -459,6 +460,20 @@ namespace gPanthera {
signal_child_removed.emit(&child);
}
void ContentStack::disable_children() {
auto children = collect_children(*this);
for(auto *child : children) {
child->set_can_target(false);
}
}
void ContentStack::enable_children() {
auto children = collect_children(*this);
for(auto *child : children) {
child->set_can_target(true);
}
}
ContentStack::ContentStack(std::shared_ptr<ContentManager> content_manager, std::function<bool(ContentPage*)> detach_handler)
: BaseStack(), content_manager(std::move(content_manager)) {
this->set_name("gpanthera_content_stack");
@@ -472,8 +487,18 @@ namespace gPanthera {
drop_target = Gtk::DropTarget::create(ContentPage::get_type(), Gdk::DragAction::MOVE);
this->add_controller(drop_target);
// Some widgets (such as webviews) will consume anything dropped on their ancestors. We have
// to disable all child widgets to ensure the drop can be caught by this widget.
drop_target->signal_enter().connect([this](double x, double y) {
disable_children();
return Gdk::DragAction::MOVE;
}, false);
drop_target->signal_leave().connect([this]() {
enable_children();
}, false);
// Process dropped buttons
drop_target->signal_drop().connect([this](const Glib::ValueBase &value, double x, double y) {
enable_children();
const auto &widget = static_cast<const Glib::Value<ContentPage*>&>(value).get();
if(auto page = dynamic_cast<ContentPage*>(widget)) {
gpanthera.hh
@@ -153,6 +153,9 @@ namespace gPanthera {
};
class ContentStack : public BaseStack {
private:
void disable_children();
void enable_children();
protected:
std::function<bool(ContentPage*)> detach_handler;
public:
panthera-www.cc
@@ -7,6 +7,7 @@
#include <libintl.h>
#include <locale.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <webkit/webkit.h>
class PantheraWww : public Gtk::Application {