Open tsutsui opened 2 years ago
mikutter 5.0 本体の core/mui/gtk_crud.rb では
def record_create(optional, widget)
if @creatable
record = popup_input_window()
if record
force_record_create(record) end end end
と popup_input_window()
を引数なしで呼んでいる。
この後は
def popup_input_window(defaults = [])
input = gen_popup_window_widget(defaults)
Mtk.scrolled_dialog(dialog_title || "", input[:widget], self.toplevel || self, &input[:result]) end
def gen_popup_window_widget(results = [])
widget = Gtk::Box.new(:vertical, 0)
column_schemer.flatten.each_with_index{ |scheme, index|
case scheme[:widget]
when :message_picker
widget.pack_start(Mtk.message_picker(lambda{ |new|
if(new.nil?)
results[index].freeze_ifn
else
results[index] = new.freeze_ifn
end
}), expand: false)
when nil
;
else
widget.pack_start(widget, Mtk.__send__((scheme[:widget] or :input), lambda{ |new|
if(new.nil?)
results[index].freeze_ifn
else
results[index] = new.freeze_ifn
end
},
scheme[:label], *(scheme[:args].to_a or [])), expand: false)
end
}
という感じ。
CRUD の実装を探るよりも mikutter 本体の https://dev.mikutter.hachune.net/issues/1380 にあるとおり
FormDSLの listview
を使うようにするのが筋という気がするが、
Listの操作は文字通り CRUD の Create, Update, Delete それぞれ必要っぽい。
上記🎫1380 のリビジョン履歴を見ると一応 listview
でも作成・編集・削除それぞれ対応しているっぽいが、
子チケットを斜め読みした範囲では mikutter 本体で CUD が実際に使われている例はない?
うーん……
いまさらながら mikutter 4.1.7 の NetBSD/amd64 9.2 の環境で試したところ GTK2 というか 🎫994 修正後の mikutter 4.x では設定ウインドウの「追加」でも
This method always crashes when it's called. see: https://dev.mikutter.hachune.net/issues/994 (Mtk::Read994Error)
でクラッシュする。つまり「追加」の場合は従来のクラッシュの場所にたどり着く前に
GTK3固有の問題で先に落ちただけ、と思われる。
やはり listview で作り直すべきっぽいが、そもそも 従来「追加」「編集」がどういう動作をしていたのか忘却の彼方なので、 🎫994以前の mikutter 3.9.x で改めて確認する必要がありそう。
やはり listview で作り直すべきっぽいが、そもそも 従来「追加」「編集」がどういう動作をしていたのか忘却の彼方なので、 🎫994以前の mikutter 3.9.x で改めて確認する必要がありそう。
🎫994 の Mtk の Fiber対策 always crash変更前の mikutter 4.0.6 のリスト設定の「追加」と「編集」はこんな感じ。
つまり要件としては以下のはず。
つまり CRUDかと思ったが実態は intent_selector 同様 Readだけということでよいのかも。
落ちたときのトレース
GTK3 or mikutter 5.0 固有の問題かは未確認。