[Bug 10211] gmax 1.2 installer doesn't update dialog controls subscribed to SelectionPath event when the INSTALLDIR property has changed

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Jul 22 15:31:02 CDT 2011


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

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |NEW
                 CC|                            |focht at gmx.net
          Component|-unknown                    |msi
            Version|unspecified                 |0.9.48.
            Summary|gmax installer does not     |gmax 1.2 installer doesn't
                   |allow changing of           |update dialog controls
                   |installation directory,     |subscribed to SelectionPath
                   |fails to install            |event when the INSTALLDIR
                   |                            |property has changed

--- Comment #8 from Anastasius Focht <focht at gmx.net> 2011-07-22 15:31:01 CDT ---
Hello,

confirming, still present.

--- snip ---
...
0021:Call user32.CreateWindowExW(00000000,683a7440 L"Static",0063e346
L"C:\\gmax\\",50020000,00000033,000000c8,00000130,00000017,00040022,00000000,00000000,00000000)
ret=68338857
0021:trace:win:WIN_CreateWindowEx L"C:\\gmax\\" L"Static" ex=00000000
style=50020000 51,200 304x23 parent=0x40022 menu=(nil) inst=(nil) params=(nil)
0021:trace:win:dump_window_styles style: WS_CHILD WS_VISIBLE WS_GROUP
0021:trace:win:dump_window_styles exstyle:
0021:trace:win:WIN_SetWindowLong 0x20094 -12 0 W 
...
0021:trace:win:WIN_CreateWindowEx created window 0x20094
0021:Ret  user32.CreateWindowExW() retval=00020094 ret=68338857
0021:trace:msi:msi_dialog_create_window Dialog L"Single_Feature_Destination"
control L"[_WiseDialogFontDefault][INSTALLDIR]" hwnd 0x20094 
...
0021:Call user32.SetPropW(00020094,683a745c L"MSIDATA",00185b20) ret=6833996f
0021:Ret  user32.SetPropW() retval=00000001 ret=6833996f
0021:trace:msi:ControlEvent_SubscribeToEvent event L"SelectionPath" control
L"Text43" attribute L"SelectionPath" 
...
0021:trace:msi:msi_get_property returning L"C:\\gmax\\yyy\\" for property
L"INSTALLDIR"
...
0021:trace:msi:ControlEvent_FireSubscribedEvent Firing event L"SelectionPath" 
...
0021:trace:msi:msi_get_property property L"C:\\gmax\\yyy\\" not found
0021:Call user32.SetWindowTextW(00020094,00000000) ret=683392c9
0021:Call window proc 0x683395e0
(hwnd=0x20094,msg=WM_SETTEXT,wp=00000000,lp=00000000)
0021:trace:msi:MSIText_WndProc 0x20094 000c 00000000 00000000
0021:Call user32.GetPropW(00020094,683a745c L"MSIDATA") ret=68339673
0021:Ret  user32.GetPropW() retval=00185b20 ret=68339673
0021:Call user32.CallWindowProcW(68712a33,00020094,0000000c,00000000,00000000)
ret=683396e5
0021:Call window proc 0x68712a33
(hwnd=0x20094,msg=WM_SETTEXT,wp=00000000,lp=00000000)
0021:Ret  window proc 0x68712a33
(hwnd=0x20094,msg=WM_SETTEXT,wp=00000000,lp=00000000) retval=00000000
0021:Ret  user32.CallWindowProcW() retval=00000000 ret=683396e5
...
0021:Ret  window proc 0x683395e0
(hwnd=0x20094,msg=WM_SETTEXT,wp=00000000,lp=00000000) retval=00000000
0021:Ret  user32.SetWindowTextW() retval=00000000 ret=683392c9
...
0021:trace:msi:MSI_SetTargetPathW 0x1658a0 L"INSTALLDIR" L"C:\\gmax\\yyy\\"
...
0021:trace:msi:msi_set_property 0x1468d8 L"INSTALLDIR" L"C:\\gmax\\yyy\\" 
--- snip ---

The dialog controls correctly subscribe the "SelectionPath" event.
The event is fired after the folder selection is done (browse dialog).
Unfortunately there is a bug when retrieving the property value.

See "msi_dialog_handle_event":
http://source.winehq.org/git/wine.git/blob/e601ef55a9ce9c0d3e52da48846cfa3ff000a287:/dlls/msi/dialog.c#l693

--- snip ---
...
    else if ( !strcmpW( attribute, szSelectionPath ) )
    {
        LPWSTR prop = msi_dialog_dup_property( dialog, ctrl->property, TRUE );
        LPWSTR path;
        if (!prop) return;
        path = msi_dup_property( dialog->package->db, prop );
        SetWindowTextW( ctrl->hwnd, path );
        msi_free(prop);
        msi_free(path);
    }
--- snip ---

Due to "indirect == TRUE" passed to msi_dialog_dup_property(), the returned
string which ought to be the property name _is_ the property value (path value
of the INSTALLDIR property).
The following msi_dup_property() fails due to that mishap, returning NULL.

Either pass FALSE to msi_dialog_dup_property() or get rid following
msi_dup_property().

With that fixed, the installation directory name will be properly updated for
controls that are subscribed to SelectionPath event.

$ sha1sum gmax12.exe 
197b049ab1eda1b26061520e18ae43cf55b97e92  gmax12.exe

$ wine --version
wine-1.3.25-1-gdf65f3e

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list