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 :

Nombreuses questions : GdkEvent, empecher un dialog de se fermer.


Sujet :

GTK+ avec C & C++

Vue hybride

Captare Nombreuses questions :... 14/07/2009, 11h57
gerald3d Une première réponse pour le... 14/07/2009, 15h59
Captare Merci pour cette réponse. ... 14/07/2009, 16h44
gerald3d Une autre réponse à une autre... 14/07/2009, 16h56
Captare Merci t'es trop fort ! :) ... 14/07/2009, 17h14
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut Nombreuses questions : GdkEvent, empecher un dialog de se fermer.
    Bonjour à tous,

    Je suis en train de lire le tutoriel officiel de GTK+, et une nouvelle notion a fait son apparition que j'ai du mal à comprendre.
    Je ne comprend pas très bien la différence entre une fonction callback "normal", et une fonction callback avec GdkEvent comme argument. Voici un code qui provient du tuto officiel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    gint close_application( GtkWidget *widget,
                            GdkEvent  *event,
                            gpointer   data )
    {
      gtk_main_quit ();
      return TRUE;
    }
     
    g_signal_connect_swapped (G_OBJECT (button), "clicked",
                                  G_CALLBACK (close_application),
                                  G_OBJECT (window));
    Ici pourquoi faut il un GdkEvent en paramètre puisque le signal "clicked" ne fait pas partie de cette structure . Le code suivant devrait suffire, non ? (ou tout cas il fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gint close_application( GtkWidget *widget,
                            gpointer   data )
    {
      gtk_main_quit ();
      return TRUE;
     
     
    g_signal_connect_swapped (G_OBJECT (button), "clicked",
                                  G_CALLBACK (close_application),
                                  G_OBJECT (window));
    }
    Autre chose, comment empêcher un dialog de se fermer. Pas de problème vec une fenêtre, via "delete-event", mais impossible avec un dialog. J'ai regardé dans la doc et apparemment, le signal "delete-event" est désactivé lorsque le dialog est lancé (gtk_dialog_run). Quelqu'un a une solution ? Peut être que je peux forcer le signal ?

    Dans mon programme j'ai une structure qui contient tous les éléments nécessaire au fonctionnement de la fenêtre principale. Je passe donc cette structure à des fonctions via un pointeur que j'ai alloué avec malloc, mais j'ai vu qu'il existait également g_malloc. Quelle différence existe il entre malloc et g_malloc ? Même si j'ai besoin de cette structure tout au long du programme faut il que je la free() , ou bien le système d'exploitation le fera quand le programme sera terminé (gtk_main_quit) ?

    Derniere chose, je suis assez jeune (15 ans) et dans le tutoriel en anglais il y'a souvent un mot qui revient :"handler", qui signifierait poignée , quelqu'un peut m'expliquer ce que ce mot signifie ?


    Merci à ceux qui prendront le temps de ma lire.

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Une première réponse pour le signal "clicked". Effectivement, si le signal est celui pour un GtkButton, alors le prototype du Callback est inapproprié.
    Pour aller plus loin, le prototype que tu donnes est aussi erroné. Voila celui indiqué par la documentation officielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    The "clicked" signal
     
    void                user_function                      (GtkButton *button,
                                                            gpointer   user_data)      : Run First / Action
    Emitted when the button has been activated (pressed and released).
     
    button*:
     
    the object that received the signal
    user_data*:
     
    user data set when the signal handler was connected.

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Merci pour cette réponse.

    Up pour les autres questions !

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Une autre réponse à une autre question.

    Si ton dialog est un GtkDialog, alors il hérite des GtkWindow. On peut donc utiliser la fonction suivante avant de lancer la boucle :
    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
    gtk_window_set_deletable ()
     
    void                gtk_window_set_deletable            (GtkWindow *window,
                                                             gboolean setting);
    By default, windows have a close button in the window frame. Some window managers allow GTK+ to disable this button. If you set the deletable property to FALSE using this function, GTK+ will do its best to convince the window manager not to show a close button. Depending on the system, this function may not have any effect when called on a window that is already visible, so you should call it before calling gtk_window_show().
     
    On Windows, this function always works, since there s no window manager policy involved.
     
    window*:
     
    a GtkWindow
    setting*:
     
    TRUE to decorate the window as deletable
    Since 2.10
    Tout ceci reste à tester bien sûr.
    Si toutefois ca ne fonctionne pas, la documentation officielle nous dit :" If a dialog receives a delete event, the "response" signal will be emitted with a response ID of GTK_RESPONSE_DELETE_EVENT." Tu peux donc utiliser ce signal pour faire comme si l'utilisateur avait cliqué sur le bouton annuler de ton dialog (ou autre).

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Merci t'es trop fort !

    Le bouton, a bien disparu. J'ai encore un peu de mal à utiliser la documentation, je me suis juste limité à la page concernant les GtkDialogs.

    Si ton dialog est un GtkDialog, alors il hérite des GtkWindow
    Pourtant j'ai tout de même besoin d'utiliser la macro GTK_WINDOW, qui fait un cast. Sais tu pourquoi ?


    Up pour les deux autres questions .

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Un CAST, oui mais c'est un peu plus que ca quand même. La librairie Gtk+ est "pratiquement" une POO. Donc il est nécessaire de "caster" pour accéder au parent de l'objet.
    Dans la documentation officielle tu as pour chaque type une hiérarchie des objets. Pense à toujours aller voir de ce côté. Bien souvent ton objet ne dispose pas de la fonction adéquate mais un de ses parents oui.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/07/2012, 16h58
  2. Question sur .tabs et .dialog - confirmation
    Par Paul75 dans le forum jQuery
    Réponses: 6
    Dernier message: 29/01/2012, 01h03
  3. [Dojo] Questions sur FileUploader et Dialog
    Par Daniel_Gibot dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 29/01/2010, 14h39
  4. Nombreuses questions d'architecture avec Silverlight
    Par cfeltz dans le forum Silverlight
    Réponses: 4
    Dernier message: 14/05/2009, 05h02
  5. [SimpleXML] Nombreuses questions
    Par cydream dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 08/09/2008, 16h12

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