プロジェクト

全般

プロフィール

致命的 #579

完了

抽出タブの作成/削除の際にmikutterがクラッシュする

Takuma Nakajima さんが約11年前に追加. ほぼ11年前に更新.

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

0%

プラグイン名:

説明

抽出タブを作成する際にmikutterがクラッシュする.
Ruby: 2.0.0p0
RubyGnome2: 1.2.3
出力されるエラーは以下の通り.

error: {MIKUTTER_DIR}/core/mui/gtk_extension.rb:45:in `rescue in block in __track': undefined method `model' for #<Gtk::ListStore:0x7fc4a00c0fc8 ptr=0x7fc4fd2635a0>
from {MIKUTTER_DIR}/core/mui/gtk_crud.rb:132:in `force_record_create'
from {MIKUTTER_DIR}/core/mui/gtk_crud.rb:160:in `record_create'
from {MIKUTTER_DIR}/core/mui/gtk_crud.rb:30:in `block in create_button'
from {MIKUTTER_DIR}/core/mui/gtk_extension.rb:22:in `call'
from {MIKUTTER_DIR}/core/mui/gtk_extension.rb:22:in `block in safety_signal_connect'
from {MIKUTTER_DIR}/core/mui/gtk_crud.rb:29:in `create_button'
from {MIKUTTER_DIR}/core/mui/gtk_crud.rb:24:in `buttons'
from {MIKUTTER_DIR}/core/plugin/extract/extract.rb:27:in `block (2 levels) in <top (required)>'
from {MIKUTTER_DIR}/core/plugin/settings/settings.rb:35:in `instance_eval'
from {MIKUTTER_DIR}/core/plugin/settings/settings.rb:35:in `block in setting_window'
from {MIKUTTER_DIR}/core/plugin/settings/settings.rb:30:in `each'
from {MIKUTTER_DIR}/core/plugin/settings/settings.rb:30:in `setting_window'
from {MIKUTTER_DIR}/core/plugin/settings/settings.rb:18:in `block (2 levels) in <top (required)>'
from {MIKUTTER_DIR}/core/event_listener.rb:25:in `call'
from {MIKUTTER_DIR}/core/event_listener.rb:25:in `update'
from /home/penguin/local/lib/ruby/2.0.0/observer.rb:195:in `block in notify_observers'
from /home/penguin/local/lib/ruby/2.0.0/observer.rb:194:in `each'
from /home/penguin/local/lib/ruby/2.0.0/observer.rb:194:in `notify_observers'
from {MIKUTTER_DIR}/core/event.rb:40:in `block (2 levels) in call'
from {MIKUTTER_DIR}/core/event.rb:40:in `catch'
from {MIKUTTER_DIR}/core/event.rb:40:in `block in call'
from {MIKUTTER_DIR}/core/delayer.rb:115:in `call'
from {MIKUTTER_DIR}/core/delayer.rb:115:in `run'
from {MIKUTTER_DIR}/core/delayer.rb:52:in `block (2 levels) in run'
from {MIKUTTER_DIR}/core/delayer.rb:48:in `each'
from {MIKUTTER_DIR}/core/delayer.rb:48:in `block in run'
from {MIKUTTER_DIR}/core/delayer.rb:44:in `times'
from {MIKUTTER_DIR}/core/delayer.rb:44:in `run'
from {MIKUTTER_DIR}/core/plugin/gtk/delayer.rb:26:in `block (2 levels) in on_regist'
from {MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `call'
from {MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `main'
from {MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `mainloop'
from {MIKUTTER_DIR}/mikutter.rb:58:in `boot!'
from {MIKUTTER_DIR}/mikutter.rb:76:in `<top (required)>'
from /home/penguin/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from /home/penguin/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from {MIKUTTER_DIR}/mikutter_alt.rb:19:in `<main>'

model.model.appendとなっているが,modelだけでGtk::ListStoreが取得される.
Gtk::ListStoreにはmodelメソッドが定義されていないので,
その前にクラスチェックを入れるとクラッシュしなくなった.
model.model となっていた部分が2箇所あったので,両方にチェックを挟んだ.

--- a/core/mui/gtk_crud.rb
+++ b/core/mui/gtk_crud.rb
@@ -124,7 +124,11 @@ class Gtk::CRUD < Gtk::TreeView
   memoize :column_schemer

   def force_record_create(record)
-    iter = model.model.append
+    if model.class == Gtk::ListStore
+      iter = model.append
+    else
+      iter = model.model.append
+    end
     record.each_with_index{ |item, index|
       iter[index] = item }
     on_created(iter) end
@@ -140,7 +144,11 @@ class Gtk::CRUD < Gtk::TreeView
     if defined? model.convert_iter_to_child_iter(iter)
       iter = model.convert_iter_to_child_iter iter end
     on_deleted(iter)
-    model.model.remove(iter)
+    if model.class == Gtk::ListStore
+      model.remove(iter)
+    else
+      model.model.remove(iter)
+    end
   end

   def record_create(optional, widget)

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