Hi, I’m trying to get this idea working in order to implement CSD in Electron. A WindowHandle with WindowControls is put into an Overlay alongside the window contents. The intention is to pass single clicks through the handle to the contents. Details apart, I have this POF code that mostly works:
import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def activate(app): win = Gtk.ApplicationWindow(application=app) button = Gtk.Button(label="Click me") button.connect("clicked", lambda *_: print("Clicked")) ctrls = Gtk.WindowControls(side=Gtk.PackType.END) ctrls.set_halign(Gtk.Align.END) handle = Gtk.WindowHandle() handle.set_valign(Gtk.Align.START) handle.set_child(ctrls) gesture = Gtk.GestureClick() gesture.connect("released", lambda *_: button.emit("clicked")) handle.add_controller(gesture) over = Gtk.Overlay() over.add_overlay(button) over.add_overlay(handle) win.set_child(over) win.show() app = Gtk.Application() app.connect("activate", activate) app.run()
But I’m unable to solve the following problem: when I get a press/release event it might be the only one in a single click sequence or it might be the first one in a double click sequence, since double clicks are claimed by WindowHandle my controller never gets them and it’s not able to tell one situation from the other. At first I thought that handling “stopped” signals instead would help, but at that point my handler doesn’t get the n_press argument. So I’m quite lost at this point.