From b10bfe750283e8bb447dc96d681a89d77c67c0d7 Mon Sep 17 00:00:00 2001 From: "reed@reedloden.com" Date: Wed, 20 Feb 2008 02:04:56 -0800 Subject: [PATCH] Bug 418172 - "Crash when pressing "menu" key on keyboard [@ nsWindow::~nsWindow()]" [p=kinetik@flim.org (Matthew Gregan) r+sr=roc a1.9=schrep] --- widget/src/gtk2/nsWindow.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index be173b566270..9e5e8495eeb8 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -137,8 +137,8 @@ static GdkWindow *get_inner_gdk_window (GdkWindow *aWindow, gint *retx, gint *rety); static inline PRBool is_context_menu_key(const nsKeyEvent& inKeyEvent); -static void key_event_to_context_menu_event(const nsKeyEvent* inKeyEvent, - nsMouseEvent* outCMEvent); +static void key_event_to_context_menu_event(nsMouseEvent &aEvent, + GdkEventKey *aGdkEvent); static int is_parent_ungrab_enter(GdkEventCrossing *aEvent); static int is_parent_grab_leave(GdkEventCrossing *aEvent); @@ -2428,8 +2428,10 @@ nsWindow::OnKeyPressEvent(GtkWidget *aWidget, GdkEventKey *aEvent) // before we dispatch a key, check if it's the context menu key. // If so, send a context menu key event instead. if (is_context_menu_key(event)) { - nsMouseEvent contextMenuEvent(PR_TRUE, 0, nsnull, nsMouseEvent::eReal); - key_event_to_context_menu_event(&event, &contextMenuEvent); + nsMouseEvent contextMenuEvent(PR_TRUE, NS_CONTEXTMENU, this, + nsMouseEvent::eReal, + nsMouseEvent::eContextMenuKey); + key_event_to_context_menu_event(contextMenuEvent, aEvent); DispatchEvent(&contextMenuEvent, status); } else { @@ -5059,18 +5061,16 @@ is_context_menu_key(const nsKeyEvent& aKeyEvent) } void -key_event_to_context_menu_event(const nsKeyEvent* aKeyEvent, - nsMouseEvent* aCMEvent) +key_event_to_context_menu_event(nsMouseEvent &aEvent, + GdkEventKey *aGdkEvent) { - memcpy(aCMEvent, aKeyEvent, sizeof(nsInputEvent)); - aCMEvent->eventStructType = NS_MOUSE_EVENT; - aCMEvent->message = NS_CONTEXTMENU; - aCMEvent->context = nsMouseEvent::eContextMenuKey; - aCMEvent->button = nsMouseEvent::eLeftButton; - aCMEvent->isShift = aCMEvent->isControl = PR_FALSE; - aCMEvent->isAlt = aCMEvent->isMeta = PR_FALSE; - aCMEvent->clickCount = 0; - aCMEvent->acceptActivation = PR_FALSE; + aEvent.refPoint = nsPoint(0, 0); + aEvent.isShift = PR_FALSE; + aEvent.isControl = PR_FALSE; + aEvent.isAlt = PR_FALSE; + aEvent.isMeta = PR_FALSE; + aEvent.time = aGdkEvent->time; + aEvent.clickCount = 1; } /* static */