Titles in wizards

Pavel Roskin proski at gnu.org
Wed Oct 1 03:29:27 CDT 2003


Hello!

The title of Cygwin Setup utility (http://www.cygwin.com/setup.exe) is
displayed as garbage.  I've traced the problem to property sheets.

MSDN says that pszCaption should be ignored for wizards, which wasn't
done.  Since the PROPSHEETHEADER structure is copied, it's safe to replace
pszCaption with NULL afterward, as if that part of the structure wasn't
copied.  I think it's the safest approach because setup.exe actually puts
garbage there, and it's unsafe to dereference.

That's the changes in PROPSHEET_CollectSheetInfo[AW].  Also, the title is
not updated when the pages are changed.  It turns out that the titles for
individual pages are prepared in PROPSHEET_CollectPageInfo() but never
get displayed.  With this patch, they are displayed in
PROPSHEET_ShowPage().

ChangeLog:
	* dlls/comctl32/propsheet.c:
	Ignore window caption from PROPSHEETHEADER in wizards.  Update
	window caption when changing pages.

-- 
Regards,
Pavel Roskin
-------------- next part --------------
--- dlls/comctl32/propsheet.c
+++ dlls/comctl32/propsheet.c
@@ -305,12 +305,17 @@ static BOOL PROPSHEET_CollectSheetInfoA(
 
   PROPSHEET_UnImplementedFlags(lppsh->dwFlags);
 
-  if (HIWORD(lppsh->pszCaption))
+  if (lppsh->dwFlags & INTRNL_ANY_WIZARD)
+     psInfo->ppshheader.pszCaption = NULL;
+  else
   {
-     int len = strlen(lppsh->pszCaption);
-     psInfo->ppshheader.pszCaption = HeapAlloc( GetProcessHeap(), 0, (len+1)*sizeof (WCHAR) );
-     MultiByteToWideChar(CP_ACP, 0, lppsh->pszCaption, -1, (LPWSTR) psInfo->ppshheader.pszCaption, len+1);
-     /* strcpy( (char *)psInfo->ppshheader.pszCaption, lppsh->pszCaption ); */
+     if (HIWORD(lppsh->pszCaption))
+     {
+        int len = strlen(lppsh->pszCaption);
+        psInfo->ppshheader.pszCaption = HeapAlloc( GetProcessHeap(), 0, (len+1)*sizeof (WCHAR) );
+        MultiByteToWideChar(CP_ACP, 0, lppsh->pszCaption, -1, (LPWSTR) psInfo->ppshheader.pszCaption, len+1);
+        /* strcpy( (char *)psInfo->ppshheader.pszCaption, lppsh->pszCaption ); */
+     }
   }
   psInfo->nPages = lppsh->nPages;
 
@@ -355,11 +360,16 @@ static BOOL PROPSHEET_CollectSheetInfoW(
 
   PROPSHEET_UnImplementedFlags(lppsh->dwFlags);
 
-  if (HIWORD(lppsh->pszCaption))
+  if (lppsh->dwFlags & INTRNL_ANY_WIZARD)
+     psInfo->ppshheader.pszCaption = NULL;
+  else
   {
-     int len = strlenW(lppsh->pszCaption);
-     psInfo->ppshheader.pszCaption = HeapAlloc( GetProcessHeap(), 0, (len+1)*sizeof(WCHAR) );
-     strcpyW( (WCHAR *)psInfo->ppshheader.pszCaption, lppsh->pszCaption );
+     if (!(lppsh->dwFlags & INTRNL_ANY_WIZARD) && HIWORD(lppsh->pszCaption))
+     {
+        int len = strlenW(lppsh->pszCaption);
+        psInfo->ppshheader.pszCaption = HeapAlloc( GetProcessHeap(), 0, (len+1)*sizeof(WCHAR) );
+        strcpyW( (WCHAR *)psInfo->ppshheader.pszCaption, lppsh->pszCaption );
+     }
   }
   psInfo->nPages = lppsh->nPages;
 
@@ -1554,6 +1564,9 @@ static BOOL PROPSHEET_ShowPage(HWND hwnd
      PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppshpage);
   }
 
+  PROPSHEET_SetTitleW(hwndDlg, psInfo->ppshheader.dwFlags,
+                      psInfo->proppage[index].pszText);
+
   if (psInfo->active_page != -1)
      ShowWindow(psInfo->proppage[psInfo->active_page].hwndPage, SW_HIDE);
 


More information about the wine-patches mailing list