Bonjour,
j'ai récemment fait un nouveau Wizard avec un bouton qui affiche le ColorDialog. Tout marchait nickel sous Windows jusqu'aux tests Mac.
Tout d'abord, je précise que je suis sous Galileo/java 1.5, et que les tests sont fait sur MountainLion.
Donc, sur mac, l'appel de dialog.open() renvoit toujours null. En cherchant sur le forum Eclipse/SWT, il semble que le bug est signalé et qu'il serait dû au changement de nature du dialogue (passé de modal à popup).
Je suppose que tout ça est corrigé dans les versions plus récente de SWT mais moi ça m’embête bien. Pas trop de solution (la migration de l’environnement étant exclue pour le moment, raison que je suis charette jusqu'en 2015) autres que d'utiliser le dialogue de swing (que je trouve laid personnellement) ou écrire mon propre dialogue.
Soit me dis-je. Sauf que là vient à mon esprit que j'ai des écrans de préférences avec des ColorFieldEditor : donc là aussi il doit y avoir un problème.
Donc je vais tester : et là, non, ça marche : le dialogue retourne bien un RGB non null qui correspond à la saisie (Entre parenthèses, ça marche pas si nickel que ça, parce que je me suis aperçu que en quittant l'appli, le dialogue n'était pas bien fermé, et que si on relance, il repasse en top, et que si on va à nouveau dans les prefs, il cafouille complètement si on ne le ferme pas avant de recliquer sur le bouton du ColorFieldEditor).
Donc là je regarde les différents sources des classes concernées de jface, swt et du workbench, et je tente de reproduire au plus près le code : genre je vois qu'il utilise un ColorSelector et pas moi, donc j'utilise un ColorSelector et je vois différentes différences sur la façon de déterminer le shell parent du bouton. J'ai aussi regardé la stacktrace de l'appel et tout se passe normalement (passage par le callback dans le display, etc.)
Rien n'y fait : mon dialogue ne fonctionne toujours pas.
Bon, je me dis soit, quitte à faire un nouveau dialogue de choix de couleurs, je peux bien refaire un ColorFieldEditor qui utilise ce nouveau dialogue.
Mais, il y a le ColorsAndFontsPreferencePage ! Je teste donc aussi et là, miracle, ça marche parfaitement bien.
Et là du coup, je n'y comprends plus rien : comment ça fait pour fonctionner dans cet écran de preférences et pas dans mon wizard. J'ai reproduit le code, à l'identique (sauf les noms de variables et quelques détails annexes, comme le layout que j'ai forcément différent), et j'ai même testé en initialisant mon wizard avec le même shell que celui qui utilisé par le WorkbenchPreferenceDialog à tout hasard (donc par le activeShell du workbench alors que j'utilisais celui du display.
Est ce que ça interpelle quelqu'un qui aurait une idée de ce qui ne va pas dans mon wizard avec l'invocation du ColorDialog ? Qui aurait déjà rencontré le problème et/ou qui connaîtrait un workaround.
Pour l'instant je reste fixé sur l'idée que ça vient du fait que la méthode changeColor de ColorDialog n'est pas pas invoquée et que donc ça pourrait être lié au Display, mais j'ai tout essayé, pour forcer le display : rien n'y fait. Donc ce n'est probablement pas ça, mais j'ai pas d'autre idée.
Partager