Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.txt のカーソル位置がアウトラインのツリー位置に反映されない #948

Closed
yoshinrt opened this issue Jun 10, 2019 · 10 comments
Labels
🐛bug🦋 ■バグ修正(Something isn't working) 💩degradation🧻🚽 デグレ (前に動いていた機能が動かなくなった)
Milestone

Comments

@yoshinrt
Copy link
Contributor

問題内容

C ソースで F11 でアウトライン解析をすると,現在のカーソル位置に合わせてアウトライン側のツリー項目が選択されます.
しかし .txt のアウトライン解析ではツリー側に反映されないようです.そういう仕様なのかと思ったのですが,以下のコードもあるので,何かがうまく動いていない気がします.

if( NULL != hItemSelected ){
/* 現在カーソル位置のメソッドを選択状態にする */
TreeView_SelectItem( hwndTree, hItemSelected );
}else if( NULL != hItemSelectedTop ){
TreeView_SelectItem( hwndTree, hItemSelectedTop );
}

再現手順

無題
図のような txt で ●c の位置で F11 を押すと,アウトライン解析の方は ●a が選択されています.

再現頻度

100%

問題のカテゴリ

  • プログラムの動作上の問題

環境情報

  • OS バージョン
    • WIn10 Pro 64bit
  • サクラエディタバージョン
サクラエディタ   v2.4.0.1993 32bit dev
(GitHash fd461c3b63197c48c244ad74ef50fca04737e176)
(GitURL https://github.com/sakura-editor/sakura.git)

      Compile Info: V1916 WPR WIN601/I800/C000/N601
      Last Modified: 2019/6/8 11:43:32
@ds14050
Copy link
Contributor

ds14050 commented Jun 10, 2019

もう一度 F11 を押してみるとどうですか?

試したところでは、ドッキングしている場合は最初の F11 ではフォーカスが移動するだけみたいです。

@yoshinrt
Copy link
Contributor Author

手元で試した限り,(ドッキング有り / 無し) でアウトライン表示がない状態から始めて,

  • F11 を 1回→アウトライン選択がずれる
  • この状態で F11 もう一回→変わらず

でした.
.c だとどれもずれませんでした.

@ds14050
Copy link
Contributor

ds14050 commented Jun 10, 2019

v2.4.0.1993 64bit DEBUG dev Alpha Version で再現しました。2.3.2.0 では再現せず。

図のような txt で

というのもポイントだったんですね。無題ドキュメントに「テキスト」タイプを一時適用していたので再現できていませんでした。

@KENCHjp
Copy link
Member

KENCHjp commented Jun 10, 2019

@yoshinrt さん、 @ds14050 さん、報告検証ありがとございいます。
デグレっすかね。。。
sakura-editor/management-forum#72

@ds14050
Copy link
Contributor

ds14050 commented Jun 11, 2019

デグレっすかね。。。

みたいです。おそらく pull #780 「バッファが空の状態で CNativeW::Clear を呼び出したときに落ちる不具合修正」の副作用です。

if( pcFuncInfo->m_cmemFileName.GetStringPtr() && m_pcFuncInfoArr->m_szFilePath[0] ){
において pcFuncInfo->m_cmemFileName.GetStringPtr() が NULL でない値を返すことで、無条件に true が代入されていた bFileSelect に文字列比較の結果が代入されるようになっています。bFileSelect が hItemSelected に影響し、@yoshinrt さんが最初に指摘したように
if( NULL != hItemSelected ){
/* 現在カーソル位置のメソッドを選択状態にする */
TreeView_SelectItem( hwndTree, hItemSelected );
}else if( NULL != hItemSelectedTop ){
TreeView_SelectItem( hwndTree, hItemSelectedTop );
}
のコードに影響しています。

CMemory は基礎的なクラスなので他にも NULL と "" の違いに頼っていた、結果として振るまいが変わっているコードがあるかもしれません。

追記 "" は長さ1の文字配列ですから NULL と並べるには不適切な対象でした。改めます。「NULL と "" の違いに頼っていた」というのは、NULL と長さ0の配列(=デリファレンスできないが有効なポインタ)を同一視していなかった、という意味です。長さ0の配列は古い C には存在しない概念なのである意味それはできていなくて当然のことですが、CMemory についてはポインタが NULL かどうかではなく長さが0かどうかを調べなければいけないということです。(CMemory は ANSI 版の昔も今も NULL でないときは余分のヌル末端を保証しているようなので追記部分は当てはまりません。削除します。何度か認識を改めた結果最初に戻ってしまいました)

@m-tmatma
Copy link
Member

#949 を投げました。

m-tmatma added a commit that referenced this issue Jun 29, 2019
#780 でのCNativeW の初期状態での仕様を取り消して、 #948 の不具合を修正する
@m-tmatma
Copy link
Member

#949 をマージしました。
修正されているはずです

@berryzplus
Copy link
Contributor

デグレ解消を確認できたら閉じられるのかな?(↓PR適用済み成果物のリンク)
https://ci.appveyor.com/project/sakuraeditor/sakura/branch/master/job/lilfv5y7lud0m9vg/artifacts

ds14050 さん、協力ありがとう。

@yoshinrt
Copy link
Contributor Author

手元で試した限り,(ドッキング有り / 無し) でアウトライン表示がない状態から始めて,

  • F11 を 1回→アウトライン選択がずれる
  • この状態で F11 もう一回→変わらず

が改善されていることが確認できました.ありがとうございました.

@m-tmatma m-tmatma added the 🐛bug🦋 ■バグ修正(Something isn't working) label Jun 29, 2019
@m-tmatma m-tmatma added this to the v2.4.0 milestone Jun 29, 2019
@m-tmatma m-tmatma added the 💩degradation🧻🚽 デグレ (前に動いていた機能が動かなくなった) label Jun 29, 2019
@m-tmatma
Copy link
Member

確認ありがとうございます。
閉じます。
degradation というラベルを付けました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working) 💩degradation🧻🚽 デグレ (前に動いていた機能が動かなくなった)
Projects
None yet
Development

No branches or pull requests

5 participants