いつになるのか懸念はあったものの、なんとか完了した 。
バージョン 2.8 系からの違いはというと、主に GIO による一部実装の書き換え、freedesktop.org の Startup Notification をサポートした起動通知
用 API と、マウスとキー・イベントを模擬したテスト用API の追加など。
いろいろな OS のバックエンド向けに共通な API を提供している GDK だけど、それぞれのプログラミングの違いがいくつかあるので GDK だけで楽しめる実装になっている。リファレンスマニュアルもXプログラミングに対する詳細な仕様や条件などが網羅されているので「なるほど」といったトピックスが多いです。
GDK リファレンスマニュアル: v2.14.7 版の API リファレンス
SVN リポジトリ: GDK リファレンスマニュアルの SVN リポジトリ (英文併記)
誤植/誤訳の報告はメールの他にこちらにて。
Including MOD1 in the virtual modifier mapping again.
こちらでストリームした、GTK+ のバージョン 3.2.2 から「Meta キーが効かなくなった件」、バージョン 2.24.8 にアップグレードした時も同じような現象になってしまったので、ちょっとまじめに調査してみた。
とはいえ、そんなに苦労せずとも gtk-devel のメーリングリストの中からすんなり糸口が出てきた。昨年の10月に「Exclude MOD1 from the virtual modifier mapping」にあるような提案がされて、GTK+2/3の両方にあっさり適用されていた。
どうも、GTK+ではデフォルトで Alt キーを MOD1 (Super とか Hyper とか Meta といった仮想的な修飾キー) として扱うような実装になっているが、修飾キーとしてマッピングされない SHIFT や Ctrl キー同様に、MOD1 も仮想修飾キーの対象外にしようとかいうものらしい。とはいっても、これは GDK のバックエンドが X11 の時だけだけど。そういうことで、
$ xmodmap -pm (...) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) (...)
な環境だと 左 Alt キーが割り当てられている MOD1 はパースの対象外のため修飾キーの効果がないようだ。
で、いろいろキーのマッピングを変更してみたんだけど効果がなく面倒なので、再び MOD1もパースに含めるようにした。実際には gdk_keymap_*_virtual_modifier() の関数でパース処理を前の実装に戻しただけ:
diff -Nur -x '*.orig' -x '*~' gtk+3.0-3.2.3~/gdk/x11/gdkkeys-x11.c gtk+3.0-3.2.3/gdk/x11/gdkkeys-x11.c --- gtk+3.0-3.2.3~/gdk/x11/gdkkeys-x11.c 2011-12-19 22:58:28.000000000 +0900 +++ gtk+3.0-3.2.3/gdk/x11/gdkkeys-x11.c 2012-01-07 23:38:10.000129973 +0900 @@ -1489,12 +1489,13 @@ keymap = GET_EFFECTIVE_KEYMAP (keymap); keymap_x11 = GDK_X11_KEYMAP (keymap); - /* See comment in add_virtual_modifiers() */ - for (i = 4; i < 8; i++) + for (i = 3; i < 8; i++) { if ((1 << i) & *modifiers) { - if (keymap_x11->modmap[i] & GDK_SUPER_MASK) + if (keymap_x11->modmap[i] & GDK_MOD1_MASK) + *modifiers |= GDK_MOD1_MASK; + else if (keymap_x11->modmap[i] & GDK_SUPER_MASK) *modifiers |= GDK_SUPER_MASK; else if (keymap_x11->modmap[i] & GDK_HYPER_MASK) *modifiers |= GDK_HYPER_MASK; @@ -1514,16 +1515,12 @@ keymap = GET_EFFECTIVE_KEYMAP (keymap); keymap_x11 = GDK_X11_KEYMAP (keymap); - /* This loop used to start at 3, which included MOD1 in the - * virtual mapping. However, all of GTK+ treats MOD1 as a - * synonym for Alt, and does not expect it to be mapped around, - * therefore it's more sane to simply treat MOD1 like SHIFT and - * CONTROL, which are not mappable either. - */ - for (i = 4; i < 8; i++) + for (i = 3; i < 8; i++) { if ((1 << i) & *state) { + if (keymap_x11->modmap[i] & GDK_MOD1_MASK) + *state |= GDK_MOD1_MASK; if (keymap_x11->modmap[i] & GDK_SUPER_MASK) *state |= GDK_SUPER_MASK; if (keymap_x11->modmap[i] & GDK_HYPER_MASK) @@ -1592,8 +1589,7 @@ { if (*state & vmods[j]) { - /* See comment in add_virtual_modifiers() */ - for (i = 4; i < 8; i++) + for (i = 3; i < 8; i++) { if (keymap_x11->modmap[i] & vmods[j]) {
以下、GTK+のバージョン毎のパッチ:
- GTK+ バージョン2系
- GTK+ バージョン3系
ちなみに GDK のキーマップの機能についてはリファレンスマニュアルが参考になる (丁度、翻訳していたところだったんだけど)。
GDK Ref. translation (TAKE 2).
GDK Ref. translation.
これの作業で保留になっていた翻訳を再開し、一部をアップロードしておいた。まだまだ1/3程度で、年内に完了できるかかなりあやしくなってきた 。
年を越すとなると、GTK 分の完成は再来年の2013年くらいになりそうだが 。
今アクティブな作業として、他には gobject-introspection 関連のドキュメント翻訳とか、obsoleted なライブラリ (libgnome 系) をふんだんに使っている GPass を GTK+ で書き直すとか。
手を広げすぎるときつい歳になってきた。
GDK リファレンスマニュアル: v2.14.7 版の API リファレンス
SVN リポジトリ: GDK リファレンスマニュアルの SVN リポジトリ (英文併記)
誤植/誤訳の報告はメールの他にこちらにて。
GNOME 3.2.0 was released.
# タイトル間違えていました × GNOME 3.20 ○ GNOME 3.2.0
前回はかなり痛い目にあったのだけれど、バージョン 3.2 のリリースから遅れること2週間、なんとか全てのモジュールをビルド・インストールし終わったら、なかなか良い具合の仕上がりになっていて正直驚いた。RCの時ホントにリリースに耐えうるものなのだろうかと、バージョン 1.2 以来味わったことのない疑心暗鬼に包まれていたのだけど。
- Evolution: なんと言ってもうれしいのは、Evolution がメモリ・リーク絡みで落ちることがほぼ無くなったということ
。RC 版からかなり Polished Up されていた。さらにうれしいのが仮想フォルダにある未読のメールの処理が正常になったことか。RC 前までは未読から既読にマークする度に更新されて (未読ではなくなったので当然ながら) 表示されなくなっていたのだけれど、これがちゃんとフォルダ全体が更新されるまで残ったままになってくれていた。というか、やっと普通の状態に戻っただけのことだけど
。
- GNOME Shell は拡張機能 (gnome-shell-extensions) がリリースされてやっと使えるようになったことと、アクティビティ・モードにすると全てのワークスペースにあるウィンドウのサムネイルがいびつに重なり合って表示される現象がなくなった。拡張機能を限定しているのでメモリリークも少なくて良し。Empathy との連携も修正されて、ステータスが正しく連動するようになった。ただ、なぜかコントロールセンターへの統合が中止になっていた。まぁどっちでもいいけども
- Alt+TABキーの挙動も変更されて、GNOME 2 系から継承していたウィンドウの切り替えの他にいくつかのモードが追加されていた。これがキーボード派にはかなり使いづらく、以前のように直前のウィンドウとのトグルができないのがストレスだったが、リリース版になってやっとできるようになった (これはワークスペース&アイコンモード):
ということで今使っているデスクトップはこんな感じ:
使っているテーマは、GNOME Shellがデフォルトの Adwaita (今のところ、これが一番軽量)、ウィンドウと GTK+ のテーマは、GNOME 3.0 以来使っている Zukitwo Shell テーマ・パック。こないだバージョン 3.2 にも対応し、今も daily でいろいろアップデートされているようだ。
自分はめったに背景をネイチャー系にすることはないのだけれど、最近の gnome-backgrounds にはセンスのよい作品が多いので、こちらを選択した。
アプリのランチャがのっている GNOME Shell のドックはやはり使い勝手がよくないので、Docky は必須。
GNOME Shell の拡張機能の中では Applications Menu と Workspace Indicateor はこれまた必須。後者はワークスペース名の上でホィールを回すだけでも切り替えが可能。
なんかどっかのOSに見た目は似ているようだけど、それは外観だけ。キーボードの操作性は全然こっちの方が上 。
最後に、今 GNOME 3.0 を使っているならば ASAP で 3.2 にあげた方が良いです。