試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Xfce4とLXDEの将来のデスクトップ環境としてのGTK+ 3対応について(2012年4月時点)

Xfce4とLXDEの2つのデスクトップ環境において、デスクトップ環境を構成するデスクトップやパネル,ファイルマネージャやその他の各種デスクトップ環境付属のアプリケーションなどに用いられるGUIツールキットにバージョン3系のGTK+が将来的に用いられることになるのかどうかについてを調べてみた。
GTK+ 3のテーマについては、「GTK+ 2を使用したデスクトップ環境などにおけるGTK+ 3のテーマ設定について」で扱ったように、現行(2012年4月時点)のGTK+ 2向けのXfce4やLXDEでも指定することはできる。バージョン3系のGTK+に対応した後はデスクトップ環境上でGTK+ 3のテーマが指定可能になる。

  1. Xfce4: バージョン4.12系で対応? 次期バージョンでの対応を予定
  2. LXDE: 一部対応済み? 将来的には対応する方向に見えるが対応時期は不透明
    1. 例: 軽量画像ビューアGPicViewの対応状況(バージョン0.2.2時点)

Xfce4: バージョン4.12系で対応? 次期バージョンでの対応を予定

バージョン4.10系が2012年春にリリースされることになっているが、このバージョン4.10系ではデスクトップ環境とその中のアプリケーションにはバージョン2系のGTK+が使用される。
GTK+ 3は、これよりも後のバージョン(4.12系以上)で使用されることになる予定。中心開発者の一人が「GTK+のバージョンが上がっただけでは5.0にはならない」とコメントしているため、デスクトップ環境の機能に大きな変化がなければバージョン4系の中でGTK+ 3への対応が行われる見通し。ただ、「GTK+ 3対応と同時にデスクトップ環境の機能も大幅に新しくしてバージョン系統も上げる」といった形も考えられなくはないので、実際に次期バージョンの計画が出てきてみないと分からない部分もある。確実なのは「バージョン4.10系よりも後になってからGTK+ 3への対応が予定されている」ということのみ。

LXDE: 一部対応済み? 将来的には対応する方向に見えるが対応時期は不透明

LXDE幾つかのプログラムではGTK+ 3向けの対応作業が一部行われており、こちらも将来的にはバージョン3系のGTK+が用いられるようになるものと思われる。ただし、LXDE全体もしくは一部のソフトウェアに関して、GTK+ 3への対応が完了する具体的な時期やそれに至るまでのロードマップといったものは見当たらない。
LXDEウェブログには幾つかのパッケージの変更点一覧にGTK+ 3関係の変更点が載っており、対応作業が行われていることは分かるが、それ以上の情報は得られない。また、開発自体もXfce4よりもかなり緩やかなペースで進んでいる印象がある。

例: 軽量画像ビューアGPicViewの対応状況(バージョン0.2.2時点)
GPicViewには--enable-gtk3というオプションがconfigureスクリプトに存在し、GTK+ 3を対象としてビルドをすることができるが

[gpicview-0.2.2]$ ./configure --enable-gtk3
(出力は略)
[gpicview-0.2.2]$ LC_MESSAGES=C make V=1
make  all-recursive
make[1]: Entering directory `/tmp/work/gpicview-0.2.2'
Making all in src
make[2]: Entering directory `/tmp/work/gpicview-0.2.2/src'
gcc -DHAVE_CONFIG_H -I. -I..   -pthread -DGSEAL_ENABLE -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gtk-3.0    -I.. -DPACKAGE_DATA_DIR=\""/usr/local/share"\" -DPACKAGE_LOCALE_DIR=\""/usr/local/share/locale"\"    -g -O2 -DENABLE_GTK3 -MT main-win.o -MD -MP -MF .deps/main-win.Tpo -c -o main-win.o main-win.c
main-win.c: In function ‘main_win_init’:
main-win.c:195:9: error: ‘GtkAdjustment’ has no member named ‘page_increment’
main-win.c:198:9: error: ‘GtkAdjustment’ has no member named ‘page_increment’
main-win.c: In function ‘main_win_fit_window_size’:
main-win.c:563:38: error: ‘GtkWidget’ has no member named ‘allocation’
main-win.c:563:68: error: ‘GtkWidget’ has no member named ‘allocation’
main-win.c: In function ‘on_zoom_fit’:
main-win.c:606:14: error: ‘GtkToggleButton’ has no member named ‘active’
main-win.c: In function ‘on_orig_size’:
main-win.c:639:14: error: ‘GtkToggleButton’ has no member named ‘active’
main-win.c: In function ‘on_button_press’:
main-win.c:983:42: error: ‘GtkWidget’ has no member named ‘window’
main-win.c: In function ‘on_mouse_move’:
main-win.c:1018:29: error: ‘GtkAdjustment’ has no member named ‘page_size’
main-win.c:1021:25: error: ‘GtkAdjustment’ has no member named ‘lower’
main-win.c:1022:25: error: ‘GtkAdjustment’ has no member named ‘lower’
main-win.c:1023:31: error: ‘GtkAdjustment’ has no member named ‘page_size’
main-win.c:1023:50: error: ‘GtkAdjustment’ has no member named ‘upper’
main-win.c:1024:25: error: ‘GtkAdjustment’ has no member named ‘upper’

(中略)

main-win.c:1417:9: error: ‘GDK_A’ undeclared (first use in this function)
main-win.c:1419:9: error: ‘GDK_Delete’ undeclared (first use in this function)
main-win.c:1421:9: error: ‘GDK_P’ undeclared (first use in this function)
main-win.c:1424:9: error: ‘GDK_Q’ undeclared (first use in this function)
main-win.c: In function ‘on_drag_data_received’:
main-win.c:1514:23: error: dereferencing pointer to incomplete type
main-win.c:1514:23: error: request for member ‘length’ in something not a structure or union
make[2]: *** [main-win.o] Error 1
make[2]: Leaving directory `/tmp/work/gpicview-0.2.2/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/work/gpicview-0.2.2'
make: *** [all] Error 2

のようになって失敗した。
「error: ‘[型の名前]’ has no member named ‘[メンバとして指定されている名前]’」の形式のエラーは、C言語GTK+のプログラムを記述する上で

[オブジェクト]->[内部のメンバ]

の形でアクセサ関数(「[クラス]_get_[メンバ]」形式・gtk_toggle_button_get_active()など)を用いずに内部のメンバを直接読み書きする書き方がされていることによる。
バージョン3系のGTK+ではこうした書き方はせずにアクセサ関数(もしくは相当するGObjectプロパティ)を使用することが求められており、バージョン0.2.2のGPicViewではこの対処がされていない。「GTK_A」などに関係したエラーについては、押されたキーを示すマクロがバージョン3系のGTK+で変更されているためにこれを新しい形式に合わせるか、代わりに一時しのぎとしてgdk/gdkkeysyms-compat.hを用いるかする必要がある。
更に、上記2件の他にもimage-view.cにエラーの原因が色々とある(ここでは詳しく扱わないが、こちらのほうが面倒?)。
2012年4月時点ではgit://lxde.git.sourceforge.net/gitroot/lxde/gpicviewから最新のソースを取得してもエラーメッセージは同じように出るため、バージョン0.2.2から後にGTK+ 3関係の修正は入っていないように見える。

関連URL:

使用したバージョン: