sakura-editor / sakura

SAKURA Editor (Japanese text editor for MS Windows)
https://sakura-editor.github.io/
Other
1.23k stars 162 forks source link

アウトラインの「ドッキング配置をタイプ別継承」が効かない場合がある #1177

Open yoshinrt opened 4 years ago

yoshinrt commented 4 years ago

連投すみません. サクラエディタの正確な仕様を知らないのでバグとは言い難いのですが,私が想像する動作と違う動きをするので,ひとまず報告させていただきます.

問題内容

アウトライン解析ウィンドウの▼メニューで以下の設定時:

私が想像する動作

アウトライン解析ウィンドウの表示/非表示状態がタイプ別に記憶され,次回 open 時に反映される

実際の動作

アウトライン解析ウィンドウの表示/非表示状態が反映されない場合がある

再現手順

何の設定が影響あるかわからないので,症状が再現する .ini を添付します. この ini では C/C++ の bOutlineDockDisp=1 になっています. sakura.ini.zip

  1. sakura.ini を添付のものに上書きします
  2. sakura.exe を W クリックして,「無題」を開いている状態にします.
  3. sakura のウィンドウに .cpp を D&D します.この手順ではアウトライン解析ウィンドウが開きます (私が期待する動作)

一旦 sakura を閉じて,

  1. sakura.ini を添付のものに上書きします
  2. エクスプローラで sakura.exe に .cpp を D&D します..cpp ファイルが開きますが,アウトライン解析は開きません (私の期待と違う動作)

再現頻度

100%

問題のカテゴリ

環境情報

スクリーンショット

ds14050 commented 4 years ago

xyOutlineDock=0,0,0,0 という設定値に問題がありそうです。

新しくアウトラインウィンドウが表示できないことから、 表示されているけど見えていない状態に陥っているような。

再現手順をなぞっても再現できなくなったときには、設定値は xyOutlineDock=312,217,312,217 のようになっていました(他は同じ)。

考えるべきはどのようにして 0,0,0,0 のような値が書き込まれたかでしょうか。

yoshinrt commented 4 years ago

@ds14050 さん検証ありがとうございました.

考えるべきはどのようにして 0,0,0,0 のような値が書き込まれたかでしょうか。

ini を削除するところから始めて,わりとサクッと ini ができたような記憶があるのですが,いま手順を再現しようとしてみたのですが,再現できませんでした.

とにかく,ini が異常な状態であったということで,それを修正すれば私の環境では問題なくなりましたので,私としては本件はクローズさせていただきたいと思います. (チケットを閉じるかどうかは他の方におまかせしたいと思います.)

berryzplus commented 4 years ago

なんかみんな、この機能が大好きみたいですね :smiley:

めちゃめちゃ複雑な機能なので不具合も多いんですが、 その割には果敢に新機能が追加されまくってきた歴史がある気がします。 (普通は不具合が出ると、その領域の進化が停滞するので。)

考えるべきはどのようにして 0,0,0,0 のような値が書き込まれたかでしょうか。

これは単に初期値ですね。

sakura.iniを消してsakura.exe起動、何もせずそのまま終了、 で 0,0,0,0 が書き込まれるのを確認できました。

新しくアウトラインウィンドウが表示できないことから、 表示されているけど見えていない状態に陥っているような。

再現状態(=アウトラインウインドウが見えてない)で spy++ を使ったら アウトラインウインドウが「ない」のか「見えてないだけ」なのか分かるかも知れません。 ダイアログベースのウインドウなのでキャプションから推定するしかないのが痛いですが。

berryzplus commented 4 years ago

前振り

手順通りやって再現できたので見解報告します。 @ds14050 さんの想定が当たってそうです。

調査結果

新しくアウトラインウィンドウが表示できないことから、 表示されているけど見えていない状態に陥っているような。

Spy++ で確認したところ、幅0px のウインドウになっていました。

問題の本質を探る考察

1つ目の操作群は、メインウインドウに.cppファイルをドロップしたときの挙動です。 2つ目の操作群は、sakura.exe のコマンドラインに.cppファイルを指定したときの挙動です。

両者の挙動に差異があり後者の挙動が「おかしい」のであれば、 それはコマンドラインからの起動に関するバグなのだと思います。

起動時のアウトラインウインドウの表示に関しては、何やら問題対策をした形跡が残っています。 https://github.com/sakura-editor/sakura/blob/b3278eb2cd41edf11c5e8c9ad2126d48677c9475/sakura_core/_main/CNormalProcess.cpp#L184

初期化処理関数の中に上記呼出しが複数入っているんですけど、正常ルート(=.cppファイルをコマンドラインから開いたときに通ると思われるルート)にはこの呼出しがないんです。

どうすべきなのかは、ぶっちゃけ見えていませんが、 他のクラスのクラスメンバを操作するコードに違和感を持っています。

CEditWndが作成時に行うべき処理が漏れてるから、外側のコードが必要なんじゃないか?みたいな。

berryzplus commented 4 years ago

ちなみに。

とにかく,ini が異常な状態であったということで,それを修正すれば私の環境では問題なくなりましたので,私としては本件はクローズさせていただきたいと思います.

https://github.com/sakura-editor/sakura/issues/1177#issuecomment-580298260 の通り 0,0,0,0 はただの初期値なので、iniの異常で起きた不測の事態ではないと考えられます。

現状で対策案はないけど、引き続き調査&対策しといたほうがよい案件だと思います。