Skip to content

Commit

Permalink
[App] Removed collection of top level menus for more stability
Browse files Browse the repository at this point in the history
  • Loading branch information
gonzaarcr committed Apr 29, 2021
1 parent eeeec25 commit 8cd073e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 57 deletions.
40 changes: 3 additions & 37 deletions fildem/menu_model/menu_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def get_results(self):
for menu in results:
self.results[(menu[0], menu[1])] = menu[2]

# self.collect_entries()
self.collect_entries()

def collect_entries(self, menu=(0, 0), labels=[]):
section = (menu[0], menu[1])
Expand Down Expand Up @@ -111,17 +111,6 @@ def describe(self, action):
checked = description[2]
return enabled, checked

def get_top_level_menus(self):
if not len(self.results):
return []

section = (0, 0)
while len(self.results[section]) == 1 and ':section' in self.results[section][0]:
section = self.results[section][0][':section']
menus = self.results[section]
menus = list(map(lambda x: x.get('label', ''), menus))
return menus


class DbusAppMenu(object):

Expand Down Expand Up @@ -172,25 +161,10 @@ def get_results(self):
if self.interface:
self.results = self.interface.GetLayout(0, -1, dbus.Array(signature="s"))
try:
self.top_level_menus = self.collect_top_level_menus(self.results[1])
self.collect_entries(self.results[1])
except Exception:
pass

def collect_top_level_menus(self, item):
"""
A reduced version of collect_entries to make it more responsive.
Only collect the first level of menus to show immediately.
"""
top_level_menus = []
item_id = item[0]
# self.interface.AboutToShow(item_id)
# self.interface.Event(item_id, 'opened', 'not used', dbus.UInt32(time.time()))
item = self.interface.GetLayout(item_id, -1, dbus.Array(signature="s"))[1]
if len(item[2]):
for c in item[2]:
top_level_menus.append(c[1].get('label', ''))
return top_level_menus

def collect_entries(self, item=None, labels=None):
if self.results is None:
return
Expand All @@ -203,10 +177,7 @@ def collect_entries(self, item=None, labels=None):

if 'children-display' in item[1]:
item_id = item[0]
try:
self.interface.AboutToShow(item_id)
except Exception:
pass
self.interface.AboutToShow(item_id)
self.interface.Event(item_id, 'opened', 'not used', dbus.UInt32(time.time()))
item = self.interface.GetLayout(item_id, -1, dbus.Array(signature="s"))[1]

Expand All @@ -220,8 +191,3 @@ def collect_entries(self, item=None, labels=None):
elif bool(menu_item.label) or menu_item.separator:
self.actions[menu_item.text] = menu_item.action
self.items.append(menu_item)


def get_top_level_menus(self):
return self.top_level_menus

29 changes: 9 additions & 20 deletions fildem/utils/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,33 +111,22 @@ def _retry_init(self):
self.retry_timer_id = 0
self._init_window()

def _add_retry(self):
def _update_menus(self):
self.gtkmenu.get_results()
if not len(self.gtkmenu.items):
self.appmenu.get_results()

N = 2 # Amount of tries
if self.tries < N and not len(self.items):
self.tries += 1
self.retry_timer_id = GLib.timeout_add_seconds(2, self._retry_init)

def collect_entries(self):
def collect():
self.collect_timer = 0
self.gtkmenu.collect_entries()
self.appmenu.collect_entries()

self.collect_timer = GLib.timeout_add(200, collect)

def _update(self):
self.gtkmenu.get_results()
top_level_menus = self.gtkmenu.get_top_level_menus()
if not len(top_level_menus):
self.appmenu.get_results()
top_level_menus = self.appmenu.get_top_level_menus()

if not len(top_level_menus):
self._add_retry()
else:
self.collect_entries()
self._send_msg(top_level_menus)
self._update_menus()
top_level_menus = map(lambda it: it.path[0] if len(it.path) else None, self.items)
top_level_menus = list(filter(None, dict.fromkeys(top_level_menus)))
self._handle_shortcuts(top_level_menus)
self._send_msg(top_level_menus)

def _send_msg(self, top_level_menus):
if len(top_level_menus) == 0:
Expand Down

0 comments on commit 8cd073e

Please sign in to comment.