diff --git a/mozilla/editor/ui/composer/content/editorOverlay.xul b/mozilla/editor/ui/composer/content/editorOverlay.xul
index 573e6fa62ce..69cefe6ada8 100644
--- a/mozilla/editor/ui/composer/content/editorOverlay.xul
+++ b/mozilla/editor/ui/composer/content/editorOverlay.xul
@@ -30,45 +30,47 @@
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -76,19 +78,19 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/mozilla/editor/ui/dialogs/content/EdImageMap.xul b/mozilla/editor/ui/dialogs/content/EdImageMap.xul
index ee924c29fbf..0a603c9425f 100644
--- a/mozilla/editor/ui/dialogs/content/EdImageMap.xul
+++ b/mozilla/editor/ui/dialogs/content/EdImageMap.xul
@@ -51,14 +51,7 @@
-
-
-
-
-
-
-
-
+
diff --git a/mozilla/mailnews/addrbook/resources/content/addressbook.xul b/mozilla/mailnews/addrbook/resources/content/addressbook.xul
index daa4ed4560f..bf665cac93c 100644
--- a/mozilla/mailnews/addrbook/resources/content/addressbook.xul
+++ b/mozilla/mailnews/addrbook/resources/content/addressbook.xul
@@ -79,7 +79,7 @@ Rights Reserved.
-
+
diff --git a/mozilla/mailnews/compose/resources/content/messengercompose.xul b/mozilla/mailnews/compose/resources/content/messengercompose.xul
index 4fab6c65a86..85fc6d2cda8 100644
--- a/mozilla/mailnews/compose/resources/content/messengercompose.xul
+++ b/mozilla/mailnews/compose/resources/content/messengercompose.xul
@@ -90,18 +90,18 @@ Rights Reserved.
ACTUALLY, EVERY TIME YOU TYPE ANY OF THE KEY DEFINED HERE AFTER WITHOUT ANY OF THE MODIFIERS PRESSED, THE COMMAND IS EXECUTED.
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-->
diff --git a/mozilla/profile/resources/content/profileSelection.xul b/mozilla/profile/resources/content/profileSelection.xul
index 88480759a0e..05118e8c8ba 100644
--- a/mozilla/profile/resources/content/profileSelection.xul
+++ b/mozilla/profile/resources/content/profileSelection.xul
@@ -106,6 +106,6 @@
-
+
diff --git a/mozilla/rdf/content/src/nsXULKeyListener.cpp b/mozilla/rdf/content/src/nsXULKeyListener.cpp
index 6bd447dfca4..a48b9d91cf6 100644
--- a/mozilla/rdf/content/src/nsXULKeyListener.cpp
+++ b/mozilla/rdf/content/src/nsXULKeyListener.cpp
@@ -226,6 +226,11 @@ private:
nsIDOMElement* element; // Weak reference. The element will go away first.
nsIDOMDocument* mDOMDocument; // Weak reference.
+
+ // The "xul key" modifier can be any of the known modifiers:
+ enum {
+ xulKeyNone, xulKeyShift, xulKeyControl, xulKeyAlt, xulKeyMeta
+ } mXULKeyModifier;
};
////////////////////////////////////////////////////////////////////////
@@ -279,8 +284,10 @@ nsXULKeyListenerImpl::Init(
nsIDOMElement * aElement,
nsIDOMDocument * aDocument)
{
+ printf("nsXULKeyListenerImpl::Init()\n");
element = aElement; // Weak reference. Don't addref it.
mDOMDocument = aDocument; // Weak reference.
+ mXULKeyModifier = xulKeyControl;
return NS_OK;
}
@@ -369,6 +376,28 @@ nsresult nsXULKeyListenerImpl::DoKey(nsIDOMEvent* aKeyEvent, eEventType aEventTy
nsCOMPtr keysetNode;
rootNode->GetFirstChild(getter_AddRefs(keysetNode));
+
+#undef DEBUG_XUL_KEYS
+#ifdef DEBUG_XUL_KEYS
+ if (aEventType == eKeyPress)
+ {
+ PRUint32 charcode, keycode;
+ keyEvent->GetCharCode(&charcode);
+ keyEvent->GetKeyCode(&keycode);
+ printf("DoKey [%s]: key code 0x%d, char code '%c', ",
+ (aEventType == eKeyPress ? "KeyPress" : ""), keycode, charcode);
+ PRBool ismod;
+ keyEvent->GetShiftKey(&ismod);
+ if (ismod) printf("[Shift] ");
+ keyEvent->GetCtrlKey(&ismod);
+ if (ismod) printf("[Ctrl] ");
+ keyEvent->GetAltKey(&ismod);
+ if (ismod) printf("[Alt] ");
+ keyEvent->GetMetaKey(&ismod);
+ if (ismod) printf("[Meta] ");
+ printf("\n");
+ }
+#endif /* DEBUG_XUL_KEYS */
while (keysetNode) {
nsAutoString keysetNodeType;
@@ -384,6 +413,7 @@ nsresult nsXULKeyListenerImpl::DoKey(nsIDOMEvent* aKeyEvent, eEventType aEventTy
oldkeysetNode->GetNextSibling(getter_AddRefs(keysetNode));
continue;
}
+
// Given the DOM node and Key Event
// Walk the node's children looking for 'key' types
@@ -391,9 +421,9 @@ nsresult nsXULKeyListenerImpl::DoKey(nsIDOMEvent* aKeyEvent, eEventType aEventTy
// Compares the received key code to found 'key' types
// Executes command if found
// Marks event as consumed
- nsCOMPtr keyNode;
- keysetNode->GetFirstChild(getter_AddRefs(keyNode));
- while (keyNode) {
+ nsCOMPtr keyNode;
+ keysetNode->GetFirstChild(getter_AddRefs(keyNode));
+ while (keyNode) {
nsCOMPtr keyElement(do_QueryInterface(keyNode));
if (!keyElement) {
continue;
@@ -402,7 +432,29 @@ nsresult nsXULKeyListenerImpl::DoKey(nsIDOMEvent* aKeyEvent, eEventType aEventTy
nsAutoString property;
keyElement->GetNodeName(property);
//printf("keyNodeType [%s] \n", keyNodeType.ToNewCString()); // this leaks
- if (property.Equals("key")) {
+
+ // See if we're redefining the special XUL modifier key
+ if (property.Equals("xulkey")) {
+ keyElement->GetAttribute(nsAutoString("key"), property);
+ if (property.Equals("shift"))
+ mXULKeyModifier = xulKeyShift;
+ else if (property.Equals("control"))
+ mXULKeyModifier = xulKeyControl;
+ else if (property.Equals("alt"))
+ mXULKeyModifier = xulKeyAlt;
+ else if (property.Equals("meta"))
+ mXULKeyModifier = xulKeyMeta;
+ else if (property.Equals("none"))
+ mXULKeyModifier = xulKeyNone;
+#ifdef DEBUG_XUL_KEYS
+ else printf("Property didn't match: %s\n",
+ property.ToNewCString());
+ char* propstr = property.ToNewCString();
+ printf("Set xul key to %s(%d)\n", propstr, mXULKeyModifier);
+ Recycle(propstr);
+#endif
+ }
+ if (property.Equals("key")) {
//printf("onkeypress [%s] \n", cmdToExecute.ToNewCString()); // this leaks
do {
property = falseString;
@@ -464,93 +516,90 @@ nsresult nsXULKeyListenerImpl::DoKey(nsIDOMEvent* aKeyEvent, eEventType aEventTy
if (!isMatching) {
break;
}
-
- // Make these tri-state --
- // true(1), false(0), and unspecified (3)
- int modCommand = 3;
- int modControl = 3;
-
- property = "";
- keyElement->GetAttribute(nsAutoString("command"), property);
- if(property == trueString)
- modCommand = 1;
- else if(property == falseString)
- modCommand = 0;
-
- property = "";
- keyElement->GetAttribute(nsAutoString("control"), property);
- if(property == trueString)
- modControl = 1;
- else if(property == falseString)
- modControl = 0;
-
- // Test Command attribute
- PRBool isCommand = PR_FALSE;
- PRBool isControl = PR_FALSE;
- keyEvent->GetMetaKey(&isCommand);
- keyEvent->GetCtrlKey(&isControl);
- if (((isCommand && (modCommand==0)) ||
- (!isCommand && (modCommand==1))) ||
- ((isControl && (modControl==0)) ||
- (!isControl && (modControl==1))))
- {
-#ifndef XP_MAC
- // Temp hack. we should remove this
- // after XUL can spec which key for keybinding
- if((isControl && (modCommand==0)) ||
- (!isControl && (modCommand==1)))
- {
- break;
- }
-#else
- break;
-#endif
- }
- //printf("Passed command/ctrl test \n"); // this leaks
- // Test Shift attribute
- int modShift = 3;
- property = "";
- keyElement->GetAttribute(nsAutoString("shift"), property);
- if(property == trueString)
- modShift = 1;
- else if(property == falseString)
- modShift = 0;
-
- PRBool isShift = PR_FALSE;
- keyEvent->GetShiftKey(&isShift);
- if ((isShift && (modShift==0)) ||
- (!isShift && (modShift==1)))
- {
- break;
- }
-
- // Test Alt attribute
- int modAlt = 3;
- property = "";
- keyElement->GetAttribute(nsAutoString("alt"), property);
- if(property == trueString)
- modAlt = 1;
- else if(property == falseString)
- modAlt = 0;
-
- PRBool isAlt = PR_FALSE;
- keyEvent->GetAltKey(&isAlt);
- if ((isAlt && (modAlt==0)) ||
- (!isAlt && (modAlt==1)))
- {
- break;
- }
+ // This is gross -- we're doing string compares
+ // every time we loop over this list!
+
+ // Modifiers in XUL files are tri-state --
+ // true, false, and unspecified.
+ // If a modifier is unspecified, we don't check
+ // the status of that modifier (always match).
+
+ // Get the attribute for the "xulkey" modifier.
+ nsAutoString xproperty = "";
+ keyElement->GetAttribute(nsAutoString("xulkey"),
+ xproperty);
+
+ // Is the modifier key set in the event?
+ PRBool isModKey = PR_FALSE;
+
+ // Check whether the shift key fails to match:
+ keyEvent->GetShiftKey(&isModKey);
+ property = "";
+ keyElement->GetAttribute(nsAutoString("shift"), property);
+ if ((property == trueString && !isModKey)
+ || (property == falseString && isModKey))
+ break;
+ // and also the xul key, if it's specified to be shift:
+ if (xulKeyShift == mXULKeyModifier &&
+ ((xproperty == trueString && !isModKey)
+ || (xproperty == falseString && isModKey)))
+ break;
+
+ // and the control key:
+ keyEvent->GetCtrlKey(&isModKey);
+ property = "";
+ keyElement->GetAttribute(nsAutoString("control"), property);
+ if ((property == trueString && !isModKey)
+ || (property == falseString && isModKey))
+ break;
+ // and if xul is control:
+ if (xulKeyControl == mXULKeyModifier &&
+ ((xproperty == trueString && !isModKey)
+ || (xproperty == falseString && isModKey)))
+ break;
+
+ // and the alt key
+ keyEvent->GetAltKey(&isModKey);
+ property = "";
+ keyElement->GetAttribute(nsAutoString("alt"), property);
+ if ((property == trueString && !isModKey)
+ || (property == falseString && isModKey))
+ break;
+ // and if xul is alt:
+ if (xulKeyAlt == mXULKeyModifier &&
+ ((xproperty == trueString && !isModKey)
+ || (xproperty == falseString && isModKey)))
+ break;
+
+ // and the meta key
+ keyEvent->GetMetaKey(&isModKey);
+ property = "";
+ keyElement->GetAttribute(nsAutoString("meta"), property);
+ if ((property == trueString && !isModKey)
+ || (property == falseString && isModKey))
+ break;
+ // and if xul is meta:
+ if (xulKeyMeta == mXULKeyModifier &&
+ ((xproperty == trueString && !isModKey)
+ || (xproperty == falseString && isModKey)))
+ break;
+
// Modifier tests passed so execute onclick command
nsAutoString cmdToExecute;
nsAutoString oncommand;
switch(aEventType) {
case eKeyPress:
keyElement->GetAttribute(nsAutoString("onkeypress"), cmdToExecute);
- printf("onkeypress = %s\n", cmdToExecute.ToNewCString());
-
+#if defined(DEBUG_saari) || defined(DEBUG_akkana)
+ printf("onkeypress = %s\n",
+ cmdToExecute.ToNewCString());
+#endif
+
keyElement->GetAttribute(nsAutoString("oncommand"), oncommand);
+#if defined(DEBUG_saari) || defined(DEBUG_akkana)
printf("oncommand = %s\n", oncommand.ToNewCString());
+#endif
break;
case eKeyDown:
keyElement->GetAttribute(nsAutoString("onkeydown"), cmdToExecute);
diff --git a/mozilla/suite/browser/navigatorOverlay.xul b/mozilla/suite/browser/navigatorOverlay.xul
index 530f6813240..02142cb4bc1 100644
--- a/mozilla/suite/browser/navigatorOverlay.xul
+++ b/mozilla/suite/browser/navigatorOverlay.xul
@@ -37,9 +37,9 @@ Contributor(s): ______________________________________. -->
-
-
-
+
+
+
@@ -53,12 +53,12 @@ Contributor(s): ______________________________________. -->
-
-
-
+
+
+
-
-
+
+
diff --git a/mozilla/xpfe/browser/resources/content/navigatorOverlay.xul b/mozilla/xpfe/browser/resources/content/navigatorOverlay.xul
index 530f6813240..02142cb4bc1 100644
--- a/mozilla/xpfe/browser/resources/content/navigatorOverlay.xul
+++ b/mozilla/xpfe/browser/resources/content/navigatorOverlay.xul
@@ -37,9 +37,9 @@ Contributor(s): ______________________________________. -->
-
-
-
+
+
+
@@ -53,12 +53,12 @@ Contributor(s): ______________________________________. -->
-
-
-
+
+
+
-
-
+
+
diff --git a/mozilla/xpfe/global/resources/content/globalOverlay.xul b/mozilla/xpfe/global/resources/content/globalOverlay.xul
index 60adfa42be3..1961ddbe6b0 100644
--- a/mozilla/xpfe/global/resources/content/globalOverlay.xul
+++ b/mozilla/xpfe/global/resources/content/globalOverlay.xul
@@ -31,9 +31,9 @@
-
-
-
+
+
+
@@ -47,13 +47,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
diff --git a/mozilla/xpfe/global/resources/content/mac/platformGlobalOverlay.xul b/mozilla/xpfe/global/resources/content/mac/platformGlobalOverlay.xul
index 47240a310ee..d7be1e87557 100644
--- a/mozilla/xpfe/global/resources/content/mac/platformGlobalOverlay.xul
+++ b/mozilla/xpfe/global/resources/content/mac/platformGlobalOverlay.xul
@@ -8,19 +8,25 @@
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+
+
+
+
+
-
+
-
+
-
+
diff --git a/mozilla/xpfe/global/resources/content/unix/platformDialogOverlay.xul b/mozilla/xpfe/global/resources/content/unix/platformDialogOverlay.xul
index 462623e56c6..6c837b8135f 100644
--- a/mozilla/xpfe/global/resources/content/unix/platformDialogOverlay.xul
+++ b/mozilla/xpfe/global/resources/content/unix/platformDialogOverlay.xul
@@ -40,7 +40,7 @@
-
+
diff --git a/mozilla/xpfe/global/resources/content/unix/platformGlobalOverlay.xul b/mozilla/xpfe/global/resources/content/unix/platformGlobalOverlay.xul
index 5ca355e9126..56397daf6c4 100644
--- a/mozilla/xpfe/global/resources/content/unix/platformGlobalOverlay.xul
+++ b/mozilla/xpfe/global/resources/content/unix/platformGlobalOverlay.xul
@@ -10,17 +10,17 @@
-
+
-
+
-
+
diff --git a/mozilla/xpfe/global/resources/content/win/platformGlobalOverlay.xul b/mozilla/xpfe/global/resources/content/win/platformGlobalOverlay.xul
index 1c0eab0f276..8348bb14a5c 100644
--- a/mozilla/xpfe/global/resources/content/win/platformGlobalOverlay.xul
+++ b/mozilla/xpfe/global/resources/content/win/platformGlobalOverlay.xul
@@ -10,17 +10,17 @@
-
+
-
+
-
+