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

Vistaスタイルのファイルダイアログでファイルの作成確認が余計に行われる #1930

Closed
beru opened this issue Aug 14, 2023 · 6 comments
Assignees
Labels
🐛bug🦋 ■バグ修正(Something isn't working)

Comments

@beru
Copy link
Contributor

beru commented Aug 14, 2023

問題内容

共通設定の編集の Vistaスタイルのファイルダイアログ にチェックを付けると、Common Item Dialog (IFileOpenDialog と IFileSaveDialog) が使われます。

そのダイアログでファイルを選択して開く際に、ファイルを選択するとファイル名の欄に選択したファイル名が入ります。

その後、ファイル名の欄に何か文字 (例えば a) を入力するとファイルを作成するかを確認するメッセージボックスが表示されます。

image

またフォルダ移動時に、ファイル名の個所にそのフォルダに存在しないファイル名が入っていると同様のメッセージボックスが表示されます。

ファイルを作成する意図が無いのにも関わらず、いちいちこのメッセージボックスが頻繁に表示されると操作がしづらいので良くないです。

再現手順

再現頻度

問題のカテゴリ

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

環境情報

  • OS バージョン
  • サクラエディタバージョン
  • PC情報

スクリーンショット

@beru beru added the 🐛bug🦋 ■バグ修正(Something isn't working) label Aug 14, 2023
@beru beru self-assigned this Aug 14, 2023
@berryzplus
Copy link
Contributor

なんというか、既知のバグを報告しておきます。

既存のファイルダイアログには、上書き確認メッセージを表示するカスタムが施されているのですが、アイテムダイアログにはこれが移植されてないっぽいです。

if( IDYES != ::MessageBox( pData->m_hwndOpenDlg, szText, LS(STR_DLGOPNFL3), MB_YESNO | MB_ICONEXCLAMATION) ){

文字列リソース STR_DLGOPNFL3の定義が(おそらく)誤っており、新旧比較すると差になります。

誤: "名前を付けて保存"
正: "名前を付けて保存の確認"

これ直しても誰も嬉しくなさそうなので黙ってました。
アイテムダイアログに関しての説明では、「既存機能の一部が移植されていないかも」という話になると思います。

@berryzplus
Copy link
Contributor

以下がcppで定義されているために、単体テストが記述不能である点が気になっています。

  • struct CDlgOpenFile_CommonFileDialog 旧来のOFNダイアログ実装。
  • struct CDlgOpenFile_CommonItemDialog Vista以降のアイテムダイアログ実装。

このプロジェクトで「エンジニアリングしたい民」はどうも自分だけのようなので、他の人が気にならないなら放置で良いと思っています。

@beru
Copy link
Contributor Author

beru commented Aug 15, 2023

以下がcppで定義されているために、単体テストが記述不能である点が気になっています。

  • struct CDlgOpenFile_CommonFileDialog 旧来のOFNダイアログ実装。
  • struct CDlgOpenFile_CommonItemDialog Vista以降のアイテムダイアログ実装。

tests/unittests/test-cdlgopenfile.cpp のテストを増やしたいという事でしょうか?

Interface関数以外の内部実装の単体テストを細かく書いてしまうと、内部実装を調整した際に単体テストの保守も行う必要が出てくるので大変な気が個人的にします。ただ他の人が何かの理由でやりたいのであればあえて止めはしません。

struct CDlgOpenFile_CommonFileDialogstruct CDlgOpenFile_CommonItemDialog の定義をヘッダファイル (例えば sakura_core/dlg/CDlgOpenFile.h とか?)に引っ越しするとかですかね。

このプロジェクトで「エンジニアリングしたい民」はどうも自分だけのようなので、他の人が気にならないなら放置で良いと思っています。

テストも自動化しないとですね。https://github.com/appium/appium-windows-driver を今度使ってみます。

@beru
Copy link
Contributor Author

beru commented Aug 20, 2023

FOS_CREATEPROMPT
Value: 0x2000
Prompt for creation if the item returned in the open dialog does not exist. Note that this does not actually create the item.

この値が CDlgOpenFile_CommonItemDialog::DoModalOpenDlgImpl1 で使われているのが、ファイルの作成確認が余計に行われる原因である事を確認しました。

@beru
Copy link
Contributor Author

beru commented Sep 10, 2023

なんというか、既知のバグを報告しておきます。

既存のファイルダイアログには、上書き確認メッセージを表示するカスタムが施されているのですが、アイテムダイアログにはこれが移植されてないっぽいです。

把握していなかったので、上書き確認メッセージがどう異なるかを動作確認してみました。

既存のファイルダイアログ (実装 CDlgOpenFile_CommonItemDialog) の上書き確認メッセージ

image

Vistaスタイルのファイルダイアログ (実装 CDlgOpenFile_CommonItemDialog) の上書き確認メッセージ

image


メッセージボックスのタイトルが異なりますね。berryzplusさんが書いたように "名前を付けて保存の確認" が正しいと思います。

他に気づいた点として、ファイルパスが既存のファイルダイアログはフルパスで表示されていますが、Vistaスタイルのファイルダイアログではファイル名だけが表示されています。

どちらも些細な点だと思うので更新しなくても良いと思いますが、仮に変更するとしたら CDlgOpenFile_CommonItemDialog::OnOverwrite に実装を追加すれば良さそうです。

HRESULT STDMETHODCALLTYPE OnOverwrite(
/* [in] */ __RPC__in_opt IFileDialog *pfd,
/* [in] */ __RPC__in_opt IShellItem *psi,
/* [out] */ __RPC__out FDE_OVERWRITE_RESPONSE *pResponse) override {
return E_NOTIMPL;
}

https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifiledialogevents-onoverwrite

@beru
Copy link
Contributor Author

beru commented Sep 10, 2023

#1932 がmergeされてこのissueの問題は解消されたと思うのでcloseします。

@beru beru closed this as completed Sep 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Projects
None yet
Development

No branches or pull requests

2 participants