プロジェクト

全般

プロフィール

致命的 #1168

multiselectでブロックなしoptionのみだとクラッシュする

あひる 家鴨15日前に追加. 10日前に更新.

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

0%

プラグイン名:

説明

以下のコードを実行すると落ちる。

Plugin.create(:sample_settings) do
  multiselect('複数セレクト', :sample_settings_multiselect) do
    option(:opt1, 'オプション1')
    option(:opt2, 'オプション2')
    option(:opt3, 'オプション3')
  end
end

optionを以下のようなブロック付きに変更した場合は落ちない

option(:opt1, 'オプション1') do
  select('なんか', :opt1_select, {})
end

source:/core/mui/gtk_form_dsl_multi_select.rb#L21@parent_klass がnilになっているのが原因らしい。
なぜそうなってるかまでは追えていない。

sample_settings.rb (346 Bytes) sample_settings.rb あひる 家鴨, 2018-02-10 19:27

バックトレース

/Users/ahiru/mikutter/repo/app/core/mui/gtk_form_dsl_multi_select.rb:21:in `build': undefined method `create_inner_setting' for nil:NilClass (NoMethodError)
from /Users/ahiru/mikutter/repo/app/core/mui/gtk_form_dsl.rb:280:in `multiselect'
from /Users/ahiru/.mikutter/plugin/sample_settings/sample_settings.rb:42:in `block (3 levels) in <top (required)>'
from /Users/ahiru/mikutter/repo/app/core/mui/gtk_form_dsl.rb:188:in `instance_eval'
from /Users/ahiru/mikutter/repo/app/core/mui/gtk_form_dsl.rb:188:in `settings'
from /Users/ahiru/.mikutter/plugin/sample_settings/sample_settings.rb:19:in `block (2 levels) in <top (required)>'
from /Users/ahiru/mikutter/repo/app/core/plugin/settings/menu.rb:58:in `instance_eval'
from /Users/ahiru/mikutter/repo/app/core/plugin/settings/menu.rb:58:in `widget'
from /Users/ahiru/mikutter/repo/app/core/plugin/settings/settings.rb:37:in `block in setting_window'
from /Users/ahiru/mikutter/repo/app/core/mui/gtk_extension.rb:35:in `block in safety_signal_connect'
from /Users/ahiru/mikutter/repo/app/core/plugin/gtk/mainloop.rb:10:in `main'
from /Users/ahiru/mikutter/repo/app/core/plugin/gtk/mainloop.rb:10:in `mainloop'
from mikutter.rb:68:in `boot!'
from mikutter.rb:104:in `<main>'


再現手順

1. 添付したプラグインを入れる
2. mikutterを起動し、設定を開く
3. '複数セレクト' タブを開くと落ちる

関係しているリビジョン

リビジョン ecf8a486 (差分)
あひる 家鴨14日前に追加

multiselectでbodyなしoptionのみの場合に落ちる問題を修正 refs #1168

@parent_klass は定義元がないため常にnilを返している。
create_inner_settings を持っているのは @parent_dslobj であるため、そちらに変更した

履歴

#1 あひる 家鴨14日前に更新

topic/1168-fix-multiselect-option ブランチにて修正しました。
確認をお願いします。

以下のコードで設定を開いたときに落ちず、かつ設定項目が見えていれば問題ないと思います。

Plugin.create(:sample_settings) do
  multiselect('複数セレクト', :sample_settings_multiselect) do
    option(:opt1, 'オプション1')
    option(:opt2, 'オプション2')
    option(:opt3, 'オプション3')
  end
end

#2 あひる 家鴨14日前に更新

  • ステータス新規 から レビュー待ち に変更
  • 担当者toshi_a 初音 にセット

#3 toshi_a 初音10日前に更新

  • ステータスレビュー待ち から 終了 に変更

確認できたのでmasterにmergeしました

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