From d615fce574e871e0926bdc3cc5dac2f9c24d7e16 Mon Sep 17 00:00:00 2001 From: gryf Date: Mon, 2 Oct 2023 17:09:55 +0200 Subject: [PATCH] Added keyboard navigation on treeview --- gtkpass.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gtkpass.py b/gtkpass.py index b31bc68..9fec847 100755 --- a/gtkpass.py +++ b/gtkpass.py @@ -4,9 +4,11 @@ import signal import subprocess import gi +gi.require_version('Gdk', '3.0') gi.require_version('Gtk', '3.0') gi.require_version('Pango', '1.0') from gi.repository import GLib +from gi.repository import Gdk from gi.repository import Gtk from gi.repository import Pango import yaml @@ -16,6 +18,7 @@ XDG_CONF_DIR = os.getenv('XDG_CONFIG_HOME', os.path.expanduser('~/.config')) class GTKPass(Gtk.Window): + def __init__(self): Gtk.Window.__init__(self, title="GTKPass") @@ -69,6 +72,7 @@ class GTKPass(Gtk.Window): self.ts_filter.set_visible_column(0) self.treeview = Gtk.TreeView(model=self.ts_filter) self.treeview.set_headers_visible(False) + self.treeview.connect("key-release-event", self.on_treeview_keypress) icon_renderer = Gtk.CellRendererPixbuf() text_renderer = Gtk.CellRendererText() @@ -275,6 +279,14 @@ class GTKPass(Gtk.Window): break self._set_visible(self.grid, True) + def on_treeview_keypress(self, treeview, event): + # expand current branch on right cursor key or enter/return + if (event.keyval in (Gdk.KEY_Right, Gdk.KEY_Return) and + treeview.get_cursor()[0]): + treeview.expand_row(treeview.get_cursor()[0], False) + # collapse row under cursor on left cursor key + if event.keyval == Gdk.KEY_Left and treeview.get_cursor()[0]: + treeview.collapse_row(treeview.get_cursor()[0]) class Leaf: