Rewritten class CustomLineEdit for removing hotkeys from translations #23

Manually merged
Dervart merged 2 commits from Dervart/PortProtonQt:context_menu into main 2025-07-03 13:53:44 +00:00
9 changed files with 77 additions and 90 deletions

View File

@ -10,7 +10,7 @@ import psutil
import signal
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 PySide6.QtGui import QDesktopServices, QIcon, QKeySequence
from portprotonqt.localization import _
from portprotonqt.config_utils import parse_desktop_entry, read_favorites, save_favorites
from portprotonqt.steam_api import is_game_in_steam, add_to_steam, remove_from_steam
@ -1097,48 +1097,34 @@ class CustomLineEdit(QLineEdit):
return QIcon(icon)
return QIcon()
def add_action(text: str, shortcut: QKeySequence.StandardKey, icon_name: str, slot, enabled=True):
icon = get_safe_icon(icon_name)
shortcut_str = QKeySequence(shortcut).toString(QKeySequence.SequenceFormat.NativeText)
action_text = f"{text}\t{shortcut_str}"
action = menu.addAction(icon, action_text)
action.triggered.connect(slot)
action.setEnabled(enabled)
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())
add_action(_("Undo"), QKeySequence.StandardKey.Undo, "undo", self.undo, self.isUndoAvailable())
add_action(_("Redo"), QKeySequence.StandardKey.Redo, "redo", self.redo, 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())
add_action(_("Cut"), QKeySequence.StandardKey.Cut, "cut", self.cut, self.hasSelectedText())
add_action(_("Copy"), QKeySequence.StandardKey.Copy, "copy", self.copy, self.hasSelectedText())
add_action(_("Paste"), QKeySequence.StandardKey.Paste, "paste", self.paste,
QApplication.clipboard().mimeData().hasText())
add_action(_("Delete"), QKeySequence.StandardKey.Delete, "delete", self._delete_selected_text,
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()))
add_action(_("Select All"), QKeySequence.StandardKey.SelectAll, "select_all", self.selectAll, bool(self.text()))
menu.exec(event.globalPos())

View File

@ -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 22:45+0700\n"
"POT-Creation-Date: 2025-07-03 19:29+0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de_DE\n"
@ -239,25 +239,25 @@ msgstr ""
msgid "Failed to remove game '{game_name}' from Steam: {error}"
msgstr ""
msgid "Undo\tCtrl+Z"
msgid "Undo"
msgstr ""
msgid "Redo\tCtrl+Y"
msgid "Redo"
msgstr ""
msgid "Cut\tCtrl+X"
msgid "Cut"
msgstr ""
msgid "Copy\tCtrl+C"
msgid "Copy"
msgstr ""
msgid "Paste\tCtrl+V"
msgid "Paste"
msgstr ""
msgid "Delete\tDel"
msgid "Delete"
msgstr ""
msgid "Select All\tCtrl+A"
msgid "Select All"
msgstr ""
msgid "Select"

View File

@ -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 22:45+0700\n"
"POT-Creation-Date: 2025-07-03 19:29+0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: es_ES\n"
@ -239,25 +239,25 @@ msgstr ""
msgid "Failed to remove game '{game_name}' from Steam: {error}"
msgstr ""
msgid "Undo\tCtrl+Z"
msgid "Undo"
msgstr ""
msgid "Redo\tCtrl+Y"
msgid "Redo"
msgstr ""
msgid "Cut\tCtrl+X"
msgid "Cut"
msgstr ""
msgid "Copy\tCtrl+C"
msgid "Copy"
msgstr ""
msgid "Paste\tCtrl+V"
msgid "Paste"
msgstr ""
msgid "Delete\tDel"
msgid "Delete"
msgstr ""
msgid "Select All\tCtrl+A"
msgid "Select All"
msgstr ""
msgid "Select"

View File

@ -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 22:52+0700\n"
"POT-Creation-Date: 2025-07-03 19:29+0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -237,25 +237,25 @@ msgstr ""
msgid "Failed to remove game '{game_name}' from Steam: {error}"
msgstr ""
msgid "Undo\tCtrl+Z"
msgid "Undo"
msgstr ""
msgid "Redo\tCtrl+Y"
msgid "Redo"
msgstr ""
msgid "Cut\tCtrl+X"
msgid "Cut"
msgstr ""
msgid "Copy\tCtrl+C"
msgid "Copy"
msgstr ""
msgid "Paste\tCtrl+V"
msgid "Paste"
msgstr ""
msgid "Delete\tDel"
msgid "Delete"
msgstr ""
msgid "Select All\tCtrl+A"
msgid "Select All"
msgstr ""
msgid "Select"

View File

@ -9,18 +9,17 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-07-02 22:45+0700\n"
"PO-Revision-Date: 2025-07-02 22:51+0700\n"
"POT-Creation-Date: 2025-07-03 19:29+0700\n"
"PO-Revision-Date: 2025-07-03 19:28+0700\n"
"Last-Translator: \n"
"Language-Team: ru_RU <LL@li.org>\n"
"Language: ru_RU\n"
"Language-Team: ru_RU <LL@li.org>\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"
"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 "Ошибка"
@ -87,11 +86,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}"
@ -191,8 +190,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 и пользовательских данных."
@ -237,36 +236,36 @@ 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 "Undo"
msgstr "Отмена"
msgid "Redo\tCtrl+Y"
msgstr "Повтор\tCtrl+Y"
msgid "Redo"
msgstr "Повтор"
msgid "Cut\tCtrl+X"
msgstr "Вырезать\tCtrl+X"
msgid "Cut"
msgstr "Вырезать"
msgid "Copy\tCtrl+C"
msgstr "Копировать\tCtrl+C"
msgid "Copy"
msgstr "Копировать"
msgid "Paste\tCtrl+V"
msgstr "Вставить\tCtrl+V"
msgid "Paste"
msgstr "Вставить"
msgid "Delete\tDel"
msgstr "Удалить\tDel"
msgid "Delete"
msgstr "Удалить"
msgid "Select All\tCtrl+A"
msgstr "Выделить всё\tCtrl+A"
msgid "Select All"
msgstr "Выбрать всё"
msgid "Select"
msgstr "Выбрать"
@ -508,7 +507,8 @@ msgstr "Подтвердите удаление"
msgid "Are you sure you want to reset all settings? This action cannot be undone."
msgstr ""
"Вы уверены, что хотите сбросить все настройки? Это действие нельзя отменить."
"Вы уверены, что хотите сбросить все настройки? Это действие нельзя "
"отменить."
msgid "Settings reset. Restarting..."
msgstr "Настройки сброшены. Перезапуск..."
@ -653,3 +653,4 @@ msgstr "мин."
msgid "sec."
msgstr "сек."

View File

@ -109,7 +109,7 @@ CONTEXT_MENU_STYLE = f"""
margin-left: 15px;
}}
QMenu::item {{
padding: 8px 20px 8px 10px;
padding: 10px 20px 10px 10px;
background: {color_h};
border-radius: {border_radius_a};
color: {color_f};
@ -134,7 +134,7 @@ CONTEXT_MENU_STYLE = f"""
QMenu::separator {{
height: 1px;
background-color: #7f7f7f;
margin: 4px 8px;
margin: 3px 6px;
}}
"""