feature/build-y-ui-contraible

This commit is contained in:
2026-06-30 16:40:01 -06:00
parent 034a5ca5bb
commit 0d8d80d61d
10 changed files with 898 additions and 651 deletions

View File

@@ -41,6 +41,7 @@ class MainWindow(QMainWindow):
self.setWindowTitle("CloudRestoreAS - Restauración Automática SQL Server")
self.setMinimumSize(1200, 800)
self.setWindowIcon(load_tray_icon())
self.tray_icon: QSystemTrayIcon | None = None
self._setup_tray()
@@ -61,9 +62,6 @@ class MainWindow(QMainWindow):
if self._start_on_load:
QTimer.singleShot(500, self._start_engine)
if self._minimized_on_load:
QTimer.singleShot(100, self.hide)
self._update_tray_status()
self.dashboard_tab.update_motor_status()
app_logger.info("Ventana principal inicializada")
@@ -136,10 +134,16 @@ class MainWindow(QMainWindow):
about_action.triggered.connect(self._show_about)
help_menu.addAction(about_action)
def _setup_tray(self):
"""Configura el icono de bandeja del sistema."""
def _setup_tray(self, _attempt: int = 0):
"""Configura el icono de bandeja del sistema (reintenta si aún no está listo)."""
if not QSystemTrayIcon.isSystemTrayAvailable():
app_logger.warning("Bandeja del sistema no disponible en este entorno")
if _attempt < 20:
# La bandeja puede no estar lista justo tras el login: reintentar ~10s.
QTimer.singleShot(500, lambda: self._setup_tray(_attempt + 1))
else:
app_logger.warning(
"Bandeja del sistema no disponible tras varios reintentos"
)
return
self.tray_icon = QSystemTrayIcon(self)
@@ -183,14 +187,14 @@ class MainWindow(QMainWindow):
self.engine.signals.config_loaded.connect(self._on_config_loaded)
def closeEvent(self, event: QCloseEvent):
"""Minimiza a bandeja al cerrar la ventana (no sale de la aplicación)."""
"""Nunca cierra la app: minimiza a la bandeja (o a la barra de tareas si no hay bandeja)."""
if self._force_quit:
event.accept()
return
event.ignore()
if self.tray_icon and self.tray_icon.isVisible():
self.hide()
event.ignore()
app_logger.info("Ventana minimizada a bandeja del sistema")
if not self._tray_hint_shown:
self.tray_icon.showMessage(
@@ -201,7 +205,9 @@ class MainWindow(QMainWindow):
)
self._tray_hint_shown = True
else:
event.accept()
# Sin bandeja disponible: minimizar a la barra de tareas, nunca cerrar.
self.showMinimized()
app_logger.info("Ventana minimizada a la barra de tareas (sin bandeja)")
def _on_tray_activated(self, reason):
"""Maneja la activación del icono de tray."""