/*----------------------------------------------------------------------*/ static void DoSelect(Widget w,XEvent * event,char ** params,Cardinal * nparams) { static XtActionProc do_select_action = NULL; if (!do_select_action) { do_select_action = _XfeGetActionProc(xmCascadeButtonWidgetClass, "DoSelect"); } if (XfeBmAccentIsEnabled()) { XmCascadeButtonPart * cp = _XfeXmCascadeButtonPart(w); _XmMenuPopDown(XtParent(w),event,NULL); _XfeInvokeCallbacks(w,cp->activate_callback,XmCR_ACTIVATE,event,False); AccentUpdate(w,XfeACCENT_OUTSIDE); } else { do_select_action(w,event,params,nparams); } }
/*----------------------------------------------------------------------*/ /* extern */ void _XfePrimitiveLeave(Widget w,XEvent * event,char ** params,Cardinal * nparams) { /* Make sure the pointer is indeed inside for this action */ if (!_XfePointerInside(w)) { return; } _XfePointerInside(w) = False; /* Make sure we are not pretending to be insensitive */ if (!_XfeIsSensitive(w)) { return; } /* Call the XmPrimitive Leave() action */ _XmPrimitiveLeave(w,event,params,nparams); /* Undefine the cursor if needed */ if (_XfeCursorGood(_XfeCursor(w))) { XfeCursorUndefine(w); } /* Call leave callbacks */ _XfeInvokeCallbacks(w,_XfeLeaveCallbacks(w),XmCR_LEAVE,event,False); }
/*----------------------------------------------------------------------*/ /* extern */ void _XfePrimitiveFocus(Widget w,XEvent * event,char ** params,Cardinal * nparams) { /* Make sure we are not pretending to be insensitive */ if (!_XfeIsSensitive(w)) { return; } XmProcessTraversal(w,XmTRAVERSE_CURRENT); /* Invoke Focus Callbacks */ _XfeInvokeCallbacks(w,_XfeFocusCallbacks(w),XmCR_FOCUS,event,False); }
/*----------------------------------------------------------------------*/ static void Resize(Widget w) { /*printf("%s: Resize to (%d,%d)\n",XtName(w),_XfeWidth(w),_XfeHeight(w));*/ /* Obtain the Prefered Geometry */ _XfePrimitivePreferredGeometry(w, &_XfePreferredWidth(w), &_XfePreferredHeight(w)); /* Force the preferred dimensions if required */ if (_XfeUsePreferredWidth(w)) { _XfeWidth(w) = _XfePreferredWidth(w); } if (_XfeUsePreferredHeight(w)) { _XfeHeight(w) = _XfePreferredHeight(w); } /* Update the widget rect */ _XfePrimitiveUpdateRect(w); /* Layout the components */ _XfePrimitiveLayoutComponents(w); switch(_XfeBufferType(w)) { /* No buffer: nothing */ case XmBUFFER_NONE: break; /* Single buffer: update the buffer size and contents */ case XmBUFFER_PRIVATE: BufferUpdate(w); _XfePrimitiveDrawEverything(w,NULL,NULL); break; /* Multiple buffer: update the buffer size only */ case XmBUFFER_SHARED: BufferUpdate(w); break; } /* Invoke Resize Callbacks */ _XfeInvokeCallbacks(w,_XfeResizeCallbacks(w),XmCR_RESIZE,NULL,True); }
/*----------------------------------------------------------------------*/ /* extern */ void _XfePrimitiveEnter(Widget w,XEvent * event,char ** params,Cardinal * nparams) { _XfePointerInside(w) = True; /* Make sure we are not pretending to be insensitive */ if (!_XfeIsSensitive(w)) { return; } /* Call the XmPrimitive Enter() action */ _XmPrimitiveEnter(w,event,params,nparams); /* Define the cursor if needed */ if (_XfeCursorGood(_XfeCursor(w))) { XfeCursorDefine(w,_XfeCursor(w)); } /* Call enter callbacks */ _XfeInvokeCallbacks(w,_XfeEnterCallbacks(w),XmCR_ENTER,event,False); }