環境対応 #1199
完了gtk2 3.2.3を利用する
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
関連するチケット
Akira Ouchi さんが6年以上前に更新
単純に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なのでむりでした。
Izumi Tsutsui さんが6年以上前に更新
debian でも ruby-gnome2 3.2.3 + mikutter 3.6.5 では同じエラーで起動しないそうです
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894816
Akira Ouchi さんが6年以上前に更新
ruby-gnome2 3.2.1の動作確認状況は #1084 でコメントがあり、3.2.1までは特に問題なかったようです。 # 関連チケットの追加ができない(?)
Izumi Tsutsui さんが6年以上前に更新
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
ですね……
Izumi Tsutsui さんが6年以上前に更新
いろいろ試行錯誤してみましたが、 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 側で非互換な変更が入っているという気はしますが、理屈をわかっていません……
toshi_a 初音 さんが6年以上前に更新
Gtk::ObjectはGtk2のGObjectに対応するクラスで、Gtk3では消えているやつですね。
アップデート内容まだ見てないのですが、名前が変わっているならmikutter側で新たな名前を参照するように変更して対応することになるはずです。
MiraclePainterがGtk::Objectを利用しているのは今となっては全く意味がなく、別で進めているGtk3対応の足かせにもなっているのでやめようと思っていたところでした。とはいえMiraclePainterの根本的な再実装を待っているとかなり時間がかかるので、先にこちらの問題を対応したいです。
Izumi Tsutsui さんが6年以上前に更新
ruby-gnome2 の gtk2 自体には特に API的変更は入っていないので、
https://github.com/ruby-gnome2/ruby-gnome2/commits/master/gtk2
glib2 側の変更がなにかしらイケてないという感じはします(根拠なし)
Akira Ouchi さんが6年以上前に更新
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
Izumi Tsutsui さんが6年以上前に更新
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 含め様子見ですが……)
dai lxr さんが6年以上前に更新
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
Akira Ouchi さんが6年以上前に更新
dai lxr さんは書きました:
これならどうでしょうか?
おお、動きました。ありがとうございます。
なるほど、ほかでもGtk::Objectを使うから、Workaroundの通りGtk::Objectに代入するやつをひとつ書いておけばいいわけですね(?)
toshi_a 初音 さんが6年以上前に更新
- ステータス を 新規 から 終了 に変更
諸々ありがとうございます。
mikutterでは、gtk2 gem 3.2.0を使うように依存関係を明示しているため、3.2.3には移行せずに、この修正が入ったバージョンがリリースされたらアップデートを再検討しましょう。パッケージなのでgtk2 gemのバージョンを新しくせざるを得ない場合は #1199-12 のワークアラウンドでお願いします。
#3.2.1にするというチケット完全に忘れてた