投稿

3月, 2017の投稿を表示しています

Gtk3のキーリストとキーボードショートカットの多重設定

イメージ
Gtk3のキーリストとキーボードショートカットの多重設定

ベクター・グラフィックス・エディタ Vecterionのコーディング作業中に得た知見です。

1. Gtkのキーリストはソースコードを参照。Webからも見れる。
2. Gtkのキーボードショートカットは別のキーで同じ関数を呼び出す設定ができる。






# 事の発端 Plus(+),Minus(-)KeyはキーボードとTenKeyの両方にあるが、キーコードが異なるためGtk内部では別のキーとして扱っている。
Vecterionではこれらを区別しないで、両方のキーに同じアクセラレータ(GtkのMenu連動キーボード・ショートカット機能)を紐付けたい。


# GTKキーボード定数値一覧 GTK(GDK)のキーボード定数と定数値の一覧は以下
//! key list: https://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h


## キーボード定数値を検索する方法 アプリケーションでGtkコールバックのkeyvalを取得し、実際に押下して16進数値でデバッグ出力して上記の一覧を検索するとよいです。

```
debug: _cb_key_press()[98]: keyval=0x002b status=0x0005
debug: slot_et_etaion_from_key_action()[270]: no use:43

debug: _cb_key_press()[98]: keyval=0xffab status=0x0000
debug: slot_et_etaion_from_key_action()[270]: no use:65451
```

# 2重のキーボード・ショートカット TenKeyとキーボードのPlus(+),Minus(-)Keyは内部的には別のキーですが、両方のキーにそれぞれ、同じ関数を呼ぶショートカットを設定してやると、ユーザは両方とも同じキーとして扱えるので混乱しないと思います。

```
1846 ¬
1847 static GtkWidget *_pv_get_menuitem_new_tree_of_view_zoom(GtkAccelGroup *accel_group)¬
1848 {¬
1849 >-------GtkWidget *m…