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 :

empecher le drag ou position de la fenetre principale ?


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Par défaut empecher le drag ou position de la fenetre principale ?
    bonjour,

    J'ai pas réussi à trouver ni sur le net ni sur la doc gtk3.
    Je place la fenetre principale dans le coin haut gauche de l'écran et ensuite je ne veux pas qu'on puisse la changer de place car j'utilise d'autre widget de type window top level que je place en position absolu par dessus la fenetre principale et donc si on la change de place, le widget sera mal placé.

    Merci de votre aide

    Edit : j'ai aussi essayé de récupérer la position de la fenêtre principale mais sans succès car le code suivant plante à l'exécution
    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
    #include <gtk/gtk.h>
     
    int main( int argc, char **argv )
    {
        GtkWidget *window;
     
        gtk_init( &argc, &argv );
     
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size (GTK_WINDOW (window), 1200, 760);
        int *gx, *gy;
        gdk_window_get_root_origin(window, gx, gy);
        g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
        gtk_widget_show_all( window );
        gtk_main();
     
        return( 0 );
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *gx, *gy;
    gdk_window_get_root_origin(GTK_WINDOW(window), gx, gy);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gint gx, gy;
    gdk_window_get_root_origin(window, &gx, &gy);

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Bonjour,

    Pour récupérer les coordonnées de la fenêtre, c'est plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    int gx = 0, gy = 0;
    ...
    gtk_window_get_position(GTK_WINDOW (window), &gx, &gy);
    g_message(">>>> %d  %d", gx, gy);
    ...
    Pour garder la main fenêtre au même endroit (chose que je n'avais encore jamais tenté), je commencerais par quelque chose de ce genre (à affiner !) :

    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
     
    #include <gtk/gtk.h>
     
    int gx = 0, gy = 0;
     
    void window_moved(GtkWidget *window, GdkEvent *event, gpointer data)
    {
       int x, y;
       x = event->configure.x;
       y = event->configure.y;
       g_message(">>>> %d  %d", x, y); /* pour info */
       gtk_window_move (GTK_WINDOW (window), gx, gy);
    }
     
    int main (int argc, char **argv)
    {
        GtkWidget *window;
     
        gtk_init (&argc, &argv);
     
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size (GTK_WINDOW (window), 1200, 760);
        gtk_window_move (GTK_WINDOW (window), gx, gy);
        g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
        gtk_widget_add_events (window, GDK_CONFIGURE);
        g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK (window_moved), NULL);   /* permet de capturer le signal moved */
        gtk_widget_show_all (window);
        gtk_main();
     
        return 0;
    }
    À affiner et à rendre propre (globales à bannir, passer à la callback une structure pour les coordonnées, etc).

    Ne serait-ce pas mieux de déplacer les widgets si la fenêtre est déplacée ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Par défaut
    Merci pour ta réponse.
    Le programme plante quand même mais moins :
    gdk critical **: gdk_window_get_position: assertion 'GDK_IS_WINDOW (window)' failed

    J'ai essayé en enlevant le cast GTK_WINDOW(window), ça change rien.

    Ne serait-ce pas mieux de déplacer les widgets si la fenêtre est déplacée ?
    Tu as raison. C'est pour ça que je cherchais à récupérer les coord de la fenêtre principale.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_window_get_position (GTK_WINDOW (window), &gx, &gy);
    plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gdk_window_get_position (GTK_WINDOW (window), &gx, &gy);

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Par défaut
    J'ai mis mes lunettes, ça va mieux, j'ai corrigé

    Merci.

    Est-ce que tu sais à quoi sert alors gdk_window_get_root_origin ?

    Je me demandais aussi ceci : quand je superpose une autre fenetre TOP_LEVEL sur la fenetre principale, puis-je définir cette 2è fenêtre comme child de la principale ? (pour utiliser widget->allocate.x)

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Citation Envoyé par rollbich Voir le message
    Est-ce que tu sais à quoi sert alors gdk_window_get_root_origin ?
    La plupart des widgets ont des GdkWindow « caché » ce qui te permet différentes manipulations et traitements dessus.

    Citation Envoyé par rollbich Voir le message
    Je me demandais aussi ceci : quand je superpose une autre fenetre TOP_LEVEL sur la fenetre principale, puis-je définir cette 2è fenêtre comme child de la principale ? (pour utiliser widget->allocate.x)
    Avec gtk_window_set_transient_for ?

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

Discussions similaires

  1. position de curseur fenetre swing
    Par yayamo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/02/2007, 17h22
  2. Sauvegarde de la position d'une fenetre
    Par mouck dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/07/2006, 10h21
  3. [C#][Débutant] Comment empecher d ouvrir plusieurs fois la meme fenetre
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 21
    Dernier message: 27/04/2006, 13h41
  4. [vb.net][Toolstrip] [vs2005] Empecher le drag n drop
    Par graphicsxp dans le forum Windows Forms
    Réponses: 9
    Dernier message: 16/12/2005, 11h36
  5. [MFC] Position d'une fenetre
    Par ni0urk dans le forum MFC
    Réponses: 3
    Dernier message: 24/11/2005, 17h27

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