focus-on-click

GTK+ 3.20 には focus-on-click という便利な property が追加された。
その名のとおり mouse で click した直後に focus を得るかの指定。

GUI アプリを作っている人なら泣いて喜ぶレベルのプロパティです。
実は我がアプリは GtkShortcutWindow よりもコレがあるから 3.20 仕様にした。

だって Y901x でも mouseup シグナルで親ウインドウにフォーカスを逃がすとか…
マジで GUI アプリを作っている人”だけ”が解る待望のシロモノ。
細かい説明は省略、GUI アプリを本気で作れば必ず問題になることだし。
意味不明なら…御察し。

使い方は簡単。

//Gjs
let button = new Gtk.Button({focus_on_click: false});

# Python
button = Gtk.Button(focus_on_click=False)

でフォーカスを持たないボタンの完成。

Gjs, PyGObject 共に同じように書ける。

筆者の説明が悪かったのかプロパティは作成時の引数で全部指定できる。
勘違いした人を検索で多々見つける気がするんですけど。

devhelp での *.new のメソッドを使うなら *_new の引数を全部指定。
ソレを使わないなら Gjs は json にてプロパティを指定。
PyGObject はデフォルト引数にてプロパティを指定できる。
指定しなかったプロパティはデフォルトが適用される。

GtkBox が一番解りやすいかな。

#vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

この 2 つはまったく同じ結果になる。
GtkBox は GtkOrientable をインプリメントしている。
GtkOrientable のプロパティをまんま利用できるというわけです。

余計に解り辛くする説明かもだけど。