riched20: TxGet[HV]Scroll should return the actual enabled state.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Huw Davies 2021-03-22 08:55:50 +00:00 committed by Alexandre Julliard
parent 14f4bd9697
commit ef6f58e4bd
2 changed files with 81 additions and 8 deletions

View File

@ -85,7 +85,10 @@ typedef struct ITextHostTestImpl
{
ITextHost ITextHost_iface;
LONG refCount;
HWND window;
RECT client_rect;
CHARFORMAT2W char_format;
DWORD scrollbars, props;
} ITextHostTestImpl;
static inline ITextHostTestImpl *impl_from_ITextHost(ITextHost *iface)
@ -93,6 +96,11 @@ static inline ITextHostTestImpl *impl_from_ITextHost(ITextHost *iface)
return CONTAINING_RECORD(iface, ITextHostTestImpl, ITextHost_iface);
}
static const WCHAR lorem[] = L"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. "
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. "
"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
static HRESULT WINAPI ITextHostImpl_QueryInterface(ITextHost *iface,
REFIID riid,
LPVOID *ppvObject)
@ -133,6 +141,7 @@ static HDC __thiscall ITextHostImpl_TxGetDC(ITextHost *iface)
{
ITextHostTestImpl *This = impl_from_ITextHost(iface);
TRACECALL("Call to TxGetDC(%p)\n", This);
if (This->window) return GetDC( This->window );
return NULL;
}
@ -140,6 +149,7 @@ static INT __thiscall ITextHostImpl_TxReleaseDC(ITextHost *iface, HDC hdc)
{
ITextHostTestImpl *This = impl_from_ITextHost(iface);
TRACECALL("Call to TxReleaseDC(%p)\n", This);
if (This->window) return ReleaseDC( This->window, hdc );
return 0;
}
@ -287,7 +297,8 @@ static HRESULT __thiscall ITextHostImpl_TxGetClientRect(ITextHost *iface, LPRECT
{
ITextHostTestImpl *This = impl_from_ITextHost(iface);
TRACECALL("Call to TxGetClientRect(%p, prc=%p)\n", This, prc);
return E_NOTIMPL;
*prc = This->client_rect;
return S_OK;
}
static HRESULT __thiscall ITextHostImpl_TxGetViewInset(ITextHost *iface, LPRECT prc)
@ -333,12 +344,12 @@ static HRESULT __thiscall ITextHostImpl_TxGetMaxLength(ITextHost *iface, DWORD *
return E_NOTIMPL;
}
static HRESULT __thiscall ITextHostImpl_TxGetScrollBars(ITextHost *iface, DWORD *pdwScrollBar)
static HRESULT __thiscall ITextHostImpl_TxGetScrollBars(ITextHost *iface, DWORD *scrollbars)
{
ITextHostTestImpl *This = impl_from_ITextHost(iface);
TRACECALL("Call to TxGetScrollBars(%p, pdwScrollBar=%p)\n",
This, pdwScrollBar);
return E_NOTIMPL;
TRACECALL("Call to TxGetScrollBars(%p, scrollbars=%p)\n", This, scrollbars);
*scrollbars = This->scrollbars;
return S_OK;
}
static HRESULT __thiscall ITextHostImpl_TxGetPasswordChar(ITextHost *iface, WCHAR *pch)
@ -383,7 +394,7 @@ static HRESULT __thiscall ITextHostImpl_TxGetPropertyBits(ITextHost *iface, DWOR
ITextHostTestImpl *This = impl_from_ITextHost(iface);
TRACECALL("Call to TxGetPropertyBits(%p, dwMask=0x%08x, pdwBits=%p)\n",
This, dwMask, pdwBits);
*pdwBits = 0;
*pdwBits = This->props & dwMask;
return S_OK;
}
@ -591,9 +602,13 @@ static BOOL init_texthost(ITextServices **txtserv, ITextHost **ret)
}
dummyTextHost->ITextHost_iface.lpVtbl = &itextHostVtbl;
dummyTextHost->refCount = 1;
dummyTextHost->window = NULL;
SetRectEmpty( &dummyTextHost->client_rect );
memset(&dummyTextHost->char_format, 0, sizeof(dummyTextHost->char_format));
dummyTextHost->char_format.cbSize = sizeof(dummyTextHost->char_format);
dummyTextHost->char_format.dwMask = CFM_ALL2;
dummyTextHost->scrollbars = 0;
dummyTextHost->props = 0;
hf = GetStockObject(DEFAULT_GUI_FONT);
hf_to_cf(hf, &dummyTextHost->char_format);
@ -988,16 +1003,74 @@ static void test_TxGetScroll(void)
ITextServices *txtserv;
ITextHost *host;
HRESULT ret;
LONG min_pos, max_pos, pos, page;
BOOL enabled;
ITextHostTestImpl *host_impl;
RECT client = {0, 0, 100, 100};
if (!init_texthost(&txtserv, &host))
return;
host_impl = impl_from_ITextHost( host );
ret = ITextServices_TxGetHScroll(txtserv, NULL, NULL, NULL, NULL, NULL);
ok(ret == S_OK, "ITextServices_TxGetHScroll failed: 0x%08x.\n", ret);
ret = ITextServices_TxGetVScroll(txtserv, NULL, NULL, NULL, NULL, NULL);
ok(ret == S_OK, "ITextServices_TxGetVScroll failed: 0x%08x.\n", ret);
ret = ITextServices_TxGetVScroll( txtserv, &min_pos, &max_pos, &pos, &page, &enabled );
ok( ret == S_OK, "ITextServices_TxGetHScroll failed: 0x%08x.\n", ret );
ok( min_pos == 0, "got %d\n", min_pos );
ok( max_pos == 0, "got %d\n", max_pos );
ok( pos == 0, "got %d\n", pos );
ok( page == 0, "got %d\n", page );
ok( !enabled, "got %d\n", enabled );
host_impl->scrollbars = WS_VSCROLL;
host_impl->props = TXTBIT_MULTILINE | TXTBIT_RICHTEXT | TXTBIT_WORDWRAP;
ITextServices_OnTxPropertyBitsChange( txtserv, TXTBIT_SCROLLBARCHANGE | TXTBIT_MULTILINE | TXTBIT_RICHTEXT | TXTBIT_WORDWRAP, host_impl->props );
host_impl->window = CreateWindowExA( 0, "static", NULL, WS_POPUP | WS_VISIBLE,
0, 0, 400, 400, 0, 0, 0, NULL );
host_impl->client_rect = client;
ret = ITextServices_OnTxInPlaceActivate( txtserv, &client );
ok( ret == S_OK, "got 0x%08x.\n", ret );
ret = ITextServices_TxGetVScroll( txtserv, &min_pos, &max_pos, &pos, &page, &enabled );
ok( ret == S_OK, "ITextServices_TxGetHScroll failed: 0x%08x.\n", ret );
ok( min_pos == 0, "got %d\n", min_pos );
todo_wine
ok( max_pos == 0, "got %d\n", max_pos );
ok( pos == 0, "got %d\n", pos );
ok( page == client.bottom, "got %d\n", page );
ok( !enabled, "got %d\n", enabled );
ret = ITextServices_TxSetText( txtserv, lorem );
ok( ret == S_OK, "got 0x%08x.\n", ret );
ret = ITextServices_TxGetVScroll( txtserv, &min_pos, &max_pos, &pos, &page, &enabled );
ok( ret == S_OK, "ITextServices_TxGetHScroll failed: 0x%08x.\n", ret );
ok( min_pos == 0, "got %d\n", min_pos );
ok( max_pos > client.bottom, "got %d\n", max_pos );
ok( pos == 0, "got %d\n", pos );
ok( page == client.bottom, "got %d\n", page );
ok( enabled, "got %d\n", enabled );
host_impl->scrollbars = WS_VSCROLL | ES_DISABLENOSCROLL;
ITextServices_OnTxPropertyBitsChange( txtserv, TXTBIT_SCROLLBARCHANGE, host_impl->props );
ITextServices_TxSetText( txtserv, L"short" );
ret = ITextServices_TxGetVScroll( txtserv, &min_pos, &max_pos, &pos, &page, &enabled );
ok( ret == S_OK, "ITextServices_TxGetHScroll failed: 0x%08x.\n", ret );
ok( min_pos == 0, "got %d\n", min_pos );
todo_wine
ok( max_pos == 0, "got %d\n", max_pos );
ok( pos == 0, "got %d\n", pos );
ok( page == client.bottom, "got %d\n", page );
ok( !enabled, "got %d\n", enabled );
DestroyWindow( host_impl->window );
ITextServices_Release(txtserv);
ITextHost_Release(host);
}

View File

@ -165,7 +165,7 @@ DECLSPEC_HIDDEN HRESULT __thiscall fnTextSrv_TxGetHScroll( ITextServices *iface,
if (max_pos) *max_pos = services->editor->horz_si.nMax;
if (pos) *pos = services->editor->horz_si.nPos;
if (page) *page = services->editor->horz_si.nPage;
if (enabled) *enabled = (services->editor->scrollbars & WS_HSCROLL) != 0;
if (enabled) *enabled = services->editor->horz_sb_enabled;
return S_OK;
}
@ -179,7 +179,7 @@ DECLSPEC_HIDDEN HRESULT __thiscall fnTextSrv_TxGetVScroll( ITextServices *iface,
if (max_pos) *max_pos = services->editor->vert_si.nMax;
if (pos) *pos = services->editor->vert_si.nPos;
if (page) *page = services->editor->vert_si.nPage;
if (enabled) *enabled = (services->editor->scrollbars & WS_VSCROLL) != 0;
if (enabled) *enabled = services->editor->vert_sb_enabled;
return S_OK;
}