44
44
#include <nsIXULWindow.h>
45
45
#include <nsIInterfaceRequestorUtils.h>
46
46
#include <nsIDocShell.h>
47
#include <nsIDOMNSEvent.h>
48
# include <nsIDOMNSEvent.h>
48
50
#include <nsIPrefBranch.h>
49
51
#include <nsIPrefService.h>
50
52
#include <nsIDOMKeyEvent.h>
62
64
#include "uIGlobalMenuService.h"
63
65
#include "uWidgetAtoms.h"
65
69
#define MODIFIER_SHIFT 1
66
70
#define MODIFIER_CONTROL 2
67
71
#define MODIFIER_ALT 4
68
72
#define MODIFIER_META 8
70
NS_IMPL_ADDREF(uGlobalMenuBarListener)
71
NS_IMPL_RELEASE(uGlobalMenuBarListener)
72
NS_INTERFACE_MAP_BEGIN(uGlobalMenuBarListener)
73
NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener)
74
NS_INTERFACE_MAP_ENTRY(nsIDOMFocusListener)
75
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener,nsIDOMKeyListener)
79
uGlobalMenuBarListener::KeyPress(nsIDOMEvent *aKeyEvent)
81
return mMenuBar->KeyPress(aKeyEvent);
85
uGlobalMenuBarListener::KeyUp(nsIDOMEvent *aKeyEvent)
87
return mMenuBar->KeyUp(aKeyEvent);
91
uGlobalMenuBarListener::KeyDown(nsIDOMEvent *aKeyEvent)
93
return mMenuBar->KeyDown(aKeyEvent);
97
uGlobalMenuBarListener::Blur(nsIDOMEvent *aEvent)
74
NS_IMPL_ISUPPORTS1(uGlobalMenuBarListener, nsIDOMEventListener)
77
uGlobalMenuBarListener::HandleEvent(nsIDOMEvent *aEvent)
80
nsresult rv = aEvent->GetType(type);
81
NS_ENSURE_SUCCESS(rv, rv);
83
if (type.EqualsLiteral("focus")) {
85
} else if (type.EqualsLiteral("blur")) {
87
} else if (type.EqualsLiteral("keypress")) {
88
rv = mMenuBar->KeyPress(aEvent);
89
} else if (type.EqualsLiteral("keydown")) {
90
rv = mMenuBar->KeyDown(aEvent);
91
} else if (type.EqualsLiteral("keyup")) {
92
rv = mMenuBar->KeyUp(aEvent);
106
uGlobalMenuBarListener::Focus(nsIDOMEvent *aEvent)
150
134
uGlobalMenuBar::RemoveMenuObjectAt(PRUint32 index)
136
NS_ASSERTION(index < mMenuObjects.Length(), "Invalid index");
137
if (index >= mMenuObjects.Length()) {
152
141
gboolean res = dbusmenu_menuitem_child_delete(mDbusMenuItem,
153
142
mMenuObjects[index]->GetDbusMenuItem());
154
143
mMenuObjects.RemoveElementAt(index);
226
218
mEventListener = new uGlobalMenuBarListener(this);
227
219
NS_ENSURE_TRUE(mEventListener, NS_ERROR_OUT_OF_MEMORY);
229
// Find the top-level DOM window from our nsIWidget, so we
230
// can register the menubar as a focus event listener, in order
231
// for it to cancel menus when it the window gets focus
233
aWindow->GetClientData(clientData);
234
nsISupports *data = static_cast<nsISupports *>(clientData);
235
nsCOMPtr<nsIXULWindow> xulWindow = do_QueryInterface(data);
236
NS_ENSURE_TRUE(xulWindow, NS_ERROR_FAILURE);
238
nsCOMPtr<nsIDocShell> docShell;
239
xulWindow->GetDocShell(getter_AddRefs(docShell));
240
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
242
nsCOMPtr<nsIDOMWindow> domWindow = do_GetInterface(docShell);
243
mDOMWinTarget = do_QueryInterface(domWindow);
245
mDOMWinTarget->AddEventListener(NS_LITERAL_STRING("focus"),
246
(nsIDOMFocusListener *)mEventListener,
248
mDOMWinTarget->AddEventListener(NS_LITERAL_STRING("blur"),
249
(nsIDOMFocusListener *)mEventListener,
252
221
mDocTarget = do_QueryInterface(mContent->GetCurrentDoc());
223
mDocTarget->AddEventListener(NS_LITERAL_STRING("focus"),
226
mDocTarget->AddEventListener(NS_LITERAL_STRING("blur"),
254
229
mDocTarget->AddEventListener(NS_LITERAL_STRING("keypress"),
255
(nsIDOMKeyListener *)mEventListener,
257
232
mDocTarget->AddEventListener(NS_LITERAL_STRING("keydown"),
258
(nsIDOMKeyListener *)mEventListener,
260
235
mDocTarget->AddEventListener(NS_LITERAL_STRING("keyup"),
261
(nsIDOMKeyListener *)mEventListener,
264
239
nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
284
259
do_GetService("@canonical.com/globalmenu-service;1");
285
260
NS_ENSURE_TRUE(service, NS_ERROR_FAILURE);
287
mCancellable = uGlobalMenuRequestAutoCanceller::Create();
288
262
service->RegisterGlobalMenuBar(this, mCancellable);
425
399
SetXULMenuBarHidden(PR_FALSE);
428
mDOMWinTarget->RemoveEventListener(NS_LITERAL_STRING("focus"),
429
(nsIDOMFocusListener *)mEventListener,
431
mDOMWinTarget->RemoveEventListener(NS_LITERAL_STRING("blur"),
432
(nsIDOMFocusListener *)mEventListener,
436
401
if (mDocTarget) {
402
mDocTarget->RemoveEventListener(NS_LITERAL_STRING("focus"),
405
mDocTarget->RemoveEventListener(NS_LITERAL_STRING("blur"),
437
408
mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keypress"),
438
(nsIDOMKeyListener *)mEventListener,
440
411
mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keydown"),
441
(nsIDOMKeyListener *)mEventListener,
443
414
mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keyup"),
444
(nsIDOMKeyListener *)mEventListener,
496
467
uGlobalMenuBar::ShouldHandleKeyEvent(nsIDOMEvent *aKeyEvent)
470
# define nsEvent aKeyEvent
498
472
nsCOMPtr<nsIDOMNSEvent> nsEvent = do_QueryInterface(aKeyEvent);
503
478
PRBool handled, trusted;
504
479
nsEvent->GetPreventDefault(&handled);
505
480
nsEvent->GetIsTrusted(&trusted);
507
486
if (handled || !trusted) {