by roundabout, Tuesday, 6 October 2026, 14:41:09 (1791297669), pushed by roundabout, Tuesday, 6 October 2026, 14:41:12 (1791297672)
Author identity: Vlad <vlad.muntoiu@gmail.com>
dab43866ec279d33899a553aca5cfe741266a7d7
main.py
@@ -118,8 +118,8 @@ class SwipeButton(Gtk.Frame):
def central(self):
pass
@GObject.Signal(arg_types=(int,))
def drag_changed(self, zone):
@GObject.Signal(arg_types=(int, bool))
def drag_changed(self, zone, first):
pass
def __init__(self, **kwargs):
@@ -161,11 +161,11 @@ class SwipeButton(Gtk.Frame):
if new_zone != self.zone:
self.zone = new_zone
self.emit("drag_changed", self.zone)
self.emit("drag_changed", self.zone, False)
def begin_drag(self, gesture, start_x, start_y):
self.zone = GestureZone.CENTRAL
self.emit("drag_changed", GestureZone.CENTRAL)
self.emit("drag_changed", GestureZone.CENTRAL, True)
class SwipeTyper(SwipeButton):
@@ -177,16 +177,18 @@ class SwipeTyper(SwipeButton):
for label in self.label_map.values():
label.remove_css_class("kineboard-selected-character")
def underline(self, zone):
if self.depress_feedback:
self.depress_feedback.trigger_feedback()
def underline(self, zone, first):
fb = self.depress_feedback if first else self.change_feedback
if fb:
fb.trigger_feedback()
for label in self.label_map.values():
label.remove_css_class("kineboard-selected-character")
self.label_map[zone].add_css_class("kineboard-selected-character")
def __init__(self, tl, tr, bl, br, c, depress_feedback, release_feedback, **kwargs):
def __init__(self, tl, tr, bl, br, c, depress_feedback, change_feedback, release_feedback, **kwargs):
SwipeButton.__init__(self, **kwargs)
self.depress_feedback = depress_feedback
self.change_feedback = change_feedback
self.release_feedback = release_feedback
self.tl = tl
self.tr = tr
@@ -221,16 +223,18 @@ class SwipeTyper(SwipeButton):
class Plane(Gtk.Grid):
def __init__(self, app, data, depress_feedback, release_feedback, **kwargs):
def __init__(self, app, data, depress_feedback, change_feedback, release_feedback, **kwargs):
Gtk.Grid.__init__(self, **kwargs)
self.app = app
self.depress_feedback = depress_feedback
self.change_feedback = change_feedback
self.release_feedback = release_feedback
self.all_characters = ""
for j, column in enumerate(data):
for k, key in enumerate(column):
widget = SwipeTyper(key["top_left"], key["top_right"], key["bottom_left"],
key["bottom_right"], key["central"], self.depress_feedback, self.release_feedback)
key["bottom_right"], key["central"], self.depress_feedback,
self.change_feedback, self.release_feedback)
widget.connect("typed", self.app.typed)
self.attach(widget, k, j, 1, 1)
self.all_characters += key["top_left"] + key["top_right"] + key["bottom_left"] + key["bottom_right"] + key["central"]
@@ -343,6 +347,7 @@ class Kineboard(Gtk.Application):
flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE
)
self.depress_feedback = None
self.change_feedback = None
self.release_feedback = None
self.xkb_context = xkb.Context()
self.revealer = None
@@ -392,11 +397,10 @@ class Kineboard(Gtk.Application):
def do_startup(self):
Gtk.Application.do_startup(self)
register_client("sm.puri.OSK0")
self.depress_feedback = None
self.release_feedback = None
if Lfb:
Lfb.init("sm.puri.OSK0")
self.depress_feedback = Lfb.Event.new("key-pressed")
self.change_feedback = Lfb.Event.new("key-changed")
self.release_feedback = Lfb.Event.new("key-released")
self.display = Gdk.Display.get_default()
self.window = Gtk.Window(application=self, title="Demo", focus_on_click=False, focusable=False, can_focus=False)
@@ -482,6 +486,7 @@ class Kineboard(Gtk.Application):
column_homogeneous=True, margin_bottom=8,
margin_end=8, margin_start=8,
depress_feedback=self.depress_feedback,
change_feedback=self.change_feedback,
release_feedback=self.release_feedback)
self.all_characters += grid.all_characters
stack.add_named(grid, f"plane-{i}")