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 提交修复了问题,我必须安装新版本的主题。
我正在尝试将 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 提交修复了问题,我必须安装新版本的主题。