2009-08-13 11 views
5

Je cours X à travers une connexion réseau lente. Comment puis-je savoir quand une fenêtre est devenue visible? J'ai besoin d'attendre pour pouvoir effectuer une autre opération sur la fenêtre visible. Mise à jour: Merci à Jim Lewis, voici une fonction shell rapide qui fait l'affaire.X11: attendre qu'une fenêtre soit visible?

function xwait() { 
    while ! xwininfo -name $1|grep 'Map State: IsViewable';do sleep 1;done 
} 
xterm -T foo & 
xwait foo 
xmovewindow foo 10 20 
+1

IIRC, Solaris a une commande avec un nom tel que 'toolwait' qui tente de le faire, plus ou moins. Cependant, ISTR a détecté que le processus enfant créait une fenêtre, pas qu'elle était nécessairement affichée. –

Répondre

6

Vous voulez probablement savoir quand le serveur X distant a mappé la fenêtre principale de votre application. La commande xwininfo vous permet d'interroger le serveur X par nom de fenêtre - je pense que cela fait partie de l'installation standard de X11. Mais vous devrez effectuer l'interrogation vous-même, réexécuter la commande jusqu'à ce que la propriété "Map State" revienne "IsViewable"

Jonathan Leffler a également mentionné l'utilitaire toolwait de Sun (documentation here). toolwait lance un processus (dans ce cas, votre commande xterm), et retourne lorsque l'application a mappé une fenêtre de niveau supérieur ... elle effectue l'interrogation pour vous. Il y a un paquet qui prétend être un clone Linux de toolwait dans le répertoire X11/xutils sur www.ibiblio.org (here).

toolwait date tout le chemin du retour à OpenWindows - maintenant c'est quelques old school X fenêtre de programmation, man! J'ai devant moi une page de manuel Solaris datée de 1994, qui stipule que "l'environnement OpenWindows ne sera peut-être plus supporté dans une future version." Vous voudrez peut-être migrer vers CDE, le Common Desktop Environment ... "

+0

juste ce dont j'avais besoin, merci! et OpenWindows, ça me ramène ... :-) –