Как я могу остановить GestureDrag от сброса координат?

Я пытаюсь переместить Gtk::Button в Gtk::Fixed как Gtk::Window на оконном менеджере. У меня Gtk::GestureDrag вокруг кнопки. Пока я могу перемещать Баттон.

Если я переместлю кнопку в новую позицию и нажму на кнопку там, кнопка вернется в исходное положение.

Вот минимизированный код

main.cpp

#include <gtkmm.h>
#include <iostream>

class Content: public Gtk::Fixed
{
public:
    Content();
    long int x, y;
protected:
    Glib::RefPtr<Gtk::GestureDrag> drag;
    Gtk::Button button{"Button"};
    void begin_drag(double nx, double ny);
    void update_drag(double nx, double ny);
    void end_drag(double nx, double ny);

};
Content::Content()
{
    add(button);
    drag = Gtk::GestureDrag::create(button);
    drag->set_button(GDK_BUTTON_PRIMARY);
    drag->signal_drag_begin().connect(
        sigc::mem_fun(*this, &Content::begin_drag));
    drag->signal_drag_update().connect(
        sigc::mem_fun(*this, &Content::update_drag));
    drag->signal_drag_end().connect(
        sigc::mem_fun(*this, &Content::end_drag));
}
void Content::begin_drag(double nx, double ny) {}
void Content::update_drag(double nx, double ny)
{
    x = nx;
    y = ny;
    move(button, x, y);
}
void Content::end_drag(double nx, double ny)
{
    x = nx;
    y = ny;
    move(button, x, y);
}

int main(int argc, char *argv[])
{
    auto app =
        Gtk::Application::create(argc, argv,
                             "org.gtkmm.moving.widgets");

    Gtk::Window window;
    Content fixed;
    window.set_default_size(480, 320);
    window.add(fixed);
    window.show_all_children();
    app->run(window);
    return 0;
}

Как заставить кнопку оставаться на новой позиции, когда я нажимаю на нее, не перетаскивая? `

0 ответов

Другие вопросы по тегам