Ricardo Filipe : comdlg32: Send CDN_INCLUDEITEM notification for each object in an Open/Save dialog.
Alexandre Julliard
julliard at winehq.org
Wed Mar 25 10:31:32 CDT 2009
Module: wine
Branch: master
Commit: 13f1988720ac4829574ec6847257f71808589c00
URL: http://source.winehq.org/git/wine.git/?a=commit;h=13f1988720ac4829574ec6847257f71808589c00
Author: Ricardo Filipe <ricardo_barbano at hotmail.com>
Date: Fri Mar 13 00:58:35 2009 +0000
comdlg32: Send CDN_INCLUDEITEM notification for each object in an Open/Save dialog.
---
dlls/comdlg32/filedlg.c | 5 +--
dlls/comdlg32/filedlgbrowser.c | 46 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index a2826c8..4c2164d 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -37,7 +37,7 @@
* FIXME: add to recent docs
*
* FIXME: flags not implemented: OFN_DONTADDTORECENT,
- * OFN_ENABLEINCLUDENOTIFY, OFN_ENABLESIZING,
+ * OFN_ENABLESIZING,
* OFN_NODEREFERENCELINKS, OFN_NOREADONLYRETURN,
* OFN_NOTESTFILECREATE, OFN_USEMONIKERS
*
@@ -82,8 +82,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
#define UNIMPLEMENTED_FLAGS \
-(OFN_DONTADDTORECENT |\
-OFN_ENABLEINCLUDENOTIFY | OFN_ENABLESIZING |\
+(OFN_DONTADDTORECENT | OFN_ENABLESIZING |\
OFN_NODEREFERENCELINKS | OFN_NOREADONLYRETURN |\
OFN_NOTESTFILECREATE /*| OFN_USEMONIKERS*/)
diff --git a/dlls/comdlg32/filedlgbrowser.c b/dlls/comdlg32/filedlgbrowser.c
index 704fb98..f630f14 100644
--- a/dlls/comdlg32/filedlgbrowser.c
+++ b/dlls/comdlg32/filedlgbrowser.c
@@ -846,6 +846,47 @@ static HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnStateChange(ICommDlgBr
return NOERROR;
}
+/* send_includeitem_notification
+ *
+ * Sends a CDN_INCLUDEITEM notification for "pidl" to hwndParentDlg
+ */
+static LRESULT send_includeitem_notification(HWND hwndParentDlg, LPCITEMIDLIST pidl)
+{
+ LRESULT hook_result = 0;
+ FileOpenDlgInfos *fodInfos = GetPropA(hwndParentDlg, FileOpenDlgInfosStr);
+
+ if(!fodInfos) return 0;
+
+ if(fodInfos->DlgInfos.hwndCustomDlg)
+ {
+ TRACE("call notify CDN_INCLUDEITEM for pidl=%p\n", pidl);
+ if(fodInfos->unicode)
+ {
+ OFNOTIFYEXW ofnNotify;
+ ofnNotify.psf = fodInfos->Shell.FOIShellFolder;
+ ofnNotify.pidl = (LPITEMIDLIST)pidl;
+ ofnNotify.hdr.hwndFrom = hwndParentDlg;
+ ofnNotify.hdr.idFrom = 0;
+ ofnNotify.hdr.code = CDN_INCLUDEITEM;
+ ofnNotify.lpOFN = fodInfos->ofnInfos;
+ hook_result = SendMessageW(fodInfos->DlgInfos.hwndCustomDlg, WM_NOTIFY, 0, (LPARAM)&ofnNotify);
+ }
+ else
+ {
+ OFNOTIFYEXA ofnNotify;
+ ofnNotify.psf = fodInfos->Shell.FOIShellFolder;
+ ofnNotify.pidl = (LPITEMIDLIST)pidl;
+ ofnNotify.hdr.hwndFrom = hwndParentDlg;
+ ofnNotify.hdr.idFrom = 0;
+ ofnNotify.hdr.code = CDN_INCLUDEITEM;
+ ofnNotify.lpOFN = (LPOPENFILENAMEA)fodInfos->ofnInfos;
+ hook_result = SendMessageA(fodInfos->DlgInfos.hwndCustomDlg, WM_NOTIFY, 0, (LPARAM)&ofnNotify);
+ }
+ }
+ TRACE("Retval: 0x%08lx\n", hook_result);
+ return hook_result;
+}
+
/**************************************************************************
* IShellBrowserImpl_ICommDlgBrowser_IncludeObject
*/
@@ -875,6 +916,11 @@ static HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_IncludeObject(ICommDlgBr
if(ulAttr & (SFGAO_FOLDER | SFGAO_LINK))
return S_OK;
+ /* if the application takes care of including the item we are done */
+ if(fodInfos->ofnInfos->Flags & OFN_ENABLEINCLUDENOTIFY &&
+ send_includeitem_notification(This->hwndOwner, pidl))
+ return S_OK;
+
/* Check if there is a mask to apply if not */
if(!fodInfos->ShellInfos.lpstrCurrentFilter || !lstrlenW(fodInfos->ShellInfos.lpstrCurrentFilter))
return S_OK;
More information about the wine-cvs
mailing list