From 1e015b5a1f40e2d85df00a559f728d3c6336c760 Mon Sep 17 00:00:00 2001 From: Johnny Date: Sun, 6 Sep 2026 13:55:55 +0200 Subject: [PATCH] =?UTF-8?q?fix(ui):=20mesurer=20la=20fen=C3=AAtre=20apr?= =?UTF-8?q?=C3=A8s=20remise=20=C3=A0=20plat=20des=20layouts=20(v0.8.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CHANGELOG.md | 7 +++++++ Makefile | 2 +- README.md | 2 +- app/__init__.py | 2 +- app/ui/main_window.py | 23 ++++++++++++++++++----- wgsecure.iss | 2 +- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70b1a12..ce5cbec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ### Corrigé diff --git a/Makefile b/Makefile index 7dd4dfa..2c7dbf6 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ## ────────────────────────────────────────────── APP := wgsecure -VERSION := 0.8.2 +VERSION := 0.8.3 VENV := .venv PYTHON := $(VENV)/bin/python3 PIP := $(VENV)/bin/pip diff --git a/README.md b/README.md index 6ae4926..74e432b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🛡️ 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**. diff --git a/app/__init__.py b/app/__init__.py index e9c9d9b..6d67560 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,3 +1,3 @@ -__version__ = "0.8.2" +__version__ = "0.8.3" APP_NAME = "WGSecure" APP_SHORT = "WGS" diff --git a/app/ui/main_window.py b/app/ui/main_window.py index b9b7fb2..78fdb1e 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -1,11 +1,12 @@ from __future__ import annotations from PyQt6.QtWidgets import ( + QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QFrame, QMessageBox, QInputDialog, QLineEdit, QListWidget, QListWidgetItem, QComboBox, ) -from PyQt6.QtCore import Qt, QTimer, QDateTime +from PyQt6.QtCore import Qt, QTimer, QDateTime, QEvent from PyQt6.QtGui import QFont, QCloseEvent, QColor 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. 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 - donc lever la contrainte précédente avant de laisser le layout - recalculer sa hauteur naturelle, puis la reverrouiller. + mais cette taille change avec le repli/dépli du détail et avec + l'apparition du bouton de code d'accès — il faut donc lever la + 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.setMaximumHeight(16777215) - self.centralWidget().adjustSize() + central = self.centralWidget() + QApplication.sendPostedEvents(None, QEvent.Type.LayoutRequest) + central.layout().activate() + central.adjustSize() self.adjustSize() self.setFixedHeight(self.sizeHint().height()) diff --git a/wgsecure.iss b/wgsecure.iss index 7e44fb1..82dc664 100644 --- a/wgsecure.iss +++ b/wgsecure.iss @@ -5,7 +5,7 @@ ; ────────────────────────────────────────────── #define MyAppName "WGSecure" -#define MyAppVersion "0.8.2" +#define MyAppVersion "0.8.3" #define MyAppPublisher "WGSecure" #define MyAppExeName "wgsecure.exe"