Disable XBL. The loadBindings call was taking 0.1-0.25%. While I know how to get...
[WebKit-https.git] / WebCore / khtml / xbl / xbl_protohandler.cpp
1 #ifndef KHTML_NO_XBL
2
3 #include "qstringlist.h"
4 #include "qstring.h"
5 #include "xbl_protohandler.h"
6
7 using DOM::DOMString;
8
9 namespace XBL {
10
11 const int XBLPrototypeHandler::shiftKey = (1<<1);
12 const int XBLPrototypeHandler::altKey = (1<<2);
13 const int XBLPrototypeHandler::ctrlKey = (1<<3);
14 const int XBLPrototypeHandler::metaKey = (1<<4);
15 const int XBLPrototypeHandler::allKeys = shiftKey | altKey | ctrlKey | metaKey;
16
17 const int XBLPrototypeHandler::bubblingPhase = 0;
18 const int XBLPrototypeHandler::capturingPhase = 1;
19 const int XBLPrototypeHandler::targetPhase = 2;
20
21 XBLPrototypeHandler::XBLPrototypeHandler(const DOMString& event,
22                                          const DOMString& phase,
23                                          const DOMString& action,
24                                          const DOMString& keycode,
25                                          const DOMString& charcode,
26                                          const DOMString& modifiers,
27                                          const DOMString& button,
28                                          const DOMString& clickcount,
29                                          const DOMString& preventdefault,
30                                          XBLPrototypeBinding* binding)
31 :m_binding(binding), m_next(0), m_eventName(event), 
32  m_phase(bubblingPhase), m_preventDefault(false), m_keyMask(0), m_misc(0), m_button(-1), m_unused(0)
33 {
34     if (event.isEmpty())
35         return;
36
37     if (phase == "capturing")
38         m_phase = capturingPhase;
39     else if (phase == "target")
40         m_phase = targetPhase;
41
42     if (!action.isEmpty())
43         m_handlerText = action;
44
45     if (!modifiers.isEmpty()) {
46         QStringList result = QStringList::split(",", modifiers.string());
47         for (QStringList::Iterator it = result.begin(); it != result.end(); ++it) {
48             QString modifier = (*it).stripWhiteSpace();
49             if (modifier == "shift")
50                 m_keyMask |= shiftKey;
51             else if (modifier == "alt")
52                 m_keyMask |= altKey;
53             else if (modifier == "control")
54                 m_keyMask |= ctrlKey;
55             else if (modifier == "meta" || modifier == "accel" || modifier == "access")
56                 m_keyMask |= metaKey; // FIXME: For Apple, accel is like meta, and access really has no equivalent.
57                                       // If/when KDE adopts this code, use the appropriate defaults for the
58                                       // platform (probably ctrl for accel and alt for access if they match Win32).
59         }
60     }
61
62     if (!charcode.isEmpty()) {
63         // Normalize the character based off case (and whether the shift key has to be down).
64         m_key = charcode;
65         if ((m_keyMask & shiftKey) != 0)
66             m_key = m_key.upper();
67         else
68             m_key = m_key.lower();
69          
70         // We have a charcode.
71         m_misc = 1;
72     }
73     else if (!keycode.isEmpty())
74         m_key = keycode;
75      
76     if (!clickcount.isEmpty())
77         m_misc = clickcount.toInt();
78     if (!button.isEmpty())
79         m_button = button.toInt();
80 }
81
82 XBLPrototypeHandler::~XBLPrototypeHandler()
83 {
84     delete m_next;
85 }
86
87 void XBLPrototypeHandler::appendData(const QString& ch)
88 {
89     m_handlerText += ch;
90 }
91
92 }
93
94 #endif