GTK3
のウィジェットドラッグアンドドロップ機能をgtkmm
で使用しようとしています。私はWindows 7 x64(msys2)とgcc 5.3.0
を使っています。GTK3:ドラッグ&ドロップ使用時にマウスが消える
ドラッグを開始すると、マウスカーソルが消え、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);
}
答えてくれてありがとう、私の最も簡単な回避策は、自分の基本的なDnD操作を実装することです。 – tly
私はもう一つ興味深いものを見つけました。 gtk3-demo.exeアプリケーションを起動します(msysで見つけることができます)。ツールパレットの例を実行します。パッシブとインタラクティブな2つのDnD方法があります。パッシブDnDが正常に動作しない:アイコンは移動中に消えます。インタラクティブなDnDはうまくいくようです。たぶんあなたはこの例のソースコードをチェックすることができます。 – pozzugno
私は問題を発見し、自分自身quesionに答えた:) – tly