Skip to content

Commit de2b56b

Browse files
committed
remove 'xdg-' prefix for menu
1 parent e5d8410 commit de2b56b

File tree

11 files changed

+79
-57
lines changed

11 files changed

+79
-57
lines changed

xpra/client/gtk3/client_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,13 +425,13 @@ def show_start_new_command(self, *args) -> None:
425425
dialog = self.sub_dialogs.get("start-new-command")
426426
log(f"show_start_new_command{args} current {dialog=}, flag={self.server_start_new_commands}")
427427
if not dialog:
428-
log("server_xdg_menu=%s", Ellipsizer(self.server_xdg_menu))
428+
log("server_menu=%s", Ellipsizer(self.server_menu))
429429
from xpra.gtk.dialogs.start_new_command import getStartNewCommand
430430

431431
def run_command_cb(command, sharing=True):
432432
self.send_start_command(command, command, False, sharing)
433433

434-
dialog = getStartNewCommand(run_command_cb, self.server_sharing, self.server_xdg_menu)
434+
dialog = getStartNewCommand(run_command_cb, self.server_sharing, self.server_menu)
435435
self.sub_dialogs["start-new-command"] = dialog
436436
dialog.show()
437437

xpra/client/gtk3/tray_menu.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from collections.abc import Sequence, Callable, Iterable
1010

1111
from xpra.util.objects import typedict, reverse_dict
12-
from xpra.util.str_fn import Ellipsizer, repr_ellipsized, csv
12+
from xpra.util.str_fn import Ellipsizer, csv
1313
from xpra.util.env import envbool, ignorewarnings
1414
from xpra.os_util import gi_import, OSX, WIN32
1515
from xpra.common import RESOLUTION_ALIASES, ConnectionMessage, uniq
@@ -1691,7 +1691,7 @@ def make_startmenuitem(self) -> Gtk.ImageMenuItem:
16911691
start_menu_item = self.handshake_menuitem("Start", "start.png")
16921692
start_menu_item.show()
16931693

1694-
def update_menu_data() -> None:
1694+
def update_menu_data(*_args) -> None:
16951695
if not self.client.start_new_commands:
16961696
set_sensitive(start_menu_item, False)
16971697
start_menu_item.set_tooltip_text("Starting new commands is disabled")
@@ -1700,7 +1700,7 @@ def update_menu_data() -> None:
17001700
set_sensitive(start_menu_item, False)
17011701
start_menu_item.set_tooltip_text("This server does not support starting new commands")
17021702
return
1703-
if not self.client.server_xdg_menu:
1703+
if not self.client.server_menu:
17041704
set_sensitive(start_menu_item, False)
17051705
start_menu_item.set_tooltip_text("This server does not provide start menu data")
17061706
return
@@ -1709,23 +1709,18 @@ def update_menu_data() -> None:
17091709
start_menu_item.set_submenu(menu)
17101710
start_menu_item.set_tooltip_text(None)
17111711

1712-
def start_menu_init() -> None:
1713-
update_menu_data()
1714-
1715-
def on_xdg_menu_changed(setting, value) -> None:
1716-
log("on_xdg_menu_changed(%s, %s)", setting, repr_ellipsized(str(value)))
1717-
update_menu_data()
1718-
1719-
self.client.on_server_setting_changed("xdg-menu", on_xdg_menu_changed)
1720-
1721-
self.after_handshake(start_menu_init)
1712+
# legacy pre v6.4 name:
1713+
self.client.on_server_setting_changed("xdg-menu", update_menu_data)
1714+
# v6.4 and later:
1715+
self.client.on_server_setting_changed("menu", update_menu_data)
1716+
# older servers may have supplied as part of the hello handshake:
1717+
self.after_handshake(update_menu_data)
17221718
return start_menu_item
17231719

17241720
def build_start_menu(self) -> Gtk.Menu:
17251721
menu = Gtk.Menu()
1726-
execlog("build_start_menu() %i menu items", len(self.client.server_xdg_menu))
1727-
execlog("self.client.server_xdg_menu=%s", Ellipsizer(self.client.server_xdg_menu))
1728-
for category, category_props in sorted(self.client.server_xdg_menu.items()):
1722+
execlog("build_start_menu() %i menu items: %s", len(self.client.server_menu), Ellipsizer(self.client.server_menu))
1723+
for category, category_props in sorted(self.client.server_menu.items()):
17291724
execlog(" * category: %s", category)
17301725
# log("category_props(%s)=%s", category, category_props)
17311726
if not isinstance(category_props, dict):

xpra/client/gui/ui_client_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def _process_setting_change(self, packet: PacketType) -> None:
349349
"sharing", "sharing-toggle", "lock", "lock-toggle",
350350
"start-new-commands", "client-shutdown", "webcam",
351351
"bandwidth-limit", "clipboard-limits",
352-
"xdg-menu", "monitors",
352+
"xdg-menu", "menu", "monitors",
353353
"ibus-layouts",
354354
):
355355
setattr(self, "server_%s" % setting.replace("-", "_"), value)

xpra/client/subsystem/command.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from collections.abc import Sequence
99

1010
from xpra.client.base.stub_client_mixin import StubClientMixin
11+
from xpra.common import noop
1112
from xpra.scripts.config import str_to_bool
1213
from xpra.util.objects import typedict
1314
from xpra.log import Logger
@@ -23,7 +24,7 @@ class CommandClient(StubClientMixin):
2324

2425
def __init__(self):
2526
self.server_start_new_commands: bool = False
26-
self.server_xdg_menu = None
27+
self.server_menu = {}
2728
self.start_new_commands: bool = False
2829
self.server_commands_info = False
2930
self.server_commands_signals: Sequence[str] = ()
@@ -44,6 +45,9 @@ def get_info(self) -> dict[str, dict[str, Any]]:
4445

4546
def get_caps(self) -> dict[str, Any]:
4647
return {
48+
# v6.4:
49+
"menu": self.start_new_commands,
50+
# pre-v6.4:
4751
"xdg-menu": self.start_new_commands,
4852
# legacy flag:
4953
"xdg-menu-update": True,
@@ -52,7 +56,14 @@ def get_caps(self) -> dict[str, Any]:
5256
def parse_server_capabilities(self, c: typedict) -> bool:
5357
self.server_start_new_commands = c.boolget("start-new-commands")
5458
if self.server_start_new_commands:
55-
self.server_xdg_menu = c.dictget("xdg-menu", None)
59+
self.server_menu = c.dictget("xdg-menu", {})
60+
# weak dependency injection on ui client:
61+
onchange = getattr(self, "on_server_setting_changed", noop)
62+
63+
def update_menu_value(_setting, menu) -> None:
64+
self.server_menu = menu
65+
onchange("xdg-menu", update_menu_value)
66+
onchange("menu", update_menu_value)
5667
if self.request_start or self.request_start_child:
5768
if self.server_start_new_commands:
5869
self.after_handshake(self.send_start_new_commands)

xpra/gtk/dialogs/start_new_command.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ def load_config() -> dict:
3535
_instance = None
3636

3737

38-
def getStartNewCommand(run_callback, can_share=False, xdg_menu=None):
38+
def getStartNewCommand(run_callback, can_share=False, menu=None):
3939
global _instance
4040
if _instance is None:
41-
_instance = StartNewCommand(run_callback, can_share, xdg_menu)
41+
_instance = StartNewCommand(run_callback, can_share, menu)
4242
return _instance
4343

4444

@@ -54,9 +54,9 @@ def btn(label, tooltip, callback, icon_name="") -> Gtk.Button:
5454

5555
class StartNewCommand:
5656

57-
def __init__(self, run_callback=None, can_share=False, xdg_menu=None):
57+
def __init__(self, run_callback=None, can_share=False, menu=None):
5858
self.run_callback = run_callback
59-
self.xdg_menu = typedict(xdg_menu or {})
59+
self.menu = typedict(menu or {})
6060
self.window = Gtk.Window()
6161
self.window.set_border_width(20)
6262
self.window.connect("delete-event", self.close)
@@ -77,15 +77,15 @@ def __init__(self, run_callback=None, can_share=False, xdg_menu=None):
7777
self.entry.set_max_length(255)
7878
self.entry.set_width_chars(32)
7979
self.entry.connect('activate', self.run_command)
80-
if self.xdg_menu:
80+
if self.menu:
8181
# or use menus if we have xdg data:
8282
hbox = Gtk.HBox(homogeneous=False, spacing=20)
8383
vbox.add(hbox)
8484
hbox.add(label("Category:"))
8585
self.category_combo = Gtk.ComboBoxText()
8686
hbox.add(self.category_combo)
8787
index = 0
88-
for i, name in enumerate(sorted(self.xdg_menu.keys())):
88+
for i, name in enumerate(sorted(self.menu.keys())):
8989
self.category_combo.append_text(name)
9090
if name == self.prefs.get("category", ""):
9191
index = i
@@ -133,7 +133,7 @@ def accel_close(*_args) -> None:
133133
def category_changed(self, *args) -> None:
134134
category = self.category_combo.get_active_text()
135135
update_config("category", category)
136-
entries = typedict(typedict(self.xdg_menu.dictget(category, {})).dictget("Entries", {}))
136+
entries = typedict(typedict(self.menu.dictget(category, {})).dictget("Entries", {}))
137137
log("category_changed(%s) category=%s, entries=%s", args, category, entries)
138138
self.command_combo.get_model().clear()
139139
index = -1
@@ -148,7 +148,7 @@ def command_changed(self, *args) -> None:
148148
if not self.entry:
149149
return
150150
category = self.category_combo.get_active_text()
151-
entries = typedict(typedict(self.xdg_menu.dictget(category, {})).dictget("Entries", {}))
151+
entries = typedict(typedict(self.menu.dictget(category, {})).dictget("Entries", {}))
152152
command_name = self.command_combo.get_active_text()
153153
if command_name:
154154
update_config("command", command_name)

xpra/gtk/examples/tray.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def __init__(self):
4747
self.server_encodings_with_quality = []
4848
self.server_encodings_with_speed = []
4949
self.server_start_new_commands = True
50-
self.server_xdg_menu = False
50+
self.server_menu = False
5151
self.server_commands_info = None
5252
self.server_multi_monitors = False
5353
self.server_bandwidth_limit = 0

xpra/net/glib_handler.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def add_packet_handlers(self, defs: dict[str, ServerPacketHandlerType], main_thr
4747
self.add_packet_handler(packet_type, handler, main_thread)
4848

4949
def add_packet_handler(self, packet_type: str, handler: ServerPacketHandlerType, main_thread=False) -> None:
50+
# replace any previously defined handlers:
51+
self.remove_packet_handlers(packet_type)
5052
log("add_packet_handler%s", (packet_type, handler, main_thread))
5153
if main_thread:
5254
handlers = self._authenticated_ui_packet_handlers

xpra/server/source/client_connection.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ def init_state(self) -> None:
9595
self.lock = False
9696
self.client_control_commands: Sequence[str] = ()
9797
self.xdg_menu = True
98+
self.menu = False
9899
self.ssh_auth_sock = ""
99100
# what we send back in hello packet:
100101
self.ui_client = True
@@ -143,7 +144,9 @@ def parse_client_caps(self, c: typedict) -> None:
143144
self.share = c.boolget("share")
144145
self.lock = c.boolget("lock")
145146
self.client_control_commands = c.strtupleget("control_commands")
147+
# `xdg-menu` is the pre v6.4 legacy name:
146148
self.xdg_menu = c.boolget("xdg-menu", False)
149+
self.menu = c.boolget("menu", False)
147150
self.ssh_auth_sock = c.strget("ssh-auth-sock")
148151

149152
def startup_complete(self) -> None:
@@ -280,7 +283,9 @@ def get_features_info(self) -> dict[str, Any]:
280283
info = {
281284
"lock": bool(self.lock),
282285
"share": bool(self.share),
286+
# legacy pre v6.4 name:
283287
"xdg-menu": bool(self.xdg_menu),
288+
"menu": bool(self.menu),
284289
}
285290
return info
286291

xpra/server/subsystem/command.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,25 @@
3434
TERMINATE_DELAY = envint("XPRA_TERMINATE_DELAY", 1000) / 1000.0
3535

3636

37+
def do_send_menu_data(ss, menu) -> None:
38+
if ss.is_closed():
39+
return
40+
if not getattr(ss, "send_setting_change", False):
41+
return
42+
log("do_send_menu_data(%s, %s) %s", ss, Ellipsizer(menu))
43+
if getattr(ss, "menu", False):
44+
# v6.4 and later:
45+
attr = "menu"
46+
elif getattr(ss, "xdg_menu", False):
47+
# legacy name:
48+
attr = "xdg-menu"
49+
else:
50+
# not supported by this connection
51+
return
52+
ss.send_setting_change(attr, menu)
53+
log(f"{len(menu)} menu data entries sent to {ss}")
54+
55+
3756
class ChildCommandServer(StubServerMixin):
3857
"""
3958
Mixin for servers that start subcommands,
@@ -138,7 +157,7 @@ def get_server_features(self, _source) -> dict[str, Any]:
138157
"server-commands-info": not WIN32 and not OSX,
139158
}
140159

141-
def _get_xdg_menu_data(self) -> dict[str, Any] | None:
160+
def _get_menu_data(self) -> dict[str, Any] | None:
142161
if not self.start_new_commands:
143162
return None
144163
assert self.menu_provider
@@ -159,34 +178,24 @@ def add_new_client(self, ss, c: typedict, send_ui: bool, share_count: int) -> No
159178
self.exec_on_connect_commands()
160179

161180
def send_initial_data(self, ss, caps: typedict, send_ui: bool, share_count: int) -> None:
162-
xdg_menu = getattr(ss, "xdg_menu", False)
163-
log(f"send_initial_data(..) {xdg_menu=}")
164-
if not xdg_menu:
181+
menu = getattr(ss, "xdg_menu", False) or getattr(ss, "menu", False)
182+
log(f"send_initial_data(..) {menu=}")
183+
if not menu:
165184
return
166185
# this method may block if the menus are still being loaded,
167186
# so do it in a throw-away thread:
168-
start_thread(self.send_xdg_menu_data, "send-xdg-menu-data", True, (ss,))
187+
start_thread(self.send_menu_data, "send-xdg-menu-data", True, (ss,))
169188

170-
def send_xdg_menu_data(self, ss) -> None:
189+
def send_menu_data(self, ss) -> None:
171190
if ss.is_closed():
172191
return
173-
xdg_menu = self._get_xdg_menu_data() or {}
174-
self.do_send_xdg_menu_data(ss, xdg_menu)
175-
176-
def do_send_xdg_menu_data(self, ss, xdg_menu):
177-
if ss.is_closed():
178-
return
179-
if not getattr(ss, "send_setting_change", False):
180-
return
181-
if not getattr(ss, "xdg_menu", False):
182-
return
183-
ss.send_setting_change("xdg-menu", xdg_menu)
184-
log(f"{len(xdg_menu)} menu data entries sent to {ss}")
192+
menu = self._get_menu_data() or {}
193+
do_send_menu_data(ss, menu)
185194

186-
def send_updated_menu(self, xdg_menu) -> None:
187-
log("send_updated_menu(%s)", Ellipsizer(xdg_menu))
195+
def send_updated_menu(self, menu) -> None:
196+
log("send_updated_menu(%s)", Ellipsizer(menu))
188197
for source in tuple(self._server_sources.values()):
189-
self.do_send_xdg_menu_data(source, xdg_menu)
198+
do_send_menu_data(source, menu)
190199

191200
def get_info(self, _proto) -> dict[str, Any]:
192201
info: dict[Any, Any] = {

xpra/server/subsystem/http.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ def get_info(self, _proto=None) -> dict[str, Any]:
131131
}
132132

133133
def http_menu_request(self, _uri: str) -> HttpResponse:
134-
xdg_menu = self.menu_provider.get_menu_data(remove_icons=True)
135-
return send_json_response(xdg_menu or "not available")
134+
menu = self.menu_provider.get_menu_data(remove_icons=True)
135+
return send_json_response(menu or "not available")
136136

137137
def http_desktop_menu_request(self, _uri: str) -> HttpResponse:
138138
xsessions = self.menu_provider.get_desktop_sessions(remove_icons=True)

0 commit comments

Comments
 (0)