added the GtkEventHandler stuff for the gtk widget set

git-svn-id: svn://10.0.0.236/trunk@13795 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pavlov%pavlov.net
1998-10-31 15:57:22 +00:00
parent e1b5af3c02
commit 29f9544186
2 changed files with 635 additions and 0 deletions

View File

@@ -0,0 +1,570 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "gtk/gtk.h"
#include "nsGtkEventHandler.h"
#include "X11/keysym.h"
#include "nsWindow.h"
#include "nsTextWidget.h"
#include "nsCheckButton.h"
#include "nsRadioButton.h"
#include "nsFileWidget.h"
#include "nsGUIEvent.h"
#include "nsIMenuItem.h"
#include "stdio.h"
#define DBG 0
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_L,
NS_VK_SHIFT, XK_Shift_R,
NS_VK_CONTROL, XK_Control_L,
NS_VK_CONTROL, XK_Control_R,
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_Page_Up,
NS_VK_PAGE_DOWN, XK_Page_Down,
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,
//XXX: How do you get a BACK_QUOTE? 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 (nsKeycodes[i].keysym == keysym)
return(nsKeycodes[i].vkCode);
}
return((int)keysym);
}
//==============================================================
void nsGtkWidget_InitNSEvent(XEvent * anXEv,
XtPointer p,
nsGUIEvent &anEvent,
PRUint32 aEventType)
{
anEvent.message = aEventType;
anEvent.widget = (nsWindow *) p;
anEvent.eventStructType = NS_GUI_EVENT;
if (anXEv != NULL) {
anEvent.point.x = anXEv->xbutton.x;
anEvent.point.y = anXEv->xbutton.y;
}
anEvent.time = 0; //XXX: Implement this
}
//==============================================================
void nsGtkWidget_InitNSMouseEvent(XEvent * anXEv,
XtPointer p,
nsMouseEvent &anEvent,
PRUint32 aEventType)
{
// Do base initialization
nsGtkWidget_InitNSEvent(anXEv, p, anEvent, aEventType);
if (anXEv != NULL) { // Do Mouse Event specific intialization
anEvent.time = anXEv->xbutton.time;
anEvent.isShift = (anXEv->xbutton.state & ShiftMask) ? PR_TRUE : PR_FALSE;
anEvent.isControl = (anXEv->xbutton.state & ControlMask) ? PR_TRUE : PR_FALSE;
anEvent.isAlt = (anXEv->xbutton.state & Mod1Mask) ? PR_TRUE : PR_FALSE;
anEvent.clickCount = 1; //XXX Fix for double-clicks
anEvent.eventStructType = NS_MOUSE_EVENT;
}
}
//==============================================================
#ifndef MIN
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
#define INTERSECTS(r1_x1,r1_x2,r1_y1,r1_y2,r2_x1,r2_x2,r2_y1,r2_y2) \
!((r2_x2 <= r1_x1) ||\
(r2_y2 <= r1_y1) ||\
(r2_x1 >= r1_x2) ||\
(r2_y1 >= r1_y2))
//==============================================================
typedef struct COLLAPSE_INFO {
Window win;
nsRect *r;
} CollapseInfo;
//==============================================================
static Bool checkForExpose(Display *dpy, XEvent *evt, XtPointer client_data)
{
CollapseInfo *cinfo = (CollapseInfo*)client_data;
if ((evt->type == Expose && evt->xexpose.window == cinfo->win &&
INTERSECTS(cinfo->r->x, cinfo->r->width, cinfo->r->y, cinfo->r->height,
evt->xexpose.x, evt->xexpose.y,
evt->xexpose.x + evt->xexpose.width,
evt->xexpose.y + evt->xexpose.height)) ||
(evt->type == GraphicsExpose && evt->xgraphicsexpose.drawable == cinfo->win &&
INTERSECTS(cinfo->r->x, cinfo->r->width, cinfo->r->y, cinfo->r->height,
evt->xgraphicsexpose.x, evt->xgraphicsexpose.y,
evt->xgraphicsexpose.x + evt->xgraphicsexpose.width,
evt->xgraphicsexpose.y + evt->xgraphicsexpose.height))) {
return True;
}
return False;
}
//==============================================================
void nsGtkWidget_ExposureMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsPaintEvent pevent;
nsRect rect;
nsGtkWidget_InitNSEvent(event, p, pevent, NS_PAINT);
pevent.rect = (nsRect *)&rect;
XEvent xev;
rect.x = event->xexpose.x;
rect.y = event->xexpose.y;
rect.width = event->xexpose.width;
rect.height = event->xexpose.height;
if (widgetWindow->GetResized())
return;
if (event->type == NoExpose) {
return;
}
Display* display = XtDisplay(w);
Window window = XtWindow(w);
XSync(display, FALSE);
while (XCheckTypedWindowEvent(display, window, Expose, &xev) == TRUE) {
rect.x = xev.xexpose.x;
rect.y = xev.xexpose.y;
rect.width = xev.xexpose.width;
rect.height = xev.xexpose.height;
}
widgetWindow->OnPaint(pevent);
}
//==============================================================
void nsGtkWidget_ButtonPressMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_LEFT_BUTTON_DOWN);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_ButtonReleaseMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_LEFT_BUTTON_UP);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_ButtonMotionMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsPaintEvent pevent ;
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_MOVE);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_MotionMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_MOVE);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_EnterMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_ENTER);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_LeaveMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
if (DBG) fprintf(stderr, "***************** nsGtkWidget_LeaveMask_EventHandler\n");
nsWindow * widgetWindow = (nsWindow *) p ;
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(event, p, mevent, NS_MOUSE_EXIT);
widgetWindow->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_Focus_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsWindow * widgetWindow = (nsWindow *) p ;
XmAnyCallbackStruct * cbs = (XmAnyCallbackStruct*)call_data;
nsGUIEvent event;
nsGtkWidget_InitNSEvent(cbs->event, p, event,
cbs->reason == XmCR_FOCUS?NS_GOTFOCUS:NS_LOSTFOCUS);
widgetWindow->DispatchFocus(event);
}
//==============================================================
void nsGtkWidget_Toggle_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsWindow * widgetWindow = (nsWindow *) p ;
if (DBG) fprintf(stderr, "***************** nsGtkWidget_Scrollbar_Callback\n");
nsScrollbarEvent sevent;
XmToggleButtonCallbackStruct * cbs = (XmToggleButtonCallbackStruct*)call_data;
}
//==============================================================
void nsGtkWidget_Toggle_ArmCallback(Widget w, XtPointer p, XtPointer call_data)
{
nsCheckButton * checkBtn = (nsCheckButton *) p ;
XmToggleButtonCallbackStruct * cbs = (XmToggleButtonCallbackStruct*)call_data;
if (DBG) fprintf(stderr, "Callback struct 0x%x\n", cbs);fflush(stderr);
checkBtn->Armed();
}
//==============================================================
void nsGtkWidget_Toggle_DisArmCallback(Widget w, XtPointer p, XtPointer call_data)
{
nsCheckButton * checkBtn = (nsCheckButton *) p ;
nsScrollbarEvent sevent;
XmToggleButtonCallbackStruct * cbs = (XmToggleButtonCallbackStruct*)call_data;
checkBtn->DisArmed();
}
//==============================================================
void nsGtkWidget_RadioButton_ArmCallback(Widget w, XtPointer p, XtPointer call_data)
{
nsRadioButton * radioBtn = (nsRadioButton *) p ;
XmToggleButtonCallbackStruct * cbs = (XmToggleButtonCallbackStruct*)call_data;
radioBtn->Armed();
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(cbs->event, p, mevent, NS_MOUSE_LEFT_BUTTON_DOWN);
radioBtn->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_RadioButton_DisArmCallback(Widget w, XtPointer p, XtPointer call_data)
{
nsRadioButton * radioBtn = (nsRadioButton *) p ;
nsScrollbarEvent sevent;
XmToggleButtonCallbackStruct * cbs = (XmToggleButtonCallbackStruct*)call_data;
radioBtn->DisArmed();
nsMouseEvent mevent;
nsGtkWidget_InitNSMouseEvent(cbs->event, p, mevent, NS_MOUSE_LEFT_BUTTON_UP);
radioBtn->DispatchMouseEvent(mevent);
}
//==============================================================
void nsGtkWidget_Scrollbar_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsWindow * widgetWindow = (nsWindow *) p ;
nsScrollbarEvent sevent;
XmScrollBarCallbackStruct * cbs = (XmScrollBarCallbackStruct*) call_data;
sevent.widget = (nsWindow *) p;
if (cbs->event != nsnull) {
sevent.point.x = cbs->event->xbutton.x;
sevent.point.y = cbs->event->xbutton.y;
} else {
sevent.point.x = 0;
sevent.point.y = 0;
}
sevent.time = 0; //XXX Implement this
switch (cbs->reason) {
case XmCR_INCREMENT:
sevent.message = NS_SCROLLBAR_LINE_NEXT;
break;
case XmCR_DECREMENT:
sevent.message = NS_SCROLLBAR_LINE_PREV;
break;
case XmCR_PAGE_INCREMENT:
sevent.message = NS_SCROLLBAR_PAGE_NEXT;
break;
case XmCR_PAGE_DECREMENT:
sevent.message = NS_SCROLLBAR_PAGE_PREV;
break;
case XmCR_DRAG:
sevent.message = NS_SCROLLBAR_POS;
break;
case XmCR_VALUE_CHANGED:
sevent.message = NS_SCROLLBAR_POS;
break;
default:
break;
}
widgetWindow->OnScroll(sevent, cbs->value);
}
//==============================================================
void nsGtkWidget_Expose_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsWindow * widgetWindow = (nsWindow *) p ;
if (widgetWindow == nsnull) {
return;
}
XmDrawingAreaCallbackStruct * cbs = (XmDrawingAreaCallbackStruct *)call_data;
XEvent * event = cbs->event;
nsPaintEvent pevent;
nsRect rect;
nsGtkWidget_InitNSEvent(event, p, pevent, NS_PAINT);
pevent.rect = (nsRect *)&rect;
widgetWindow->OnPaint(pevent);
}
//==============================================================
void nsGtkWidget_Resize_Callback(Widget w, XtPointer p, XtPointer call_data)
{
}
//==============================================================
void nsGtkWidget_Text_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsWindow * widgetWindow = (nsWindow *) p ;
int len;
XmTextVerifyCallbackStruct *cbs = (XmTextVerifyCallbackStruct *) call_data;
PasswordData * data;
XtVaGetValues(w, XmNuserData, &data, NULL);
if (data == NULL || data->mIgnore) {
return;
}
if (cbs->reason == XmCR_ACTIVATE) {
printf ("Password: %s\n", data->mPassword.ToNewCString());
return;
}
if (cbs->startPos < cbs->currInsert) { /* backspace */
cbs->endPos = data->mPassword.Length(); /* delete from here to end */
data->mPassword.SetLength(cbs->startPos); /* backspace--terminate */
return;
}
if (cbs->startPos == cbs->currInsert && cbs->currInsert < data->mPassword.Length()) {
nsString insStr(cbs->text->ptr);
data->mPassword.Insert(insStr, cbs->currInsert, strlen(cbs->text->ptr));
} else if (cbs->startPos == cbs->currInsert && cbs->endPos != cbs->startPos) {
data->mPassword.SetLength(cbs->startPos);
printf("Setting Length [%s] at %d\n", cbs->text->ptr, cbs->currInsert);
} else if (cbs->startPos == cbs->currInsert) { /* backspace */
data->mPassword.Append(cbs->text->ptr);
}
for (len = 0; len < cbs->text->length; len++)
cbs->text->ptr[len] = '*';
}
//==============================================================
void nsGtkWidget_FSBCancel_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsFileWidget * widgetWindow = (nsFileWidget *) p ;
if (p != nsnull) {
widgetWindow->OnCancel();
}
}
//==============================================================
void nsGtkWidget_FSBOk_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsFileWidget * widgetWindow = (nsFileWidget *) p ;
if (p != nsnull) {
widgetWindow->OnOk();
}
}
//==============================================================
void nsGtkWidget_InitNSKeyEvent(int aEventType, nsKeyEvent& aKeyEvent, Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsWindow * widgetWindow = (nsWindow *) p ;
Modifiers modout = 0;
KeySym res;
nsGtkWidget_InitNSEvent(event, p, aKeyEvent, aEventType);
XKeyEvent* xKeyEvent = (XKeyEvent*)event;
// Get the modout to test for shift + control
XtTranslateKeycode(xKeyEvent->display,xKeyEvent->keycode, xKeyEvent->state, &modout, &res);
res = XKeycodeToKeysym(xKeyEvent->display, xKeyEvent->keycode, 0);
aKeyEvent.keyCode = nsConvertKey(res) & 0x00FF;
aKeyEvent.time = xKeyEvent->time;
aKeyEvent.isShift = (xKeyEvent->state & ShiftMask) ? PR_TRUE : PR_FALSE;
aKeyEvent.isControl = (xKeyEvent->state & ControlMask) ? PR_TRUE : PR_FALSE;
aKeyEvent.isAlt = (xKeyEvent->state & Mod1Mask) ? PR_TRUE : PR_FALSE;
}
//==============================================================
void nsGtkWidget_KeyPressMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsKeyEvent kevent;
nsGtkWidget_InitNSKeyEvent(NS_KEY_DOWN, kevent, w, p, event, b);
nsWindow * widgetWindow = (nsWindow *) p ;
widgetWindow->OnKey(NS_KEY_DOWN, kevent.keyCode, &kevent);
}
//==============================================================
void nsGtkWidget_KeyReleaseMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b)
{
nsKeyEvent kevent;
nsGtkWidget_InitNSKeyEvent(NS_KEY_UP, kevent, w, p, event, b);
nsWindow * widgetWindow = (nsWindow *) p ;
widgetWindow->OnKey(NS_KEY_UP, kevent.keyCode, &kevent);
}
//==============================================================
void nsGtkWidget_ResetResize_Callback(XtPointer call_data)
{
nsWindow* widgetWindow = (nsWindow*)call_data;
widgetWindow->SetResized(PR_FALSE);
}
//==============================================================
void nsGtkWidget_Menu_Callback(Widget w, XtPointer p, XtPointer call_data)
{
nsIMenuItem * menuItem = (nsIMenuItem *)p;
if (menuItem != NULL) {
nsMenuEvent mevent;
mevent.message = NS_MENU_SELECTED;
mevent.eventStructType = NS_MENU_EVENT;
mevent.point.x = 0;
mevent.point.y = 0;
menuItem->GetTarget(mevent.widget);
menuItem->GetCommand(mevent.mCommand);
mevent.mMenuItem = menuItem;
mevent.time = 0; //XXX: Implement this
nsEventStatus status;
mevent.widget->DispatchEvent((nsGUIEvent *)&mevent, status);
}
}

View File

@@ -0,0 +1,65 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef __nsXtEventHandler_h
#define __nsXtEventHandler_h
#include "Xm/Xm.h"
class nsIWidget;
class nsIMenuItem;
void nsGtkWidget_KeyPressMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_KeyReleaseMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_ExposureMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_ButtonPressMask_EventHandler(Widget w,XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_ButtonReleaseMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_ButtonMotionMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_MotionMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_EnterMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
void nsGtkWidget_LeaveMask_EventHandler(Widget w, XtPointer p, XEvent * event, Boolean * b);
//----------------------------------------------------
void nsGtkWidget_FSBCancel_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_FSBOk_Callback(Widget w, XtPointer p, XtPointer call_data);
//----------------------------------------------------
void nsGtkWidget_Focus_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Scrollbar_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Toggle_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Toggle_ArmCallback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Toggle_DisArmCallback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_RadioButton_ArmCallback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_RadioButton_DisArmCallback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Text_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Resize_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Expose_Callback(Widget w, XtPointer p, XtPointer call_data);
void nsGtkWidget_Refresh_Callback(XtPointer call_data);
void nsGtkWidget_ResetResize_Callback(XtPointer call_data);
void nsGtkWidget_Menu_Callback(Widget w, XtPointer p, XtPointer call_data);
#endif // __nsXtEventHandler.h