def _handle_gtk_app_menu_change(self): def nomenu(*args): self._updateprop("menu", {}) if not MENU_FORWARDING: nomenu() props = self._get_x11_menu_properties() if len(props)<5: #incomplete nomenu() return menulog("gtk menu properties: %s", props) app_id = props["application-id"] bus_name = props["bus-name"] app_path = props["application-path"] menu_path = props["app-menu-path"] window_path = props["window-path"] def updatemenu(k, v): """ Updates the 'menu' property if the value has changed. Sets the 'enabled' flag if all the required properties are present. """ menu = self._gproperties.get("menu") or {} cv = menu.get(k) if cv==v: return if v is None: try: del menu[k] except: pass else: menu[k] = v enabled = all(menu.get(x) for x in ("application-id", "application-actions", "window-actions", "window-menu")) menu["enabled"] = enabled menulog("menu(%s)=%s", self, menu) self._internal_set_property("menu", menu) updatemenu("application-id", app_id) def app_actions_cb(actions): menulog("application-actions=%s", actions) updatemenu("application-actions", actions) def app_actions_err(err): menulog.error("Error: failed to query %s at %s:", ACTIONS, app_path) menulog.error(" %s", err) updatemenu("application-actions", None) query_actions(bus_name, app_path, app_actions_cb, app_actions_err) def window_actions_cb(actions): menulog("window-actions", actions) updatemenu("window-actions", actions) def window_actions_err(err): menulog.error("Error: failed to query %s at %s:", ACTIONS, window_path) menulog.error(" %s", err) updatemenu("window-actions", None) query_actions(bus_name, window_path, window_actions_cb, window_actions_err) def menu_cb(menu): menulog("window-menu", menu) updatemenu("window-menu", menu) def menu_err(err): menulog.error("Error: failed to query %s at %s:", MENUS, menu_path) menulog.error(" %s", err) updatemenu("window-menu", None) query_menu(bus_name, menu_path, menu_cb, menu_err)
def _handle_gtk_app_menu_change(self): def nomenu(*_args): self._updateprop("menu", {}) if not MENU_FORWARDING: nomenu() props = self._get_x11_menu_properties() if len(props)<5: #incomplete nomenu() return menulog("gtk menu properties: %s", props) app_id = props["application-id"] bus_name = props["bus-name"] app_path = props["application-path"] menu_path = props["app-menu-path"] window_path = props["window-path"] def updatemenu(k, v): """ Updates the 'menu' property if the value has changed. Sets the 'enabled' flag if all the required properties are present. """ menu = self._gproperties.get("menu") or {} cv = menu.get(k) if cv==v: return if v is None: try: del menu[k] except: pass else: menu[k] = v enabled = all(menu.get(x) for x in ("application-id", "application-actions", "window-actions", "window-menu")) menu["enabled"] = enabled menulog("menu(%s)=%s", self, menu) self._internal_set_property("menu", menu) updatemenu("application-id", app_id) def app_actions_cb(actions): menulog("application-actions=%s", actions) updatemenu("application-actions", actions) def app_actions_err(err): menulog.error("Error: failed to query %s at %s:", ACTIONS, app_path) menulog.error(" %s", err) updatemenu("application-actions", None) query_actions(bus_name, app_path, app_actions_cb, app_actions_err) def window_actions_cb(actions): menulog("window-actions", actions) updatemenu("window-actions", actions) def window_actions_err(err): menulog.error("Error: failed to query %s at %s:", ACTIONS, window_path) menulog.error(" %s", err) updatemenu("window-actions", None) query_actions(bus_name, window_path, window_actions_cb, window_actions_err) def menu_cb(menu): menulog("window-menu", menu) updatemenu("window-menu", menu) def menu_err(err): menulog.error("Error: failed to query %s at %s:", MENUS, menu_path) menulog.error(" %s", err) updatemenu("window-menu", None) query_menu(bus_name, menu_path, menu_cb, menu_err)
def query_menuactions(app_id, bus_name, app_path, app_actions_cb, app_actions_err, window_path, window_actions_cb, window_actions_err, menu_path, menu_cb, menu_err): if not (menu_path and window_path and app_path and bus_name and app_id): log.error("Error: some properties are missing - cannot continue") return from xpra.dbus.gtk_menuactions import query_actions, query_menu aa = query_actions(bus_name, app_path, app_actions_cb, app_actions_err) wa = query_actions(bus_name, window_path, window_actions_cb, window_actions_err) am = query_menu(bus_name, menu_path, menu_cb, menu_err) return (aa, wa, am)