aboutsummaryrefslogtreecommitdiff
path: root/libXt/src/EventUtil.c
diff options
context:
space:
mode:
Diffstat (limited to 'libXt/src/EventUtil.c')
-rw-r--r--libXt/src/EventUtil.c464
1 files changed, 232 insertions, 232 deletions
diff --git a/libXt/src/EventUtil.c b/libXt/src/EventUtil.c
index 91ad31fae..8beda1dcd 100644
--- a/libXt/src/EventUtil.c
+++ b/libXt/src/EventUtil.c
@@ -1,232 +1,232 @@
-/*
-
-Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph) shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-*/
-/********************************************************
-
-Copyright 1988 by Hewlett-Packard Company
-Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that copyright notice and this permission
-notice appear in supporting documentation, and that the names of
-Hewlett-Packard or Digital not be used in advertising or
-publicity pertaining to distribution of the software without specific,
-written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-********************************************************/
-
-/*
-
-Copyright 1987, 1988, 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "IntrinsicI.h"
-#include "PassivGraI.h"
-#include "StringDefs.h"
-#include "EventI.h"
-
-static XContext perWidgetInputContext = 0;
-
-void _XtFreePerWidgetInput(
- Widget w,
- XtPerWidgetInput pwi)
-{
- LOCK_PROCESS;
- XDeleteContext(XtDisplay(w),
- (Window)w,
- perWidgetInputContext);
-
- XtFree((char *)pwi);
- UNLOCK_PROCESS;
-}
-
-/*
- * This routine gets the passive list associated with the widget
- * from the context manager.
- */
-XtPerWidgetInput _XtGetPerWidgetInput(
- Widget widget,
- _XtBoolean create)
-{
- XtPerWidgetInput pwi = NULL;
- Display *dpy = widget->core.screen->display;
-
- LOCK_PROCESS;
- if (! perWidgetInputContext)
- perWidgetInputContext = XUniqueContext();
-
- if (XFindContext(dpy,
- (Window)widget,
- perWidgetInputContext,
- (XPointer *)&pwi) &&
- create)
- {
- pwi = (XtPerWidgetInput)
- __XtMalloc((unsigned) sizeof(XtPerWidgetInputRec));
-
- pwi->focusKid = NULL;
- pwi->queryEventDescendant = NULL;
- pwi->focalPoint = XtUnrelated;
- pwi->keyList =
- pwi->ptrList = NULL;
-
- pwi->haveFocus =
- pwi->map_handler_added =
- pwi->realize_handler_added =
- pwi->active_handler_added = FALSE;
-
- XtAddCallback(widget, XtNdestroyCallback,
- _XtDestroyServerGrabs, (XtPointer)pwi);
-
- (void) XSaveContext(dpy,
- (Window)widget,
- perWidgetInputContext,
- (char *) pwi);
- }
- UNLOCK_PROCESS;
- return pwi;
-}
-
-
-void _XtFillAncestorList(
- Widget **listPtr,
- int *maxElemsPtr,
- int *numElemsPtr,
- Widget start,
- Widget breakWidget)
-{
-#define CACHESIZE 16
- Cardinal i;
- Widget w;
- Widget *trace = *listPtr;
-
- /* First time in, allocate the ancestor list */
- if (trace == NULL)
- {
- trace = (Widget *) __XtMalloc(CACHESIZE * sizeof(Widget));
- *maxElemsPtr = CACHESIZE;
- }
- /* First fill in the ancestor list */
-
- trace[0] = start;
-
- for (i = 1, w = XtParent(start);
- w != NULL && !XtIsShell(trace[i-1]) && trace[i-1] != breakWidget;
- w = XtParent(w), i++) {
- if (i == (Cardinal) *maxElemsPtr) {
- /* This should rarely happen, but if it does it'll probably
- happen again, so grow the ancestor list */
- *maxElemsPtr += CACHESIZE;
- trace = (Widget *) XtRealloc((char*)trace,
- sizeof(Widget) * (*maxElemsPtr));
- }
- trace[i] = w;
- }
- *listPtr = trace;
- *numElemsPtr = i;
-#undef CACHESIZE
-}
-
-
-Widget _XtFindRemapWidget(
- XEvent *event,
- Widget widget,
- EventMask mask,
- XtPerDisplayInput pdi)
-{
- Widget dspWidget = widget;
-
- if (!pdi->traceDepth || !(widget == pdi->trace[0]))
- {
- _XtFillAncestorList(&pdi->trace, &pdi->traceMax,
- &pdi->traceDepth, widget, NULL);
- pdi->focusWidget = NULL; /* invalidate the focus
- cache */
- }
- if (mask & (KeyPressMask | KeyReleaseMask))
- dspWidget = _XtProcessKeyboardEvent((XKeyEvent*)event, widget, pdi);
- else if (mask &(ButtonPressMask | ButtonReleaseMask))
- dspWidget = _XtProcessPointerEvent((XButtonEvent*)event, widget,pdi);
-
- return dspWidget;
-}
-
-void _XtUngrabBadGrabs(
- XEvent *event,
- Widget widget,
- EventMask mask,
- XtPerDisplayInput pdi)
-{
- XKeyEvent * ke = (XKeyEvent *) event;
-
- if (mask & (KeyPressMask | KeyReleaseMask))
- {
- if (IsServerGrab(pdi->keyboard.grabType) &&
- !_XtOnGrabList(pdi->keyboard.grab.widget,
- pdi->grabList))
- XtUngrabKeyboard(widget, ke->time);
-
- }
- else
- {
- if (IsServerGrab(pdi->pointer.grabType) &&
- !_XtOnGrabList(pdi->pointer.grab.widget,
- pdi->grabList))
- XtUngrabPointer(widget, ke->time);
- }
-}
+/*
+
+Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+*/
+/********************************************************
+
+Copyright 1988 by Hewlett-Packard Company
+Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts
+
+Permission to use, copy, modify, and distribute this software
+and its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that copyright notice and this permission
+notice appear in supporting documentation, and that the names of
+Hewlett-Packard or Digital not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+********************************************************/
+
+/*
+
+Copyright 1987, 1988, 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "IntrinsicI.h"
+#include "PassivGraI.h"
+#include "StringDefs.h"
+#include "EventI.h"
+
+static XContext perWidgetInputContext = 0;
+
+void _XtFreePerWidgetInput(
+ Widget w,
+ XtPerWidgetInput pwi)
+{
+ LOCK_PROCESS;
+ XDeleteContext(XtDisplay(w),
+ (Window)w,
+ perWidgetInputContext);
+
+ XtFree((char *)pwi);
+ UNLOCK_PROCESS;
+}
+
+/*
+ * This routine gets the passive list associated with the widget
+ * from the context manager.
+ */
+XtPerWidgetInput _XtGetPerWidgetInput(
+ Widget widget,
+ _XtBoolean create)
+{
+ XtPerWidgetInput pwi = NULL;
+ Display *dpy = widget->core.screen->display;
+
+ LOCK_PROCESS;
+ if (! perWidgetInputContext)
+ perWidgetInputContext = XUniqueContext();
+
+ if (XFindContext(dpy,
+ (Window)widget,
+ perWidgetInputContext,
+ (XPointer *)&pwi) &&
+ create)
+ {
+ pwi = (XtPerWidgetInput)
+ __XtMalloc((unsigned) sizeof(XtPerWidgetInputRec));
+
+ pwi->focusKid = NULL;
+ pwi->queryEventDescendant = NULL;
+ pwi->focalPoint = XtUnrelated;
+ pwi->keyList =
+ pwi->ptrList = NULL;
+
+ pwi->haveFocus =
+ pwi->map_handler_added =
+ pwi->realize_handler_added =
+ pwi->active_handler_added = FALSE;
+
+ XtAddCallback(widget, XtNdestroyCallback,
+ _XtDestroyServerGrabs, (XtPointer)pwi);
+
+ (void) XSaveContext(dpy,
+ (Window)widget,
+ perWidgetInputContext,
+ (char *) pwi);
+ }
+ UNLOCK_PROCESS;
+ return pwi;
+}
+
+
+void _XtFillAncestorList(
+ Widget **listPtr,
+ int *maxElemsPtr,
+ int *numElemsPtr,
+ Widget start,
+ Widget breakWidget)
+{
+#define CACHESIZE 16
+ Cardinal i;
+ Widget w;
+ Widget *trace = *listPtr;
+
+ /* First time in, allocate the ancestor list */
+ if (trace == NULL)
+ {
+ trace = (Widget *) __XtMalloc(CACHESIZE * sizeof(Widget));
+ *maxElemsPtr = CACHESIZE;
+ }
+ /* First fill in the ancestor list */
+
+ trace[0] = start;
+
+ for (i = 1, w = XtParent(start);
+ w != NULL && !XtIsShell(trace[i-1]) && trace[i-1] != breakWidget;
+ w = XtParent(w), i++) {
+ if (i == (Cardinal) *maxElemsPtr) {
+ /* This should rarely happen, but if it does it'll probably
+ happen again, so grow the ancestor list */
+ *maxElemsPtr += CACHESIZE;
+ trace = (Widget *) XtRealloc((char*)trace,
+ sizeof(Widget) * (*maxElemsPtr));
+ }
+ trace[i] = w;
+ }
+ *listPtr = trace;
+ *numElemsPtr = i;
+#undef CACHESIZE
+}
+
+
+Widget _XtFindRemapWidget(
+ XEvent *event,
+ Widget widget,
+ EventMask mask,
+ XtPerDisplayInput pdi)
+{
+ Widget dspWidget = widget;
+
+ if (!pdi->traceDepth || !(widget == pdi->trace[0]))
+ {
+ _XtFillAncestorList(&pdi->trace, &pdi->traceMax,
+ &pdi->traceDepth, widget, NULL);
+ pdi->focusWidget = NULL; /* invalidate the focus
+ cache */
+ }
+ if (mask & (KeyPressMask | KeyReleaseMask))
+ dspWidget = _XtProcessKeyboardEvent((XKeyEvent*)event, widget, pdi);
+ else if (mask &(ButtonPressMask | ButtonReleaseMask))
+ dspWidget = _XtProcessPointerEvent((XButtonEvent*)event, widget,pdi);
+
+ return dspWidget;
+}
+
+void _XtUngrabBadGrabs(
+ XEvent *event,
+ Widget widget,
+ EventMask mask,
+ XtPerDisplayInput pdi)
+{
+ XKeyEvent * ke = (XKeyEvent *) event;
+
+ if (mask & (KeyPressMask | KeyReleaseMask))
+ {
+ if (IsServerGrab(pdi->keyboard.grabType) &&
+ !_XtOnGrabList(pdi->keyboard.grab.widget,
+ pdi->grabList))
+ XtUngrabKeyboard(widget, ke->time);
+
+ }
+ else
+ {
+ if (IsServerGrab(pdi->pointer.grabType) &&
+ !_XtOnGrabList(pdi->pointer.grab.widget,
+ pdi->grabList))
+ XtUngrabPointer(widget, ke->time);
+ }
+}