OSDN Git Service

SettingLocal.StatusMultilineの値に関わらず起動時に投稿欄が単一行表示になる不具合を修正
authorKimura Youichi <kim.upsilon@bucyou.net>
Wed, 8 Nov 2017 15:52:32 +0000 (00:52 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Wed, 8 Nov 2017 16:00:32 +0000 (01:00 +0900)
SplitContainer2 のスプリッタが動かされた場合に StatusMultiline の設定値を更新する処理が、
起動時のレイアウト中に意図せず呼び出されてしまい前回終了時の設定を上書きしてしまったことが原因

4d060a91 のコミット以前の動作 (v1.3.9 までと同様):

  1. ApplicationEvents.Main メソッドで SettingLocal.xml の設定が読み込まれる
    (例として読み込まれた StatusMultiline の設定値を true とする)

  2. TweenMain_Load メソッド内で this.ClientSize が更新される
    → SplitContainer2_Panel2_Resize メソッドが呼ばれる
    → 現時点の SplitterContainer2 の状態から multiline は false と判定される
    → MultiLineMenuItem.Checked に false がセットされる (SettingManager.Local は更新されない)

  3. TweenMain_Load メソッドから TweenMain_Resize メソッドが呼ばれる
    → StatusText.Multiline に SettingManager.Local.StatusMultiline の値がセットされる

  4. StatusMultiline が true の状態で起動が完了する

4d060a91 のコミット以降の動作 (不具合あり):

  1. ApplicationEvents.Main メソッドで SettingLocal.xml の設定が読み込まれる
    (例として読み込まれた StatusMultiline の設定値を true とする)

  2. TweenMain_Load メソッド内で this.ClientSize が更新される
    → SplitContainer2_Panel2_Resize メソッドが呼ばれる
    → 現時点の SplitterContainer2 の状態から multiline は false と判定される
    → SettingManager.Local.StatusMultiline に false がセットされる

  3. TweenMain_Load メソッドから TweenMain_Resize メソッドが呼ばれる
    → StatusText.Multiline に SettingManager.Local.StatusMultiline の値がセットされる

  4. StatusMultiline が false の状態で起動が完了する

Fixes: 4d060a91 ("ContextMenuPostMode以下のチェック状態をMenuItem側ではなくSettingCommon等で管理する")

OpenTween/Resources/ChangeLog.txt
OpenTween/Tween.cs

index 6f0a9a8..bd5aa95 100644 (file)
@@ -1,6 +1,7 @@
 更新履歴
 
 ==== Ver 1.4.1-dev(xxxx/xx/xx)
+ * FIX: 投稿欄の複数行表示が次回起動時に保持されない不具合を修正
 
 ==== Ver 1.4.0(2017/10/30)
  * NEW: 自分宛のリプライを送信する場合に先頭の「@... 」を除去します (返信先ツイートの情報は維持したまま投稿されます)
index 53c3d96..912ae62 100644 (file)
@@ -9175,6 +9175,9 @@ namespace OpenTween
 
         private void SplitContainer2_Panel2_Resize(object sender, EventArgs e)
         {
+            if (this._initialLayout)
+                return; // SettingLocal の反映が完了するまで multiline の判定を行わない
+
             var multiline = this.SplitContainer2.Panel2.Height > this.SplitContainer2.Panel2MinSize + 2;
             if (multiline != this.StatusText.Multiline)
             {