2016-12-17 4 views
1

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); 
} 

このスクリーンショットは出力を示しています。

答えて

1

問題が見つかりました。 adwait-icon-themeがデフォルトとして使用されていたことが、完全にWindowsと互換性がないことがわかった。hereカーソル.cur形式がありませんでした。 Thisが問題を解決したので、私はテーマの新しいバージョンをインストールしなければならなかった。

2

私はここに同じ動作に気づきました。 "公式の" gnome/gtkアプリケーションでさえも。たとえば、Gladeにドロップウィジェット&をドラッグしようとすると、同じ「奇妙な」効果があります。

Windowsのgtkライブラリのバグだと思いますが、ドラッグを考慮してまだ解決されていない理由がわかりません。&ドロップは非常に便利で使い慣れた操作です。

+0

答えてくれてありがとう、私の最も簡単な回避策は、自分の基本的なDnD操作を実装することです。 – tly

+1

私はもう一つ興味深いものを見つけました。 gtk3-demo.exeアプリケーションを起動します(msysで見つけることができます)。ツールパレットの例を実行します。パッシブとインタラクティブな2つのDnD方法があります。パッシブDnDが正常に動作しない:アイコンは移動中に消えます。インタラクティブなDnDはうまくいくようです。たぶんあなたはこの例のソースコードをチェックすることができます。 – pozzugno

+0

私は問題を発見し、自分自身quesionに答えた:) – tly

関連する問題