IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

[GTK+] Event Bouton appuyé


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 56
    Points
    56
    Par défaut [GTK+] Event Bouton appuyé
    Bonjour,
    J'ai une question con auquel google (mon ami) et la fonction recherche de ce forum (une autre amie) n'ont pas su me répondre.

    J'ai un bouton qui, quand on clique dessus fait
    i++;
    Un autre qui fait
    i--;
    Ils sont tout deux connectés par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect( ... "clicked"...)
    Je voudrais savoir si on peut les connecter à un second signal du type "rester appuyer"? Si oui quel est le nom du signal?

    En gros mon bouton est bien joli mais j'aimerais éviter de cliquer dessus 100 fois pour que i=100.

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Regarde si tu ne trouves pas ton bonheur du côté du signal GtkWidget::button-press-event. Mets des traces pour voir s'il est appelé plusieurs fois si tu restes appuyé. Si ce n'est pas le cas, alors utilise un variable qui te dit si tu dois incrémenter ou pas:

    gboolean do_increment = FALSE;

    Quand GtkWidget::button-press-event est déclenché, lance un timer (g_timeout_add) qui se déclenche toutes les n millisecondes pour incrémenter ta variable. Conserve la valeur de retour de g_timeout_add, tu en auras besoin.

    Connecte aussi le signal GtkWidget::button-release-event. Quand il se déclenche, récupère l'id que t'a renvoyé g_timeout_add, et détruis la source d'évènement timeout avec g_source_remove.

    En modulant la durée du timeout tu pourras jouer sur la vitesse d'incrémentation de la variable. Mais en même temps, à moins que ce ne soit un exemple pédagogique, tu ferais mieux d'utiliser un GtkSpinButton...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 56
    Points
    56
    Par défaut
    Merci ça m'a l'air un peu compliqué, je pensais à un bête nom de signal mais a priori ca existe pas tel quel.
    Donc du coup je vais peut être me rabattre sur un GtkSpinButton comme t'as dis.
    Dommage

    Merci pour ton aide!

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    La solution de liberforce est la seule viable pour que tu évites de cliquer 100x sur le bouton (mais faut voir le contexte d'utilisation). Un SpinButton, pour arriver à 100 tu devras quand même cliquer 100x sur les flèches (à moins que tu entre le chiffre dans la zone de saisie si tu la bloque pas en lecture seule) mais après il faut voir le tout dans le contexte, que veux-tu faire de ca ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Bin il y a p'têt une autre solution avec d'autres signaux, mais je ne sais pas lesquels... C'est ce que j'ai vu de mieux, mais je suis pas expert GTK non plus. Et pour le spinbutton, je crois que tu peux reste appuyé dessus pour augmenter le nombre en question. Ça peut être intéressant de regarder comment ça a été implémenté...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Je vais peut être écrire une bêtise mais il existe les signaux "pressed" et "released".
    Tant que le bouton reste appuyé le signal "pressed" est activé et inversement pour l'autre.

    A tester...

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Je vais peut être écrire une bêtise mais il existe les signaux "pressed" et "release".
    Tant que le bouton reste appuyé le signal "pressed" est activé et inversement pour l'autre.
    Oui tu raconte des bêtises Les signaux ne sont envoyés qu'une seule fois (heureusement que le signal release n'est pas appelé tant que le bouton est relâché...).

    La bonne méthode est celle expliquée par liberforce, c'est celle utilisée par les GtkSpinButton

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Oui en effet en me relisant j'ai écris une énormité .

    ok -> je sors

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    A mon tour d'écrire peut-être une énormité, mais dans le cas de l'utilisation d'un bête bouton, la callback exécutée sur le signal "pressed" (et non "clicked") peut peut-être vérifier dans une boucle que le bouton est toujours "pressed" auquel cas elle continue d'incrémenter (ou décrémenter).
    Ce qui éviterait d'avoir à appuyer 100 fois pour incrémenter de 100.
    Reste à régler la vitesse et là je ne sais pas.

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    J'enfonce le clou . Je poursuis avec mes signaux et ton idée. Le code exemple que je viens d'ecrire marche du tonnerre (j'ai les chevilles qui enflent )

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    #include <stdlib.h>
    #include <stdio.h> 
    #include <gtk/gtk.h>
     
    #define SPEED 100
     
    gboolean TimeoutAccelfunc(GtkWidget *LabelValue)
    {
    	guint value=(guint)g_strtod(gtk_label_get_label(GTK_LABEL(LabelValue)), NULL);
    	if (value<200)
    	{
    		value++;
    		gchar *NewValue=g_strdup_printf("%d", value);
    		gtk_label_set_label(GTK_LABEL(LabelValue), NewValue);
    		g_free(NewValue);
    	}
     
    	return TRUE;
    }
     
    gboolean TimeoutDecelfunc(GtkWidget *LabelValue)
    {
    	guint value=(guint)g_strtod(gtk_label_get_label(GTK_LABEL(LabelValue)), NULL);
    	if (value>=0)
    	{
    		value--;
    		gchar *NewValue=g_strdup_printf("%d", value);
    		gtk_label_set_label(GTK_LABEL(LabelValue), NewValue);
    		g_free(NewValue);
    	}
     
    	return TRUE;
    }
     
    void DecelPressedFunc(GtkButton *button, GtkWidget *ValueLabel)
    {
    	guint *source=(guint*)g_malloc(sizeof(guint));
    	*source=g_timeout_add(SPEED, (GSourceFunc)TimeoutDecelfunc, ValueLabel);
    	g_object_set_data(G_OBJECT(button), "source", source);
    }
     
    void AccelPressedFunc(GtkButton *button, GtkWidget *ValueLabel)
    {
    	guint *source=(guint*)g_malloc(sizeof(guint));
    	*source=g_timeout_add(SPEED, (GSourceFunc)TimeoutAccelfunc, ValueLabel);
    	g_object_set_data(G_OBJECT(button), "source", source);
    }
     
    void DecelReleaseFunc(GtkButton *button, GtkWidget *ValueLabel)
    {
    	guint *source=(guint*)g_object_get_data(G_OBJECT(button), "source");
     
    	if (g_source_remove(*source))
    		g_free(source);
    }
     
    void AccelReleaseFunc(GtkButton *button, GtkWidget *ValueLabel)
    {
    	guint *source=(guint*)g_object_get_data(G_OBJECT(button), "source");
     
    	if (g_source_remove(*source))
    		g_free(source);
    }
     
    void start_gtk(int argc,char **argv)
    {
    	gtk_init (&argc, &argv);  
     
      GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);    
      gtk_container_set_border_width (GTK_CONTAINER (win), 0);
      gtk_window_set_title (GTK_WINDOW (win), "test bouton");
      gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
      g_signal_connect (win, "destroy", gtk_main_quit, NULL);
     
      GtkWidget *table = gtk_table_new (3, 2, FALSE);
      gtk_container_add (GTK_CONTAINER (win), table);
     
    	/* Création des boutons et du label */
    	GtkWidget *AccelButton=gtk_button_new_from_stock(GTK_STOCK_ADD);
    	GtkWidget *DecelButton=gtk_button_new_from_stock(GTK_STOCK_REMOVE);
    	GtkWidget *ValueLabel=gtk_label_new("100");
    	/* Insertion du tout dans la table */
    	gtk_table_attach_defaults(GTK_TABLE(table), ValueLabel, 0, 2, 0, 1);
    	gtk_table_attach_defaults(GTK_TABLE(table), DecelButton, 0, 1, 1, 2);
    	gtk_table_attach_defaults(GTK_TABLE(table), AccelButton, 1, 2, 1, 2);
     
    	/* Attachement des différents signaux. */
    	g_signal_connect(G_OBJECT(DecelButton), "pressed", (GCallback)DecelPressedFunc, ValueLabel);
    	g_signal_connect(G_OBJECT(AccelButton), "pressed", (GCallback)AccelPressedFunc, ValueLabel);
    	g_signal_connect(G_OBJECT(DecelButton), "released", (GCallback)DecelReleaseFunc, ValueLabel);
    	g_signal_connect(G_OBJECT(AccelButton), "released", (GCallback)AccelReleaseFunc, ValueLabel);
     
    	gtk_widget_show_all (win);	
    	gtk_main ();    
    }
     
    int main(int argc,char **argv)
    {
    	start_gtk(argc,argv);
    	return 0;
    }

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    @gerald3,

    ton code ne compile pas chez moi.

  12. #12
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par gege2061 Voir le message
    La bonne méthode est celle expliquée par liberforce, c'est celle utilisée par les GtkSpinButton
    Je suis un génie, j'ai le niveau développeur GTK
    J'avais même pas regardé leur implémentation, mais c'est ce qui paraissait le plus logique...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  13. #13
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par vitoubien Voir le message
    @gerald3,

    ton code ne compile pas chez moi.
    Si si, ça compile...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc `pkg-config --libs --cflags gtk+-2.0` button-spin.c -o button-spin
    Et en plus, ça marche, même si je trouve l'allocation dynamique des id sources assez crade...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    Oui pardon, ce sont mes options de comilation qui posaient problème et je n'avais pas regardé plus loin le détail des messages d'erreur.
    Mea culpa

  15. #15
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Hop, une version modifiée de celle de gerald3d, plus dans le style de ce qui ce fait en normes de codage C/GTK+. Notez au passage que tout est dans la pile, je n'alloue que les widgets dynamiquement.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    #include <stdlib.h>
    #include <stdio.h> 
    #include <gtk/gtk.h>
     
    #define PERIOD 50 /* en millisecondes */
     
    typedef enum
    {
    	DECREMENT = '-',
    	INCREMENT = '+'
    } ValueAction;
     
    typedef struct
    {
    	GtkWindow *main_window;
    	GtkButton *increment;
    	GtkButton *decrement;
    	GtkLabel *value;
    	guint timeout_id;
    	gchar action;
    } UserInterface;
     
     
    gboolean on_action_time (gpointer data)
    {
    	UserInterface *ui = data;
    	static const n_digits = 20;
    	gchar strvalue[n_digits];
     
    	g_assert (ui != NULL);
    	guint value = (guint) g_strtod (gtk_label_get_label (ui->value), NULL);
     
    	if (ui->action == INCREMENT)
    		value++;
    	else if (ui->action == DECREMENT)
    		value--;
    	else
    		return TRUE;
     
     
    	g_snprintf (strvalue, n_digits, "%d", value); 
    	gtk_label_set_label (ui->value, strvalue);
     
    	return TRUE;
    }
     
     
     
    static inline void 
    set_increment_step_timer (UserInterface *ui, ValueAction action)
    {
    	g_assert (ui != NULL);
    	g_assert (action == INCREMENT || action == DECREMENT);
     
    	ui->action = action;
    	ui->timeout_id = g_timeout_add (PERIOD, on_action_time, ui);
    }
     
    void on_decrement_pressed (GtkButton *button, gpointer user_data)
    {
    	set_increment_step_timer ((UserInterface *) user_data, DECREMENT);
    }
     
    void on_increment_pressed (GtkButton *button, gpointer user_data)
    {
    	set_increment_step_timer ((UserInterface *) user_data, INCREMENT);
    }
     
    void on_increment_or_decrement_released (GtkButton *button, gpointer user_data)
    {
    	UserInterface *ui = user_data;
    	g_source_remove (ui->timeout_id);
    }
     
    void create_gui (UserInterface *ui)
    {
    	g_assert (ui != NULL);
     
    	GtkWidget *win;
    	GtkWidget *box;
    	GtkWidget *increment_button;
    	GtkWidget *decrement_button;
    	GtkWidget *value;
     
    	/* Création de la fenêtre principale */
    	win = gtk_window_new (GTK_WINDOW_TOPLEVEL);    
    	gtk_container_set_border_width (GTK_CONTAINER (win), 0);
    	gtk_window_set_title (GTK_WINDOW (win), "test bouton");
    	gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
    	g_signal_connect (win, "destroy", gtk_main_quit, NULL);
     
    	/* Création des boutons et du label */
    	increment_button = gtk_button_new_from_stock (GTK_STOCK_ADD);
    	decrement_button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
    	value = gtk_label_new ("100");
     
    	/* Insertion du tout dans la box */
    	box = gtk_hbox_new (FALSE, 6);
    	gtk_container_add (GTK_CONTAINER (win), box);
    	gtk_box_pack_start (GTK_BOX (box), decrement_button, FALSE, FALSE, 0);
    	gtk_box_pack_start (GTK_BOX (box), value, TRUE, TRUE, 0);
    	gtk_box_pack_start (GTK_BOX (box), increment_button, FALSE, FALSE, 0);
     
    	/* Attachement des différents signaux. */
    	g_signal_connect (G_OBJECT (decrement_button), "pressed",  G_CALLBACK (on_decrement_pressed), ui);
    	g_signal_connect (G_OBJECT (increment_button), "pressed",  G_CALLBACK (on_increment_pressed), ui);
    	g_signal_connect (G_OBJECT (decrement_button), "released", G_CALLBACK (on_increment_or_decrement_released), ui);
    	g_signal_connect (G_OBJECT (increment_button), "released", G_CALLBACK (on_increment_or_decrement_released), ui);
     
    	gtk_widget_show_all (win);
     
    	/* Initialisation de la structure regroupant les infos de l'application */
    	ui->main_window = GTK_WINDOW (win);
    	ui->increment = GTK_BUTTON (increment_button);
    	ui->decrement = GTK_BUTTON (decrement_button);
    	ui->value = GTK_LABEL (value);
    	ui->timeout_id = 0;
    	ui->action = INCREMENT;
    }
     
    int main (int argc,char **argv)
    {
    	UserInterface ui;
    	gtk_init (&argc, &argv);  
    	create_gui (&ui);
    	gtk_main ();    
    	return 0;
    }
    @gerald3d: tu devrais faire gaffe au mélange espace/tabulation dans ton code, un patch fait de cette manière serait refusé dans GNOME...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  16. #16
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    L'implémentation dans GtkSpinButton:
    http://git.gnome.org/cgit/gtk+/tree/...button.c#n1061

    Ce sont effectivement les signaux button-press-event et button-released-event qui sont utilisés. Ils ont l'avantage de venir de GtkWidget, et ne sont pas limités à GtkButton comme ceux que gerald et moi avons utilisé dans notre code exemple, le code produit avec ces signaux aurait donc été transposable à n'importe quel widget. L'autre distinction est que ces signaux transportent le bouton de la souris qui a été appuyé, et permettent donc un comportement différent selon un clic gauche, droit ou molette...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  17. #17
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par liberforce Voir le message
    @gerald3d: tu devrais faire gaffe au mélange espace/tabulation dans ton code, un patch fait de cette manière serait refusé dans GNOME...
    Je ne mets que des tabulations. Je suppose que c'est lors du copier/coller que le site les transforme en espace.

  18. #18
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Je ne mets que des tabulations. Je suppose que c'est lors du copier/coller que le site les transforme en espace.
    Je ne pense pas, j'utilise vim pour formatage, qui ne me met que des tabulations, et mon formatage est correct et pas le tien... Entre les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_init (&argc, &argv);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /* Création des boutons et du label */
    c'est indenté avec des espaces, alors que tout le reste utilise des tabulations. Copier/coller foireux ?

    En revanche de mon côté le site me rajoute des sauts de ligne dans les blocs de code, j'ai dû les virer à la main.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  19. #19
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ca ne me paraît pas super important de se battre pour des histoires de tabs/espaces sur des bouts de code copiés/collés sur un forum...

  20. #20
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Ca ne me paraît pas super important de se battre pour des histoires de tabs/espaces sur des bouts de code copiés/collés sur un forum...
    Dans le cas présent non, en revanche ça nuit à la lisibilité du code. Mais c'est une des premières choses que tu dois maîtriser dès que tu contribues à un projet où tu n'es pas le seul développeur. Autant montrer l'exemple.

    Dans la catégorie pinaillage, la semaine prochaine nous parlerons des espaces en trop en fin de ligne .
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. GTK+ Un bouton dans un onglet
    Par garagou dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 09/04/2015, 22h58
  2. sandbox security event bouton accept ou non?
    Par headmax dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 13/03/2012, 01h53
  3. Détecter chaque bouton appuyé+temporisation
    Par razaonce dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/07/2011, 11h37
  4. [GTK+] Event Mouse coordonnée
    Par Skarsnick dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 19/02/2010, 16h51
  5. Gérer les events d'un tableau de boutons
    Par lord_kalipsy dans le forum wxWidgets
    Réponses: 7
    Dernier message: 20/10/2004, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo