Fenêtre au 1er plan par programmation

Le
Guillaume MESSONNIER
Bonsoir à tous,

Ma question frise le hors-sujet, je me permet de la poser tout de même
car quelqu'un a peut-être une réponse

Voilà, je recherche le moyen, dans un programme en C, de *mettre au
premier plan la fenêtre d'une application en cours d'exécution* (fenêtre
identifiée par son titre). Idéalement, j'aimerai que mon programme
fonctionne pour tous les environnements de bureau Gnome en priorité.

Étant donné que je vais devoir écrire une application similaire pour
Windows, si vous connaissez une solution en pur Java, je suis preneur !
Mais j'imagine que pour faire ce genre de chose en Java il faut
absolument passer par JNI donc, en fin de compte un programme en C

J'ai commencé mes recherches du côté de Xlib mais je n'ai pas encore
trouvé mon bonheur. Je suis en train d'étudier les sources de java-gnome

Si l'un d'entre vous connait une solution

Bonne soirée à tous,

Guillaume.

--
*Guillaume MESSONNIER*

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Basile STARYNKEVITCH
Le #19141691
Guillaume MESSONNIER wrote:
Bonsoir à tous,

Ma question frise le hors-sujet, je me permet de la poser tout de même
car quelqu'un a peut-être une réponse...

Voilà, je recherche le moyen, dans un programme en C, de *mettre au
premier plan la fenêtre d'une application en cours d'exécution*
(fenêtre identifiée par son titre). Idéalement, j'aimerai que mon
programme fonctionne pour tous les environnements de bureau... Gnome
en priorité.



C'est contraire aux règles de gestion des fenêtres, ICCCM et EWMH.
Voir http://en.wikipedia.org/wiki/ICCCM
http://en.wikipedia.org/wiki/Extended_Window_Manager_Hints
http://freedesktop.org/wiki/Specifications/wm-spec

L'intuition est que c'est le gestionnaire de fenêtre (le window manager)
ou de bureau (le desktop) qui doit avoir la responsabilité des
positionnements des plans.

Donc, c'est en principe impossible, et notamment très difficile
(probablement impossible) à mettre en oeuvre pour tout window manager.

A mon avis, il faudrait renoncer à cet objectif (qui n'est pas très sain
au demeurant: pourquoi l'application serait-elle forcément et à tout
instant la plus importante pour l'utilisateur?).

Cordialement.

PS; je crois que c'est une FAQ quelque part, j'ignore où...

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Sylvain Sauvage
Le #19141681
Guillaume MESSONNIER, samedi 18 avril 2009, 20:46:49 CEST

Bonsoir à tous,



’soir,

Ma question frise le hors-sujet, je me permet de la poser tout de mê me
car quelqu'un a peut-être une réponse...



Ça ne frise plus, ça fresque…

Voilà, je recherche le moyen, dans un programme en C, de *mettre au
premier plan la fenêtre d'une application en cours d'exécution* (fenêtre
identifiée par son titre). Idéalement, j'aimerai que mon progra mme
fonctionne pour tous les environnements de bureau... Gnome en priorità ©.

Étant donné que je vais devoir écrire une application simi laire pour
Windows, si vous connaissez une solution en pur Java, je suis preneur !
Mais j'imagine que pour faire ce genre de chose en Java il faut
absolument passer par JNI... donc, en fin de compte un programme en C...



Pff… classe java.awt.Window, fonctions setAlwaysOnTop et consorts.
Temps de RTFM : 10 s.

J'ai commencé mes recherches du côté de Xlib mais je n'ai pas encore
trouvé mon bonheur. Je suis en train d'étudier les sources de j ava-gnome...

Si l'un d'entre vous connait une solution...



Pour les autres toolkits, voir les autres docs, chacun
fournissant une méthode pour cela (p.ex. activer
Qt::WindowStaysOnTopHint dans les windowFlags pour Qt4).

Voir aussi EWMH et ICCCM.

Mais c’est sale (RTFM toujours).

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Guillaume MESSONNIER
Le #19142441
Sylvain Sauvage a écrit :
Pff… classe java.awt.Window, fonctions setAlwaysOnTop et consorts.
Temps de RTFM : 10 s.




Je me suis peut-être mal expliqué, désolé ! L'application que je veux
écrire ne doit pas mettre une de ses propres fenêtres au premier plan
mais la fenêtre d'une *application tierce*...
Un exemple concret : Au lancement de l'application, si une instance de
Firefox est déjà en cours d'exécution, alors j'aimerai automatiquement
la mettre au premier plan.
Ce que je ne parviens pas à trouver, c'est comment faire pour récupérer
le "handle" d'une fenêtre du système pour ensuite lui demander de passer
au premier plan.
Pour les autres toolkits, voir les autres docs, chacun
fournissant une méthode pour cela (p.ex. activer
Qt::WindowStaysOnTopHint dans les windowFlags pour Qt4).

Voir aussi EWMH et ICCCM.

Mais c’est sale (RTFM toujours).



Merci à toi et à Basile pour les liens vers ICCCM et EWMH, je vais
regarder ce que je peux en tirer.

Bonne soirée,

Guillaume.

--
*Guillaume MESSONNIER*

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
fra-duf-no-spam
Le #19142591
Le 14352ième jour après Epoch,
Basile STARYNKEVITCH écrivait:

A mon avis, il faudrait renoncer à cet objectif (qui n'est pas trà ¨s
sain au demeurant: pourquoi l'application serait-elle forcément et à
tout instant la plus importante pour l'utilisateur?).



Peut-être parce que l'utilisateur a coché la case de la config di sant
"quoi qui qu'il arrive, passe au premier plan en cas de ..."

Il est vrai que de base ça semble une mauvaise idée, mais il exis te
toujours des cas particuliers, non?

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Guillaume MESSONNIER
Le #19143841
François TOURDE a écrit :
Basile STARYNKEVITCH écrivait:

A mon avis, il faudrait renoncer à cet objectif (qui n'est pas très
sain au demeurant: pourquoi l'application serait-elle forcément et à
tout instant la plus importante pour l'utilisateur?).




Peut-être parce que l'utilisateur a coché la case de la config disant
"quoi qui qu'il arrive, passe au premier plan en cas de ..."

Il est vrai que de base ça semble une mauvaise idée, mais il existe
toujours des cas particuliers, non?



Oui, je suis dans un cas bien particulier. Même si c'est un peu plus
complexe que ça (ce programme fait partie d'un tout), on va dire que
j'écris un lanceur d'applications qui ne doit pas démarrer plus de n
instances de chaque programme. L'idée est donc de remettre au premier
plan l'application demandée.

Guillaume.

--
*Guillaume MESSONNIER*

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Sylvain Sauvage
Le #19145711
Guillaume MESSONNIER, samedi 18 avril 2009, 23:34:24 CEST

Sylvain Sauvage a écrit :
> Pff… classe java.awt.Window, fonctions setAlwaysOnTop et cons orts.
> Temps de RTFM : 10 s.
>
>
Je me suis peut-être mal expliqué, désolé ! L'applica tion que je veux
écrire ne doit pas mettre une de ses propres fenêtres au premie r plan
mais la fenêtre d'une *application tierce*...



C’est plutôt moi qui ai mal lu…

Un exemple concret : Au lancement de l'application, si une instance de
Firefox est déjà en cours d'exécution, alors j'aimerai aut omatiquement
la mettre au premier plan.
Ce que je ne parviens pas à trouver, c'est comment faire pour rà ©cupérer
le "handle" d'une fenêtre du système pour ensuite lui demander de passer
au premier plan.[…]



Si l’application est KDE3/4, il y a aussi la solution
DCOP/DBus (sûrement aussi avec Gnome, mais pas Gtk…).
Et ça peut être testé en ligne de commande.

C’est quand même prendre la place du gestionnaire de fenà ªtres,
donc, pour être totalement générique, ça va être c oton (et ça
m’étonnerait que MS entre dans freedesktop.org…).

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Publicité
Poster une réponse
Anonyme