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:
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
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
J'ai trouvé le problème et répondu moi-même au quesion :) – tly