2016-12-17 1 views
1

En essayant d'utiliser les fonctionnalités de glisser-déposer inter-widget dans GTK3 avec gtkmm. Im en utilisant Windows 7 x64 (msys2) et gcc 5.3.0. Lorsque je commence à faire glisser, le curseur de la souris disparaît et l'icône DnD s'affiche dans le coin supérieur gauche de l'écran. Est-ce un bug ou y at-il quelque chose qui ne va pas dans mon code?GTK3: La souris disparaît lors de l'utilisation du glisser-déposer

Ici, vous pouvez voir une très petite application de test avec Gtk::CheckButton en tant que source de glissement et destination de glissement.

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

Cette capture d'écran montre la sortie:

Répondre

1

J'ai trouvé le problème. J'ai découvert here que le adwait-icon-theme utilisé par défaut n'était pas entièrement compatible avec Windows. Les curseurs .cur manquaient. This commit résolu le problème, j'ai dû installer la nouvelle version du thème.

2

j'ai remarqué le même comportement ici. Même avec les applications "officielles" gnome/gtk. Par exemple, essayons de faire glisser & drop widgets dans Glade: vous aurez le même effet "étrange".

Je pense que c'est un bug des bibliothèques gtk dans Windows, mais je ne peux pas imaginer pourquoi cela n'est pas encore résolu, compte tenu de glisser & drop est une opération très utile et utilisée.

+0

merci pour la réponse, la solution de contournement la plus simple pour moi serait de mettre en œuvre mes propres opérations de base DnD. – tly

+1

J'ai trouvé une autre chose intéressante. Lancez l'application gtk3-demo.exe (vous pouvez le trouver dans msys). Exécutez l'exemple de la palette d'outils. Il y a deux manières DnD: passive et interactive. Passive DnD fonctionne mal: l'icône disparaît pendant le mouvement. Le DnD interactif semble mieux fonctionner. Peut-être que vous pouvez vérifier le code source de cet exemple. – pozzugno

+0

J'ai trouvé le problème et répondu moi-même au quesion :) – tly