【问题标题】:GTK3: Mouse vanishes when using drag and dropGTK3:使用拖放时鼠标消失
【发布时间】:2016-12-17 19:58:38
【问题描述】:

我正在尝试将GTK3 中的小部件间拖放功能与gtkmm 一起使用。我使用的是 Windows 7 x64 (msys2) 和 gcc 5.3.0

当我开始拖动时,鼠标光标消失并且 DnD 图标显示在屏幕的左上角。这是一个错误还是我的代码有问题?

在这里您可以看到一个非常小的测试应用程序,其中Gtk::CheckButton 作为拖动源和拖动目标。

#include <iostream>
#include <gtkmm-3.0/gtkmm.h>

struct DragButton : Gtk::CheckButton{
    DragButton(){
        this->signal_drag_begin().connect([](const Glib::RefPtr<Gdk::DragContext>& ctx){
            ctx->set_icon();
        });
        this->drag_source_set({Gtk::TargetEntry("testdata")});
        this->drag_dest_set({Gtk::TargetEntry("testdata")});

        this->signal_drag_data_get().connect(
            [this](const Glib::RefPtr<Gdk::DragContext>&,Gtk::SelectionData& s,guint,guint ){
                std::cout << "sending data." << std::endl;
            }
        );
        this->signal_drag_data_received().connect(
            [](const Glib::RefPtr<Gdk::DragContext>& c,int,int,const Gtk::SelectionData&,guint,guint time){
                std::cout << "receiving data" << std::endl;
                c->drop_finish(true,time);
            }
        );
    }
};

int main(){
    auto app = Gtk::Application::create("test");
    auto settings = Gtk::Settings::get_default();
    settings->set_property<Glib::ustring>("gtk-font-name","Sans 10");

    Gtk::Window window;
    window.set_default_size(100,50);
    Gtk::Box box;

    for(int i = 0; i < 3; i++){
        box.pack_end(*Gtk::manage(new DragButton));
    }

    window.add(box);
    window.show_all();

    app->run(window);
}

此屏幕截图显示了输出:

【问题讨论】:

    标签: c++ gtk3 gtkmm msys2


    【解决方案1】:

    我在这里注意到了同样的行为。即使使用“官方” gnome/gtk 应用程序。例如,让我们尝试在 Glade 中拖放小部件:您将获得相同的“奇怪”效果。

    我认为这是 Windows 中 gtk 库的错误,但我无法想象为什么还没有解决,考虑到拖放是一个非常有用和常用的操作。

    【讨论】:

    • 感谢您的回答,对我来说最简单的解决方法是实现我自己的基本 DnD 操作。
    • 我发现了另一个有趣的事情。启动 gtk3-demo.exe 应用程序(您可以在 msys 中找到它)。运行工具面板示例。有两种 DnD 方式:被动和交互。被动 DnD 效果不佳:图标在移动过程中消失。交互式 DnD 似乎效果更好。也许你可以查看这个例子的源代码。
    • 我发现了问题并自己回答了问题:)
    【解决方案2】:

    我发现了问题。我发现here 被用作默认值的adwait-icon-theme 不完全兼容windows。游标 .cur 格式丢失。 Thiscommit 修复了问题,我只好安装新版本的主题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多