2016-09-04 1 views
1

J'utilise xlib. Je veux me souvenir de la position de la fenêtre et la restaurer à cette position la prochaine fois qu'elle commencera. Cela aidera l'utilisateur car il n'aura pas besoin de déplacer/dimensionner la fenêtre à la position désirée à chaque démarrage.Détermination et restauration de l'état de la fenêtre sous Linux

Cela fonctionne plus ou moins Ok, sauf un cas. Lorsque la fenêtre est agrandie, je ne trouve pas le moyen de déterminer sa taille et sa position réelles (non maximisées). Peut-être que quelqu'un sait comment le faire?

+0

Pouvez-vous nous montrer votre code et affiner votre question un peu? Parce que maintenant ce que vous demandez est trop large pour être utile. –

+1

Rappelez-vous la géométrie chaque fois qu'elle change alors qu'elle n'est pas agrandie. De cette façon, vous connaissez la géométrie la plus récente avant qu'elle ne soit agrandie. –

+1

Est-ce que je vous comprends correctement, il n'y a aucun moyen de l'obtenir à partir de gestionnaire de fenêtres similaire à GetWindowPlacement() dans Windows et j'ai besoin de suivre les changements. Mais le gestionnaire de fenêtres peut définir les propriétés de maximisation avant ou après la modification de la taille. Puis-je compter sur des propriétés de maximisation déjà définies lorsque la taille de la fenêtre change en raison de la maximisation? – PineForestRanch

Répondre

2

Pour autant que je sache, il n'existe pas de façon standard de le faire. Si vous lisez la source à Metacity par exemple vous pouvez voir qu'elle conserve cette taille non maximisée dans l'objet MetaWindow mais je ne pense pas qu'elle soit stockée dans une propriété, et je ne vois pas de propriété pour cela dans les spécifications EWMH ou ICCCM .

Il est possible que certains gestionnaires de fenêtres spécifiques le stockent dans une propriété non standard. Quand une fenêtre est agrandie, vous pouvez obtenir un événement de changement de propriété avec le drapeau de maximisation (libwnck est une ancienne bibliothèque pour suivre ce genre de chose, peut-être y en a-t-il une plus récente). Cependant, je doute qu'il est défini si le redimensionnement se produit avant ou après le réglage du drapeau. Vous pourriez peut-être supposer de manière heuristique qu'un redimensionnement couvrant la plus grande partie de l'écran dans la seconde suivant la définition du drapeau de maximisation était un hachage maximal ou similaire. Cela dit, je pense que le moyen le plus simple d'obtenir cette fonctionnalité est de l'implémenter comme une extension ou un plugin de gestionnaire de fenêtres, que de nombreux WM supportent d'une manière ou d'une autre.

Il existe une spécification ancienne pour cela (protocole de gestion de session X) malheureusement la spécification est ridiculement brisée, peu claire et essentiellement impossible à mettre en œuvre. Un problème de base qui n'a jamais été abordé - et qui nécessite probablement une coopération entre les applications - est de savoir comment reconnaître la «même» fenêtre à travers les redémarrages afin de restaurer sa taille. Il n'y a que des heuristiques imparfaites pour cela.

(j'ai écrit metacity et a travaillé sur un gestionnaires de session couple il y a longtemps si une fois que je vous aurais dit beaucoup plus, mais j'ai oublié beaucoup de détails.)