Jacek Caban : mshtml: Added nsIInterfaceRequestor implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 28 06:07:46 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 91369e20e756313f586de03da1354b4f621985fe
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=91369e20e756313f586de03da1354b4f621985fe

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb 27 19:08:23 2006 +0100

mshtml: Added nsIInterfaceRequestor implementation.

---

 dlls/mshtml/mshtml_private.h |    2 ++
 dlls/mshtml/nsembed.c        |   49 +++++++++++++++++++++++++++++++++++++++++-
 dlls/mshtml/nsiface.idl      |   29 ++++++++++++++++++++++++-
 3 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 59d1464..478c91d 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -84,6 +84,7 @@ struct NSContainer {
     const nsIContextMenuListenerVtbl  *lpContextMenuListenerVtbl;
     const nsIURIContentListenerVtbl   *lpURIContentListenerVtbl;
     const nsIEmbeddingSiteWindowVtbl  *lpEmbeddingSiteWindowVtbl;
+    const nsIInterfaceRequestorVtbl   *lpInterfaceRequestorVtbl;
 
     nsIWebBrowser *webbrowser;
     nsIWebNavigation *navigation;
@@ -125,6 +126,7 @@ struct NSContainer {
 #define NSCML(x)         ((nsIContextMenuListener*)       &(x)->lpContextMenuListenerVtbl)
 #define NSURICL(x)       ((nsIURIContentListener*)        &(x)->lpURIContentListenerVtbl)
 #define NSEMBWNDS(x)     ((nsIEmbeddingSiteWindow*)       &(x)->lpEmbeddingSiteWindowVtbl)
+#define NSIFACEREQ(x)    ((nsIInterfaceRequestor*)        &(x)->lpInterfaceRequestorVtbl)
 
 #define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
 
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index beffd86..25b44ad 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 Jacek Caban
+ * Copyright 2005-2006 Jacek Caban for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -457,6 +457,9 @@ static nsresult NSAPI nsWebBrowserChrome
     }else if(IsEqualGUID(&IID_nsIEmbeddingSiteWindow, riid)) {
         TRACE("(%p)->(IID_nsIEmbeddingSiteWindow %p)\n", This, result);
         *result = NSEMBWNDS(This);
+    }else if(IsEqualGUID(&IID_nsIInterfaceRequestor, riid)) {
+        TRACE("(%p)->(IID_nsIInterfaceRequestor %p)\n", This, result);
+        *result = NSIFACEREQ(This);
     }
 
     if(*result) {
@@ -916,6 +919,49 @@ static const nsIEmbeddingSiteWindowVtbl 
     nsEmbeddingSiteWindow_GetSiteWindow
 };
 
+#define NSIFACEREQ_THIS(iface) DEFINE_THIS(NSContainer, InterfaceRequestor, iface)
+
+static nsresult NSAPI nsInterfaceRequestor_QueryInterface(nsIInterfaceRequestor *iface,
+                                                          nsIIDRef riid, nsQIResult result)
+{
+    NSContainer *This = NSIFACEREQ_THIS(iface);
+    return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result);
+}
+
+static nsrefcnt NSAPI nsInterfaceRequestor_AddRef(nsIInterfaceRequestor *iface)
+{
+    NSContainer *This = NSIFACEREQ_THIS(iface);
+    return nsIWebBrowserChrome_AddRef(NSWBCHROME(This));
+}
+
+static nsrefcnt NSAPI nsInterfaceRequestor_Release(nsIInterfaceRequestor *iface)
+{
+    NSContainer *This = NSIFACEREQ_THIS(iface);
+    return nsIWebBrowserChrome_Release(NSWBCHROME(This));
+}
+
+static nsresult NSAPI nsInterfaceRequestor_GetInterface(nsIInterfaceRequestor *iface,
+                                                        nsIIDRef riid, nsQIResult result)
+{
+    NSContainer *This = NSIFACEREQ_THIS(iface);
+
+    if(IsEqualGUID(&IID_nsIDOMWindow, riid)) {
+        FIXME("(%p)->(IID_nsIDOMWindow %p)\n", This, result);
+        return NS_NOINTERFACE;
+    }
+
+    return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result);
+}
+
+#undef NSIFACEREQ_THIS
+
+static const nsIInterfaceRequestorVtbl nsInterfaceRequestorVtbl = {
+    nsInterfaceRequestor_QueryInterface,
+    nsInterfaceRequestor_AddRef,
+    nsInterfaceRequestor_Release,
+    nsInterfaceRequestor_GetInterface
+};
+
 void NSContainer_Create(HTMLDocument *doc)
 {
     nsIWebBrowserSetup *wbsetup;
@@ -931,6 +977,7 @@ void NSContainer_Create(HTMLDocument *do
     ret->lpContextMenuListenerVtbl = &nsContextMenuListenerVtbl;
     ret->lpURIContentListenerVtbl  = &nsURIContentListenerVtbl;
     ret->lpEmbeddingSiteWindowVtbl = &nsEmbeddingSiteWindowVtbl;
+    ret->lpInterfaceRequestorVtbl  = &nsInterfaceRequestorVtbl;
 
     ret->doc = doc;
     ret->ref = 1;
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 8afca49..6c483aa 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -68,7 +68,6 @@ interface nsISupports
 
 /* Currently we don't need a full declaration of these interfaces */
 typedef nsISupports nsIWeakReference;
-typedef nsISupports nsIDOMWindow;
 typedef nsISupports nsIDOMDocument;
 typedef nsISupports nsISHistory;
 typedef nsISupports nsISimpleEnumerator;
@@ -81,6 +80,9 @@ typedef nsISupports nsIDOMAbstractView;
 typedef nsISupports nsIStreamListener;
 typedef nsISupports nsIHttpHeaderVisitor;
 typedef nsISupports nsIRequestObserver;
+typedef nsISupports nsIDOMBarProp;
+typedef nsISupports nsIDOMWindowCollection;
+typedef nsISupports nsISelection;
 
 [
     object,
@@ -297,6 +299,31 @@ interface nsIUploadChannel : nsISupports
 
 [
     object,
+    uuid(a6cf906b-15b3-11d2-932e-00805f8add32)
+]
+interface nsIDOMWindow : nsISupports
+{
+    nsresult GetDocument(nsIDOMDocument **aDocument);
+    nsresult GetParent(nsIDOMWindow **aParent);
+    nsresult GetTop(nsIDOMWindow **aTop);
+    nsresult GetScrollbars(nsIDOMBarProp **aScrollbars);
+    nsresult GetFrames(nsIDOMWindowCollection **aFrames);
+    nsresult GetName(nsAString *aName);
+    nsresult SetName(const nsAString *aName);
+    nsresult GetTextZoom(float *aTextZoom);
+    nsresult SetTextZoom(float aTextZoom);
+    nsresult GetScrollX(PRInt32 *aScrollX);
+    nsresult GetScrollY(PRInt32 *aScrollY);
+    nsresult ScrollTo(PRInt32 xScroll, PRInt32 yScroll);
+    nsresult ScrollBy(PRInt32 xScrollDif, PRInt32 yScrollDif);
+    nsresult GetSelection(nsISelection **_retval);
+    nsresult ScrollByLines(PRInt32 numLines);
+    nsresult ScrollByPages(PRInt32 numPages);
+    nsresult SizeToContent();
+}
+
+[
+    object,
     uuid(94928ab3-8b63-11d3-989d-001083010e9b)
 ]
 interface nsIURIContentListener : nsISupports




More information about the wine-cvs mailing list