feat(tray_manager): implement double-click to toggle main window visibility
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import sys
|
import sys
|
||||||
from PySide6.QtWidgets import QSystemTrayIcon, QMenu
|
from PySide6.QtWidgets import QSystemTrayIcon, QMenu
|
||||||
from PySide6.QtGui import QIcon, QAction
|
from PySide6.QtGui import QIcon, QAction
|
||||||
|
from PySide6.QtCore import QTimer
|
||||||
from portprotonqt.logger import get_logger
|
from portprotonqt.logger import get_logger
|
||||||
from portprotonqt.theme_manager import ThemeManager
|
from portprotonqt.theme_manager import ThemeManager
|
||||||
import portprotonqt.themes.standart.styles as default_styles
|
import portprotonqt.themes.standart.styles as default_styles
|
||||||
@@ -13,7 +14,7 @@ class TrayManager:
|
|||||||
"""Модуль управления системным треем для PortProtonQt.
|
"""Модуль управления системным треем для PortProtonQt.
|
||||||
|
|
||||||
Обеспечивает:
|
Обеспечивает:
|
||||||
- Показ/скрытие главного окна по клику на иконку трея.
|
- Показ/скрытие главного окна по двойному клику на иконку трея.
|
||||||
- Контекстное меню с опциями: Show/Hide (переключается в зависимости от состояния окна),
|
- Контекстное меню с опциями: Show/Hide (переключается в зависимости от состояния окна),
|
||||||
Favorites (быстрый запуск избранных игр), Recent Games (быстрый запуск недавних игр), Exit.
|
Favorites (быстрый запуск избранных игр), Recent Games (быстрый запуск недавних игр), Exit.
|
||||||
- Меню Favorites и Recent Games динамически заполняются при показе (через aboutToShow).
|
- Меню Favorites и Recent Games динамически заполняются при показе (через aboutToShow).
|
||||||
@@ -36,7 +37,7 @@ class TrayManager:
|
|||||||
icon = QIcon()
|
icon = QIcon()
|
||||||
self.tray_icon.setIcon(icon)
|
self.tray_icon.setIcon(icon)
|
||||||
|
|
||||||
self.tray_icon.activated.connect(self.toggle_window)
|
self.tray_icon.activated.connect(self.handle_tray_click)
|
||||||
self.tray_icon.setToolTip(self.app_name)
|
self.tray_icon.setToolTip(self.app_name)
|
||||||
|
|
||||||
# Контекстное меню
|
# Контекстное меню
|
||||||
@@ -70,6 +71,12 @@ class TrayManager:
|
|||||||
# Флаг для принудительного выхода
|
# Флаг для принудительного выхода
|
||||||
self.main_window.is_exiting = False
|
self.main_window.is_exiting = False
|
||||||
|
|
||||||
|
# Переменные для отслеживания двойного клика
|
||||||
|
self.click_count = 0
|
||||||
|
self.click_timer = QTimer()
|
||||||
|
self.click_timer.setSingleShot(True)
|
||||||
|
self.click_timer.timeout.connect(self.reset_click_count)
|
||||||
|
|
||||||
def update_toggle_action(self):
|
def update_toggle_action(self):
|
||||||
"""Update toggle_action text based on window visibility."""
|
"""Update toggle_action text based on window visibility."""
|
||||||
if self.main_window.isVisible():
|
if self.main_window.isVisible():
|
||||||
@@ -77,10 +84,22 @@ class TrayManager:
|
|||||||
else:
|
else:
|
||||||
self.toggle_action.setText(_("Show"))
|
self.toggle_action.setText(_("Show"))
|
||||||
|
|
||||||
def toggle_window(self, reason):
|
def handle_tray_click(self, reason):
|
||||||
"""Переключает видимость окна по клику на иконку трея."""
|
"""Обрабатывает клики по иконке трея, отслеживая двойной клик."""
|
||||||
if reason == QSystemTrayIcon.ActivationReason.Trigger:
|
if reason == QSystemTrayIcon.ActivationReason.Trigger:
|
||||||
self.toggle_window_action()
|
self.click_count += 1
|
||||||
|
if self.click_count == 1:
|
||||||
|
# Запускаем таймер для ожидания второго клика (300 мс - стандартное время для двойного клика)
|
||||||
|
self.click_timer.start(300)
|
||||||
|
elif self.click_count == 2:
|
||||||
|
# Двойной клик зафиксирован
|
||||||
|
self.click_timer.stop()
|
||||||
|
self.toggle_window_action()
|
||||||
|
self.click_count = 0
|
||||||
|
|
||||||
|
def reset_click_count(self):
|
||||||
|
"""Сбрасывает счетчик кликов, если таймер истек."""
|
||||||
|
self.click_count = 0
|
||||||
|
|
||||||
def toggle_window_action(self):
|
def toggle_window_action(self):
|
||||||
"""Toggle window visibility and update action text."""
|
"""Toggle window visibility and update action text."""
|
||||||
|
Reference in New Issue
Block a user