[Bug 4253] New: Bad behaviour with hook functions in file dialog

Wine Bugs wine-bugs at winehq.org
Sat Jan 7 07:06:28 CST 2006


http://bugs.winehq.org/show_bug.cgi?id=4253

           Summary: Bad behaviour with hook functions in file dialog
           Product: Wine
           Version: 20050725
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: wine-binary
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: lurch at gmx.li


If an hook function has been installed for the "OK" button, wine shows the  
following behaviour:  
  
1. It sends a WM_NOTIFY message with CDN_FILEOK  
2. The hook function gets executed 
3. The hook function sets either a zero or nonzero DWL_MSGRESULT via 
SetWindowLong 
4. The hook function returns with either an zero or nonzero value 
 
Unfortunately, wines behaviour with respect to the two return values differs 
from Windows behaviour. Wine ignores the normal return value of the hook 
procedure and only checks for the DWL_MSGRESULT. 
 
I have found at least one application (Ragtime Solo, 
http://appdb.winehq.org/appview.php?versionId=2637 ) which shows wrong 
behaviour cause of that. According to the application developers, they use a 
nonzero DWL_MSGRESULT to hinder Windows from sending an FILEOKSTRING message 
("These WM_NOTIFY messages supersede the FILEOKSTRING, LBSELCHSTRING, 
SHAREVISTRING, and HELPMSGSTRING registered messages used by previous versions 
of the Open and Save As dialog boxes. However, the hook procedure also 
receives the superseded message after the WM_NOTIFY message if the WM_NOTIFY 
processing does not use SetWindowLong to set a nonzero DWL_MSGRESULT 
value." [1]). 
 
In [2], MSDN states for the hook procedure: 
"Return Value 
    If the hook procedure returns zero, the dialog box accepts the specified 
file name and closes. 
    To reject the specified file name and force the dialog box to remain open, 
return a nonzero value from the hook procedure and call the SetWindowLong 
function to set a nonzero DWL_MSGRESULT value." 
 
So IMHO wine should take the DWL_MSGRESULT in account _only_, if the return 
value is nonzero. 
 
[1] 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/aboutcommondialogboxes/openandsaveasdialogboxes.asp 
[2] 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxmessages/cdn_fileok.asp

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list