diff --git a/dev-scripts/.spellignore b/dev-scripts/.spellignore index d3ae991..8fd336a 100644 --- a/dev-scripts/.spellignore +++ b/dev-scripts/.spellignore @@ -16,3 +16,5 @@ Content-Transfer-Encoding: Generated-By: start.sh EGS +Stop Game +\t diff --git a/documentation/localization_guide/README.md b/documentation/localization_guide/README.md index dfbf6ae..c20b14b 100644 --- a/documentation/localization_guide/README.md +++ b/documentation/localization_guide/README.md @@ -20,9 +20,9 @@ Current translation status: | Locale | Progress | Translated | | :----- | -------: | ---------: | -| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 185 | -| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 185 | -| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 185 of 185 | +| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 192 | +| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 192 | +| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 192 of 192 | --- diff --git a/documentation/localization_guide/README.ru.md b/documentation/localization_guide/README.ru.md index fe64ed1..96684ab 100644 --- a/documentation/localization_guide/README.ru.md +++ b/documentation/localization_guide/README.ru.md @@ -20,9 +20,9 @@ | Локаль | Прогресс | Переведено | | :----- | -------: | ---------: | -| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 185 | -| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 185 | -| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 185 из 185 | +| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 192 | +| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 192 | +| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 192 из 192 | --- diff --git a/portprotonqt/context_menu_manager.py b/portprotonqt/context_menu_manager.py index 2c84b74..04c7f8f 100644 --- a/portprotonqt/context_menu_manager.py +++ b/portprotonqt/context_menu_manager.py @@ -8,7 +8,7 @@ import logging import orjson import psutil import signal -from PySide6.QtWidgets import QMessageBox, QDialog, QMenu +from PySide6.QtWidgets import QMessageBox, QDialog, QMenu, QLineEdit, QApplication from PySide6.QtCore import QUrl, QPoint, QObject, Signal, Qt from PySide6.QtGui import QDesktopServices, QIcon from portprotonqt.localization import _ @@ -1080,3 +1080,69 @@ Icon={icon_path} _("Error"), _("Failed to open folder: {error}").format(error=str(e)) ) + +class CustomLineEdit(QLineEdit): + + def __init__(self, *args, theme=None, **kwargs): + super().__init__(*args, **kwargs) + self.theme = theme + self.theme_manager = ThemeManager() + + def contextMenuEvent(self, event): + def get_safe_icon(icon_name: str) -> QIcon: + icon = self.theme_manager.get_icon(icon_name) + if isinstance(icon, QIcon): + return icon + elif isinstance(icon, str) and os.path.exists(icon): + return QIcon(icon) + return QIcon() + + menu = QMenu(self) + if self.theme and hasattr(self.theme, "CONTEXT_MENU_STYLE"): + menu.setStyleSheet(self.theme.CONTEXT_MENU_STYLE) + + # Undo + undo = menu.addAction(get_safe_icon("undo"), _("Undo\tCtrl+Z")) + undo.triggered.connect(self.undo) + undo.setEnabled(self.isUndoAvailable()) + + # Redo + redo = menu.addAction(get_safe_icon("redo"), _("Redo\tCtrl+Y")) + redo.triggered.connect(self.redo) + redo.setEnabled(self.isRedoAvailable()) + + menu.addSeparator() + + # Cut + cut = menu.addAction(get_safe_icon("cut"), _("Cut\tCtrl+X")) + cut.triggered.connect(self.cut) + cut.setEnabled(self.hasSelectedText()) + + # Copy + copy = menu.addAction(get_safe_icon("copy"), _("Copy\tCtrl+C")) + copy.triggered.connect(self.copy) + copy.setEnabled(self.hasSelectedText()) + + # Paste + paste = menu.addAction(get_safe_icon("paste"), _("Paste\tCtrl+V")) + paste.triggered.connect(self.paste) + paste.setEnabled(QApplication.clipboard().mimeData().hasText()) + + # Delete + delete = menu.addAction(get_safe_icon("delete"), _("Delete\tDel")) + delete.triggered.connect(self._delete_selected_text) + delete.setEnabled(self.hasSelectedText()) + + menu.addSeparator() + + # Select All + select_all = menu.addAction(get_safe_icon("select_all"), _("Select All\tCtrl+A")) + select_all.triggered.connect(self.selectAll) + select_all.setEnabled(bool(self.text())) + + menu.exec(event.globalPos()) + + def _delete_selected_text(self): + cursor_pos = self.cursorPosition() + self.backspace() + self.setCursorPosition(cursor_pos) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 59a5899..9713dd4 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -3,7 +3,7 @@ import tempfile from typing import cast, TYPE_CHECKING from PySide6.QtGui import QPixmap, QIcon from PySide6.QtWidgets import ( - QDialog, QLineEdit, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication + QDialog, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication ) from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer from icoextract import IconExtractor, IconExtractorError @@ -442,6 +442,7 @@ class FileExplorer(QDialog): class AddGameDialog(QDialog): def __init__(self, parent=None, theme=None, edit_mode=False, game_name=None, exe_path=None, cover_path=None): super().__init__(parent) + from portprotonqt.context_menu_manager import CustomLineEdit # Локальный импорт self.theme = theme if theme else default_styles self.theme_manager = ThemeManager() self.edit_mode = edit_mode @@ -461,7 +462,7 @@ class AddGameDialog(QDialog): layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Game name - self.nameEdit = QLineEdit(self) + self.nameEdit = CustomLineEdit(self, theme=self.theme) self.nameEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if game_name: self.nameEdit.setText(game_name) @@ -474,7 +475,7 @@ class AddGameDialog(QDialog): exe_label.setStyleSheet( self.theme.PARAMS_TITLE_STYLE) - self.exeEdit = QLineEdit(self) + self.exeEdit = CustomLineEdit(self, theme=self.theme) self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if exe_path: self.exeEdit.setText(exe_path) @@ -496,7 +497,7 @@ class AddGameDialog(QDialog): cover_label = QLabel(_("Custom Cover:")) cover_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE) - self.coverEdit = QLineEdit(self) + self.coverEdit = CustomLineEdit(self, theme=self.theme) self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if cover_path: self.coverEdit.setText(cover_path) diff --git a/portprotonqt/locales/de_DE/LC_MESSAGES/messages.mo b/portprotonqt/locales/de_DE/LC_MESSAGES/messages.mo index 41e584f..e0ae722 100644 Binary files a/portprotonqt/locales/de_DE/LC_MESSAGES/messages.mo and b/portprotonqt/locales/de_DE/LC_MESSAGES/messages.mo differ diff --git a/portprotonqt/locales/de_DE/LC_MESSAGES/messages.po b/portprotonqt/locales/de_DE/LC_MESSAGES/messages.po index 0e21c4b..8a2258b 100644 --- a/portprotonqt/locales/de_DE/LC_MESSAGES/messages.po +++ b/portprotonqt/locales/de_DE/LC_MESSAGES/messages.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-02 10:43+0500\n" +"POT-Creation-Date: 2025-07-02 22:45+0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: de_DE\n" @@ -239,6 +239,27 @@ msgstr "" msgid "Failed to remove game '{game_name}' from Steam: {error}" msgstr "" +msgid "Undo\tCtrl+Z" +msgstr "" + +msgid "Redo\tCtrl+Y" +msgstr "" + +msgid "Cut\tCtrl+X" +msgstr "" + +msgid "Copy\tCtrl+C" +msgstr "" + +msgid "Paste\tCtrl+V" +msgstr "" + +msgid "Delete\tDel" +msgstr "" + +msgid "Select All\tCtrl+A" +msgstr "" + msgid "Select" msgstr "" diff --git a/portprotonqt/locales/es_ES/LC_MESSAGES/messages.mo b/portprotonqt/locales/es_ES/LC_MESSAGES/messages.mo index 9ec8c69..f77422d 100644 Binary files a/portprotonqt/locales/es_ES/LC_MESSAGES/messages.mo and b/portprotonqt/locales/es_ES/LC_MESSAGES/messages.mo differ diff --git a/portprotonqt/locales/es_ES/LC_MESSAGES/messages.po b/portprotonqt/locales/es_ES/LC_MESSAGES/messages.po index 518a581..230eb61 100644 --- a/portprotonqt/locales/es_ES/LC_MESSAGES/messages.po +++ b/portprotonqt/locales/es_ES/LC_MESSAGES/messages.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-02 10:43+0500\n" +"POT-Creation-Date: 2025-07-02 22:45+0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: es_ES\n" @@ -239,6 +239,27 @@ msgstr "" msgid "Failed to remove game '{game_name}' from Steam: {error}" msgstr "" +msgid "Undo\tCtrl+Z" +msgstr "" + +msgid "Redo\tCtrl+Y" +msgstr "" + +msgid "Cut\tCtrl+X" +msgstr "" + +msgid "Copy\tCtrl+C" +msgstr "" + +msgid "Paste\tCtrl+V" +msgstr "" + +msgid "Delete\tDel" +msgstr "" + +msgid "Select All\tCtrl+A" +msgstr "" + msgid "Select" msgstr "" diff --git a/portprotonqt/locales/messages.pot b/portprotonqt/locales/messages.pot index a1bf5dd..e9efd0a 100644 --- a/portprotonqt/locales/messages.pot +++ b/portprotonqt/locales/messages.pot @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PortProtonQt 0.1.1\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-02 10:43+0500\n" +"POT-Creation-Date: 2025-07-02 22:52+0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -237,6 +237,27 @@ msgstr "" msgid "Failed to remove game '{game_name}' from Steam: {error}" msgstr "" +msgid "Undo\tCtrl+Z" +msgstr "" + +msgid "Redo\tCtrl+Y" +msgstr "" + +msgid "Cut\tCtrl+X" +msgstr "" + +msgid "Copy\tCtrl+C" +msgstr "" + +msgid "Paste\tCtrl+V" +msgstr "" + +msgid "Delete\tDel" +msgstr "" + +msgid "Select All\tCtrl+A" +msgstr "" + msgid "Select" msgstr "" diff --git a/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.mo b/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.mo index c5a6149..f599037 100644 Binary files a/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.mo and b/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.mo differ diff --git a/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.po b/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.po index b4065ee..6ea1b12 100644 --- a/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.po +++ b/portprotonqt/locales/ru_RU/LC_MESSAGES/messages.po @@ -9,17 +9,18 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-02 10:43+0500\n" -"PO-Revision-Date: 2025-07-02 10:43+0500\n" +"POT-Creation-Date: 2025-07-02 22:45+0700\n" +"PO-Revision-Date: 2025-07-02 22:51+0700\n" "Last-Translator: \n" -"Language: ru_RU\n" "Language-Team: ru_RU \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 " +"&& (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.17.0\n" +"X-Generator: Poedit 3.6\n" msgid "Error" msgstr "Ошибка" @@ -86,11 +87,11 @@ msgstr "Успешно" #, python-brace-format msgid "" -"'{game_name}' was added to Steam. Please restart Steam for changes to " -"take effect." +"'{game_name}' was added to Steam. Please restart Steam for changes to take " +"effect." msgstr "" -"'{game_name}' был(а) добавлен(а) в Steam. Пожалуйста, перезапустите " -"Steam, чтобы изменения вступили в силу." +"'{game_name}' был(а) добавлен(а) в Steam. Пожалуйста, перезапустите Steam, " +"чтобы изменения вступили в силу." #, python-brace-format msgid "Executable not found for game: {game_name}" @@ -190,8 +191,8 @@ msgstr "Подтвердите удаление" #, python-brace-format msgid "" -"Are you sure you want to delete '{game_name}'? This will remove the " -".desktop file and custom data." +"Are you sure you want to delete '{game_name}'? This will remove the .desktop " +"file and custom data." msgstr "" "Вы уверены, что хотите удалить '{game_name}'? Это приведёт к удалению " "файла .desktop и пользовательских данных." @@ -236,16 +237,37 @@ msgstr "Не удалось добавить '{game_name}' в Steam: {error}" #, python-brace-format msgid "" -"'{game_name}' was removed from Steam. Please restart Steam for changes to" -" take effect." +"'{game_name}' was removed from Steam. Please restart Steam for changes to take " +"effect." msgstr "" -"'{game_name}' был(а) удалён(а) из Steam. Пожалуйста, перезапустите Steam," -" чтобы изменения вступили в силу." +"'{game_name}' был(а) удалён(а) из Steam. Пожалуйста, перезапустите Steam, чтобы " +"изменения вступили в силу." #, python-brace-format msgid "Failed to remove game '{game_name}' from Steam: {error}" msgstr "Не удалось удалить игру '{game_name}' из Steam: {error}" +msgid "Undo\tCtrl+Z" +msgstr "Отмена\tCtrl+Z" + +msgid "Redo\tCtrl+Y" +msgstr "Повтор\tCtrl+Y" + +msgid "Cut\tCtrl+X" +msgstr "Вырезать\tCtrl+X" + +msgid "Copy\tCtrl+C" +msgstr "Копировать\tCtrl+C" + +msgid "Paste\tCtrl+V" +msgstr "Вставить\tCtrl+V" + +msgid "Delete\tDel" +msgstr "Удалить\tDel" + +msgid "Select All\tCtrl+A" +msgstr "Выделить всё\tCtrl+A" + msgid "Select" msgstr "Выбрать" @@ -486,8 +508,7 @@ msgstr "Подтвердите удаление" msgid "Are you sure you want to reset all settings? This action cannot be undone." msgstr "" -"Вы уверены, что хотите сбросить все настройки? Это действие нельзя " -"отменить." +"Вы уверены, что хотите сбросить все настройки? Это действие нельзя отменить." msgid "Settings reset. Restarting..." msgstr "Настройки сброшены. Перезапуск..." @@ -632,4 +653,3 @@ msgstr "мин." msgid "sec." msgstr "сек." - diff --git a/portprotonqt/main_window.py b/portprotonqt/main_window.py index 16584d9..556a59c 100644 --- a/portprotonqt/main_window.py +++ b/portprotonqt/main_window.py @@ -12,7 +12,7 @@ from portprotonqt.dialogs import AddGameDialog, FileExplorer from portprotonqt.game_card import GameCard from portprotonqt.custom_widgets import FlowLayout, ClickableLabel, AutoSizeButton, NavLabel from portprotonqt.input_manager import InputManager -from portprotonqt.context_menu_manager import ContextMenuManager +from portprotonqt.context_menu_manager import ContextMenuManager, CustomLineEdit from portprotonqt.system_overlay import SystemOverlay from portprotonqt.image_utils import load_pixmap_async, round_corners, ImageCarousel @@ -589,7 +589,7 @@ class MainWindow(QMainWindow): self.addGameButton.clicked.connect(self.openAddGameDialog) layout.addWidget(self.addGameButton, alignment=Qt.AlignmentFlag.AlignRight) - self.searchEdit = QLineEdit() + self.searchEdit = CustomLineEdit(self, theme=self.theme) icon: QIcon = cast(QIcon, self.theme_manager.get_icon("search")) action_pos = cast(QLineEdit.ActionPosition, QLineEdit.ActionPosition.LeadingPosition) self.search_action = self.searchEdit.addAction(icon, action_pos) @@ -1039,7 +1039,7 @@ class MainWindow(QMainWindow): formLayout.addRow(self.gamesDisplayTitle, self.gamesDisplayCombo) # 4. Proxy settings - self.proxyUrlEdit = QLineEdit() + self.proxyUrlEdit = CustomLineEdit(self, theme=self.theme) self.proxyUrlEdit.setPlaceholderText(_("Proxy URL")) self.proxyUrlEdit.setStyleSheet(self.theme.PROXY_INPUT_STYLE) self.proxyUrlEdit.setFocusPolicy(Qt.FocusPolicy.StrongFocus) @@ -1051,7 +1051,7 @@ class MainWindow(QMainWindow): self.proxyUrlEdit.setText(proxy_cfg["http"]) formLayout.addRow(self.proxyUrlTitle, self.proxyUrlEdit) - self.proxyUserEdit = QLineEdit() + self.proxyUserEdit = CustomLineEdit(self, theme=self.theme) self.proxyUserEdit.setPlaceholderText(_("Proxy Username")) self.proxyUserEdit.setStyleSheet(self.theme.PROXY_INPUT_STYLE) self.proxyUserEdit.setFocusPolicy(Qt.FocusPolicy.StrongFocus) @@ -1060,7 +1060,7 @@ class MainWindow(QMainWindow): self.proxyUserTitle.setFocusPolicy(Qt.FocusPolicy.NoFocus) formLayout.addRow(self.proxyUserTitle, self.proxyUserEdit) - self.proxyPasswordEdit = QLineEdit() + self.proxyPasswordEdit = CustomLineEdit(self, theme=self.theme) self.proxyPasswordEdit.setPlaceholderText(_("Proxy Password")) self.proxyPasswordEdit.setEchoMode(QLineEdit.EchoMode.Password) self.proxyPasswordEdit.setStyleSheet(self.theme.PROXY_INPUT_STYLE) @@ -1117,7 +1117,7 @@ class MainWindow(QMainWindow): self.legendaryAuthTitle.setFocusPolicy(Qt.FocusPolicy.NoFocus) formLayout.addRow(self.legendaryAuthTitle, self.legendaryAuthButton) - self.legendaryCodeEdit = QLineEdit() + self.legendaryCodeEdit = CustomLineEdit(self, theme=self.theme) self.legendaryCodeEdit.setPlaceholderText(_("Enter Legendary Authorization Code")) self.legendaryCodeEdit.setStyleSheet(self.theme.PROXY_INPUT_STYLE) self.legendaryCodeEdit.setFocusPolicy(Qt.FocusPolicy.StrongFocus) @@ -1359,7 +1359,7 @@ class MainWindow(QMainWindow): self.themeMetainfoLabel.setWordWrap(True) self.themeInfoLayout.addWidget(self.themeMetainfoLabel) - self.applyButton = AutoSizeButton(_("Apply Theme"), icon=self.theme_manager.get_icon("update")) + self.applyButton = AutoSizeButton(_("Apply Theme"), icon=self.theme_manager.get_icon("apply")) self.applyButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) self.applyButton.setObjectName("actionButton") self.themeInfoLayout.addWidget(self.applyButton) diff --git a/portprotonqt/themes/standart/images/icons/copy.svg b/portprotonqt/themes/standart/images/icons/copy.svg new file mode 100644 index 0000000..3f23b76 --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/copy.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/images/icons/cut.svg b/portprotonqt/themes/standart/images/icons/cut.svg new file mode 100644 index 0000000..55df7a9 --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/cut.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/images/icons/delete.svg b/portprotonqt/themes/standart/images/icons/delete.svg index 0a7ef6d..0d44f54 100644 --- a/portprotonqt/themes/standart/images/icons/delete.svg +++ b/portprotonqt/themes/standart/images/icons/delete.svg @@ -1 +1 @@ - + diff --git a/portprotonqt/themes/standart/images/icons/paste.svg b/portprotonqt/themes/standart/images/icons/paste.svg new file mode 100644 index 0000000..e15aea0 --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/paste.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/images/icons/redo.svg b/portprotonqt/themes/standart/images/icons/redo.svg new file mode 100644 index 0000000..18110bc --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/redo.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/images/icons/select_all.svg b/portprotonqt/themes/standart/images/icons/select_all.svg new file mode 100644 index 0000000..fae609b --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/select_all.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/images/icons/undo.svg b/portprotonqt/themes/standart/images/icons/undo.svg new file mode 100644 index 0000000..706fd9d --- /dev/null +++ b/portprotonqt/themes/standart/images/icons/undo.svg @@ -0,0 +1 @@ + diff --git a/portprotonqt/themes/standart/styles.py b/portprotonqt/themes/standart/styles.py index d885cf5..f51218c 100644 --- a/portprotonqt/themes/standart/styles.py +++ b/portprotonqt/themes/standart/styles.py @@ -103,9 +103,10 @@ CONTEXT_MENU_STYLE = f""" font-family: '{font_family}'; font-size: {font_size_a}; padding: 5px; + min-width: 150px; }} QMenu::icon {{ - margin-left: 15px; + margin-left: 15px; }} QMenu::item {{ padding: 8px 20px 8px 10px; @@ -117,6 +118,9 @@ CONTEXT_MENU_STYLE = f""" background: {color_a}; color: {color_f}; }} + QMenu::item:disabled {{ + color: #7f7f7f; + }} QMenu::item:hover {{ background: {color_a}; color: {color_f}; @@ -127,6 +131,11 @@ CONTEXT_MENU_STYLE = f""" border: {border_b} rgba(255, 255, 255, 0.3); border-radius: {border_radius_a}; }} + QMenu::separator {{ + height: 1px; + background-color: #7f7f7f; + margin: 4px 8px; + }} """ # ГЛОБАЛЬНЫЙ СТИЛЬ ДЛЯ ОКНА (ФОН), ЛЭЙБЛОВ, КНОПОК @@ -574,19 +583,6 @@ ADDGAME_INPUT_STYLE = f""" border: {border_c} {color_a}; background-color: {color_e}; }} - QMenu {{ - border: {border_b} {color_g}; - padding: 5px 10px; - background: {color_d}; - }} - QMenu::item {{ - padding: 0px 10px; - border: 10px solid {color_h}; /* reserve space for selection border */ - }} - QMenu::item:selected {{ - background: {color_c}; - border-radius: {border_radius_a}; - }} """ # СТИЛЬ КАРТОЧКИ ИГРЫ (GAMECARD) @@ -742,19 +738,6 @@ PROXY_INPUT_STYLE = f""" border: {border_c} {color_a}; background-color: {color_e}; }} - QMenu {{ - border: {border_b} rgba(255, 255, 255, 0.2); - padding: 5px 10px; - background: {color_d}; - }} - QMenu::item {{ - padding: 0px 10px; - border: 10px solid {color_h}; /* reserve space for selection border */ - }} - QMenu::item:selected {{ - background: {color_c}; - border-radius: {border_radius_a}; - }} """ SETTINGS_COMBO_STYLE = f"""