[PATCH 3/8] dhtmled.ocx: Add IQuickActivate interface to DHTMLEdit object

Alex Henrie alexhenrie24 at gmail.com
Tue Dec 5 02:10:19 CST 2017


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/dhtmled.ocx/edit.c | 100 ++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 85 insertions(+), 15 deletions(-)

diff --git a/dlls/dhtmled.ocx/edit.c b/dlls/dhtmled.ocx/edit.c
index 6e37554119..49580f3840 100644
--- a/dlls/dhtmled.ocx/edit.c
+++ b/dlls/dhtmled.ocx/edit.c
@@ -27,6 +27,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dhtmled);
 typedef struct
 {
     IDHTMLEdit IDHTMLEdit_iface;
+    IQuickActivate IQuickActivate_iface;
     LONG ref;
 } DHTMLEditImpl;
 
@@ -35,10 +36,22 @@ static inline DHTMLEditImpl *impl_from_IDHTMLEdit(IDHTMLEdit *iface)
     return CONTAINING_RECORD(iface, DHTMLEditImpl, IDHTMLEdit_iface);
 }
 
-static HRESULT WINAPI DHTMLEdit_QueryInterface(IDHTMLEdit *iface, REFIID iid, void **out)
+static inline DHTMLEditImpl *impl_from_IQuickActivate(IQuickActivate *iface)
 {
-    DHTMLEditImpl *This = impl_from_IDHTMLEdit(iface);
+    return CONTAINING_RECORD(iface, DHTMLEditImpl, IQuickActivate_iface);
+}
+
+static HRESULT dhtml_edit_addref(DHTMLEditImpl *This)
+{
+    LONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
 
+    return ref;
+}
+
+static HRESULT dhtml_edit_qi(DHTMLEditImpl *This, REFIID iid, void **out)
+{
     TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(iid), out);
 
     if (IsEqualGUID(iid, &IID_IUnknown) ||
@@ -46,8 +59,14 @@ static HRESULT WINAPI DHTMLEdit_QueryInterface(IDHTMLEdit *iface, REFIID iid, vo
         IsEqualGUID(iid, &IID_IDHTMLSafe) ||
         IsEqualGUID(iid, &IID_IDHTMLEdit))
     {
-        IUnknown_AddRef(iface);
-        *out = iface;
+        dhtml_edit_addref(This);
+        *out = &This->IDHTMLEdit_iface;
+        return S_OK;
+    }
+    else if (IsEqualGUID(iid, &IID_IQuickActivate))
+    {
+        dhtml_edit_addref(This);
+        *out = &This->IQuickActivate_iface;
         return S_OK;
     }
 
@@ -56,27 +75,31 @@ static HRESULT WINAPI DHTMLEdit_QueryInterface(IDHTMLEdit *iface, REFIID iid, vo
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI DHTMLEdit_AddRef(IDHTMLEdit *iface)
+static HRESULT dhtml_edit_release(DHTMLEditImpl *This)
 {
-    DHTMLEditImpl *This = impl_from_IDHTMLEdit(iface);
-    LONG ref = InterlockedIncrement(&This->ref);
+    LONG ref = InterlockedDecrement(&This->ref);
 
     TRACE("(%p) ref=%d\n", This, ref);
 
+    if (!ref)
+        HeapFree(GetProcessHeap(), 0, This);
+
     return ref;
 }
 
-static ULONG WINAPI DHTMLEdit_Release(IDHTMLEdit *iface)
+static HRESULT WINAPI DHTMLEdit_QueryInterface(IDHTMLEdit *iface, REFIID iid, void **out)
 {
-    DHTMLEditImpl *This = impl_from_IDHTMLEdit(iface);
-    LONG ref = InterlockedDecrement(&This->ref);
-
-    TRACE("(%p) ref=%d\n", This, ref);
+    return dhtml_edit_qi(impl_from_IDHTMLEdit(iface), iid, out);
+}
 
-    if (!ref)
-        HeapFree(GetProcessHeap(), 0, This);
+static ULONG WINAPI DHTMLEdit_AddRef(IDHTMLEdit *iface)
+{
+    return dhtml_edit_addref(impl_from_IDHTMLEdit(iface));
+}
 
-    return ref;
+static ULONG WINAPI DHTMLEdit_Release(IDHTMLEdit *iface)
+{
+    return dhtml_edit_release(impl_from_IDHTMLEdit(iface));
 }
 
 static HRESULT WINAPI DHTMLEdit_GetTypeInfoCount(IDHTMLEdit *iface, UINT *count)
@@ -514,6 +537,52 @@ static const IDHTMLEditVtbl DHTMLEditVtbl = {
     DHTMLEdit_put_BrowseMode
 };
 
+static HRESULT WINAPI QuickActivate_QueryInterface(IQuickActivate *iface, REFIID iid, void **out)
+{
+    return dhtml_edit_qi(impl_from_IQuickActivate(iface), iid, out);
+}
+
+static ULONG WINAPI QuickActivate_AddRef(IQuickActivate *iface)
+{
+    return dhtml_edit_addref(impl_from_IQuickActivate(iface));
+}
+
+static ULONG WINAPI QuickActivate_Release(IQuickActivate *iface)
+{
+    return dhtml_edit_release(impl_from_IQuickActivate(iface));
+}
+
+static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface,
+                                                  QACONTAINER *container_info, QACONTROL *control_info)
+{
+    DHTMLEditImpl *This = impl_from_IQuickActivate(iface);
+    FIXME("(%p)->(%p, %p) stub\n", This, container_info, control_info);
+    return S_OK;
+}
+
+static HRESULT WINAPI QuickActivate_GetContentExtent(IQuickActivate *iface, SIZEL *value)
+{
+    DHTMLEditImpl *This = impl_from_IQuickActivate(iface);
+    FIXME("(%p)->(%p) stub\n", This, value);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI QuickActivate_SetContentExtent(IQuickActivate *iface, SIZEL *value)
+{
+    DHTMLEditImpl *This = impl_from_IQuickActivate(iface);
+    FIXME("(%p)->(%p) stub\n", This, value);
+    return E_NOTIMPL;
+}
+
+static const IQuickActivateVtbl QuickActivateVtbl = {
+    QuickActivate_QueryInterface,
+    QuickActivate_AddRef,
+    QuickActivate_Release,
+    QuickActivate_QuickActivate,
+    QuickActivate_GetContentExtent,
+    QuickActivate_SetContentExtent
+};
+
 HRESULT dhtml_edit_create(REFIID iid, void **out)
 {
     DHTMLEditImpl *This;
@@ -527,6 +596,7 @@ HRESULT dhtml_edit_create(REFIID iid, void **out)
         return E_OUTOFMEMORY;
 
     This->IDHTMLEdit_iface.lpVtbl = &DHTMLEditVtbl;
+    This->IQuickActivate_iface.lpVtbl = &QuickActivateVtbl;
     This->ref = 1;
 
     *out = &This->IDHTMLEdit_iface;
-- 
2.15.1




More information about the wine-devel mailing list