Module: wine Branch: refs/heads/master Commit: ead00327e9dde616695131005d59d230a2b1da71 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ead00327e9dde61669513100...
Author: Mike McCormack mike@codeweavers.com Date: Fri Jan 6 12:35:09 2006 +0100
msi: Unload riched20 after its window is destroyed.
---
dlls/msi/dialog.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index bb64fdc..d0bf75b 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -59,6 +59,7 @@ struct msi_control_tag HBITMAP hBitmap; HICON hIcon; LPWSTR tabnext; + HMODULE hDll; WCHAR name[1]; };
@@ -328,6 +329,7 @@ static msi_control *msi_dialog_create_wi control->value = NULL; control->hBitmap = NULL; control->hIcon = NULL; + control->hDll = NULL; control->tabnext = strdupW( MSI_RecordGetString( rec, 11) );
x = MSI_RecordGetInteger( rec, 4 ); @@ -700,7 +702,6 @@ struct msi_scrolltext_info msi_dialog *dialog; msi_control *control; WNDPROC oldproc; - HMODULE hRichedit; };
static LRESULT WINAPI @@ -718,7 +719,6 @@ MSIScrollText_WndProc(HWND hWnd, UINT ms switch( msg ) { case WM_NCDESTROY: - FreeLibrary( info->hRichedit ); msi_free( info ); RemovePropW( hWnd, szButtonData ); break; @@ -778,24 +778,27 @@ static UINT msi_dialog_scrolltext_contro }; struct msi_scrolltext_info *info; msi_control *control; + HMODULE hRichedit; DWORD style;
info = msi_alloc( sizeof *info ); if (!info) return ERROR_FUNCTION_FAILED;
- info->hRichedit = LoadLibraryA("riched20"); + hRichedit = LoadLibraryA("riched20");
style = WS_BORDER | ES_MULTILINE | WS_VSCROLL | ES_READONLY | ES_AUTOVSCROLL | WS_TABSTOP; control = msi_dialog_add_control( dialog, rec, szRichEdit20W, style ); if (!control) { - FreeLibrary( info->hRichedit ); + FreeLibrary( hRichedit ); msi_free( info ); return ERROR_FUNCTION_FAILED; }
+ control->hDll = hRichedit; + info->dialog = dialog; info->control = control;
@@ -2212,6 +2215,8 @@ void msi_dialog_destroy( msi_dialog *dia DestroyIcon( t->hIcon ); msi_free( t->tabnext ); msi_free( t ); + if (t->hDll) + FreeLibrary( t->hDll ); }
/* destroy the list of fonts */