Déconnecter un signal de son handler
Bonjour, j'ai créé cette fonction pour qu'une EventBox puisse servir à déplacer une fenêtre :
Code:
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;
} |
Elle est appelée par ce Widget :
Code:
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 masque :? Désolé pour le topic inutile...