プロジェクト

全般

プロフィール

環境対応 #1199

gtk2 3.2.3を利用する

Akira Ouchi7ヶ月前に追加. 6ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
開始日:
2018-04-04
期日:
進捗率:

0%

プラグイン名:

説明

ruby-gnome2 3.2.2と3.2.3がリリースされたので、3.2.3を利用するよう変更する。

3.2.2 NEWS
https://github.com/ruby-gnome2/ruby-gnome2/blob/3.2.2/NEWS
3.2.3 NEWS
https://github.com/ruby-gnome2/ruby-gnome2/blob/3.2.3/NEWS


関連するチケット

関連している 提案 #1292: gtk2 3.2.9を利用する終了

履歴

#1 Akira Ouchi7ヶ月前に更新

単純にcore/plugin/gtk/Gemfileを3.2.0→3.2.2もしくは3.2.3と書き換えて、bundle updateしたあと起動しようとすると、以下の通り起動しませんでした。

notice: {MIKUTTER_DIR}/core/miquire_plugin.rb:155:in `block in load': plugin loaded: {MIKUTTER_DIR}/core/plugin/gtk/gtk.rb
Traceback (most recent call last):
    51: from mikutter.rb:42:in `<main>'
    50: from /Users/akkie/mikutter/core/miquire.rb:18:in `miquire'
    49: from /Users/akkie/mikutter/core/miquire.rb:75:in `miquire'
    48: from /Users/akkie/mikutter/core/miquire.rb:75:in `each'
    47: from /Users/akkie/mikutter/core/miquire.rb:76:in `block in miquire'
    46: from /Users/akkie/mikutter/core/miquire.rb:95:in `file_or_directory_require'
    45: from /Users/akkie/mikutter/core/miquire.rb:98:in `miquire_original_require'
    44: from /Users/akkie/mikutter/core/miquire.rb:98:in `require'
    43: from /Users/akkie/mikutter/core/boot/load_plugin.rb:10:in `<top (required)>'
    42: from /Users/akkie/mikutter/core/miquire_plugin.rb:96:in `load_all'
    41: from /Users/akkie/mikutter/core/miquire_plugin.rb:36:in `each_spec'
    40: from /Users/akkie/mikutter/core/miquire_plugin.rb:33:in `each'
    39: from /Users/akkie/mikutter/core/miquire_plugin.rb:33:in `each'
    38: from /Users/akkie/mikutter/core/miquire_plugin.rb:38:in `block in each_spec'
    37: from /Users/akkie/mikutter/core/miquire_plugin.rb:98:in `block in load_all'
    36: from /Users/akkie/mikutter/core/miquire_plugin.rb:146:in `load'
    35: from /Users/akkie/mikutter/core/utils.rb:278:in `atomic'
    34: from /Users/akkie/.rbenv/versions/2.5.0/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
    33: from /Users/akkie/mikutter/core/utils.rb:278:in `block in atomic'
    32: from /Users/akkie/mikutter/core/miquire_plugin.rb:147:in `block in load'
    31: from /Users/akkie/mikutter/core/miquire_plugin.rb:147:in `each'
    30: from /Users/akkie/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
    29: from /Users/akkie/mikutter/core/miquire_plugin.rb:146:in `load'
    28: from /Users/akkie/mikutter/core/utils.rb:278:in `atomic'
    27: from /Users/akkie/.rbenv/versions/2.5.0/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
    26: from /Users/akkie/mikutter/core/utils.rb:278:in `block in atomic'
    25: from /Users/akkie/mikutter/core/miquire_plugin.rb:147:in `block in load'
    24: from /Users/akkie/mikutter/core/miquire_plugin.rb:147:in `each'
    23: from /Users/akkie/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
    22: from /Users/akkie/mikutter/core/miquire_plugin.rb:146:in `load'
    21: from /Users/akkie/mikutter/core/utils.rb:278:in `atomic'
    20: from /Users/akkie/.rbenv/versions/2.5.0/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
    19: from /Users/akkie/mikutter/core/utils.rb:278:in `block in atomic'
    18: from /Users/akkie/mikutter/core/miquire_plugin.rb:158:in `block in load'
    17: from /Users/akkie/mikutter/core/miquire_plugin.rb:158:in `load'
    16: from /Users/akkie/mikutter/core/plugin/gtk/gtk.rb:7:in `<top (required)>'
    15: from /Users/akkie/mikutter/core/miquire.rb:18:in `miquire'
    14: from /Users/akkie/mikutter/core/miquire.rb:75:in `miquire'
    13: from /Users/akkie/mikutter/core/miquire.rb:75:in `each'
    12: from /Users/akkie/mikutter/core/miquire.rb:76:in `block in miquire'
    11: from /Users/akkie/mikutter/core/miquire.rb:95:in `file_or_directory_require'
    10: from /Users/akkie/mikutter/core/miquire.rb:98:in `miquire_original_require'
     9: from /Users/akkie/mikutter/core/miquire.rb:98:in `require'
     8: from /Users/akkie/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
     7: from /Users/akkie/mikutter/core/miquire.rb:18:in `miquire'
     6: from /Users/akkie/mikutter/core/miquire.rb:75:in `miquire'
     5: from /Users/akkie/mikutter/core/miquire.rb:75:in `each'
     4: from /Users/akkie/mikutter/core/miquire.rb:76:in `block in miquire'
     3: from /Users/akkie/mikutter/core/miquire.rb:95:in `file_or_directory_require'
     2: from /Users/akkie/mikutter/core/miquire.rb:98:in `miquire_original_require'
     1: from /Users/akkie/mikutter/core/miquire.rb:98:in `require'
/Users/akkie/mikutter/core/mui/cairo_miracle_painter.rb:21:in `<top (required)>': uninitialized constant Gtk::Object (NameError)
Did you mean?  Object

githubで変更点をにらめっこしてみましたが私のRuby力は53なのでむりでした。

#2 Izumi Tsutsui7ヶ月前に更新

debian でも ruby-gnome2 3.2.3 + mikutter 3.6.5 では同じエラーで起動しないそうです
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894816

#3 dai lxr7ヶ月前に更新

debian でも ruby-gnome2 3.2.3 + mikutter 3.6.5 では同じエラーで起動しないそうです

ruby-gnome2 3.2.1 + mikutter 3.6.5 ならば起動しました。

#4 Akira Ouchi7ヶ月前に更新

ruby-gnome2 3.2.1の動作確認状況は #1084 でコメントがあり、3.2.1までは特に問題なかったようです。 # 関連チケットの追加ができない(?)

#5 Izumi Tsutsui7ヶ月前に更新

NetBSD/i386 7.1.2 + pkgsrc-2018Q1 で ruby-gnome2 3.2.3 を手動で作ってみましたが
同様に

/usr/pkg/share/mikutter/core/mui/cairo_miracle_painter.rb:21:in `<top (required)>': uninitialized constant Gtk::Object (NameError)
Did you mean?  Object

ですね……

#6 Izumi Tsutsui7ヶ月前に更新

いろいろ試行錯誤してみましたが、 ruby-gnome2 3.2.1 → 3.2.2 の間の glib2 の以下の変更
https://github.com/ruby-gnome2/ruby-gnome2/commit/9b76f52c47d87fce6d8b000e5777a830d81d5aa8#diff-9047fbc780bec1b9e7da7a0219e53865
を revert して ruby-gnome2 の glib2 gem を作ると mikutter 3.6.5 は問題なく起動するようです。

ruby-gnome2 側で非互換な変更が入っているという気はしますが、理屈をわかっていません……

#7 toshi_a 初音7ヶ月前に更新

Gtk::ObjectはGtk2のGObjectに対応するクラスで、Gtk3では消えているやつですね。
アップデート内容まだ見てないのですが、名前が変わっているならmikutter側で新たな名前を参照するように変更して対応することになるはずです。

MiraclePainterがGtk::Objectを利用しているのは今となっては全く意味がなく、別で進めているGtk3対応の足かせにもなっているのでやめようと思っていたところでした。とはいえMiraclePainterの根本的な再実装を待っているとかなり時間がかかるので、先にこちらの問題を対応したいです。

#8 Izumi Tsutsui7ヶ月前に更新

ruby-gnome2 の gtk2 自体には特に API的変更は入っていないので、
https://github.com/ruby-gnome2/ruby-gnome2/commits/master/gtk2
glib2 側の変更がなにかしらイケてないという感じはします(根拠なし)

#10 Akira Ouchi7ヶ月前に更新

https://github.com/ruby-gnome2/ruby-gnome2/issues/1154#issuecomment-379468372 より、修正いただけたようです。
(daiさん、kouさん、ありがとうございます!)

上記コメントのworkaroundを参考にGLib::Type["GtkObject"].to_classの方を使って、
ruby-gnome2 3.2.3でmikutterが起動することを確認できました。

(追記) Gemfile変更ミスってて3.2.0でチェックしてました……3.2.3にして以下のパッチを当てると今度は「superclass mismatch for class Widget (TypeError)」が出るので、ruby-gnome2の修正も必要そうです。ヒーン

diff --git a/core/mui/cairo_miracle_painter.rb b/core/mui/cairo_miracle_painter.rb
index 673f382b..edbdba7b 100644
--- a/core/mui/cairo_miracle_painter.rb
+++ b/core/mui/cairo_miracle_painter.rb
@@ -18,7 +18,7 @@ miquire :lib, 'uithreadonly'

 # 一つのMessageをPixbufにレンダリングするためのクラス。名前は言いたかっただけ。クラス名まで全てはつね色に染めて♪
 # 情報を設定してから、 Gdk::MiraclePainter#pixbuf で表示用の GdkPixbuf::Pixbuf のインスタンスを得ることができる。
-class Gdk::MiraclePainter < Gtk::Object
+class Gdk::MiraclePainter < GLib::Type["GtkObject"].to_class
   extend Gem::Deprecate

   type_register

#11 Izumi Tsutsui7ヶ月前に更新

NetBSD/i386 7.1.2 + pkgsrc-2018Q1 で ruby-gnome2 3.2.3 に対して
https://github.com/ruby-gnome2/ruby-gnome2/commit/9db8371c0a9a7bca48bb3f2b57687d0c26e898e8
の修正を入れて手動で作って入れてみました。
→その状態で mikutter 3.6.5 は正常に起動しました。

なので 3.2.4 が出れば直ると思います。
(すぐ出るのならば pkgsrc 含め様子見ですが……)

#12 dai lxr6ヶ月前に更新

Akira Ouchi さんは書きました:

(追記) Gemfile変更ミスってて3.2.0でチェックしてました……3.2.3にして以下のパッチを当てると今度は「superclass mismatch for class Widget (TypeError)」が出るので、ruby-gnome2の修正も必要そうです。ヒーン

これならどうでしょうか?

% diff -u /usr/share/mikutter/core/mui/cairo_miracle_painter.rb.orig /usr/share/mikutter/core/mui/cairo_miracle_painter.rb
--- /usr/share/mikutter/core/mui/cairo_miracle_painter.rb.orig    2018-03-09 20:19:54.000000000 +0900
+++ /usr/share/mikutter/core/mui/cairo_miracle_painter.rb    2018-04-08 11:33:35.193776072 +0900
@@ -16,6 +16,8 @@
 miquire :mui, 'photo_pixbuf'
 miquire :lib, 'uithreadonly'

+Gtk::Object = GLib::Type["GtkObject"].to_class
+
 # 一つのMessageをPixbufにレンダリングするためのクラス。名前は言いたかっただけ。クラス名まで全てはつね色に染めて♪
 # 情報を設定してから、 Gdk::MiraclePainter#pixbuf で表示用の GdkPixbuf::Pixbuf のインスタンスを得ることができる。
 class Gdk::MiraclePainter < Gtk::Object

#13 Akira Ouchi6ヶ月前に更新

dai lxr さんは書きました:

これならどうでしょうか?

おお、動きました。ありがとうございます。
なるほど、ほかでもGtk::Objectを使うから、Workaroundの通りGtk::Objectに代入するやつをひとつ書いておけばいいわけですね(?)

#14 toshi_a 初音6ヶ月前に更新

  • ステータス新規 から 終了 に変更

諸々ありがとうございます。
mikutterでは、gtk2 gem 3.2.0を使うように依存関係を明示しているため、3.2.3には移行せずに、この修正が入ったバージョンがリリースされたらアップデートを再検討しましょう。パッケージなのでgtk2 gemのバージョンを新しくせざるを得ない場合は #1199-12 のワークアラウンドでお願いします。

#3.2.1にするというチケット完全に忘れてた

#15 Akira Ouchi約2ヶ月前に更新

  • 関連している 提案 #1292: gtk2 3.2.9を利用する を追加

他の形式にエクスポート: Atom PDF