void XtRemoveCallback ( 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,XtNxtRemoveCallback,XtCXtToolkitError, "Cannot find callback list in XtRemoveCallback", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } _XtRemoveCallback(callbacks, callback, closure); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHremoveCallback; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtRemoveCallback */
void XtRemoveActionHook( XtActionHookId id) { ActionHook *p, hook = (ActionHook)id; XtAppContext app = hook->app; LOCK_APP(app); for (p = &app->action_hook_list; p != NULL && *p != hook; p = &(*p)->next); if (p) { *p = hook->next; XtFree( (XtPointer)hook ); if (app->action_hook_list == NULL) _XtRemoveCallback(&app->destroy_callbacks, FreeActionHookList, (XtPointer) &app->action_hook_list); } #ifdef DEBUG else { XtAppWarningMsg(app, "badId", "xtRemoveActionHook", XtCXtToolkitError, "XtRemoveActionHook called with bad or old hook id", (String*)NULL, (Cardinal*)NULL); } #endif /*DEBUG*/ UNLOCK_APP(app); }