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_widget_set_sensitive + child


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 111
    Par défaut gtk_widget_set_sensitive + child
    Bonjour !!!

    J'ai une application avec plusieurs boutons ouvrant (pour certains) une popup. Cette popup est bien sur modale et centré sur la fenetre (toplevel) parente (utilisation de la fonction gtk_window_set_transient_for () ). J'aimerais en plus que l'ensemble de la fenetre soit "grisé". j'ai bien utilisé la fonction gtk_widget_set_sensitive mais cela ne grise pas ma fenetre et ses "childs"

    Voici le code :
    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
     
    void
    on_Fen_OPS_btn_Etat_clicked            (GtkButton       *button,
                                            gpointer         user_data)
    {
    	// On créé la popup
    	popup_Etat=create_Popup_Etat2();
    	gtk_widget_set_sensitive(GTK_WIDGET(button),FALSE);
    	// On la centre
    	gtk_window_set_position(GTK_WINDOW(popup_Etat),GTK_WIN_POS_CENTER);
    	// On la met au premier plan et on l'affiche
    	gtk_window_set_transient_for (GTK_WINDOW(popup_Etat),GTK_WINDOW(button));
    	gtk_widget_show (popup_Etat);
     
    }
    Pour info: "button" correspond à ma fenetre toplevel sur lequel se trouve le bouton qui permet l'ouverture de la popup.

    Si quelqu'un a une solution je suis preneur.

    Par avance merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 172
    Par défaut
    Si cette fonction est une callback appelée quand tu cliques sur un bouton, alors le pointeur button correspond forcément au bouton qui a été cliqué (et non à la fenêtre qui le contient).

    J'ai vérifié, gtk_widget_set_sensitive est une fonction "récursive". Je mets récursive entre guillemets car je ne sais pas si elle utilise un algorithme récursif ou itératif, mais ce terme semble être utilisé à tord et à travers pour désigner un fonction qui s'applique à un widget puis à tous les éléments qu'il contient.

    Donc normalement si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_set_sensitive(popup_Etat, FALSE);
    Ton popup et tout ce qu'il contient sera grisé.

    Il faut croire que gtk_window_set_transient_for ne crée pas un lien de parenté assez "fort" pour que gtk_widget_set_sensitive passe à travers...
    Je pense qu'elle ne fonctionne pour les éléments concernés par la fonction gtk_widget_realize, c'est-à-dire ceux qui sont directement à l'intérieur du widget.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 111
    Par défaut
    Citation Envoyé par Kicker Voir le message
    Si cette fonction est une callback appelée quand tu cliques sur un bouton, alors le pointeur button correspond forcément au bouton qui a été cliqué (et non à la fenêtre qui le contient).

    J'ai vérifié, gtk_widget_set_sensitive est une fonction "récursive". Je mets récursive entre guillemets car je ne sais pas si elle utilise un algorithme récursif ou itératif, mais ce terme semble être utilisé à tord et à travers pour désigner un fonction qui s'applique à un widget puis à tous les éléments qu'il contient.

    Donc normalement si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_set_sensitive(popup_Etat, FALSE);
    Ton popup et tout ce qu'il contient sera grisé.

    Il faut croire que gtk_window_set_transient_for ne crée pas un lien de parenté assez "fort" pour que gtk_widget_set_sensitive passe à travers...
    Je pense qu'elle ne fonctionne pour les éléments concernés par la fonction gtk_widget_realize, c'est-à-dire ceux qui sont directement à l'intérieur du widget.
    Oui effectivement la fonction que j'ai mis est une callback (celle appellée lorsque pour ouvrir la popup après un clic sur le bouton) de cette manière:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    g_signal_connect_swapped ((gpointer) Fen_OPS_btn_Etat, "clicked",
                                G_CALLBACK (on_Fen_OPS_btn_Etat_clicked),
                                GTK_OBJECT (fen_Operationnel));
    Par contre button contient bien la fenetre !!! la fonction g_signal_connect_swapped inverse les paramètres (glade ne change pas la structure de la fonction). Si j'avais mis un connect normal je serais d'accord avec toi mais ici button devient le paramètre que je passe et user_data l'element déclencheur.

    La fonction gtk_window_set_transient_for sert à garder la popup en premier plan c tout.

    Je vais refaire un essai et je vous tiens au courant pour gtk_widget_set_sensitive

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 111
    Par défaut
    J'avais du faire une erreur de frappe (ok pour la fonction gtk_widget_set_sensitive est bien récursive)

    Merci

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

Discussions similaires

  1. [MFC]Child vs popup
    Par benahpets dans le forum MFC
    Réponses: 24
    Dernier message: 17/06/2005, 14h19
  2. nodes, child et compatibilité... encore et toujours
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2005, 14h26
  3. Creer une nouvelle Child Frame
    Par Andrenn dans le forum MFC
    Réponses: 2
    Dernier message: 14/02/2005, 12h47
  4. [MDI] Child maximize
    Par zorrax dans le forum Composants VCL
    Réponses: 4
    Dernier message: 26/04/2004, 17h33
  5. TreeView -> ajouter un child à un noeud donné
    Par fake dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/03/2003, 17h14

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