Beispiel #1
0
void _XtAddCallbackOnce(
    register InternalCallbackList*callbacks,
    XtCallbackProc	    callback,
    XtPointer		    closure)
{
    register XtCallbackList cl = ToList(*callbacks);
    register int i;

    for (i=(*callbacks)->count; --i >= 0; cl++)
	if (cl->callback == callback && cl->closure == closure)
	    return;

    _XtAddCallback(callbacks, callback, closure);
} /* _XtAddCallbackOnce */
Beispiel #2
0
XtBlockHookId XtAppAddBlockHook(
    XtAppContext app,
    XtBlockHookProc proc,
    XtPointer closure)
{
    BlockHook hook = XtNew(BlockHookRec);
    LOCK_APP(app);
    hook->next = app->block_hook_list;
    hook->app = app;
    hook->proc = proc;
    hook->closure = closure;
    if (app->block_hook_list == NULL) {
	_XtAddCallback( &app->destroy_callbacks,
		        FreeBlockHookList,
		        (XtPointer)&app->block_hook_list
		      );
    }
    app->block_hook_list = hook;
    UNLOCK_APP(app);
    return (XtBlockHookId)hook;
}
Beispiel #3
0
void XtAddCallback(
    Widget	    widget,
    _Xconst char*   name,
    XtCallbackProc  callback,
    XtPointer	    closure
    )
{
    InternalCallbackList *callbacks;
    Widget hookobj;
    XtAppContext app = XtWidgetToApplicationContext(widget);

    LOCK_APP(app);
    callbacks = FetchInternalList(widget, name);
    if (!callbacks) {
	XtAppWarningMsg(app,
	       XtNinvalidCallbackList,XtNxtAddCallback,XtCXtToolkitError,
              "Cannot find callback list in XtAddCallback",
	      (String *)NULL, (Cardinal *)NULL);
	UNLOCK_APP(app);
	return;
    }
    _XtAddCallback(callbacks, callback, closure);
    if (!_XtIsHookObject(widget)) {
	hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget));
	if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	    XtChangeHookDataRec call_data;

	    call_data.type = XtHaddCallback;
	    call_data.widget = widget;
	    call_data.event_data = (XtPointer) name;
	    XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer)&call_data);
	}
    }
    UNLOCK_APP(app);
} /* XtAddCallback */