fix(ui): mesurer la fenêtre après remise à plat des layouts (v0.8.3)
Le bouton « Saisir le code d'accès » était créé et placé, mais sous le bord inférieur : rendre un widget visible ne met pas les layouts à jour dans la foulée — Qt poste un LayoutRequest traité au tour de boucle suivant. La fenêtre, de hauteur fixe recalculée à chaque changement de contenu, se mesurait avant ce traitement et obtenait une hauteur en retard d'un cycle. Le symptôme était déjà visible dans les tests de la v0.8.2 : la hauteur montait bien de 258 à 298 px à l'apparition du bouton, mais ne redescendait jamais à sa disparition. J'avais mis cette asymétrie sur le compte du backend graphique de test au lieu d'y voir le retard lui-même. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,13 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.8.3] — 2026-09-06
|
||||||
|
|
||||||
|
### Corrigé
|
||||||
|
- **Le bouton « Saisir le code d'accès » n'apparaissait pas**, alors même que la ligne *Accès distant* indiquait la quarantaine. Il était bien créé et placé dans le layout, mais sous le bord inférieur d'une fenêtre restée à sa hauteur précédente. Rendre un widget visible ne met pas les layouts à jour immédiatement : Qt poste un `LayoutRequest` traité au tour de boucle suivant, et la fenêtre — de hauteur fixe, recalculée à chaque changement de contenu — se mesurait avant ce traitement, obtenant une hauteur en retard d'un cycle. Les layouts sont désormais remis à plat explicitement avant toute mesure. Corrige du même coup le repli du détail, qui souffrait du même retard sans que cela se voie.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.8.2] — 2026-09-06
|
## [0.8.2] — 2026-09-06
|
||||||
|
|
||||||
### Corrigé
|
### Corrigé
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
## ──────────────────────────────────────────────
|
## ──────────────────────────────────────────────
|
||||||
|
|
||||||
APP := wgsecure
|
APP := wgsecure
|
||||||
VERSION := 0.8.2
|
VERSION := 0.8.3
|
||||||
VENV := .venv
|
VENV := .venv
|
||||||
PYTHON := $(VENV)/bin/python3
|
PYTHON := $(VENV)/bin/python3
|
||||||
PIP := $(VENV)/bin/pip
|
PIP := $(VENV)/bin/pip
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 🛡️ WGSecure (WGS)
|
# 🛡️ WGSecure (WGS)
|
||||||
|
|
||||||
🚀 v0.8.2 · 🐍 · 🪟🐧 · 🔐 Accès validé par le serveur · 🛡️ WireGuard
|
🚀 v0.8.3 · 🐍 · 🪟🐧 · 🔐 Accès validé par le serveur · 🛡️ WireGuard
|
||||||
|
|
||||||
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard dont l'accès aux ressources distantes est ouvert par un code à 6 chiffres validé **par le serveur**.
|
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard dont l'accès aux ressources distantes est ouvert par un code à 6 chiffres validé **par le serveur**.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
__version__ = "0.8.2"
|
__version__ = "0.8.3"
|
||||||
APP_NAME = "WGSecure"
|
APP_NAME = "WGSecure"
|
||||||
APP_SHORT = "WGS"
|
APP_SHORT = "WGS"
|
||||||
|
|||||||
+18
-5
@@ -1,11 +1,12 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from PyQt6.QtWidgets import (
|
from PyQt6.QtWidgets import (
|
||||||
|
QApplication,
|
||||||
QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
|
QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
|
||||||
QLabel, QPushButton, QFrame, QMessageBox, QInputDialog,
|
QLabel, QPushButton, QFrame, QMessageBox, QInputDialog,
|
||||||
QLineEdit, QListWidget, QListWidgetItem,
|
QLineEdit, QListWidget, QListWidgetItem,
|
||||||
QComboBox,
|
QComboBox,
|
||||||
)
|
)
|
||||||
from PyQt6.QtCore import Qt, QTimer, QDateTime
|
from PyQt6.QtCore import Qt, QTimer, QDateTime, QEvent
|
||||||
from PyQt6.QtGui import QFont, QCloseEvent, QColor
|
from PyQt6.QtGui import QFont, QCloseEvent, QColor
|
||||||
|
|
||||||
from app.core.config import Config
|
from app.core.config import Config
|
||||||
@@ -373,13 +374,25 @@ class MainWindow(QMainWindow):
|
|||||||
"""Réajuste la hauteur fixe de la fenêtre à son contenu visible.
|
"""Réajuste la hauteur fixe de la fenêtre à son contenu visible.
|
||||||
|
|
||||||
La fenêtre reste de taille fixe (pas de redimensionnement manuel),
|
La fenêtre reste de taille fixe (pas de redimensionnement manuel),
|
||||||
mais cette taille change avec le repli/dépli du détail — il faut
|
mais cette taille change avec le repli/dépli du détail et avec
|
||||||
donc lever la contrainte précédente avant de laisser le layout
|
l'apparition du bouton de code d'accès — il faut donc lever la
|
||||||
recalculer sa hauteur naturelle, puis la reverrouiller.
|
contrainte précédente avant de laisser le layout recalculer sa
|
||||||
|
hauteur naturelle, puis la reverrouiller.
|
||||||
|
|
||||||
|
Le rendre visible ne suffit pas à mettre les layouts à jour : Qt
|
||||||
|
poste un `LayoutRequest` traité au tour de boucle suivant, et
|
||||||
|
mesurer avant ce traitement rend une hauteur en retard d'un cycle.
|
||||||
|
La fenêtre gardait alors sa taille précédente et rognait le widget
|
||||||
|
qui venait d'apparaître — le bouton « Saisir le code d'accès »
|
||||||
|
existait, mais sous le bord inférieur. D'où la remise à plat
|
||||||
|
explicite des layouts avant toute mesure.
|
||||||
"""
|
"""
|
||||||
self.setMinimumHeight(0)
|
self.setMinimumHeight(0)
|
||||||
self.setMaximumHeight(16777215)
|
self.setMaximumHeight(16777215)
|
||||||
self.centralWidget().adjustSize()
|
central = self.centralWidget()
|
||||||
|
QApplication.sendPostedEvents(None, QEvent.Type.LayoutRequest)
|
||||||
|
central.layout().activate()
|
||||||
|
central.adjustSize()
|
||||||
self.adjustSize()
|
self.adjustSize()
|
||||||
self.setFixedHeight(self.sizeHint().height())
|
self.setFixedHeight(self.sizeHint().height())
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
; ──────────────────────────────────────────────
|
; ──────────────────────────────────────────────
|
||||||
|
|
||||||
#define MyAppName "WGSecure"
|
#define MyAppName "WGSecure"
|
||||||
#define MyAppVersion "0.8.2"
|
#define MyAppVersion "0.8.3"
|
||||||
#define MyAppPublisher "WGSecure"
|
#define MyAppPublisher "WGSecure"
|
||||||
#define MyAppExeName "wgsecure.exe"
|
#define MyAppExeName "wgsecure.exe"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user