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 :

La méthode deiconify() ne marche pas


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club Avatar de nant13
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 43
    Points
    43
    Par défaut La méthode deiconify() ne marche pas
    Bonjour tout le monde,

    J'ai un problème bête mais qui me bloque bien.
    J'utilise la méthode:
    et plus loin dans le code j'appelle la méthode:
    mais ma fenêtre ne réapparaît pas !

    Quelqu’un aurait une idée?
    Merci d’avance
    Cookie : Anciennement petit gâteau sucré, qu'on acceptait avec plaisir. Aujourd'hui : petit fichier informatique drôlement salé, qu'il faut refuser avec véhémence.

    Mon projet GitHub: https://github.com/Swiftapp-hub/Swifty-Assistant

  2. #2
    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
    Bonjour.

    Tout est dans la documentation officielle 😉:
    Note that you shouldn’t assume the window is definitely deiconified afterward, because other entities (e.g. the user or [window manager][gtk-X11-arch])) could iconify it again before your code which assumes deiconification gets to run.

    You can track iconification via the “window-state-event” signal on Gtk::Widget.
    Connecte un callback au signal « window-state-event » pour contrôler l’état de l’opération. Un « show_all » sur ta fenêtre peut régler le problème.

  3. #3
    Membre du Club Avatar de nant13
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta réponse gerald3d
    Appeller la methode puis ne marche pas non plus !

    En fait voici ce que je veux faire:

    - Je crée un fenêtre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk::Main::run(ma_fenetre)
    - Et ensuite je veux créer un autre fenêtre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk::Main::run(ma_fenetre_tow)
    et que se ferme, mais je n'arrive pas a la fermer et a laisser ouverte !

    Je ne sais pas si j'ai été clair mais j’espère que tu pourra m'aider
    Cookie : Anciennement petit gâteau sucré, qu'on acceptait avec plaisir. Aujourd'hui : petit fichier informatique drôlement salé, qu'il faut refuser avec véhémence.

    Mon projet GitHub: https://github.com/Swiftapp-hub/Swifty-Assistant

  4. #4
    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
    Tu vas être partiellement déçu.

    Tout d'abord voila un code exemple minimaliste qui fonctionne sous XFCE :

    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
    #include <gtk/gtk.h>
     
    typedef struct {
      GtkWidget *window;
      GtkWidget *secondwindow;
    } GlobalData;
     
    void
    button_clicked_event_CB (GtkButton *button, GlobalData *data)
    {
      static gboolean flag = TRUE; // Bascule
     
      if (flag)
        {
          gtk_window_iconify (GTK_WINDOW (data->secondwindow));
          gtk_button_set_label (button, "Deiconify second window");
        }
      else
        {
          gtk_window_deiconify (GTK_WINDOW (data->secondwindow));
          gtk_button_set_label (button, "Iconify second window");
        }
      flag = !flag;
    }
     
    void
    destroy_event_CB (GtkWidget *object, GlobalData *data)
    {
      gtk_widget_destroy (data->secondwindow);
      gtk_main_quit ();
    }
     
    gint
    main(int argc, gchar **argv)
    {
      GlobalData data;
      GtkWidget *button;
     
      gtk_init (&argc, &argv);
     
     
      data.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (data.window), "Principal window");
      button = gtk_button_new_with_label ("Iconify second window");
      gtk_container_add (GTK_CONTAINER(data.window), button);
     
      data.secondwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (data.secondwindow), "Second window");
      gtk_widget_set_size_request (data.secondwindow, 200, 200);
     
      // Affectation des différents signaux
      g_signal_connect (G_OBJECT(data.window), "destroy", G_CALLBACK (destroy_event_CB), &data);
      g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK (button_clicked_event_CB), &data);
     
      // Affichage du tout.
      gtk_widget_show_all(data.window);
      gtk_widget_show_all (data.secondwindow);
     
      // Boucle principale
      gtk_main();
     
      return 0;
    }
    Malheureusement pour toi, il est écrit "en tout petit dans la documentation officielle" que le comportement de ces fonctions est dépendant du window manager utilisé. Et effectivement sous Gnome la fenêtre se réduit mais ne se maximise pas !

    GTK+ has functions for asking the window manager to do various things; see for example gtk_window_iconify() or gtk_window_maximize() or gtk_window_set_decorated(). Keep in mind that gtk_window_move() and window sizing are ultimately controlled by the window manager as well and most window managers will ignore certain requests from time to time, in the interests of good user interface.
    Une bonne solution serait de cacher/montrer la dite fenêtre plutôt que de vouloir la reduire/maximiser. Maintenant cette dernière solution ne correspond peut-être pas à tes attentes...

  5. #5
    Membre du Club Avatar de nant13
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Merci encore pour ta réponse gerald3d !

    En fait ce que je voudrais, mais que je n'arrive pas , c'est que lors d'un click sur un bouton la mainwindow se ferme et que la secondewindow s'ouvre.
    Seulement comme mainwindow et la première fenêtre ouverte de mon programme je n'arrive pas a la détruire (avec Gtk::Window::close() ou avec delete(mainwindow)) pour laisser place a la secondewindow !

    Pourtant certain logiciel le font donc ça doit être possible

    Merci encore pour ton temps
    Cookie : Anciennement petit gâteau sucré, qu'on acceptait avec plaisir. Aujourd'hui : petit fichier informatique drôlement salé, qu'il faut refuser avec véhémence.

    Mon projet GitHub: https://github.com/Swiftapp-hub/Swifty-Assistant

  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
    Pour ta dernière suggestion c'est assez facile à réaliser. Voila un exemple en C :

    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
    #include <gtk/gtk.h>
     
    typedef struct {
      GtkWidget *mainwindow;
      GtkWidget *secondwindow;
    } GlobalData;
     
    void
    button_clicked_event_CB (GtkButton *button, GlobalData *data)
    {
      gtk_widget_destroy (data->mainwindow);
      data->mainwindow = NULL;
     
      gtk_widget_show_all (data->secondwindow);
    }
     
    void
    destroy_event_CB (GtkWidget *object, GlobalData *data)
    {
      gtk_widget_destroy (data->secondwindow);
      gtk_main_quit ();
    }
     
    gint
    main(int argc, gchar **argv)
    {
      GlobalData data;
      GtkWidget *button;
     
      gtk_init (&argc, &argv);
     
     
      data.mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (data.mainwindow), "Main window");
      button = gtk_button_new_with_label ("destroy main window");
      gtk_container_add (GTK_CONTAINER(data.mainwindow), button);
     
      data.secondwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (data.secondwindow), "Second window");
      gtk_widget_set_size_request (data.secondwindow, 300, 200);
     
      // Affectation des différents signaux
      g_signal_connect (G_OBJECT(data.secondwindow), "destroy", G_CALLBACK (destroy_event_CB), &data);
      g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK (button_clicked_event_CB), &data);
     
      // Affichage du tout.
      gtk_widget_show_all(data.mainwindow);
     
      // Boucle principale
      gtk_main();
     
      return 0;
    }

  7. #7
    Membre du Club Avatar de nant13
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Voila un exemple en C :
    Super, merci !
    Je le converti en c++, j'essaye et je te redis
    Cookie : Anciennement petit gâteau sucré, qu'on acceptait avec plaisir. Aujourd'hui : petit fichier informatique drôlement salé, qu'il faut refuser avec véhémence.

    Mon projet GitHub: https://github.com/Swiftapp-hub/Swifty-Assistant

  8. #8
    Membre du Club Avatar de nant13
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Bon j'ai réussi , je me suis rendu compte en relisant ton exemple que je ne lançais pas mes fenêtre de la bonne façon et du coup je n'arrivais pas a les fermer !
    J’appelais Gtk::Main::run a chaque fois que je voulais ouvrir une fenêtre et après je n’appelais pas non plus Gtk::Main::quit.

    Encore merci pour ton aide et ton temps gerald3d !
    Cookie : Anciennement petit gâteau sucré, qu'on acceptait avec plaisir. Aujourd'hui : petit fichier informatique drôlement salé, qu'il faut refuser avec véhémence.

    Mon projet GitHub: https://github.com/Swiftapp-hub/Swifty-Assistant

  9. #9
    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
    De rien. C’est un plaisir 😁

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

Discussions similaires

  1. Méthode blur ne marche pas sur firefox
    Par Mr.Robot12 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/01/2018, 10h39
  2. [D3js] Méthode remove() ne marche pas
    Par benjamin_malaussene dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 07/07/2016, 16h56
  3. [XL-2010] Copier une feuille dans un autre classeur méthode .copy ne marche pas
    Par Dragern dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2015, 11h31
  4. La méthode Popup ne marche pas dans un HTA ?
    Par hackoofr dans le forum VBScript
    Réponses: 5
    Dernier message: 14/08/2012, 04h16
  5. [JDOM] Une méthode qui ne marche pas
    Par kaninama dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/05/2006, 16h10

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