This commit is contained in:
kmcclusk%netscape.com 1998-07-23 17:47:28 +00:00
Родитель 57f7ee6d6b
Коммит 41265902cf
4 изменённых файлов: 137 добавлений и 6 удалений

Просмотреть файл

@ -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);