fix: editable alias in server dialog + Ctrl+Z undo for all input fields
- Alias field no longer disabled when editing server profile - Duplicate alias check on rename, session pool migration - Enable undo (Ctrl+Z) on all CTkEntry widgets across the project Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -90,6 +90,7 @@ _EN = {
|
||||
"show": "Show",
|
||||
"hide": "Hide",
|
||||
"alias_required": "Alias is required",
|
||||
"alias_exists": "Alias '{alias}' already exists",
|
||||
"ip_required": "IP is required",
|
||||
"port_must_be_number": "Port must be a number",
|
||||
"error_prefix": "Error: {msg}",
|
||||
@@ -355,6 +356,7 @@ _RU = {
|
||||
"show": "Показать",
|
||||
"hide": "Скрыть",
|
||||
"alias_required": "Алиас обязателен",
|
||||
"alias_exists": "Алиас '{alias}' уже существует",
|
||||
"ip_required": "IP обязателен",
|
||||
"port_must_be_number": "Порт должен быть числом",
|
||||
"error_prefix": "Ошибка: {msg}",
|
||||
@@ -620,6 +622,7 @@ _ZH = {
|
||||
"show": "显示",
|
||||
"hide": "隐藏",
|
||||
"alias_required": "别名不能为空",
|
||||
"alias_exists": "别名 '{alias}' 已存在",
|
||||
"ip_required": "IP不能为空",
|
||||
"port_must_be_number": "端口必须是数字",
|
||||
"error_prefix": "错误:{msg}",
|
||||
|
||||
@@ -357,7 +357,14 @@ class ServerStore:
|
||||
servers = self._data.get("servers", [])
|
||||
for i, s in enumerate(servers):
|
||||
if s["alias"] == alias:
|
||||
new_alias = updated.get("alias", alias)
|
||||
servers[i] = updated
|
||||
# If alias changed, migrate status
|
||||
if new_alias != alias:
|
||||
with self._statuses_lock:
|
||||
old_status = self._statuses.pop(alias, None)
|
||||
if old_status:
|
||||
self._statuses[new_alias] = old_status
|
||||
self._save()
|
||||
self._notify()
|
||||
return
|
||||
|
||||
@@ -214,6 +214,17 @@ class SessionPool:
|
||||
"""Clean up sessions when a server is deleted."""
|
||||
self.disconnect_session(alias)
|
||||
|
||||
def rename_server(self, old_alias: str, new_alias: str):
|
||||
"""Rename a server's session references (after alias change)."""
|
||||
with self._lock:
|
||||
if old_alias in self._sessions:
|
||||
session_data = self._sessions.pop(old_alias)
|
||||
session_data.alias = new_alias
|
||||
self._sessions[new_alias] = session_data
|
||||
if old_alias in self._last_used_order:
|
||||
ts = self._last_used_order.pop(old_alias)
|
||||
self._last_used_order[new_alias] = ts
|
||||
|
||||
def get_active_sessions(self) -> list:
|
||||
"""Get list of aliases for active sessions."""
|
||||
with self._lock:
|
||||
|
||||
Reference in New Issue
Block a user