Retire le voile plein écran et le forçage de visibilité de l'éditeur (retour utilisateur)
Deux retours après le dernier correctif (78a373a, qui forçait
"display:flex" dans l'éditeur pour que la boîte de dialogue reste
visible) :
- "je souhaite avoir la main sur la visibilité de la modale sinon elle
s'affiche toujours sur la scène, court-circuite ma logique" — le
forçage empêchait de vraiment utiliser "Visibilité" pendant l'édition.
- "quand j'édite la modale ou quand je la mets dans une scène je
souhaite que rien ne soit assombri, l'assombrissement ne se fait que
quand la scène est jouée" — le voile plein écran (position:fixed +
fond assombri) restait aussi actif dans l'éditeur.
Correctif (render_overlay.py) : le voile plein écran ET le forçage de
visibilité sont retirés de l'ÉDITEUR — ce widget s'y comporte maintenant
comme un CONTENEUR NORMAL (position/taille selon x/y/width/height, aucun
voile, réglage "Visibilité" respecté normalement, comme n'importe quel
autre widget masqué). Le comportement plein écran/voile/masquage par
défaut n'est conservé qu'en mode JOUABLE (ctx["_forge_play_mode"]).
En creusant pourquoi "Visible" ne suffisait pas à faire réapparaître la
boîte dans l'éditeur (menant l'utilisateur à essayer "Invisible" à la
place, visible dans ses captures), trouvé un vrai bug latent dans
save_element_controls.py : l'option "Visible" du réglage "Visibilité" ne
touche volontairement jamais "display" (pour ne pas écraser le
"display:flex" d'un conteneur en disposition ligne/colonne — voir
visibility_control.py) — ça fonctionne seulement parce que, pour un
widget AVEC un réglage "Disposition interne", celui-ci réaffirme lui-même
un display non-"none" au même enregistrement. La "superposition" n'a PAS
ce réglage : "display:none" (posé à la création ou par un "Masqué"
précédent) restait donc bloqué pour toujours, quel que soit le nombre de
fois où "Visible" était ensuite choisi. Corrigé : "Visible" efface aussi
"display" pour tout widget SANS réglage "Disposition interne" (safe : les
widgets qui EN ont un ne sont pas concernés, donc aucune régression sur
leur comportement existant).
Tests mis à jour (l'ancien test attendait le forçage, désormais retiré) +
nouveau test qui couvre le cycle complet (masqué par défaut -> "Visible"
choisi -> apparaît sans voile dans l'éditeur -> voile plein écran
retrouvé en mode jouable). 140 tests au vert au total.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
6e46949cf8
commit
7c237d6f1c
@@ -3,6 +3,7 @@ import json
|
||||
import db
|
||||
|
||||
from ..widgets.widget_meta import widget_meta
|
||||
from ..widgets.layout_capable_widgets import LAYOUT_CAPABLE_WIDGETS
|
||||
from .get_element import get_element
|
||||
|
||||
|
||||
@@ -61,6 +62,24 @@ def save_element_controls(slug, element_id, form):
|
||||
style.pop(k, None)
|
||||
else:
|
||||
style[k] = v
|
||||
if (
|
||||
control["key"] == "visibilite" and chosen == "visible"
|
||||
and el["widget"] not in LAYOUT_CAPABLE_WIDGETS
|
||||
):
|
||||
# "Visible" ne touche volontairement pas "display" (voir
|
||||
# visibility_control.py) : sur un widget qui A un
|
||||
# réglage "Disposition interne" (LAYOUT_CONTROLS,
|
||||
# traité avant celui-ci sur le MÊME enregistrement,
|
||||
# voir widget_meta.py), ce contrôle réaffirme lui-même
|
||||
# un "display" non-"none" (flex/etc), donc "Visible" n'a
|
||||
# rien à faire. Mais un widget SANS ce contrôle (ex.
|
||||
# "superposition") n'a PERSONNE d'autre pour l'effacer :
|
||||
# un "display:none" laissé par un "Masqué" précédent (ou
|
||||
# par le réglage par défaut à la création, voir
|
||||
# default_style_for_widget.py) restait donc bloqué
|
||||
# masqué pour toujours, quel que soit le nombre de fois
|
||||
# où "Visible" était ensuite choisi.
|
||||
style.pop("display", None)
|
||||
continue
|
||||
|
||||
if ctype == "scale":
|
||||
|
||||
Reference in New Issue
Block a user