comdlg32: send CDN_INCLUDEITEM notification for each object in an Open/Save dialog
Ricardo Filipe
ricardojdfilipe at gmail.com
Fri Mar 13 12:32:06 CDT 2009
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20090313/d3355676/attachment.htm>
-------------- next part --------------
From 77b440b1ed3a14152c880ff4ad9c9aa30218ace2 Mon Sep 17 00:00:00 2001
From: Ricardo Filipe <ricardo_barbano at hotmail.com>
Date: Fri, 13 Mar 2009 00:58:35 +0000
Subject: 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..3a59023 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;
--
1.5.6.3
More information about the wine-patches
mailing list