mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against 78f74446b9806f63a27c2d643b8e29156b5bdcbe
This commit is contained in:
parent
5681cd5466
commit
9afb244a8e
@ -1,19 +1,19 @@
|
||||
From b5311918d5fbdc15b3321fed444daa0d0c8507de Mon Sep 17 00:00:00 2001
|
||||
From 24829b2ba6d5efd950f178b8282dda826c4d1df0 Mon Sep 17 00:00:00 2001
|
||||
From: Bruno Jesus <bjesus@codeweavers.com>
|
||||
Date: Thu, 28 Feb 2019 15:56:18 +1100
|
||||
Subject: [PATCH] dinput: Recalculated Axis after deadzone change.
|
||||
|
||||
Wine-bugs: https://bugs.winehq.org/show_bug.cgi?id=41317
|
||||
---
|
||||
dlls/dinput/joystick.c | 149 ++++++++++++++++++++++++++-----------------------
|
||||
dlls/dinput/joystick.c | 149 ++++++++++++++++++++++-------------------
|
||||
1 file changed, 80 insertions(+), 69 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
|
||||
index 0ec1ceb..fd3d44d 100644
|
||||
index 433348cd04..c150528e3d 100644
|
||||
--- a/dlls/dinput/joystick.c
|
||||
+++ b/dlls/dinput/joystick.c
|
||||
@@ -271,6 +271,76 @@ BOOL device_disabled_registry(const char* name)
|
||||
return do_disable;
|
||||
@@ -312,6 +312,76 @@ BOOL is_xinput_device(const DIDEVCAPS *devcaps, WORD vid, WORD pid)
|
||||
return (devcaps->dwAxes == 6 && devcaps->dwButtons >= 14);
|
||||
}
|
||||
|
||||
+static void remap_init(JoystickGenericImpl *This, int obj, ObjProps *remap_props)
|
||||
@ -89,7 +89,7 @@ index 0ec1ceb..fd3d44d 100644
|
||||
/******************************************************************************
|
||||
* SetProperty : change input device properties
|
||||
*/
|
||||
@@ -278,7 +348,6 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
@@ -319,7 +389,6 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
{
|
||||
JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface);
|
||||
DWORD i;
|
||||
@ -97,7 +97,7 @@ index 0ec1ceb..fd3d44d 100644
|
||||
|
||||
TRACE("(%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
|
||||
|
||||
@@ -295,69 +364,15 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
@@ -336,69 +405,15 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
case (DWORD_PTR)DIPROP_RANGE: {
|
||||
LPCDIPROPRANGE pr = (LPCDIPROPRANGE)ph;
|
||||
if (ph->dwHow == DIPH_DEVICE) {
|
||||
@ -171,7 +171,7 @@ index 0ec1ceb..fd3d44d 100644
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -366,15 +381,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
@@ -407,15 +422,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
if (ph->dwHow == DIPH_DEVICE) {
|
||||
TRACE("deadzone(%d) all\n", pd->dwData);
|
||||
for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
|
||||
@ -190,7 +190,7 @@ index 0ec1ceb..fd3d44d 100644
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -383,15 +396,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
@@ -424,15 +437,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
|
||||
if (ph->dwHow == DIPH_DEVICE) {
|
||||
TRACE("saturation(%d) all\n", pd->dwData);
|
||||
for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
|
||||
@ -210,5 +210,5 @@ index 0ec1ceb..fd3d44d 100644
|
||||
break;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
2.17.1
|
||||
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "48a74277f5f9e0c87d8c01457236a89d94cb71d3"
|
||||
echo "78f74446b9806f63a27c2d643b8e29156b5bdcbe"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -5328,24 +5328,12 @@ fi
|
||||
# | * dlls/riched20/richole.c, dlls/riched20/run.c, dlls/riched20/tests/richole.c
|
||||
# |
|
||||
if test "$enable_riched20_IText_Interface" -eq 1; then
|
||||
patch_apply riched20-IText_Interface/0001-riched20-Implement-IText-Selection-Range-Set-Start-E.patch
|
||||
patch_apply riched20-IText_Interface/0002-riched20-Stub-for-ITextFont-interface-and-implement-.patch
|
||||
patch_apply riched20-IText_Interface/0003-riched20-Stub-for-ITextPara-interface-and-implement-.patch
|
||||
patch_apply riched20-IText_Interface/0004-riched20-Fix-ME_RunOfsFromCharOfs-when-nCharOfs-strl.patch
|
||||
patch_apply riched20-IText_Interface/0005-riched20-Implement-ITextRange-GetText.patch
|
||||
patch_apply riched20-IText_Interface/0007-riched20-Implement-ITextRange-IsEqual.patch
|
||||
patch_apply riched20-IText_Interface/0008-riched20-Implement-ITextRange-GetStoryLength.patch
|
||||
patch_apply riched20-IText_Interface/0009-riched20-Implement-ITextSelection-GetStoryLength.patch
|
||||
patch_apply riched20-IText_Interface/0010-riched20-Silence-repeated-FIXMEs-triggered-by-Adobe-.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Implement IText{Selection, Range}::Set{Start, End}.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Stub for ITextFont interface and implement ITextRange::GetFont and ITextSelection::GetFont.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Stub for ITextPara interface and implement ITextRange::GetPara.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Fix ME_RunOfsFromCharOfs() when nCharOfs > strlen().", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Implement ITextRange::GetText.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Implement ITextRange::IsEqual.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Implement ITextRange::GetStoryLength.", 1 },';
|
||||
printf '%s\n' '+ { "Jactry Zeng", "riched20: Implement ITextSelection::GetStoryLength.", 1 },';
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "riched20: Silence repeated FIXMEs triggered by Adobe Reader.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
@ -1,172 +0,0 @@
|
||||
From ad837ef7c71cdca27ce947100107bfe5c6982ff7 Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Fri, 8 Aug 2014 21:32:57 +0800
|
||||
Subject: [PATCH] riched20: Implement IText{Selection, Range}::Set{Start, End}.
|
||||
|
||||
---
|
||||
dlls/riched20/tests/richole.c | 135 ++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 135 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index 70646202f04..77f93a55c14 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -3808,6 +3808,137 @@ static void test_MoveEnd(void)
|
||||
ITextRange_Release(range);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_SetStart(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ hres = ITextRange_SetStart(txtRge, first);
|
||||
+ ok(hres == S_FALSE, "ITextRange_SetStart\n");
|
||||
+
|
||||
+#define TEST_TXTRGE_SETSTART(cp, expected_start, expected_end) \
|
||||
+ hres = ITextRange_SetStart(txtRge, cp); \
|
||||
+ ok(hres == S_OK, "ITextRange_SetStart\n"); \
|
||||
+ ITextRange_GetStart(txtRge, &start); \
|
||||
+ ITextRange_GetEnd(txtRge, &end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTRGE_SETSTART(2, 2, 8)
|
||||
+ TEST_TXTRGE_SETSTART(-1, 0, 8)
|
||||
+ TEST_TXTRGE_SETSTART(13, 12, 12)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextRange_SetEnd(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ hres = ITextRange_SetEnd(txtRge, lim);
|
||||
+ ok(hres == S_FALSE, "ITextRange_SetEnd\n");
|
||||
+
|
||||
+#define TEST_TXTRGE_SETEND(cp, expected_start, expected_end) \
|
||||
+ hres = ITextRange_SetEnd(txtRge, cp); \
|
||||
+ ok(hres == S_OK, "ITextRange_SetEnd\n"); \
|
||||
+ ITextRange_GetStart(txtRge, &start); \
|
||||
+ ITextRange_GetEnd(txtRge, &end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTRGE_SETEND(6, 4, 6)
|
||||
+ TEST_TXTRGE_SETEND(14, 4, 13)
|
||||
+ TEST_TXTRGE_SETEND(-1, 0, 0)
|
||||
+
|
||||
+ ITextRange_Release(txtRge);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_SetStart(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ hres = ITextSelection_SetStart(txtSel, first);
|
||||
+ ok(hres == S_FALSE, "ITextSelection_SetStart\n");
|
||||
+
|
||||
+#define TEST_TXTSEL_SETSTART(cp, expected_start, expected_end) \
|
||||
+ hres = ITextSelection_SetStart(txtSel, cp); \
|
||||
+ ok(hres == S_OK, "ITextSelection_SetStart\n"); \
|
||||
+ SendMessageA(w, EM_GETSEL, (LPARAM)&start, (WPARAM)&end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTSEL_SETSTART(2, 2, 8)
|
||||
+ TEST_TXTSEL_SETSTART(-1, 0, 8)
|
||||
+ TEST_TXTSEL_SETSTART(13, 12, 12)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_SetEnd(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ hres = ITextSelection_SetEnd(txtSel, lim);
|
||||
+ ok(hres == S_FALSE, "ITextSelection_SetEnd\n");
|
||||
+
|
||||
+#define TEST_TXTSEL_SETEND(cp, expected_start, expected_end) \
|
||||
+ hres = ITextSelection_SetEnd(txtSel, cp); \
|
||||
+ ok(hres == S_OK, "ITextSelection_SetEnd\n"); \
|
||||
+ SendMessageA(w, EM_GETSEL, (LPARAM)&start, (WPARAM)&end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTSEL_SETEND(6, 4, 6)
|
||||
+ TEST_TXTSEL_SETEND(14, 4, 13)
|
||||
+ TEST_TXTSEL_SETEND(-1, 0, 0)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -3820,6 +3951,8 @@ START_TEST(richole)
|
||||
test_GetText();
|
||||
test_ITextSelection_GetChar();
|
||||
test_ITextSelection_GetStart_GetEnd();
|
||||
+ test_ITextSelection_SetStart();
|
||||
+ test_ITextSelection_SetEnd();
|
||||
test_ITextSelection_Collapse();
|
||||
test_ITextDocument_Range();
|
||||
test_ITextRange_GetChar();
|
||||
@@ -3827,6 +3960,8 @@ START_TEST(richole)
|
||||
test_ITextRange_GetStart_GetEnd();
|
||||
test_ITextRange_SetRange();
|
||||
test_ITextRange_GetDuplicate();
|
||||
+ test_ITextRange_SetStart();
|
||||
+ test_ITextRange_SetEnd();
|
||||
test_ITextRange_Collapse();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,191 +0,0 @@
|
||||
From c1711e301579aa2469cad8b0d3ba5567edc4611b Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Mon, 11 Aug 2014 13:51:55 +0800
|
||||
Subject: riched20: Stub for ITextFont interface and implement
|
||||
ITextRange::GetFont and ITextSelection::GetFont.
|
||||
|
||||
---
|
||||
dlls/riched20/richole.c | 20 ++++++++++
|
||||
dlls/riched20/tests/richole.c | 93 +++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 113 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index 1013e67..9e7d853 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -2654,6 +2654,10 @@ static HRESULT WINAPI TextFont_SetDuplicate(ITextFont *iface, ITextFont *pFont)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
FIXME("(%p)->(%p): stub\n", This, pFont);
|
||||
+
|
||||
+ if (This->range && !get_range_reole(This->range))
|
||||
+ return CO_E_RELEASED;
|
||||
+
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -2661,6 +2665,10 @@ static HRESULT WINAPI TextFont_CanChange(ITextFont *iface, LONG *ret)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
FIXME("(%p)->(%p): stub\n", This, ret);
|
||||
+
|
||||
+ if (This->range && !get_range_reole(This->range))
|
||||
+ return CO_E_RELEASED;
|
||||
+
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -2668,6 +2676,10 @@ static HRESULT WINAPI TextFont_IsEqual(ITextFont *iface, ITextFont *font, LONG *
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
FIXME("(%p)->(%p %p): stub\n", This, font, ret);
|
||||
+
|
||||
+ if (This->range && !get_range_reole(This->range))
|
||||
+ return CO_E_RELEASED;
|
||||
+
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -2841,6 +2853,10 @@ static HRESULT WINAPI TextFont_GetStyle(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+
|
||||
+ if (This->range && !get_range_reole(This->range))
|
||||
+ return CO_E_RELEASED;
|
||||
+
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -2848,6 +2864,10 @@ static HRESULT WINAPI TextFont_SetStyle(ITextFont *iface, LONG value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
FIXME("(%p)->(%d): stub\n", This, value);
|
||||
+
|
||||
+ if (This->range && !get_range_reole(This->range))
|
||||
+ return CO_E_RELEASED;
|
||||
+
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index 8047f4b..851ae9a 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -3528,6 +3528,97 @@ static void test_ITextSelection_SetEnd(void)
|
||||
release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_GetFont(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ ITextFont *txtFont = NULL, *txtFont1 = NULL;
|
||||
+ HRESULT hres;
|
||||
+ int first, lim;
|
||||
+ int refcount;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ LONG value;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 4;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextRange_GetFont(txtRge, &txtFont);
|
||||
+ ok(hres == S_OK, "ITextRange_GetFont\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextRange_GetFont(txtRge, &txtFont1);
|
||||
+ ok(hres == S_OK, "ITextRange_GetFont\n");
|
||||
+ ok(txtFont1 != txtFont, "A new pointer should be return\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont1);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ ITextFont_Release(txtFont1);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ ITextRange_Release(txtRge);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+
|
||||
+ hres = ITextFont_GetOutline(txtFont, &value);
|
||||
+ ok(hres == CO_E_RELEASED, "ITextFont after ITextDocument destroyed\n");
|
||||
+
|
||||
+ ITextFont_Release(txtFont);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_GetFont(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ ITextFont *txtFont = NULL, *txtFont1 = NULL;
|
||||
+ HRESULT hres;
|
||||
+ int first, lim;
|
||||
+ int refcount;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ LONG value;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 4;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextSelection_GetFont(txtSel, &txtFont);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetFont\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 3, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextSelection_GetFont(txtSel, &txtFont1);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetFont\n");
|
||||
+ ok(txtFont1 != txtFont, "A new pointer should be return\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont1);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ ITextFont_Release(txtFont1);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 3, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+
|
||||
+ hres = ITextFont_GetOutline(txtFont, &value);
|
||||
+ ok(hres == CO_E_RELEASED, "ITextFont after ITextDocument destroyed\n");
|
||||
+
|
||||
+ ITextFont_Release(txtFont);
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -3543,6 +3634,7 @@ START_TEST(richole)
|
||||
test_ITextSelection_SetStart();
|
||||
test_ITextSelection_SetEnd();
|
||||
test_ITextSelection_Collapse();
|
||||
+ test_ITextSelection_GetFont();
|
||||
test_ITextDocument_Range();
|
||||
test_ITextRange_GetChar();
|
||||
test_ITextRange_ScrollIntoView();
|
||||
@@ -3551,6 +3643,7 @@ START_TEST(richole)
|
||||
test_ITextRange_SetStart();
|
||||
test_ITextRange_SetEnd();
|
||||
test_ITextRange_Collapse();
|
||||
+ test_ITextRange_GetFont();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.7.1
|
||||
|
@ -1,19 +1,19 @@
|
||||
From b2a2a423ce6d478f1d34408c5db559bffc482a17 Mon Sep 17 00:00:00 2001
|
||||
From bd691edcc2cedd99ca55b1628980c46b93ddf90d Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Sun, 10 Aug 2014 22:17:57 +0800
|
||||
Subject: riched20: Stub for ITextPara interface and implement
|
||||
Subject: [PATCH] riched20: Stub for ITextPara interface and implement
|
||||
ITextRange::GetPara.
|
||||
|
||||
---
|
||||
dlls/riched20/richole.c | 202 ++++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/riched20/tests/richole.c | 47 ++++++++++
|
||||
2 files changed, 249 insertions(+)
|
||||
dlls/riched20/richole.c | 202 +++++++++++++++++++++++++
|
||||
dlls/riched20/tests/richole.c | 270 ++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 472 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index 64809cc..c309292 100644
|
||||
index c1119200153..724113404b4 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -3264,6 +3264,16 @@ static ULONG WINAPI TextPara_Release(ITextPara *iface)
|
||||
@@ -3422,6 +3422,16 @@ static ULONG WINAPI TextPara_Release(ITextPara *iface)
|
||||
return ref;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ index 64809cc..c309292 100644
|
||||
static HRESULT WINAPI TextPara_GetTypeInfoCount(ITextPara *iface, UINT *pctinfo)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
@@ -3330,6 +3340,10 @@ static HRESULT WINAPI TextPara_GetDuplicate(ITextPara *iface, ITextPara **ret)
|
||||
@@ -3489,6 +3499,10 @@ static HRESULT WINAPI TextPara_GetDuplicate(ITextPara *iface, ITextPara **ret)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ret);
|
||||
@ -41,7 +41,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3337,6 +3351,10 @@ static HRESULT WINAPI TextPara_SetDuplicate(ITextPara *iface, ITextPara *para)
|
||||
@@ -3496,6 +3510,10 @@ static HRESULT WINAPI TextPara_SetDuplicate(ITextPara *iface, ITextPara *para)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, para);
|
||||
@ -52,7 +52,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3344,6 +3362,10 @@ static HRESULT WINAPI TextPara_CanChange(ITextPara *iface, LONG *ret)
|
||||
@@ -3503,6 +3521,10 @@ static HRESULT WINAPI TextPara_CanChange(ITextPara *iface, LONG *ret)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ret);
|
||||
@ -63,7 +63,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3351,6 +3373,10 @@ static HRESULT WINAPI TextPara_IsEqual(ITextPara *iface, ITextPara *para, LONG *
|
||||
@@ -3510,6 +3532,10 @@ static HRESULT WINAPI TextPara_IsEqual(ITextPara *iface, ITextPara *para, LONG *
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p %p)\n", This, para, ret);
|
||||
@ -74,7 +74,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3358,6 +3384,10 @@ static HRESULT WINAPI TextPara_Reset(ITextPara *iface, LONG value)
|
||||
@@ -3517,6 +3543,10 @@ static HRESULT WINAPI TextPara_Reset(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -85,7 +85,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3365,6 +3395,10 @@ static HRESULT WINAPI TextPara_GetStyle(ITextPara *iface, LONG *value)
|
||||
@@ -3524,6 +3554,10 @@ static HRESULT WINAPI TextPara_GetStyle(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -96,7 +96,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3372,6 +3406,10 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG value)
|
||||
@@ -3531,6 +3565,10 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -107,7 +107,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3379,6 +3417,10 @@ static HRESULT WINAPI TextPara_GetAlignment(ITextPara *iface, LONG *value)
|
||||
@@ -3538,6 +3576,10 @@ static HRESULT WINAPI TextPara_GetAlignment(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -118,7 +118,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3386,6 +3428,10 @@ static HRESULT WINAPI TextPara_SetAlignment(ITextPara *iface, LONG value)
|
||||
@@ -3545,6 +3587,10 @@ static HRESULT WINAPI TextPara_SetAlignment(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -129,7 +129,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3393,6 +3439,10 @@ static HRESULT WINAPI TextPara_GetHyphenation(ITextPara *iface, LONG *value)
|
||||
@@ -3552,6 +3598,10 @@ static HRESULT WINAPI TextPara_GetHyphenation(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -140,7 +140,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3400,6 +3450,10 @@ static HRESULT WINAPI TextPara_SetHyphenation(ITextPara *iface, LONG value)
|
||||
@@ -3559,6 +3609,10 @@ static HRESULT WINAPI TextPara_SetHyphenation(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -151,7 +151,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3407,6 +3461,10 @@ static HRESULT WINAPI TextPara_GetFirstLineIndent(ITextPara *iface, FLOAT *value
|
||||
@@ -3566,6 +3620,10 @@ static HRESULT WINAPI TextPara_GetFirstLineIndent(ITextPara *iface, FLOAT *value
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -162,7 +162,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3414,6 +3472,10 @@ static HRESULT WINAPI TextPara_GetKeepTogether(ITextPara *iface, LONG *value)
|
||||
@@ -3573,6 +3631,10 @@ static HRESULT WINAPI TextPara_GetKeepTogether(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -173,7 +173,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3421,6 +3483,10 @@ static HRESULT WINAPI TextPara_SetKeepTogether(ITextPara *iface, LONG value)
|
||||
@@ -3580,6 +3642,10 @@ static HRESULT WINAPI TextPara_SetKeepTogether(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -184,7 +184,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3428,6 +3494,10 @@ static HRESULT WINAPI TextPara_GetKeepWithNext(ITextPara *iface, LONG *value)
|
||||
@@ -3587,6 +3653,10 @@ static HRESULT WINAPI TextPara_GetKeepWithNext(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -195,7 +195,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3435,6 +3505,10 @@ static HRESULT WINAPI TextPara_SetKeepWithNext(ITextPara *iface, LONG value)
|
||||
@@ -3594,6 +3664,10 @@ static HRESULT WINAPI TextPara_SetKeepWithNext(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -206,7 +206,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3442,6 +3516,10 @@ static HRESULT WINAPI TextPara_GetLeftIndent(ITextPara *iface, FLOAT *value)
|
||||
@@ -3601,6 +3675,10 @@ static HRESULT WINAPI TextPara_GetLeftIndent(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -217,7 +217,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3449,6 +3527,10 @@ static HRESULT WINAPI TextPara_GetLineSpacing(ITextPara *iface, FLOAT *value)
|
||||
@@ -3608,6 +3686,10 @@ static HRESULT WINAPI TextPara_GetLineSpacing(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -228,7 +228,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3456,6 +3538,10 @@ static HRESULT WINAPI TextPara_GetLineSpacingRule(ITextPara *iface, LONG *value)
|
||||
@@ -3615,6 +3697,10 @@ static HRESULT WINAPI TextPara_GetLineSpacingRule(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -239,7 +239,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3463,6 +3549,10 @@ static HRESULT WINAPI TextPara_GetListAlignment(ITextPara *iface, LONG *value)
|
||||
@@ -3622,6 +3708,10 @@ static HRESULT WINAPI TextPara_GetListAlignment(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -250,7 +250,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3470,6 +3560,10 @@ static HRESULT WINAPI TextPara_SetListAlignment(ITextPara *iface, LONG value)
|
||||
@@ -3629,6 +3719,10 @@ static HRESULT WINAPI TextPara_SetListAlignment(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -261,7 +261,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3477,6 +3571,10 @@ static HRESULT WINAPI TextPara_GetListLevelIndex(ITextPara *iface, LONG *value)
|
||||
@@ -3636,6 +3730,10 @@ static HRESULT WINAPI TextPara_GetListLevelIndex(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -272,7 +272,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3484,6 +3582,10 @@ static HRESULT WINAPI TextPara_SetListLevelIndex(ITextPara *iface, LONG value)
|
||||
@@ -3643,6 +3741,10 @@ static HRESULT WINAPI TextPara_SetListLevelIndex(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -283,7 +283,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3491,6 +3593,10 @@ static HRESULT WINAPI TextPara_GetListStart(ITextPara *iface, LONG *value)
|
||||
@@ -3650,6 +3752,10 @@ static HRESULT WINAPI TextPara_GetListStart(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -294,7 +294,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3498,6 +3604,10 @@ static HRESULT WINAPI TextPara_SetListStart(ITextPara *iface, LONG value)
|
||||
@@ -3657,6 +3763,10 @@ static HRESULT WINAPI TextPara_SetListStart(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -305,7 +305,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3505,6 +3615,10 @@ static HRESULT WINAPI TextPara_GetListTab(ITextPara *iface, FLOAT *value)
|
||||
@@ -3664,6 +3774,10 @@ static HRESULT WINAPI TextPara_GetListTab(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -316,7 +316,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3512,6 +3626,10 @@ static HRESULT WINAPI TextPara_SetListTab(ITextPara *iface, FLOAT value)
|
||||
@@ -3671,6 +3785,10 @@ static HRESULT WINAPI TextPara_SetListTab(ITextPara *iface, FLOAT value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f)\n", This, value);
|
||||
@ -327,7 +327,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3519,6 +3637,10 @@ static HRESULT WINAPI TextPara_GetListType(ITextPara *iface, LONG *value)
|
||||
@@ -3678,6 +3796,10 @@ static HRESULT WINAPI TextPara_GetListType(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -338,7 +338,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3526,6 +3648,10 @@ static HRESULT WINAPI TextPara_SetListType(ITextPara *iface, LONG value)
|
||||
@@ -3685,6 +3807,10 @@ static HRESULT WINAPI TextPara_SetListType(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -349,7 +349,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3533,6 +3659,10 @@ static HRESULT WINAPI TextPara_GetNoLineNumber(ITextPara *iface, LONG *value)
|
||||
@@ -3692,6 +3818,10 @@ static HRESULT WINAPI TextPara_GetNoLineNumber(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -360,7 +360,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3540,6 +3670,10 @@ static HRESULT WINAPI TextPara_SetNoLineNumber(ITextPara *iface, LONG value)
|
||||
@@ -3699,6 +3829,10 @@ static HRESULT WINAPI TextPara_SetNoLineNumber(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -371,7 +371,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3547,6 +3681,10 @@ static HRESULT WINAPI TextPara_GetPageBreakBefore(ITextPara *iface, LONG *value)
|
||||
@@ -3706,6 +3840,10 @@ static HRESULT WINAPI TextPara_GetPageBreakBefore(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -382,7 +382,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3554,6 +3692,10 @@ static HRESULT WINAPI TextPara_SetPageBreakBefore(ITextPara *iface, LONG value)
|
||||
@@ -3713,6 +3851,10 @@ static HRESULT WINAPI TextPara_SetPageBreakBefore(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -393,7 +393,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3561,6 +3703,10 @@ static HRESULT WINAPI TextPara_GetRightIndent(ITextPara *iface, FLOAT *value)
|
||||
@@ -3720,6 +3862,10 @@ static HRESULT WINAPI TextPara_GetRightIndent(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -404,7 +404,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3568,6 +3714,10 @@ static HRESULT WINAPI TextPara_SetRightIndent(ITextPara *iface, FLOAT value)
|
||||
@@ -3727,6 +3873,10 @@ static HRESULT WINAPI TextPara_SetRightIndent(ITextPara *iface, FLOAT value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f)\n", This, value);
|
||||
@ -415,7 +415,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3575,6 +3725,10 @@ static HRESULT WINAPI TextPara_SetIndents(ITextPara *iface, FLOAT StartIndent, F
|
||||
@@ -3734,6 +3884,10 @@ static HRESULT WINAPI TextPara_SetIndents(ITextPara *iface, FLOAT StartIndent, F
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f %.2f %.2f)\n", This, StartIndent, LeftIndent, RightIndent);
|
||||
@ -426,7 +426,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3582,6 +3736,10 @@ static HRESULT WINAPI TextPara_SetLineSpacing(ITextPara *iface, LONG LineSpacing
|
||||
@@ -3741,6 +3895,10 @@ static HRESULT WINAPI TextPara_SetLineSpacing(ITextPara *iface, LONG LineSpacing
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d %.2f)\n", This, LineSpacingRule, LineSpacing);
|
||||
@ -437,7 +437,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3589,6 +3747,10 @@ static HRESULT WINAPI TextPara_GetSpaceAfter(ITextPara *iface, FLOAT *value)
|
||||
@@ -3748,6 +3906,10 @@ static HRESULT WINAPI TextPara_GetSpaceAfter(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -448,7 +448,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3596,6 +3758,10 @@ static HRESULT WINAPI TextPara_SetSpaceAfter(ITextPara *iface, FLOAT value)
|
||||
@@ -3755,6 +3917,10 @@ static HRESULT WINAPI TextPara_SetSpaceAfter(ITextPara *iface, FLOAT value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f)\n", This, value);
|
||||
@ -459,7 +459,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3603,6 +3769,10 @@ static HRESULT WINAPI TextPara_GetSpaceBefore(ITextPara *iface, FLOAT *value)
|
||||
@@ -3762,6 +3928,10 @@ static HRESULT WINAPI TextPara_GetSpaceBefore(ITextPara *iface, FLOAT *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -470,7 +470,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3610,6 +3780,10 @@ static HRESULT WINAPI TextPara_SetSpaceBefore(ITextPara *iface, FLOAT value)
|
||||
@@ -3769,6 +3939,10 @@ static HRESULT WINAPI TextPara_SetSpaceBefore(ITextPara *iface, FLOAT value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f)\n", This, value);
|
||||
@ -481,7 +481,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3617,6 +3791,10 @@ static HRESULT WINAPI TextPara_GetWidowControl(ITextPara *iface, LONG *value)
|
||||
@@ -3776,6 +3950,10 @@ static HRESULT WINAPI TextPara_GetWidowControl(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -492,7 +492,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3624,6 +3802,10 @@ static HRESULT WINAPI TextPara_SetWidowControl(ITextPara *iface, LONG value)
|
||||
@@ -3783,6 +3961,10 @@ static HRESULT WINAPI TextPara_SetWidowControl(ITextPara *iface, LONG value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d)\n", This, value);
|
||||
@ -503,7 +503,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3631,6 +3813,10 @@ static HRESULT WINAPI TextPara_GetTabCount(ITextPara *iface, LONG *value)
|
||||
@@ -3790,6 +3972,10 @@ static HRESULT WINAPI TextPara_GetTabCount(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%p)\n", This, value);
|
||||
@ -514,7 +514,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3638,6 +3824,10 @@ static HRESULT WINAPI TextPara_AddTab(ITextPara *iface, FLOAT tbPos, LONG tbAlig
|
||||
@@ -3797,6 +3983,10 @@ static HRESULT WINAPI TextPara_AddTab(ITextPara *iface, FLOAT tbPos, LONG tbAlig
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f %d %d)\n", This, tbPos, tbAlign, tbLeader);
|
||||
@ -525,7 +525,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3645,6 +3835,10 @@ static HRESULT WINAPI TextPara_ClearAllTabs(ITextPara *iface)
|
||||
@@ -3804,6 +3994,10 @@ static HRESULT WINAPI TextPara_ClearAllTabs(ITextPara *iface)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
@ -536,7 +536,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3652,6 +3846,10 @@ static HRESULT WINAPI TextPara_DeleteTab(ITextPara *iface, FLOAT pos)
|
||||
@@ -3811,6 +4005,10 @@ static HRESULT WINAPI TextPara_DeleteTab(ITextPara *iface, FLOAT pos)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%.2f)\n", This, pos);
|
||||
@ -547,7 +547,7 @@ index 64809cc..c309292 100644
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -3659,6 +3857,10 @@ static HRESULT WINAPI TextPara_GetTab(ITextPara *iface, LONG iTab, FLOAT *ptbPos
|
||||
@@ -3818,6 +4016,10 @@ static HRESULT WINAPI TextPara_GetTab(ITextPara *iface, LONG iTab, FLOAT *ptbPos
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
FIXME("(%p)->(%d %p %p %p)\n", This, iTab, ptbPos, ptbAlign, ptbLeader);
|
||||
@ -559,13 +559,235 @@ index 64809cc..c309292 100644
|
||||
}
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index 5f8e1cc..c148034 100644
|
||||
index 70646202f04..6dadf622732 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -3473,6 +3473,52 @@ static void test_ITextSelection_GetFont(void)
|
||||
ITextFont_Release(txtFont);
|
||||
@@ -3808,6 +3808,274 @@ static void test_MoveEnd(void)
|
||||
ITextRange_Release(range);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_SetStart(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ hres = ITextRange_SetStart(txtRge, first);
|
||||
+ ok(hres == S_FALSE, "ITextRange_SetStart\n");
|
||||
+
|
||||
+#define TEST_TXTRGE_SETSTART(cp, expected_start, expected_end) \
|
||||
+ hres = ITextRange_SetStart(txtRge, cp); \
|
||||
+ ok(hres == S_OK, "ITextRange_SetStart\n"); \
|
||||
+ ITextRange_GetStart(txtRge, &start); \
|
||||
+ ITextRange_GetEnd(txtRge, &end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTRGE_SETSTART(2, 2, 8)
|
||||
+ TEST_TXTRGE_SETSTART(-1, 0, 8)
|
||||
+ TEST_TXTRGE_SETSTART(13, 12, 12)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextRange_SetEnd(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ hres = ITextRange_SetEnd(txtRge, lim);
|
||||
+ ok(hres == S_FALSE, "ITextRange_SetEnd\n");
|
||||
+
|
||||
+#define TEST_TXTRGE_SETEND(cp, expected_start, expected_end) \
|
||||
+ hres = ITextRange_SetEnd(txtRge, cp); \
|
||||
+ ok(hres == S_OK, "ITextRange_SetEnd\n"); \
|
||||
+ ITextRange_GetStart(txtRge, &start); \
|
||||
+ ITextRange_GetEnd(txtRge, &end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTRGE_SETEND(6, 4, 6)
|
||||
+ TEST_TXTRGE_SETEND(14, 4, 13)
|
||||
+ TEST_TXTRGE_SETEND(-1, 0, 0)
|
||||
+
|
||||
+ ITextRange_Release(txtRge);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_SetStart(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ hres = ITextSelection_SetStart(txtSel, first);
|
||||
+ ok(hres == S_FALSE, "ITextSelection_SetStart\n");
|
||||
+
|
||||
+#define TEST_TXTSEL_SETSTART(cp, expected_start, expected_end) \
|
||||
+ hres = ITextSelection_SetStart(txtSel, cp); \
|
||||
+ ok(hres == S_OK, "ITextSelection_SetStart\n"); \
|
||||
+ SendMessageA(w, EM_GETSEL, (LPARAM)&start, (WPARAM)&end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTSEL_SETSTART(2, 2, 8)
|
||||
+ TEST_TXTSEL_SETSTART(-1, 0, 8)
|
||||
+ TEST_TXTSEL_SETSTART(13, 12, 12)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_SetEnd(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG first, lim, start, end;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 8;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ hres = ITextSelection_SetEnd(txtSel, lim);
|
||||
+ ok(hres == S_FALSE, "ITextSelection_SetEnd\n");
|
||||
+
|
||||
+#define TEST_TXTSEL_SETEND(cp, expected_start, expected_end) \
|
||||
+ hres = ITextSelection_SetEnd(txtSel, cp); \
|
||||
+ ok(hres == S_OK, "ITextSelection_SetEnd\n"); \
|
||||
+ SendMessageA(w, EM_GETSEL, (LPARAM)&start, (WPARAM)&end); \
|
||||
+ ok(start == expected_start, "got wrong start value: %d\n", start); \
|
||||
+ ok(end == expected_end, "got wrong end value: %d\n", end);
|
||||
+
|
||||
+ TEST_TXTSEL_SETEND(6, 4, 6)
|
||||
+ TEST_TXTSEL_SETEND(14, 4, 13)
|
||||
+ TEST_TXTSEL_SETEND(-1, 0, 0)
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextRange_GetFont(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ ITextFont *txtFont = NULL, *txtFont1 = NULL;
|
||||
+ HRESULT hres;
|
||||
+ int first, lim;
|
||||
+ int refcount;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ LONG value;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 4;
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextRange_GetFont(txtRge, &txtFont);
|
||||
+ ok(hres == S_OK, "ITextRange_GetFont\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextRange_GetFont(txtRge, &txtFont1);
|
||||
+ ok(hres == S_OK, "ITextRange_GetFont\n");
|
||||
+ ok(txtFont1 != txtFont, "A new pointer should be return\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont1);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ ITextFont_Release(txtFont1);
|
||||
+ refcount = get_refcount((IUnknown *)txtRge);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ ITextRange_Release(txtRge);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+
|
||||
+ hres = ITextFont_GetOutline(txtFont, &value);
|
||||
+ ok(hres == CO_E_RELEASED, "ITextFont after ITextDocument destroyed\n");
|
||||
+
|
||||
+ ITextFont_Release(txtFont);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextSelection_GetFont(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ ITextFont *txtFont = NULL, *txtFont1 = NULL;
|
||||
+ HRESULT hres;
|
||||
+ int first, lim;
|
||||
+ int refcount;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ LONG value;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ first = 4, lim = 4;
|
||||
+ SendMessageA(w, EM_SETSEL, first, lim);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 2, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextSelection_GetFont(txtSel, &txtFont);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetFont\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 3, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ hres = ITextSelection_GetFont(txtSel, &txtFont1);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetFont\n");
|
||||
+ ok(txtFont1 != txtFont, "A new pointer should be return\n");
|
||||
+ refcount = get_refcount((IUnknown *)txtFont1);
|
||||
+ ok(refcount == 1, "got wrong ref count: %d\n", refcount);
|
||||
+ ITextFont_Release(txtFont1);
|
||||
+ refcount = get_refcount((IUnknown *)txtSel);
|
||||
+ ok(refcount == 3, "got wrong ref count: %d\n", refcount);
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+
|
||||
+ hres = ITextFont_GetOutline(txtFont, &value);
|
||||
+ ok(hres == CO_E_RELEASED, "ITextFont after ITextDocument destroyed\n");
|
||||
+
|
||||
+ ITextFont_Release(txtFont);
|
||||
+}
|
||||
+
|
||||
+static void test_ITextRange_GetPara(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
@ -615,14 +837,15 @@ index 5f8e1cc..c148034 100644
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -3497,6 +3543,7 @@ START_TEST(richole)
|
||||
test_ITextRange_SetEnd();
|
||||
@@ -3828,6 +4096,8 @@ START_TEST(richole)
|
||||
test_ITextRange_SetRange();
|
||||
test_ITextRange_GetDuplicate();
|
||||
test_ITextRange_Collapse();
|
||||
test_ITextRange_GetFont();
|
||||
+ test_ITextRange_GetFont();
|
||||
+ test_ITextRange_GetPara();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.4.2
|
||||
2.17.1
|
||||
|
||||
|
@ -1,68 +0,0 @@
|
||||
From ce774a2b82262619fb882649ca02802e943ce404 Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Wed, 13 Aug 2014 15:40:11 +0800
|
||||
Subject: riched20: Implement ITextRange::GetText.
|
||||
|
||||
---
|
||||
dlls/riched20/tests/richole.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index c148034..051d9fe 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -3519,6 +3519,43 @@ static void test_ITextRange_GetPara(void)
|
||||
ITextPara_Release(txtPara);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_GetText(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ BSTR bstr = NULL;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ static const WCHAR bufW1[] = {'T', 'e', 's', 't', 0};
|
||||
+ static const WCHAR bufW2[] = {'T', 'e', 'x', 't', '\r', 0};
|
||||
+ static const WCHAR bufW3[] = {'T', 'e', 'x', 't', 0};
|
||||
+ static const WCHAR bufW4[] = {'T', 'e', 's', 't', 'S', 'o', 'm',
|
||||
+ 'e', 'T', 'e', 'x', 't', '\r', 0};
|
||||
+ static const WCHAR bufW5[] = {'\r', 0};
|
||||
+
|
||||
+
|
||||
+#define TEST_TXTRGE_GETTEXT(first, lim, expected_string) \
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL); \
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1); \
|
||||
+ ITextDocument_Range(txtDoc, first, lim, &txtRge); \
|
||||
+ hres = ITextRange_GetText(txtRge, &bstr); \
|
||||
+ ok(hres == S_OK, "ITextRange_GetText\n"); \
|
||||
+ ok(!lstrcmpW(bstr, expected_string), "got wrong text: %s\n", wine_dbgstr_w(bstr)); \
|
||||
+ SysFreeString(bstr); \
|
||||
+ ITextRange_Release(txtRge); \
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+
|
||||
+ TEST_TXTRGE_GETTEXT(0, 4, bufW1)
|
||||
+ TEST_TXTRGE_GETTEXT(4, 0, bufW1)
|
||||
+ TEST_TXTRGE_GETTEXT(8, 12, bufW3)
|
||||
+ TEST_TXTRGE_GETTEXT(8, 13, bufW2)
|
||||
+ TEST_TXTRGE_GETTEXT(12, 13, bufW5)
|
||||
+ TEST_TXTRGE_GETTEXT(0, 13, bufW4)
|
||||
+ TEST_TXTRGE_GETTEXT(1, 1, NULL)
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -3544,6 +3581,7 @@ START_TEST(richole)
|
||||
test_ITextRange_Collapse();
|
||||
test_ITextRange_GetFont();
|
||||
test_ITextRange_GetPara();
|
||||
+ test_ITextRange_GetText();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.4.2
|
||||
|
@ -1,77 +0,0 @@
|
||||
From 2d05fb15e16385684dfc1e9f1d2c51fa4d5830d9 Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Fri, 15 Aug 2014 14:27:21 +0800
|
||||
Subject: [PATCH] riched20: Implement ITextRange::IsEqual.
|
||||
|
||||
---
|
||||
dlls/riched20/tests/richole.c | 47 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 47 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index 4512085ea3..b2bb21d69b 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -4113,6 +4113,52 @@ static void test_ITextRange_GetText(void)
|
||||
TEST_TXTRGE_GETTEXT(1, 1, NULL)
|
||||
}
|
||||
|
||||
+static void test_ITextRange_IsEqual2(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge1 = NULL, *txtRge2 = NULL;
|
||||
+ HRESULT hres;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ LONG res;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+ ITextDocument_Range(txtDoc, 2, 4, &txtRge1);
|
||||
+ ITextDocument_Range(txtDoc, 2, 4, &txtRge2);
|
||||
+
|
||||
+#define TEST_TXTRGE_ISEQUAL(expected_hres, expected_res) \
|
||||
+ hres = ITextRange_IsEqual(txtRge1, txtRge2, &res); \
|
||||
+ ok(hres == expected_hres, "ITextRange_IsEqual\n"); \
|
||||
+ ok(res == expected_res, "got wrong return value: %d\n", res);
|
||||
+
|
||||
+ TEST_TXTRGE_ISEQUAL(S_OK, tomTrue)
|
||||
+ ITextRange_SetRange(txtRge2, 1, 2);
|
||||
+ TEST_TXTRGE_ISEQUAL(S_FALSE, tomFalse)
|
||||
+
|
||||
+ ITextRange_SetRange(txtRge1, 1, 1);
|
||||
+ ITextRange_SetRange(txtRge2, 2, 2);
|
||||
+ TEST_TXTRGE_ISEQUAL(S_FALSE, tomFalse)
|
||||
+
|
||||
+ ITextRange_SetRange(txtRge2, 1, 1);
|
||||
+ TEST_TXTRGE_ISEQUAL(S_OK, tomTrue)
|
||||
+
|
||||
+ hres = ITextRange_IsEqual(txtRge1, txtRge1, &res);
|
||||
+ ok(hres == S_OK, "ITextRange_IsEqual\n");
|
||||
+ ok(res == tomTrue, "got wrong return value: %d\n", res);
|
||||
+
|
||||
+ hres = ITextRange_IsEqual(txtRge1, txtRge2, NULL);
|
||||
+ ok(hres == S_OK, "ITextRange_IsEqual\n");
|
||||
+
|
||||
+ hres = ITextRange_IsEqual(txtRge1, NULL, NULL);
|
||||
+ ok(hres == S_FALSE, "ITextRange_IsEqual\n");
|
||||
+
|
||||
+ ITextRange_Release(txtRge1);
|
||||
+ ITextRange_Release(txtRge2);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -4141,6 +4187,7 @@ START_TEST(richole)
|
||||
test_ITextRange_GetFont();
|
||||
test_ITextRange_GetPara();
|
||||
test_ITextRange_GetText();
|
||||
+ test_ITextRange_IsEqual2();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
From a3c18216d981f2f46f3a2572d5ba17f278c259c2 Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Mon, 18 Aug 2014 14:38:50 +0800
|
||||
Subject: [PATCH] riched20: Implement ITextRange::GetStoryLength.
|
||||
|
||||
---
|
||||
dlls/riched20/tests/richole.c | 32 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 32 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index b2bb21d69bc..5e105b3444a 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -4159,6 +4159,37 @@ static void test_ITextRange_IsEqual2(void)
|
||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_GetStoryLength(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextRange *txtRge = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG count;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ int len = strlen(test_text1) + 1;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+ ITextDocument_Range(txtDoc, 0, 0, &txtRge);
|
||||
+
|
||||
+ hres = ITextRange_GetStoryLength(txtRge, &count);
|
||||
+ ok(hres == S_OK, "ITextRange_GetStoryLength\n");
|
||||
+ ok(count == len, "got wrong length: %d\n", count);
|
||||
+
|
||||
+ ITextRange_SetRange(txtRge, 1, 2);
|
||||
+ hres = ITextRange_GetStoryLength(txtRge, &count);
|
||||
+ ok(hres == S_OK, "ITextRange_GetStoryLength\n");
|
||||
+ ok(count == len, "got wrong length: %d\n", count);
|
||||
+
|
||||
+ hres = ITextRange_GetStoryLength(txtRge, NULL);
|
||||
+ ok(hres == E_INVALIDARG, "ITextRange_GetStoryLength\n");
|
||||
+
|
||||
+ ITextRange_Release(txtRge);
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -4188,6 +4219,7 @@ START_TEST(richole)
|
||||
test_ITextRange_GetPara();
|
||||
test_ITextRange_GetText();
|
||||
test_ITextRange_IsEqual2();
|
||||
+ test_ITextRange_GetStoryLength();
|
||||
test_GetClientSite();
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,60 +0,0 @@
|
||||
From e5dad19d1dbab38b6a6c31bd23fe7dac278e6d1a Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Mon, 18 Aug 2014 14:47:14 +0800
|
||||
Subject: riched20: Implement ITextSelection::GetStoryLength.
|
||||
|
||||
---
|
||||
dlls/riched20/tests/richole.c | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index c7d6299..38a8f80 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -3813,6 +3813,35 @@ static void test_ITextRange_GetStoryLength(void)
|
||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
}
|
||||
|
||||
+static void test_ITextSelection_GetStoryLength(void)
|
||||
+{
|
||||
+ HWND w;
|
||||
+ IRichEditOle *reOle = NULL;
|
||||
+ ITextDocument *txtDoc = NULL;
|
||||
+ ITextSelection *txtSel = NULL;
|
||||
+ HRESULT hres;
|
||||
+ LONG count;
|
||||
+ static const CHAR test_text1[] = "TestSomeText";
|
||||
+ int len = strlen(test_text1) + 1;
|
||||
+
|
||||
+ create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+ SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||
+
|
||||
+ hres = ITextSelection_GetStoryLength(txtSel, &count);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetStoryLength\n");
|
||||
+ ok(count == len, "got wrong length: %d\n", count);
|
||||
+
|
||||
+ SendMessageA(w, EM_SETSEL, 1, 2);
|
||||
+ hres = ITextSelection_GetStoryLength(txtSel, &count);
|
||||
+ ok(hres == S_OK, "ITextSelection_GetStoryLength\n");
|
||||
+ ok(count == len, "got wrong length: %d\n", count);
|
||||
+
|
||||
+ hres = ITextSelection_GetStoryLength(txtSel, NULL);
|
||||
+ ok(hres == E_INVALIDARG, "ITextSelection_GetStoryLength\n");
|
||||
+
|
||||
+ release_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||
+}
|
||||
+
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -3829,6 +3858,7 @@ START_TEST(richole)
|
||||
test_ITextSelection_SetEnd();
|
||||
test_ITextSelection_Collapse();
|
||||
test_ITextSelection_GetFont();
|
||||
+ test_ITextSelection_GetStoryLength();
|
||||
test_ITextDocument_Range();
|
||||
test_ITextRange_GetChar();
|
||||
test_ITextRange_ScrollIntoView();
|
||||
--
|
||||
2.7.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 17ad773281bf85925a0070fd0ba4ce07804c497c Mon Sep 17 00:00:00 2001
|
||||
From fc7edfef4776f6ce7577a0597f78ad4971fe776d Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 1 Nov 2014 22:51:34 +0100
|
||||
Subject: riched20: Silence repeated FIXMEs triggered by Adobe Reader.
|
||||
Subject: [PATCH] riched20: Silence repeated FIXMEs triggered by Adobe Reader.
|
||||
|
||||
Adobe Reader calls these functions very often while scrolling through a document.
|
||||
---
|
||||
@ -9,10 +9,10 @@ Adobe Reader calls these functions very often while scrolling through a document
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index 8aea23e..39cee96 100644
|
||||
index 724113404b4..5a620c537d5 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -927,6 +927,14 @@ static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
|
||||
@@ -951,6 +951,14 @@ static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
|
||||
IUnknown_AddRef((IUnknown *)*ppvObj);
|
||||
return S_OK;
|
||||
}
|
||||
@ -27,7 +27,7 @@ index 8aea23e..39cee96 100644
|
||||
FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid));
|
||||
|
||||
return E_NOINTERFACE;
|
||||
@@ -3438,7 +3446,9 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG value)
|
||||
@@ -3575,7 +3583,9 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG value)
|
||||
static HRESULT WINAPI TextPara_GetAlignment(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
@ -39,5 +39,5 @@ index 8aea23e..39cee96 100644
|
||||
if (!para_get_reole(This))
|
||||
return CO_E_RELEASED;
|
||||
--
|
||||
2.4.2
|
||||
2.17.1
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
From 0873ea7db1a66d1555ac608b249ac350f9c9097b Mon Sep 17 00:00:00 2001
|
||||
From 5613df7b70c1463cb5d115bf6d6bad077e27ca26 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 11 Mar 2016 21:44:53 +0100
|
||||
Subject: [PATCH] wuauserv: Add dummy service.
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
loader/wine.inf.in | 11 +++++
|
||||
programs/wuauserv/Makefile.in | 6 +++
|
||||
programs/wuauserv/main.c | 104 ++++++++++++++++++++++++++++++++++++++++++
|
||||
loader/wine.inf.in | 11 ++++
|
||||
programs/wuauserv/Makefile.in | 6 ++
|
||||
programs/wuauserv/main.c | 104 ++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 122 insertions(+)
|
||||
create mode 100644 programs/wuauserv/Makefile.in
|
||||
create mode 100644 programs/wuauserv/main.c
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 13467e5..ddfba7d 100644
|
||||
index acdd8d5577f..adf23e9a95f 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4039,6 +4039,7 @@ WINE_CONFIG_MAKEFILE(programs/wordpad)
|
||||
@ -25,34 +25,34 @@ index 13467e5..ddfba7d 100644
|
||||
WINE_CONFIG_MAKEFILE(programs/xcopy)
|
||||
WINE_CONFIG_MAKEFILE(programs/xcopy/tests)
|
||||
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
|
||||
index edb8401..c5d8e8f 100644
|
||||
index f77831f44a6..3e6a8e0a8cf 100644
|
||||
--- a/loader/wine.inf.in
|
||||
+++ b/loader/wine.inf.in
|
||||
@@ -136,6 +136,7 @@ AddService=Schedule,0,TaskSchedulerService
|
||||
@@ -132,6 +132,7 @@ AddService=FontCache,0,FontCacheService
|
||||
AddService=Schedule,0,TaskSchedulerService
|
||||
AddService=WineBus,0,WineBusService
|
||||
AddService=WineHID,0,WineHIDService
|
||||
AddService=Winmgmt,0,WinmgmtService
|
||||
+AddService=wuauserv,0,wuauService
|
||||
|
||||
[DefaultInstall.NT.Services]
|
||||
AddService=BITS,0,BITSService
|
||||
@@ -153,6 +154,7 @@ AddService=Schedule,0,TaskSchedulerService
|
||||
@@ -148,6 +149,7 @@ AddService=FontCache,0,FontCacheService
|
||||
AddService=Schedule,0,TaskSchedulerService
|
||||
AddService=WineBus,0,WineBusService
|
||||
AddService=WineHID,0,WineHIDService
|
||||
AddService=Winmgmt,0,WinmgmtService
|
||||
+AddService=wuauserv,0,wuauService
|
||||
|
||||
[DefaultInstall.ntamd64.Services]
|
||||
AddService=BITS,0,BITSService
|
||||
@@ -170,6 +172,7 @@ AddService=Schedule,0,TaskSchedulerService
|
||||
@@ -164,6 +166,7 @@ AddService=FontCache,0,FontCacheService
|
||||
AddService=Schedule,0,TaskSchedulerService
|
||||
AddService=WineBus,0,WineBusService
|
||||
AddService=WineHID,0,WineHIDService
|
||||
AddService=Winmgmt,0,WinmgmtService
|
||||
+AddService=wuauserv,0,wuauService
|
||||
|
||||
[Strings]
|
||||
MciExtStr="Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions"
|
||||
@@ -3471,6 +3474,14 @@ ErrorControl=1
|
||||
@@ -3634,6 +3637,14 @@ ErrorControl=1
|
||||
HKR,Parameters,"ServiceDll",,"%11%\schedsvc.dll"
|
||||
HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010008,"Schedule"
|
||||
|
||||
@ -69,7 +69,7 @@ index edb8401..c5d8e8f 100644
|
||||
HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16
|
||||
diff --git a/programs/wuauserv/Makefile.in b/programs/wuauserv/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..16f27f1
|
||||
index 00000000000..16f27f13120
|
||||
--- /dev/null
|
||||
+++ b/programs/wuauserv/Makefile.in
|
||||
@@ -0,0 +1,6 @@
|
||||
@ -81,7 +81,7 @@ index 0000000..16f27f1
|
||||
+ main.c
|
||||
diff --git a/programs/wuauserv/main.c b/programs/wuauserv/main.c
|
||||
new file mode 100644
|
||||
index 0000000..31df299
|
||||
index 00000000000..31df299e90e
|
||||
--- /dev/null
|
||||
+++ b/programs/wuauserv/main.c
|
||||
@@ -0,0 +1,104 @@
|
||||
@ -190,5 +190,5 @@ index 0000000..31df299
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
1.9.1
|
||||
2.17.1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user