Comment faites-vous la force de java swt programme de “passer à l'avant-plan”?
Actuellement avec swt, j'ai parfois envie d'un programme, de façon arbitraire, au premier plan (comme un réveil pourrait).
Généralement les ouvrages suivants (jruby):
@shell.setMinimized(false)
@shell.forceActive
Cela apporte de la coque à l'avant si elle a été réduite au minimum.
La création d'un nouveau shell, à tout moment, aussi à l' (nouveau shell) à l'avant.
C'est très bien, cependant, si la coque est pas réduite au minimum, le code ci-dessus, l'écran clignote (clignote) l'icône de l'application dans la barre des tâches. Eh bien en fait la première fois que vous l'exécutez, il l'amène à l'avant. Après ça, c'clignote dans la barre des tâches. C'est windows. Sur Linux il semble que clignote dans la barre des tâches (ubuntu par défaut).
Quelqu'un sait d'une croix-plate-forme de manière à obtenir des app de venir à l'avant, en swt?
Il semble qu'aucune incantation de forceActive setActive setMinimized(faux) setFocus forceFocus et setVisible peut accomplir cette chose.
Je suis sûr que c'est possible (au moins sous windows), que l'adresse de l'Éditeur de Texte est-il. Eh bien, ce n'est pas swt, mais au moins certaines autres applications ont été connus pour faire.
Je pense, c'est peut-être swt bug 192036?
Merci beaucoup.
Connexes:
- Comment afficher une fenêtre à l'avant?
- L'ouverture d'un Shell
- Garder la fenêtre en avant-plan (même si il perd le focus)
- Bug 244597 - Ne peut pas activer shell par programmation sur gtk
- Besoin d'apporter de l'application de premier plan sur Windows
- Comment afficher une fenêtre à l'avant? cette balançoire exemple pourrait être un certain type de l'indice, trop...
- Ressemble à la SWT bug lié à exactement décrit votre problème, et il semble qu'ils ne vont pas être en mesure de le réparer.
- Je pense que c'est en effet le problème pour windows-bonne prise. Contourner pour l'instant est d'abord de réduire un shell puis d'agrandir (ou utiliser du code natif [via ffi ou jni] pour forceForeGround il). Dans Linux, je ne suis pas sûr que le problème est bien (juste clignote dans la barre des tâches). Il pourrait être corrigé dans les versions plus récentes de swt.jar >= 3.5 bugs.eclipse.org/bugs/show_bug.cgi?id=244597
Vous devez vous connecter pour publier un commentaire.
http://github.com/rdp/redcar/commit/d7dfeb8e77f13e5596b11df3027da236f23c83f0
montre comment j'ai fait dans windows, de toute façon (à l'aide de ffi).
Un couple de trucs "peuvent" être
ajouter un sommeil de 0.1' après la BringToFront.SetForegroundWindow(wanted)
appel (heureusement que ce n'est pas réellement nécessaire).
ajouter un shell.set_active après vous avez apporté la fenêtre au premier plan. Pour une raison quelconque forceActive ne pas faire appel setActive.
NB que setActive un user32.dll BringWindowToTop appel, et doit être fait avant de vous détacher de filetage d'entrée.
Noter également qu'il apparaît que si vous pouvez faire des appels dans le bon ordre, vous ne pouvez pas besoin d'utiliser le fil d'entrée de hack à tous (?)
http://betterlogic.com/roger/?p=2950
(contient plusieurs bons conseils sur la façon de le faire réellement ce droit)
Sur Linux, forceActive ne de travail, mais seulement jusqu'à ce que vous vous déplacez à un autre, peu de fenêtres, puis il clignote dans la barre des tâches après que (seulement). Deviner swt bug. [1]
Également liées:
Comment afficher une fenêtre à l'avant?
http://github.com/jarmo/win32screenshot/blob/master/lib/win32/screenshot/bitmap_maker.rb#L110 "set_foreground" qui semble fonctionner avec les deux xp et windows 7
[1] Besoin d'apporter de l'application de premier plan sur Windows et https://bugs.eclipse.org/bugs/show_bug.cgi?id=303710
Cela a fonctionné pour moi sur Windows 7 et Ubuntu:
C'est en fait une fonctionnalité de Windows, qui peut être activé via l'INTERFACE utilisateur Tweak puissance jouet (au moins pour Windows XP). Lorsque cette option est activée, l'O/S empêche délibérément une fenêtre de forcer lui-même à la fenêtre pour l'arrêter "voler focus". En tant que tel, l'action d'attraper l'accent est modifiée à clignoter l'icône de la barre - depuis l'O/S est délibérément la conversion de l'action à la demande de l'utilisateur, il n'y aura rien que vous pouvez faire à ce sujet (et c'est une bonne chose).
C'était (probablement) fait parce que donc de nombreuses applications abusé de la ramener vers l'avant de l'API et le comportement à la fois agacé les utilisateurs et l'origine de leur entrée dans la mauvaise application.
Bug 192036 - Shell.forceActive ne pas soulever une fenêtre au-dessus de toutes les autres fenêtres
@rogerdpack de la requête sur Eclipse bug tracker a répondu le suivant sale solution de contournement de faire ce que nous avons besoin.
Il existe un moyen de le faire fonctionner avec ce que vous avez d'abord tenté. Vous avez réellement besoin d'appeler
shell.setMinimized(false)
et après queshell.setActive()
pour restaurer l'état précédent de lashell
. Cependant, qui ne fonctionne que si leshell
était vraiment dans l'état réduit. Voici donc ma dernière solution, qui est artificiellement réduit leshell
si elle n'a pas été minimisé déjà. Le coût est une animation rapide si la minimisation doit être fait.