GTK3:使用拖放时鼠标消失

GTK3: Mouse vanishes when using drag and drop

我正在尝试将 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);
}

此屏幕截图显示了输出:

我注意到这里有同样的行为。即使有 "official" gnome/gtk 个应用程序。例如,让我们尝试在 Glade 中拖放小部件:您将获得相同的 "strange" 效果。

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

我发现了问题。我发现 here that the adwait-icon-theme that is used as a default was not fully windows-compatible. The cursors .cur format were missing. This 提交修复了问题,我必须安装新版本的主题。