Bonjour, j'ai créé cette fonction pour qu'une EventBox puisse servir à déplacer une fenêtre :
Elle est appelée par ce Widget :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 gboolean bouge_win(GtkWidget *pWidget, GdkEvent *event, gpointer data) { if(event->type == GDK_MOTION_NOTIFY) { printf("bouge\n"); gtk_window_move(GTK_WINDOW(data), (gint)event->motion.x_root-76, (gint)event->motion.y_root-26); } else if(event->type == GDK_BUTTON_PRESS) { printf("appuie\n"); g_signal_connect(G_OBJECT(pWidget), "motion_notify_event", G_CALLBACK(bouge_win), data); } else if(event->type == GDK_BUTTON_RELEASE) { printf("relache\n"); g_signal_stop_emission_by_name(G_OBJECT(pWidget), "motion_notify_event"); } return TRUE; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 btdep = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(btdep), gtk_image_new_from_file("./imagedep.png")); gtk_widget_add_events(btdep, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(btdep), "button_press_event", G_CALLBACK(bouge_win), winl); gtk_widget_add_events(btdep, GDK_BUTTON_RELEASE_MASK); g_signal_connect(G_OBJECT(btdep), "button_release_event", G_CALLBACK(bouge_win), winl); gtk_widget_add_events(btdep, GDK_POINTER_MOTION_MASK);
Tout marche bien, les résultats des printf sont bien ceux attendus, mais quand je relâche le bouton de la souris, j'ai un warning me disant que le signal n'est pas en train d'être émis.
J'ai fini par comprendre que g_signal_stop_emission_by_name ne déconnecte pas le handler du signal. Il ne fait que l'interrompre si il est émis en continu...
Quelqu'un a-t-il donc une solution pour faire en sorte que le handler cesse d'être appelé à l'emission du signal, jusqu'à c'que je clique à nouveau sur le bouton btdep ?
Merci d'avance
EDIT : Quel con... J'ai qu'à tout simplement enlever le masqueDésolé pour le topic inutile...
Partager