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_entry_set_text et gtk_widget_grab_focus


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut gtk_entry_set_text et gtk_widget_grab_focus
    Bonjour à tous,

    Les GtkEntry sont des widgets qui semblent simples mais qui continuent à me poser des problèmes. Voici par exemple un code-exemple qui explique le problème que j'ai.

    Après saisie de la première entry, je fais les deux choses suivantes :

    1. Je positionne le focus sur la deuxième entry (gtk_widget_grab_focus), et
    2. Cette seconde entry possède déjà une chaine pré-saisie.


    Le problème est que le positionnement du focus sur la seconde entry a pour effet secondaire de sélectionner tout le texte déjà saisi. Du coup, alors qu'on s'attendrait à ce qu'un simple retour-charriot de l'utilisateur valide cette seconde entry (si le texte pré-saisi convient), en fait il l'efface !

    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
    /* travail sur les gtk_entry */
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include <string.h>
     
    GtkWidget* pEntry1=NULL;
    GtkWidget* pEntry2=NULL;
     
    int main(int argc,char **argv)
    {
        GtkWidget* pWindow=NULL;
        GtkWidget* pVbox=NULL;
        GtkWidget* pButton=NULL;
     
        gboolean entree1(GtkWidget *pEntry, gpointer data); /* callback si saisie entree 1 */
        gboolean entree2(GtkWidget *pEntry, gpointer data); /* callback si saisie entree 2 */
     
        gtk_init(&argc,&argv);
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pWindow), "travail sur les gtk_entry");
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
        /* creation des entry */
        pEntry1=gtk_entry_new();
        pEntry2=gtk_entry_new();
        gtk_entry_set_text(pEntry2, "texte");
        /* creation du bouton */
        pButton=gtk_button_new_with_label("Ok..");
        /* on place tout ca dans une boxe */
        pVbox=gtk_vbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(pVbox), pEntry1, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(pVbox), pEntry2, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(pVbox), pButton, FALSE, FALSE, 0);
        /* On verse ca dans la fenetre principale */
        gtk_container_add(GTK_CONTAINER(pWindow), pVbox);
        /* Connexion des signaux */
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(gtk_main_quit), NULL);
        g_signal_connect(G_OBJECT(pEntry1), "activate", G_CALLBACK(entree1), NULL);
        g_signal_connect(G_OBJECT(pEntry2), "activate", G_CALLBACK(entree2), NULL);
        /* Affichage de la fenêtré et de tout ce qu'il contient */
        gtk_widget_grab_focus(pEntry1);
        gtk_widget_show_all(pWindow);
        gtk_main();
        return EXIT_SUCCESS;
    }
    gboolean entree1(GtkWidget *pEntry, gpointer data)
    {
        const gchar *text;
        /* Recuperation du texte contenu dans le GtkEntry */
        text=gtk_entry_get_text(GTK_ENTRY(pEntry1));
        /* On verouille */
        gtk_widget_set_sensitive(pEntry1, FALSE);
        /* On met le focus sur le second widget */
        gtk_widget_grab_focus(pEntry2);
        return TRUE;
    }
    gboolean entree2(GtkWidget *pEntry, gpointer data)
    {
        const gchar *text;
        /* Recuperation du texte contenu dans le GtkEntry */
        text=gtk_entry_get_text(GTK_ENTRY(pEntry2));
        /* On verouille */
        gtk_widget_set_sensitive(pEntry2, FALSE);
        return TRUE;
    }
    Existerait-il un moyen d'éviter que le texte pré-saisi soit sélection entièrement par le gtk_widget_grab_focus, et que le curseur soit donc - au contraire - positionné à la fin (pour valider, ou bien pour modifier la chaine pré-saisie)?

    D'avance merci pour toute aide sur ce point.

    Cordialement, Eric.

  2. #2
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Bon, je me réponds à moi-même. A force de chercher, j'ai trouver la fonction gtk_editable_set_position() qui permet de contourner ce problème en positionnant le curseur à l'endroit voulu.

    J'espère que ca servira à d'autres..

    Eric.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec gtk_entry_set_text
    Par armand58 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 06/01/2013, 12h14
  2. gtk_tree_view_set_cursor et gtk_widget_grab_focus
    Par Nonoel dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 07/04/2011, 17h01
  3. problem avec gtk_entry_set_text()
    Par acchrraf dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 26/08/2010, 22h20
  4. PB avec gtk_widget_grab_focus
    Par lrgtk dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 16/12/2007, 12h09
  5. Boite de dialogue avec plusieurs gtk_entry_set_text
    Par AjJi dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 06/09/2006, 22h48

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