зеркало из https://github.com/mozilla/gecko-dev.git
Added key event support.
This commit is contained in:
Родитель
57f7ee6d6b
Коммит
41265902cf
|
@ -501,6 +501,12 @@ void nsWindow::InitCallbacks(char * aName)
|
|||
nsXtWidget_ExposureMask_EventHandler,
|
||||
this);
|
||||
|
||||
XtAddEventHandler(mWidget,
|
||||
KeyPressMask,
|
||||
PR_FALSE,
|
||||
nsXtWidget_KeyPressMask_EventHandler,
|
||||
this);
|
||||
|
||||
|
||||
/*XtAddEventHandler(mWidget,
|
||||
ResizeRedirectMask,
|
||||
|
@ -1224,9 +1230,13 @@ printf("IN ON Resize %d %d %d %d\n",size->x, size->y, size->width, size->height)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
PRBool nsWindow::OnKey(PRUint32 aEventType, PRUint32 aKeyCode)
|
||||
PRBool nsWindow::OnKey(PRUint32 aEventType, PRUint32 aKeyCode, nsKeyEvent* aEvent)
|
||||
{
|
||||
return FALSE;
|
||||
if (mEventCallback) {
|
||||
return(DispatchEvent(aEvent));
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ public:
|
|||
virtual void OnDestroy();
|
||||
virtual PRBool OnPaint(nsPaintEvent &event);
|
||||
virtual PRBool OnResize(nsSizeEvent &aEvent);
|
||||
virtual PRBool OnKey(PRUint32 aEventType, PRUint32 aKeyCode);
|
||||
virtual PRBool OnKey(PRUint32 aEventType, PRUint32 aKeyCode, nsKeyEvent* aEvent);
|
||||
|
||||
virtual PRBool DispatchFocus(nsGUIEvent &aEvent);
|
||||
virtual PRBool OnScroll(nsScrollbarEvent & aEvent, PRUint32 cPos);
|
||||
|
@ -294,7 +294,7 @@ public: \
|
|||
virtual void OnDestroy(); \
|
||||
virtual PRBool OnPaint(nsPaintEvent & event); \
|
||||
virtual PRBool OnResize(nsSizeEvent &aEvent); \
|
||||
virtual PRBool OnKey(PRUint32 aEventType, PRUint32 aKeyCode); \
|
||||
virtual PRBool OnKey(PRUint32 aEventType, PRUint32 aKeyCode, nsKeyEvent* aEvent); \
|
||||
virtual PRBool DispatchFocus(nsGUIEvent &aEvent); \
|
||||
virtual PRBool OnScroll(nsScrollbarEvent & aEvent, PRUint32 cPos);
|
||||
|
||||
|
@ -512,9 +512,9 @@ public: \
|
|||
{ \
|
||||
return GET_OUTER()->OnResize(aEvent); \
|
||||
} \
|
||||
PRBool _classname::_aggname::OnKey(PRUint32 aEventType, PRUint32 aKeyCode) \
|
||||
PRBool _classname::_aggname::OnKey(PRUint32 aEventType, PRUint32 aKeyCode, nsKeyEvent* aEvent) \
|
||||
{ \
|
||||
return GET_OUTER()->OnKey(aEventType, aKeyCode); \
|
||||
return GET_OUTER()->OnKey(aEventType, aKeyCode, aEvent); \
|
||||
} \
|
||||
PRBool _classname::_aggname::DispatchFocus(nsGUIEvent &aEvent) \
|
||||
{ \
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "Xm/Xm.h"
|
||||
#include "nsXtEventHandler.h"
|
||||
#include "X11/keysym.h"
|
||||
|
||||
#include "nsWindow.h"
|
||||
#include "nsTextWidget.h"
|
||||
|
@ -33,6 +34,103 @@
|
|||
extern XtAppContext gAppContext;
|
||||
|
||||
|
||||
struct nsKeyConverter {
|
||||
int vkCode; // Platform independent key code
|
||||
XID keysym; // X keysym key code
|
||||
};
|
||||
|
||||
struct nsKeyConverter nsKeycodes[] = {
|
||||
NS_VK_CANCEL, XK_Cancel,
|
||||
NS_VK_BACK, XK_BackSpace,
|
||||
NS_VK_TAB, XK_Tab,
|
||||
NS_VK_CLEAR, XK_Clear,
|
||||
NS_VK_RETURN, XK_Return,
|
||||
NS_VK_SHIFT, XK_Shift_Lock,
|
||||
// NS_VK_CONTROL, XK_Control,
|
||||
NS_VK_ALT, XK_Alt_L,
|
||||
NS_VK_ALT, XK_Alt_R,
|
||||
NS_VK_PAUSE, XK_Pause,
|
||||
NS_VK_CAPS_LOCK, XK_Caps_Lock,
|
||||
NS_VK_ESCAPE, XK_Escape,
|
||||
NS_VK_SPACE, XK_space,
|
||||
// NS_VK_PAGE_UP, XK_PageUp,
|
||||
// NS_VK_PAGE_DOWN, XK_PageDown,
|
||||
NS_VK_END, XK_End,
|
||||
NS_VK_HOME, XK_Home,
|
||||
NS_VK_LEFT, XK_Left,
|
||||
NS_VK_UP, XK_Up,
|
||||
NS_VK_RIGHT, XK_Right,
|
||||
NS_VK_DOWN, XK_Down,
|
||||
NS_VK_PRINTSCREEN, XK_Print,
|
||||
NS_VK_INSERT, XK_Insert,
|
||||
NS_VK_DELETE, XK_Delete,
|
||||
|
||||
NS_VK_NUMPAD0, XK_KP_0,
|
||||
NS_VK_NUMPAD1, XK_KP_1,
|
||||
NS_VK_NUMPAD2, XK_KP_2,
|
||||
NS_VK_NUMPAD3, XK_KP_3,
|
||||
NS_VK_NUMPAD4, XK_KP_4,
|
||||
NS_VK_NUMPAD5, XK_KP_5,
|
||||
NS_VK_NUMPAD6, XK_KP_6,
|
||||
NS_VK_NUMPAD7, XK_KP_7,
|
||||
NS_VK_NUMPAD8, XK_KP_8,
|
||||
NS_VK_NUMPAD9, XK_KP_9,
|
||||
|
||||
NS_VK_MULTIPLY, XK_KP_Multiply,
|
||||
NS_VK_ADD, XK_KP_Add,
|
||||
NS_VK_SEPARATOR, XK_KP_Separator,
|
||||
NS_VK_SUBTRACT, XK_KP_Subtract,
|
||||
NS_VK_DECIMAL, XK_KP_Decimal,
|
||||
NS_VK_DIVIDE, XK_KP_Divide,
|
||||
NS_VK_F1, XK_F1,
|
||||
NS_VK_F2, XK_F2,
|
||||
NS_VK_F3, XK_F3,
|
||||
NS_VK_F4, XK_F4,
|
||||
NS_VK_F5, XK_F5,
|
||||
NS_VK_F6, XK_F6,
|
||||
NS_VK_F7, XK_F7,
|
||||
NS_VK_F8, XK_F8,
|
||||
NS_VK_F9, XK_F9,
|
||||
NS_VK_F10, XK_F10,
|
||||
NS_VK_F11, XK_F11,
|
||||
NS_VK_F12, XK_F12,
|
||||
NS_VK_F13, XK_F13,
|
||||
NS_VK_F14, XK_F14,
|
||||
NS_VK_F15, XK_F15,
|
||||
NS_VK_F16, XK_F16,
|
||||
NS_VK_F17, XK_F17,
|
||||
NS_VK_F18, XK_F18,
|
||||
NS_VK_F19, XK_F19,
|
||||
NS_VK_F20, XK_F20,
|
||||
NS_VK_F21, XK_F21,
|
||||
NS_VK_F22, XK_F22,
|
||||
NS_VK_F23, XK_F23,
|
||||
NS_VK_F24, XK_F24,
|
||||
|
||||
NS_VK_COMMA, XK_comma,
|
||||
NS_VK_PERIOD, XK_period,
|
||||
NS_VK_SLASH, XK_slash,
|
||||
// NS_VK_BACK_QUOTE, XK_backquote,
|
||||
NS_VK_OPEN_BRACKET, XK_bracketleft,
|
||||
NS_VK_CLOSE_BRACKET, XK_bracketright,
|
||||
NS_VK_QUOTE, XK_quotedbl
|
||||
|
||||
};
|
||||
|
||||
|
||||
int nsConvertKey(XID keysym)
|
||||
{
|
||||
int i;
|
||||
int length = sizeof(nsKeycodes) / sizeof(struct nsKeyConverter);
|
||||
for (i = 0; i < length; i++) {
|
||||
if (keysym == nsKeycodes[i].keysym)
|
||||
return(nsKeycodes[i].vkCode);
|
||||
}
|
||||
|
||||
return((int)keysym);
|
||||
}
|
||||
|
||||
|
||||
//==============================================================
|
||||
void nsXtWidget_InitNSEvent(XEvent * anXEv,
|
||||
XtPointer p,
|
||||
|
@ -705,6 +803,28 @@ void nsXtWidget_FSBOk_Callback(Widget w, XtPointer p, XtPointer call_data)
|
|||
}
|
||||
}
|
||||
|
||||
void nsXtWidget_KeyPressMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
|
||||
{
|
||||
nsWindow * widgetWindow = (nsWindow *) p ;
|
||||
nsKeyEvent kevent;
|
||||
Modifiers modout = 0;
|
||||
KeySym res;
|
||||
|
||||
nsXtWidget_InitNSEvent(event, p, kevent, NS_KEY_DOWN);
|
||||
|
||||
XKeyEvent* xKeyEvent = (XKeyEvent*)event;
|
||||
XtTranslateKeycode(xKeyEvent->display,xKeyEvent->keycode, xKeyEvent->state, &modout, &res);
|
||||
kevent.keyCode = nsConvertKey(res);
|
||||
kevent.time = xKeyEvent->time;
|
||||
kevent.isShift = PR_FALSE; // modout | ShiftMask; // Fix later
|
||||
kevent.isControl = PR_FALSE; // modout | ControlMask;
|
||||
kevent.isAlt = PR_FALSE; // Fix later
|
||||
printf("KEY Event %d shift %d control %d \n", kevent.keyCode, kevent.isShift, kevent.isControl);
|
||||
|
||||
widgetWindow->OnKey(NS_KEY_DOWN, kevent.keyCode, &kevent);
|
||||
|
||||
}
|
||||
|
||||
void nsXtWidget_ResetResize_Callback(XtPointer call_data)
|
||||
{
|
||||
nsWindow* widgetWindow = (nsWindow*)call_data;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "Xm/Xm.h"
|
||||
|
||||
void nsXtWidget_KeyPressMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
|
||||
void nsXtWidget_ExposureMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
|
||||
void nsXtWidget_ButtonPressMask_EventHandler(Widget w,XtPointer p, XEvent * event, Boolean * b);
|
||||
void nsXtWidget_ButtonReleaseMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
|
||||
|
|
Загрузка…
Ссылка в новой задаче