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

Linux Discussion :

x11 et modification de fen�tre


Sujet :

Linux

  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut x11 et modification de fen�tre
    Bonjour,

    j'essaie de travailler avec la librairie x11 sous linux et j'ai un probl�me (enfin plusieurs en fait).

    Je voudrais travailler sur une fen�tre (comme par exemple la fen�tre principale de acrobat reader). Je souhaiterais pouvoir modifier son parent, sa taille, sa position,....

    Donc tout d'abord j'essaie de r�cup�rer cette fen�tre (avec les m�thodes du type (XQueryTree, XGetWMName,...).
    Premier probl�me, il y a plusieurs fen�tres avec le m�me nom, du coup je ne sais pas laquelle est la bonne.
    Et en plus, quand j'essaie d'appliquer mes modifications sur une fen�tre (d�placement par exemple), la fen�tre ne bouge pas (m�me pas un peu!!!!!).

    Quelqu'un saurait-il de quoi �a vient?

    Sauriez-vous aussi s'il est possible de lancer une application (type acrobat reader) avec une fonction de la librairie et pouvoir r�cup�rer directement son window Id? (j'ai cherch� mais pas trouv�).

    Cdlt

  2. #2
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par piou1234 Voir le message
    Bonjour,

    j'essaie de travailler avec la librairie x11 sous linux et j'ai un probl�me (enfin plusieurs en fait).

    Je voudrais travailler sur une fen�tre (comme par exemple la fen�tre principale de acrobat reader). Je souhaiterais pouvoir modifier son parent, sa taille, sa position,....

    Donc tout d'abord j'essaie de r�cup�rer cette fen�tre (avec les m�thodes du type (XQueryTree, XGetWMName,...).
    Premier probl�me, il y a plusieurs fen�tres avec le m�me nom, du coup je ne sais pas laquelle est la bonne.
    Si il y en a plusieurs, c'est qu'il y en a plusieurs

    Normalement, c'est celle de rang le plus �lev� (le plus proche de la RootWindow)

    Citation Envoy� par piou1234 Voir le message
    Et en plus, quand j'essaie d'appliquer mes modifications sur une fen�tre (d�placement par exemple), la fen�tre ne bouge pas (m�me pas un peu!!!!!).

    Quelqu'un saurait-il de quoi �a vient?
    Parce qu'il faut le faire avec les coordonn�es absolues dans la root window.

    Pour cela il y une fonction XTranslateCoordinates


    Citation Envoy� par piou1234 Voir le message
    Sauriez-vous aussi s'il est possible de lancer une application (type acrobat reader) avec une fonction de la librairie et pouvoir r�cup�rer directement son window Id? (j'ai cherch� mais pas trouv�).

    Cdlt

    Le Window Id tu peux le r�cup�rer avec le XQueryTree, mais lancer, non, cela d�pend du syst�me, mais tu peux le faire en C avec l'appel � la fonction system().

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut
    Rebonjour,

    merci beaucoup pour la r�ponse et pour les �claircissements apport�s.

    Citation Envoy� par souviron34 Voir le message
    Si il y en a plusieurs, c'est qu'il y en a plusieurs

    Normalement, c'est celle de rang le plus �lev� (le plus proche de la RootWindow)
    Je n'ai pas trouver l'indice qui indique la profondeur (ou le rang) de chaque fenetre. Existe-t-il ou faut-il se d�brouiller?

    Citation Envoy� par souviron34 Voir le message

    Parce qu'il faut le faire avec les coordonn�es absolues dans la root window.

    Pour cela il y une fonction XTranslateCoordinates
    Meme pour d�placer une fenetre sur la root window, il faut utiliser cette m�thode? ou juste quand on change le parent de la fenetre?


    Citation Envoy� par souviron34 Voir le message
    Le Window Id tu peux le r�cup�rer avec le XQueryTree, mais lancer, non, cela d�pend du syst�me, mais tu peux le faire en C avec l'appel � la fonction system().
    Oui c'est comme ca que je faisais. Je me demandais si il existait un moyen plus simple et plus direct. La r�ponse est donc non.

    Cdlt

  4. #4
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par piou1234 Voir le message
    Rebonjour,

    merci beaucoup pour la r�ponse et pour les �claircissements apport�s.



    Je n'ai pas trouver l'indice qui indique la profondeur (ou le rang) de chaque fenetre. Existe-t-il ou faut-il se d�brouiller?
    Faut se debrouiller. Mais si tu pars de la root, tu le sais tout de suite


    Citation Envoy� par piou1234 Voir le message
    Meme pour d�placer une fenetre sur la root window, il faut utiliser cette m�thode? ou juste quand on change le parent de la fenetre?
    Dans tous les cas, car les coordonnees fournies par XQueryPosition ou bien XQueryPointer ou bien les window coordinates sont unique;ent par rapport au parent.




    Citation Envoy� par piou1234 Voir le message
    Oui c'est comme ca que je faisais. Je me demandais si il existait un moyen plus simple et plus direct. La r�ponse est donc non.

    Cdlt
    oui pour une raison simple :

    la fenetre est une representation graphique du logiciel (binaire) lance. X11 n'est qu'un gestionnaire de fenetres 9des rectangles sur l'ecran). Il ne connait rien et ne veut rien connaitre au systeme...

  5. #5
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut
    Rebonjour,

    Citation Envoy� par souviron34 Voir le message
    Faut se debrouiller. Mais si tu pars de la root, tu le sais tout de suite
    Pourquoi je le saurais de suite? Puisque un appel � XqueryTree donne les enfants mais aussi les petits enfants,... avec un seul appel. Non?

    Citation Envoy� par souviron34 Voir le message
    Dans tous les cas, car les coordonnees fournies par XQueryPosition ou bien XQueryPointer ou bien les window coordinates sont unique;ent par rapport au parent.
    J'ai pas XQueryPosition dans la doc que j'ai. C'est normal?
    Et je pensais que la RootWindow �tait la m�re de la plupart des fenetres (en gros la mere de toutes les applis qui tournent, acrobat, eclipse). Mais je me trompe peut �tre?

    Une autre question : mon but est d'int�grer le reader d'acrobat dans une fenetre que je cr�e, ca vous parait faisable?

    Encore merci de votre temps

    Cdlt

  6. #6
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par piou1234 Voir le message
    Rebonjour,


    Pourquoi je le saurais de suite? Puisque un appel � XqueryTree donne les enfants mais aussi les petits enfants,... avec un seul appel. Non?
    NON, elle donne les enfants (children)..

    Pour les petites enfants, il faut re-faire un QueryTree sur chacun des enfants, etc...


    Citation Envoy� par piou1234 Voir le message
    J'ai pas XQueryPosition dans la doc que j'ai. C'est normal?
    Et je pensais que la RootWindow �tait la m�re de la plupart des fenetres (en gros la mere de toutes les applis qui tournent, acrobat, eclipse). Mais je me trompe peut �tre?
    Oui, c'est XQueryPointer que je voulais dire...

    Oui c'est la mere, mais comme dit plus haut, il y a en general une multitude de couches (en particulier le Window Manager (sur unixoide, Gnome, KDE, Motif, etc..)) qui s'intercalent entre la root window et la fenetre que tu crees avec X.

    Citation Envoy� par piou1234 Voir le message
    Une autre question : mon but est d'int�grer le reader d'acrobat dans une fenetre que je cr�e, ca vous parait faisable?

    Encore merci de votre temps

    Cdlt
    oui c'est sans doute possible, mais sans doute avec un "reparentWindow" ...

  7. #7
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut
    Citation Envoy� par souviron34 Voir le message
    NON, elle donne les enfants (children)..

    Pour les petites enfants, il faut re-faire un QueryTree sur chacun des enfants, etc...
    Ah d'accord.Je suis �tonn� car dans mes tests je fais afficher tous les noms des fenetres que je trouve en faisant UN SEUL XQueryTree sur la RootWindow et ca m'affiche toutes les fenetres (en double, triple, quadruple) de mes applis que j'ai lanc�. C'est bizarre.


    Citation Envoy� par souviron34 Voir le message
    Oui, c'est XQueryPointer que je voulais dire...
    Ah d'accord


    Citation Envoy� par souviron34 Voir le message
    oui c'est sans doute possible, mais sans doute avec un "reparentWindow" ...
    Oui c'est ce que j'essaie de faire mais ca ne marchait pas trop. Et plus je pose de questions, plus je m'aper�ois que j'avais pas tout � fait compris la philo XWindow. Mais ca commence � venir (enfin j'espere... )


    Cdlt

  8. #8
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par piou1234 Voir le message
    Ah d'accord.Je suis �tonn� car dans mes tests je fais afficher tous les noms des fenetres que je trouve en faisant UN SEUL XQueryTree sur la RootWindow et ca m'affiche toutes les fenetres (en double, triple, quadruple) de mes applis que j'ai lanc�. C'est bizarre.
    oui je crois que tu as une erreur ....

    En fait, tu peux faire un truc comme ca :

    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
     
    /*
     * Hierarchie
     *
     */
    static void Hierarchie ( Display display, Window racine )
    {
      Window w1, child, *children=(Window *)NULL ;
      int    nchildren, i ;
      char *p=NULL ;
     
      XQueryTree ( display, racine, &w1, &child, &children, &nchildren );
      if ( nchildren > 0 )
        {
          for ( i = 0 ; i < nchildren ; i++ )
            Hierarchie ( display, children[i] );
     
          XFree(children);
        }
     
      XFetchName(display, window, &p) ;
      if ( p != NULL )
        {
           fprintf ( stderr, "Nom : %s\n", p) ;
           XFree(p);
        }
      else
           fprintf ( stderr, "Une fenetre avec un nom NULL\n") ;
    }
     
    int main ( void)
    {
      Display display ;
      Window root ;
     
      display = XOpenDisplay ("");
     
      root = XRootWindow (display, 0);
     
      Hierarchie(display, root);
     
      XCloseDisplay(display);
     
      return 0 ;
    }

  9. #9
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut
    Bonjour,

    Citation Envoy� par souviron34 Voir le message
    oui je crois que tu as une erreur ....
    En effet j'avais une erreur, ca marche beaucoup mieux maintenant....

    Citation Envoy� par souviron34 Voir le message
    En fait, tu peux faire un truc comme ca :

    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
     
    /*
     * Hierarchie
     *
     */
    static void Hierarchie ( Display display, Window racine )
    {
      Window w1, child, *children=(Window *)NULL ;
      int    nchildren, i ;
      char *p=NULL ;
     
      XQueryTree ( display, racine, &w1, &child, &children, &nchildren );
      if ( nchildren > 0 )
        {
          for ( i = 0 ; i < nchildren ; i++ )
            Hierarchie ( display, children[i] );
     
          XFree(children);
        }
     
      XFetchName(display, window, &p) ;
      if ( p != NULL )
        {
           fprintf ( stderr, "Nom : %s\n", p) ;
           XFree(p);
        }
      else
           fprintf ( stderr, "Une fenetre avec un nom NULL\n") ;
    }
     
    int main ( void)
    {
      Display display ;
      Window root ;
     
      display = XOpenDisplay ("");
     
      root = XRootWindow (display, 0);
     
      Hierarchie(display, root);
     
      XCloseDisplay(display);
     
      return 0 ;
    }

    Oui c'est a peu pr�s comme ca que j'avais �crit l'algo.

    Par contre j'ai deux questions :
    - Quelle est la diff�rence entre l'utilisation de XFetchName et XWMName pour r�cup�rer le nom des fenetres. J'ai test� avec les deux et il semble que j'obtienne les deux m�mes r�sultats.

    - J'utilise (j'ai pas le choix) un objet de type "Drawable" qui semble se comporter comme une fen�tre et �tre consid�r� comme une fen�tre. Mais je n'ai pas trouv� sa d�finition


    Vraiment merci pour toutes ces r�ponses. J'ai l'impression que peu de monde utilisent la librairie X11 et la doc sur le net n'est pas tr�s riche (m�me si on en trouve).

    Cdlt

  10. #10
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par piou1234 Voir le message
    Par contre j'ai deux questions :
    - Quelle est la diff�rence entre l'utilisation de XFetchName et XWMName pour r�cup�rer le nom des fenetres. J'ai test� avec les deux et il semble que j'obtienne les deux m�mes r�sultats.
    A priori les 2 devraient effectivement donner des r�sultats identiques, mais XWM n�cessite la connaissance et l'atteinte des param�tres du serveur, qui, un peu plus compliqu�s, sont aussi de plus haut niveau (Window Manager). En particulier,vu que X s'applique de mani�re identique lorsqu'on a un seul ou plusieurs �crans bas�s sur la m�me machine, la seule chose qui change �tant le num�ro d'�cran, il se pourrait que la m�me application affiche une fen�tre sur chaque �cran..

    Dans la hi�rarchie, ce qui importe est donc ce qui va au plus pr�s de un �cran (donc XFetch), � moins que l'on souhaite faire quelque chose � travers tous les affichages possibles, auquel cas WM sera plus utilis�.

    Mais en gros c'est effectivement la m�me chose..

    Citation Envoy� par piou1234 Voir le message
    - J'utilise (j'ai pas le choix) un objet de type "Drawable" qui semble se comporter comme une fen�tre et �tre consid�r� comme une fen�tre. Mais je n'ai pas trouv� sa d�finition
    Une "Drawable" est, comme son nom l'indique, quelque chose sur lequel on peut dessiner. Ce sera donc soit une Window, soit une Pixmap : la Window est affich�e � l'�cean, la Pixmap est une "repr�sentation th�orique" en m�moire (une image m�moire).

    C'est une union des 2 types

    Drawable = Window ou Pixmap


    Citation Envoy� par piou1234 Voir le message
    Vraiment merci pour toutes ces r�ponses. J'ai l'impression que peu de monde utilisent la librairie X11 et la doc sur le net n'est pas tr�s riche (m�me si on en trouve).
    Oui et j'avoue avoir du mal � comprendre. Enfin si je pense que c'est � cause des IDE, comme GTK etc... car ils utilisent X, mais le cachent.. Mais tout le graphisme fin et la portabilit� et la puissance se trouve dans X.

    J'ai propos� � Dvp de cr��er un forum ici-m�me mais pour l'instant cela na pas �r� fait.

    En ce qui concerne la doc, la "bible" est le livre :

    "X Window System"
    R. W. Scheifler, J. Getty, and R. Newman
    Digital Press, 1988

    et les r��ditions successives.

    Ce sont les "p�res" de X, en particulier Scheiufler qui �tait le chef du Projet..

  11. #11
    Membre �prouv�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par d�faut
    Bonjour,

    pour la doc je ne peux pas acheter le livre (pas dans le budget...) mais l'article sur Wikip�dia donne des liens vers des sites assez bien fait et assez complet (enfin j'esp�re).

    Pour ma part, j'avance petit � petit � petit mais j'avance.
    En fait, mon objectif est d'englober une fenetre c++ dans une appli java.
    Et gr�ce aux apis JNI et JAWT, j'accede au code natif et je peux r�cup�rer en C++ une surface de dessin JAVA de type Drawable (d'o� la question).
    Ensuite je veux donc controler une fenetre quelconque (type acrobat) pour la mettre fille de ma fenetre java et faire en sorte qu'elle se dessine dans les limites de la fenetre mere.
    A ce propos, pour modifier dynamiquement la taille et la position de la fenetre fille, j'ai essay� plusieurs fa�ons mais aucune n'est vraiment stable.
    J'ai essay� avec les fonctions XMoveWindow et XResizeWindow, j'ai aussi essay� avec les diff�rents Hints et enfin avec la fonction ConfigureWindow (et la structure XWindowsChange).
    A votre avis, quelle est la meilleure solution?

    Cdlt

Discussions similaires

  1. Modification des fen�tres
    Par cheikhoufia dans le forum WinDev
    R�ponses: 4
    Dernier message: 11/09/2012, 16h49
  2. R�ponses: 1
    Dernier message: 12/12/2008, 18h20
  3. [D�butant] Modification de fen�tre
    Par Sunchaser dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 08/11/2007, 16h26
  4. Modification de la fen�tre d'affichage (position et dimension)
    Par DangerousBowlOfJelly dans le forum SDL
    R�ponses: 8
    Dernier message: 21/11/2006, 08h57
  5. [JDialog] Modification dans une fen�tre
    Par cefabien dans le forum Agents de placement/Fen�tres
    R�ponses: 3
    Dernier message: 01/10/2003, 14h18

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