You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Rebase against e804e9a5bc9fde9ad8b84dfd121d44afbe177752.
This commit is contained in:
@@ -1,248 +0,0 @@
|
||||
From 8b23d1c04949938de77466556f7caf9321687a33 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hater <7element@mail.bg>
|
||||
Date: Wed, 16 Sep 2015 15:49:58 +0300
|
||||
Subject: comctl32: Implement PROPSHEET_InsertPage based on PROPSHEET_AddPage
|
||||
|
||||
---
|
||||
dlls/comctl32/propsheet.c | 152 +++++++++++++++++++++++++---------------
|
||||
dlls/comctl32/tests/propsheet.c | 18 ++---
|
||||
2 files changed, 104 insertions(+), 66 deletions(-)
|
||||
|
||||
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
|
||||
index ce7001c..fecb0e4 100644
|
||||
--- a/dlls/comctl32/propsheet.c
|
||||
+++ b/dlls/comctl32/propsheet.c
|
||||
@@ -172,6 +172,7 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, const PropSheetInfo* psI
|
||||
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheetInfo* psInfo);
|
||||
static BOOL PROPSHEET_DoCommand(HWND hwnd, WORD wID);
|
||||
static BOOL PROPSHEET_RemovePage(HWND hwndDlg, int index, HPROPSHEETPAGE hpage);
|
||||
+static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage);
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
@@ -2259,60 +2260,9 @@ static LRESULT PROPSHEET_QuerySiblings(HWND hwndDlg,
|
||||
static BOOL PROPSHEET_AddPage(HWND hwndDlg,
|
||||
HPROPSHEETPAGE hpage)
|
||||
{
|
||||
- PropPageInfo * ppi;
|
||||
PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
|
||||
- HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
|
||||
- TCITEMW item;
|
||||
- LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
|
||||
-
|
||||
TRACE("hpage %p\n", hpage);
|
||||
- /*
|
||||
- * Allocate and fill in a new PropPageInfo entry.
|
||||
- */
|
||||
- ppi = ReAlloc(psInfo->proppage, sizeof(PropPageInfo) * (psInfo->nPages + 1));
|
||||
- if (!ppi)
|
||||
- return FALSE;
|
||||
-
|
||||
- psInfo->proppage = ppi;
|
||||
- if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, psInfo->nPages, FALSE))
|
||||
- return FALSE;
|
||||
-
|
||||
- psInfo->proppage[psInfo->nPages].hpage = hpage;
|
||||
-
|
||||
- if (ppsp->dwFlags & PSP_PREMATURE)
|
||||
- {
|
||||
- /* Create the page but don't show it */
|
||||
- if(!PROPSHEET_CreatePage(hwndDlg, psInfo->nPages, psInfo, ppsp))
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- /*
|
||||
- * Add a new tab to the tab control.
|
||||
- */
|
||||
- item.mask = TCIF_TEXT;
|
||||
- item.pszText = (LPWSTR) psInfo->proppage[psInfo->nPages].pszText;
|
||||
- item.cchTextMax = MAX_TABTEXT_LENGTH;
|
||||
-
|
||||
- if (psInfo->hImageList)
|
||||
- {
|
||||
- SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
|
||||
- }
|
||||
-
|
||||
- if ( psInfo->proppage[psInfo->nPages].hasIcon )
|
||||
- {
|
||||
- item.mask |= TCIF_IMAGE;
|
||||
- item.iImage = psInfo->nPages;
|
||||
- }
|
||||
-
|
||||
- SendMessageW(hwndTabControl, TCM_INSERTITEMW, psInfo->nPages + 1,
|
||||
- (LPARAM)&item);
|
||||
-
|
||||
- psInfo->nPages++;
|
||||
-
|
||||
- /* If it is the only page - show it */
|
||||
- if(psInfo->nPages == 1)
|
||||
- PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
|
||||
- return TRUE;
|
||||
+ return PROPSHEET_InsertPage(hwndDlg, (HPROPSHEETPAGE)(ULONG_PTR)psInfo->nPages, hpage);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -2473,11 +2423,99 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
|
||||
*/
|
||||
static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage)
|
||||
{
|
||||
- if (IS_INTRESOURCE(hpageInsertAfter))
|
||||
- FIXME("(%p, %d, %p): stub\n", hwndDlg, LOWORD(hpageInsertAfter), hpage);
|
||||
- else
|
||||
- FIXME("(%p, %p, %p): stub\n", hwndDlg, hpageInsertAfter, hpage);
|
||||
- return FALSE;
|
||||
+ PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
|
||||
+ PropPageInfo * ppi, * prev_ppi = psInfo->proppage;
|
||||
+ HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
|
||||
+ LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
|
||||
+ TCITEMW item;
|
||||
+ int index;
|
||||
+
|
||||
+ TRACE("hwndDlg %p, hpageInsertAfter %p, hpage %p\n", hwndDlg, hpageInsertAfter, hpage);
|
||||
+
|
||||
+ if (IS_INTRESOURCE(hpageInsertAfter))
|
||||
+ index = LOWORD(hpageInsertAfter);
|
||||
+ else
|
||||
+ {
|
||||
+ index = PROPSHEET_GetPageIndex(hpageInsertAfter, psInfo, -1);
|
||||
+ if (index < 0)
|
||||
+ {
|
||||
+ TRACE("Could not find page to insert after!\n");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ index++;
|
||||
+ }
|
||||
+
|
||||
+ if (index > psInfo->nPages)
|
||||
+ index = psInfo->nPages;
|
||||
+
|
||||
+ /*
|
||||
+ * Allocate a new PropPageInfo entry.
|
||||
+ */
|
||||
+ ppi = Alloc(sizeof(PropPageInfo) * (psInfo->nPages + 1));
|
||||
+ if (!ppi)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /*
|
||||
+ * Fill in a new PropPageInfo entry.
|
||||
+ */
|
||||
+ if (index > 0)
|
||||
+ memcpy(ppi, prev_ppi, index * sizeof(PropPageInfo));
|
||||
+ memset(&ppi[index], 0, sizeof(PropPageInfo));
|
||||
+ if (index < psInfo->nPages)
|
||||
+ memcpy(&ppi[index + 1], &prev_ppi[index], (psInfo->nPages - index) * sizeof(PropPageInfo));
|
||||
+ psInfo->proppage = ppi;
|
||||
+
|
||||
+ if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, index, FALSE))
|
||||
+ {
|
||||
+ psInfo->proppage = prev_ppi;
|
||||
+ Free(ppi);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ psInfo->proppage[index].hpage = hpage;
|
||||
+
|
||||
+ if (ppsp->dwFlags & PSP_PREMATURE)
|
||||
+ {
|
||||
+ /* Create the page but don't show it */
|
||||
+ if(!PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppsp))
|
||||
+ {
|
||||
+ psInfo->proppage = prev_ppi;
|
||||
+ Free(ppi);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ Free(prev_ppi);
|
||||
+ psInfo->nPages++;
|
||||
+ if (index <= psInfo->active_page)
|
||||
+ psInfo->active_page++;
|
||||
+
|
||||
+ /*
|
||||
+ * Add a new tab to the tab control.
|
||||
+ */
|
||||
+ item.mask = TCIF_TEXT;
|
||||
+ item.pszText = (LPWSTR) psInfo->proppage[index].pszText;
|
||||
+ item.cchTextMax = MAX_TABTEXT_LENGTH;
|
||||
+
|
||||
+ if (psInfo->hImageList)
|
||||
+ {
|
||||
+ SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
|
||||
+ }
|
||||
+
|
||||
+ if (psInfo->proppage[index].hasIcon)
|
||||
+ {
|
||||
+ item.mask |= TCIF_IMAGE;
|
||||
+ item.iImage = index;
|
||||
+ }
|
||||
+
|
||||
+ SendMessageW(hwndTabControl, TCM_INSERTITEMW, index,
|
||||
+ (LPARAM)&item);
|
||||
+
|
||||
+ /* If it is the only page - show it */
|
||||
+ if (psInfo->nPages == 1)
|
||||
+ PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
|
||||
+
|
||||
+ return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
|
||||
index cdbbca8..bcc89bb 100644
|
||||
--- a/dlls/comctl32/tests/propsheet.c
|
||||
+++ b/dlls/comctl32/tests/propsheet.c
|
||||
@@ -920,7 +920,7 @@ static void test_PSM_INSERTPAGE(void)
|
||||
|
||||
/* add pages one by one */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
/* try with invalid values */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0);
|
||||
@@ -939,34 +939,34 @@ if (0)
|
||||
tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 2, "got %d\n", r);
|
||||
+ ok(r == 2, "got %d\n", r);
|
||||
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
/* add property sheet page that can't be created */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 4, "got %d\n", r);
|
||||
+ ok(r == 4, "got %d\n", r);
|
||||
|
||||
/* select page that can't be created */
|
||||
ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
/* test PSP_PREMATURE flag with incorrect property sheet page */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]);
|
||||
ok(ret == FALSE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
DestroyPropertySheetPage(hpsp[4]);
|
||||
DestroyWindow(hdlg);
|
||||
--
|
||||
2.6.1
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
Fixes: [25625] Add implementation for comctl32.PROPSHEET_InsertPage.
|
||||
Fixes: Add support for PSPCB_ADDREF/PSPCB_RELEASE callback notifications
|
||||
|
||||
Reference in New Issue
Block a user