Jacek Caban : mshtml: Follow anchors only on left button click.
Alexandre Julliard
julliard at winehq.org
Fri Jan 27 11:30:41 CST 2012
Module: wine
Branch: master
Commit: 0b55645820cd1619965f0ffce4750a658a4dab90
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0b55645820cd1619965f0ffce4750a658a4dab90
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jan 27 15:55:33 2012 +0100
mshtml: Follow anchors only on left button click.
---
dlls/mshtml/htmlanchor.c | 26 +++++++++++++++++++++++---
dlls/mshtml/htmlevent.c | 2 +-
dlls/mshtml/mshtml_private.h | 2 +-
3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c
index 13bd2a4..1424f1e 100644
--- a/dlls/mshtml/htmlanchor.c
+++ b/dlls/mshtml/htmlanchor.c
@@ -18,6 +18,7 @@
#include <stdarg.h>
#include <stdio.h>
+#include <assert.h>
#define COBJMACROS
@@ -583,14 +584,33 @@ static void HTMLAnchorElement_destructor(HTMLDOMNode *iface)
HTMLElement_destructor(&This->element.node);
}
-static HRESULT HTMLAnchorElement_handle_event(HTMLDOMNode *iface, eventid_t eid, BOOL *prevent_default)
+static HRESULT HTMLAnchorElement_handle_event(HTMLDOMNode *iface, eventid_t eid, nsIDOMEvent *event, BOOL *prevent_default)
{
HTMLAnchorElement *This = impl_from_HTMLDOMNode(iface);
if(eid == EVENTID_CLICK) {
+ nsIDOMMouseEvent *mouse_event;
+ PRUint16 button;
+ nsresult nsres;
+
TRACE("CLICK\n");
- *prevent_default = TRUE;
- return navigate_anchor(This);
+
+ nsres = nsIDOMEvent_QueryInterface(event, &IID_nsIDOMMouseEvent, (void**)&mouse_event);
+ assert(nsres == NS_OK);
+
+ nsres = nsIDOMMouseEvent_GetButton(mouse_event, &button);
+ assert(nsres == NS_OK);
+
+ nsIDOMMouseEvent_Release(mouse_event);
+
+ switch(button) {
+ case 0:
+ *prevent_default = TRUE;
+ return navigate_anchor(This);
+ default:
+ *prevent_default = FALSE;
+ return S_OK;
+ }
}
return S_OK;
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 74e8069..b2efeed 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1065,7 +1065,7 @@ void fire_event(HTMLDocumentNode *doc, eventid_t eid, BOOL set_event, nsIDOMNode
break;
if(node && node->vtbl->handle_event) {
- hres = node->vtbl->handle_event(node, eid, &prevent_default);
+ hres = node->vtbl->handle_event(node, eid, nsevent, &prevent_default);
if(FAILED(hres) || prevent_default)
break;
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 7373e15..20923e9 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -518,7 +518,7 @@ typedef struct {
HRESULT (*get_attr_col)(HTMLDOMNode*,HTMLAttributeCollection**);
event_target_t **(*get_event_target)(HTMLDOMNode*);
HRESULT (*fire_event)(HTMLDOMNode*,DWORD,BOOL*);
- HRESULT (*handle_event)(HTMLDOMNode*,DWORD,BOOL*);
+ HRESULT (*handle_event)(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*);
HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL);
HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*);
HRESULT (*get_document)(HTMLDOMNode*,IDispatch**);
More information about the wine-cvs
mailing list