Le dysfonctionnement dont il est question est assez sournois et il m’a fallu pas mal utiliser Share avant de le débusquer.
Mais de quoi s’agit-il ?
Lorsque vous prévisualisez un document d’une seule page, une image par exemple, les boutons de navigation dans les pages du document ne sont pas affichés :

Pour un document multipages, des boutons de navigation dans les pages sont disponibles

Pour un document monopage, nul besoin de boutons de navigation dans les pages
Le hic, c’est que par une simple manipulation, on peut se retrouver avec les boutons de pagination pour un document monopage :

Oups, des boutons inutiles !
Pour reproduire ce dysfonctionnement :
- Afficher une image dans WebPreviewer
- Cliquer sur le bouton « Plein écran »
- Revenir à l’affichage normal par une pression sur « Escape »
Remarque : j’ai reproduit ce dysfonctionnement sur Chrome et FireFox avec le plugin Flash 10.3.183.7. Avec Internet Explorer 9 et le plugin Flash 10.2.153.1, le problème ne se produit pas.
Maintenant que la démarche pour reproduire le problème est connue, il nous faut le corriger; et c’est en Flex que nous allons travailler.
La bascule entre le mode plein écran et le mode normal est assuré par la méthode onFullScreenDisplayStates de la classe PreviewerClass. Cette méthode définit les « states » (spécifiés dans Previewer.mxml) à utiliser en fonction du contexte :
Si (demande de plein écran) {
Si (affichage normal d'un document monopage) {
Passer en mode plein écran pour un document monopage : state "singlePagedFullScreen"
}
Sinon {
Passer en mode plein écran pour un document multipages : state "fullScreen"
}
Sinon { // on est en plein écran et on souhaite revenir en affichage normal
Si (affichage plein écran d'un document monopage) {
Passer en mode normal pour un document monopage : state "singlePaged"
}
Sinon {
Passer en mode normal pour un document multipages : state "" (pas de state particulier)
}
}
La partie qui nous concerne est celle traitant du retour en affichage normal.
Après quelques tests, j’ai acquis la conviction que la méthode onFullScreenDisplayStates est appelée deux fois. La première fois, l’affichage attendu est bien rétabli en utilisant le state « singlePaged »; la seconde fois, on bascule au state «
La correction est alors évidente : il faut remplacer la condition Si (affichage plein écran d’un document monopage) par Si ((affichage plein écran d’un document monopage) ou (affichage normal d’un document monopage)), soit en Flex :
if (currentState == "singlePagedFullScreen" || currentState == "singlePaged")
Cette correction est à apporter ligne 614.
Après compilation et déploiement de WebPreviewer, le fonctionnement est rétabli !
Et pour les lecteurs qui ne veulent pas compiler WebPreviewer, ma version corrigée est disponible en suivant ce lien.
J’ai également référencé ce dysfonctionnement auprès d’Alfresco : ALF-10371. A suivre !