2020-06-30

【備忘録】廃止されていた GtkStock

Vala は GObject を利用した C 言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語です。C# に似た構文を持ち、無名関数シグナルプロパティジェネリクスメモリ管理例外処理型推論、および、for-each など、C 言語にはない言語仕様を持っています。

Wikipedia より引用・編集

PyGObject で GUI サンプルを作りためていたので、Vala 用に書き直しています。Vala 用にダイアログのサンプルを作り直してビルドしたときに、ちょっと困った警告が出たので備忘録にしました。

本ブログ記事では下記の OS 環境で動作確認をしています。

Fedora 32 (Workstation Edition) x86_64

PyGObject のダイアログのサンプルは下記のとおりです。

gtk_dialog.py
gtk_dialog.py の実行例

Vala でも(ちょっと手を抜いてはいますが)同じように記述できます。

gtk_dialog.vala

このコードを実行しようとすると、ビルド、実行はできるものの、下記のような警告が出ます。

$ ./gtk_dialog.vala --pkg gtk+-3.0
/tmp/gtk_dialog.vala.PPEXM0.c: 関数 ‘my_dialog_on_clicked’ 内:
/tmp/gtk_dialog.vala.PPEXM0.c:134:2: 警告: ‘GtkStock’ は廃止されました [-Wdeprecated-declarations]
  134 |  _tmp0_ = (GtkDialog*) gtk_dialog_new_with_buttons ("ダイアログ", (GtkWindow*) self, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL, NULL);
      |  ^~~~~~
/tmp/gtk_dialog.vala.PPEXM0.c:134:2: 警告: ‘GtkStock’ は廃止されました [-Wdeprecated-declarations]
/tmp/gtk_dialog.vala.PPEXM0.c:137:9: 警告: assignment to ‘GtkBox *’ {aka ‘struct _GtkBox *’} from incompatible pointer type ‘GtkWidget *’ {aka ‘struct _GtkWidget *’} [-Wincompatible-pointer-types]
  137 |  _tmp1_ = gtk_dialog_get_content_area (dialog);
      |         ^
$ 
gtk_dialog.vala の実行例

GtkStock は、メニューやツールバーなどで共通で使用する「開く」や「終了する」といったアイテムの ID を扱っています。しかし、参考サイト [1] によると、GTK 3.10 より Stock は廃止されたとあります。Fedora 32 で使用している GTK+ は 3.24 ですので、ずいぶん前から廃止されていることになりますが、PyGObject では警告が出なかったので気が付きませんでした。💦

Since GTK+ 3.10, stock items are deprecated. You should instead set up whatever labels and/or icons you need using normal widget API, rather than relying on GTK+ providing ready-made combinations of these.

今後のことを考えると、いつでも使えるやり方を確立したいので、代替案を探索しています。

参考サイト

  1. Stock Items: GTK+ 3 Reference Manual

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: