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 :

Gestion de plusieurs fenêtres


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Gestion de plusieurs fenêtres
    Bonjour,
    Mon application possède plusieurs fenêtres dont une seule est visible au lancement. Les autres sont visibles si on clique sur un bouton de la première.
    J'ai néanmois deux "gros" problèmes:
    1. Les fenêtres appelées apparaissent toujours en second plan. Je ne trouve pas de moyens pour les faire apparaître en premier plan (je suis sous LINUX RHEL);
    2. Parmi ces fenêtres, il y en a une qui est insensible à gtk_widget_show_all. Alors que si j'utilise gtk_widget_show, l'application sort violemment en "core dump" sur cette fenêtre. Le seul moyen pour visualiser cette fenêtre est d'initialiser à visible par glade et elle est ainsi visible dès le lancement de l'application. Mais je ne le voulais pas.

    J'aimerais savoir si quelqu'un parmi vous a des pistes sur ces deux problèmes.
    Merci à l'avance et cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Pour ton 1er problème, j'essaierais avec gtk_window_present. Pour ton 2nd problème, ça ressemble à une corruption mémoire quelque part dans ton code...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Précisions supplémentaires
    Concernant mon premier problème, j'ai déjà fait toutes les tentatives avec les instructions avant (et/ou) après gtk_widget_show:

    - gtk_window_present(GTK_WINDOW(widget));
    - gtk_window_set_keep_above (GTK_WINDOW(widget), TRUE);

    Mais la fenêtre en question reste désespérément derrière la première fenêtre déjà affichée quand je l'active

    Concernant mon deuxième problème, il s'agit de mon souci principal. Je constate généralement que le code gtk fonctionne bien quand l'application est de taille limitée. Par contre, quand on l'intègre dans une application volumineuse, on rencontre de temps en temps (voire plus) ce problème de "core dump" dont l'origine est très difficile à détecter. j'ai pourtant passé des jours avec des outils du type "valgrind" pour l'analyser. Par exemple, l'instruction gtk_widget_show provoquant le "core dump" ne le fait plus quand je mets ma fenêtre "fautive" dans une application plus réduite.

    Toutes vos suggestions seront les bienvenues.
    Merci à l'avance et cordialement.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Valgrind ne s'est plaint de rien quand tu l'as utilisé ? Pas de "read invalid", "read unintialized value", "double free", ... ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Compte rendu enregistré
    Dans ce cas, pourrais-tu regarder l'extrait ci-après du compte-rendu de valgrind qui indique l'endroit où s'arrête le programme par "Segmentation Fault". Il se trouve au moment d'appel de gtk_widget_show.
    Par contre, je n'ai pas plus d'information sur cette erreur.

    Merci à l'avance et cordialement.

    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
     
    ....
    .
    --23988-- Startup, with flags:
    --23988--    -v
    --23988--    --leak-check=full
    ...
    .
    --23988-- memcheck GC: 1024 nodes, 1024 survivors (100.0%)
    --23988-- memcheck GC: increase table size to 2048
    --23988-- REDIR: 0x44150a40 (__memcpy_chk) redirected to 0x4007010 (__memcpy_chk)
    --23988-- Reading syms from /opt/pango-1.16.5/lib/pango/1.6.0/modules/pango-basic-fc.so (0x4C55000)
    --23988-- memcheck GC: 2048 nodes, 2048 survivors (100.0%)
    --23988-- memcheck GC: increase table size to 4096
    --23988-- memcheck GC: 4096 nodes, 3870 survivors ( 94.4%)
    --23988-- memcheck GC: increase table size to 8192
    ==23988== 
    ==23988== Invalid read of size 1
    ==23988==    at 0x44DDF5EA: gtk_widget_show (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x804E780: main (test_bi.c:213)
    ==23988==  Address 0xd is not stack'd, malloc'd or (recently) free'd
    ==23988== 
    ==23988== Process terminating with default action of signal 11 (SIGSEGV)
    ==23988==  Access not within mapped region at address 0xD
    ==23988==    at 0x44DDF5EA: gtk_widget_show (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x804E780: main (test_bi.c:213)
    --23988-- Discarding syms at 0x47D7000-0x47DA000 in /usr/lib/gconv/ISO8859-1.so due to munmap()
    --23988-- Discarding syms at 0x47EA000-0x47F5000 in /lib/libnss_files-2.5.so due to munmap()
    ==23988== 
    ==23988== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 62 from 3)
    ==23988== 
    ==23988== 1 errors in context 1 of 2:
    ==23988== Invalid read of size 1
    ==23988==    at 0x44DDF5EA: gtk_widget_show (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x804E780: main (test_bi.c:213)
    ==23988==  Address 0xd is not stack'd, malloc'd or (recently) free'd
    ==23988== 
    ==23988== 1 errors in context 2 of 2:
    ==23988== Syscall param writev(vector[...]) points to uninitialised byte(s)
    ==23988==    at 0x441A8A58: writev (in /lib/libc-2.5.so)
    ==23988==    by 0x442C69FD: (within /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x442C67EE: _X11TransWritev (in /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x442CC4D8: _XSend (in /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x442BD3FA: XQueryExtension (in /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x442B1D1A: XInitExtension (in /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x445F4CFF: XFixesFindDisplay (in /usr/lib/libXfixes.so.3.1.0)
    ==23988==    by 0x445F4FCC: XFixesQueryExtension (in /usr/lib/libXfixes.so.3.1.0)
    ==23988==    by 0x449AA284: gdk_display_open (in /usr/lib/libgdk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44987D0E: gdk_display_open_default_libgtk_only (in /usr/lib/libgdk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44CC010E: gtk_init_check (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44CC0143: gtk_init (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==  Address 0x421ac9c is 388 bytes inside a block of size 16,384 alloc'd
    ==23988==    at 0x400497E: calloc (vg_replace_malloc.c:397)
    ==23988==    by 0x442B7476: XOpenDisplay (in /usr/lib/libX11.so.6.2.0)
    ==23988==    by 0x449AA0D1: gdk_display_open (in /usr/lib/libgdk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44987D0E: gdk_display_open_default_libgtk_only (in /usr/lib/libgdk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44CC010E: gtk_init_check (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x44CC0143: gtk_init (in /usr/lib/libgtk-x11-2.0.so.0.1000.4)
    ==23988==    by 0x804E2DD: main (test_bi.c:107)
    ...
    ...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    valgrind a l'air de te dire que le widget que tu essaies d'afficher à la ligne 213 de test_bi.c est invalide, c'est à toi d'essayer de voir ce qui peut ne pas aller (oublie d'initialiser une variable peut être ?)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Remarquable diagnostic
    Un grand merci pour ton remarquable diagnostic. Effectivement, un widget non initialisé dans la fenêtre en question a posé ce problème de "segmentation fault". Cette fenêtre contient une centaine de widgets et ce n'est pas évident de trouver cette erreur .
    Voilà mon problème principal est résolu à l'aide de ta suggestion.

    Sur cette lancée, je suis en train de revenir sur mon premier problème: gtk_window_set_keep_above et gtk_window_present n'assurent pas leur fonction. Les fenêtres appelées restent au deuxième plan (et non au premier). Ce serait formidable si vous en avez également une piste.

    Merci à l'avance et cordialement.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Citation Envoyé par KiKiTiTi Voir le message
    Un grand merci pour ton remarquable diagnostic.
    J'ai principalement lu le message renvoyé par valgrind, j'ai rien fait de très très dur

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Problème résolu
    Concernant mon problème de gtk_window_present, j'ai trouvé son origine. Il s'agit d'une initialisation indésirable de Glade de la fenêtre en question

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/05/2015, 14h54
  2. Gestion de plusieurs fenêtres à l'ouverture
    Par Go'Gaule dans le forum Débuter
    Réponses: 28
    Dernier message: 15/09/2011, 18h03
  3. gestion de plusieurs fenêtres en silverlight
    Par hbib85 dans le forum Silverlight
    Réponses: 3
    Dernier message: 02/03/2009, 08h58
  4. Réponses: 2
    Dernier message: 26/01/2007, 18h54
  5. Réponses: 8
    Dernier message: 06/07/2004, 14h17

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