diff --git a/woman/help.py b/woman/help.py index e1df6319bb7a841689881383bea59d89ff8ce955..d50ae5e6c91460f1389f53fe7742d17605ccab5b 100644 --- a/woman/help.py +++ b/woman/help.py @@ -116,6 +116,12 @@ s<id/workspace> - swap current workspace with window/container/workspace d<workspace> - move current workspace to workspace d<id><key> - move current workspace near to container (see `m`) e<master> - exchange (swap) whole current master with specified +r - reload all screenshots by jumping from workspace to workspace +w - reload only screenshots on workspace without actual screenshot + You can combine r and w with following modifiers: + SHIFT - spend long time on each workspace + CTRL - short time + CTRL+SHIFT - extra long time Shortcuts in search bar (input mode): diff --git a/woman/qt.py b/woman/qt.py index b0e9d4b271238b5220849fd05d2e81749f81fcf8..42fdc8b26c906bce0937862d0b5a1405d772fcf1 100755 --- a/woman/qt.py +++ b/woman/qt.py @@ -30,6 +30,7 @@ from contextlib import contextmanager from woman.shared import * from woman.lib import * import woman.help as help +import woman.watch as watch from woman.constants import * from woman.qt_util import * @@ -106,11 +107,14 @@ def qt_main(): @func_add def screenshot_and_goto(n_master, n_slave, master, slave): + if m_win.job_load_screenshots is not None: + m_win.job_load_screenshots.cancel() qt_workspace_widget_func(master, slave, lambda x: x.make_screenshot()) shared.i3_cmd(f'workspace {workspace(n_master, n_slave)}') if (n_master, n_slave) == GUI_WORKSPACE: m_win.move_to_gui_workspace() + @func_add def screenshot(master, slave): qt_workspace_widget_func(master, slave, lambda x: x.make_screenshot()) @@ -917,6 +921,19 @@ def qt_main(): await qt_job_wait_ms(time_ms) self.load_i3_tree() + job_load_screenshots = None + @QtJobDecorator + async def load_screenshots(self, time_ms=100, only_old=False): + with watch.disable_on_workspace_focus_context(): + for ((master, slave),w) in self._workspaces.items(): + if w.exist: + if not only_old or w.screenshot_is_old: + w.focus() + await qt_job_wait_ms(time_ms) + w.make_screenshot() + shared.i3_cmd(f'workspace {workspace(*GUI_WORKSPACE)}') + await qt_job_wait_ms(50) + def set_screenshot_size(self, val): self.screenshot_size = val for i in self._workspaces.values(): @@ -1061,8 +1078,8 @@ def qt_main(): if key not in MOD_KEYS: self.cmd_msg_clean() - - + if self.job_load_screenshots is not None: + self.job_load_screenshots.cancel() async def get_container_or_workspace(filter=lambda x: True, pre_filter=lambda x: True, get_workspace=True): master = self.focused_master @@ -1216,6 +1233,12 @@ def qt_main(): self.load_i3_tree() self.cmd_msg("OK") + def mod_to_load_screenshots_time(mod): + if mod == SHIFT: return 400 + if mod == int(CTRL | SHIFT): return 800 + if mod == CTRL: return 50 + return 100 + async def keyPressEvent_main(key, mod): if mod == 0 and self.get_continuing_key is not None and key == ESCAPE: self.end_get_continuing_key() @@ -1300,6 +1323,10 @@ def qt_main(): elif mod == 0 and key == ord('T'): m_win.end_get_continuing_key() self.load_i3_tree() + elif key == ord('R'): + self.job_load_screenshots = self.load_screenshots(mod_to_load_screenshots_time(mod)) + elif key == ord('W'): + self.job_load_screenshots = self.load_screenshots(mod_to_load_screenshots_time(mod), only_old=True) elif mod == 0 and key == ord('O'): self.focused_widget.move_to_otput() elif mod == 0 and key == ord('Z'):