/*----------------------------------------------------------------------*/ /* 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); }
/*----------------------------------------------------------------------*/ static void Realize(Widget w,XtValueMask * mask,XSetWindowAttributes* wa) { XSetWindowAttributes attr; /* Make sure only subclasses of XfePrimitive get instanciated */ if ((XtClass(w) == xfePrimitiveWidgetClass)) { _XfeWarning(w,MESSAGE0); return; } /* Let XmPrimitive create the window */ (*xmPrimitiveWidgetClass->core_class.realize)(w,mask,wa); /* Set the Bit Gravity */ attr.bit_gravity = _XfePrimitiveAccessBitGravity(w); XChangeWindowAttributes(XtDisplay(w),_XfeWindow(w),CWBitGravity,&attr); /* Define the cursor if needed */ if (_XfeCursorGood(_XfeCursor(w)) && _XfePointerInside(w)) { XfeCursorDefine(w,_XfeCursor(w)); } }
/*----------------------------------------------------------------------*/ /* 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); }
/*----------------------------------------------------------------------*/ static void DrawBackground(Widget w,XEvent *event,Region region,XRectangle * clip_rect) { XfeArrowPart * ap = _XfeArrowPart(w); XfeButtonPart * bp = _XfeButtonPart(w); if (bp->emulate_motif) { return; } #if 0 (*xfeButtonClassRec.xfe_primitive_class.draw_background)(w, event, region, clip_rect); #else /* Fill the background if needed */ if (bp->fill_on_arm && bp->armed) { XFillRectangle(XtDisplay(w), _XfePrimitiveDrawable(w), bp->armed_GC, 0,0, _XfeWidth(w),_XfeHeight(w)); } else if (bp->fill_on_enter && (bp->raised || _XfePointerInside(w))) { XFillRectangle(XtDisplay(w), _XfePrimitiveDrawable(w), bp->label_raised_GC, 0,0, _XfeWidth(w),_XfeHeight(w)); } #endif }
/*----------------------------------------------------------------------*/ static Boolean SetValues(Widget ow,Widget rw,Widget nw,ArgList args,Cardinal *nargs) { /* Reset the configuration Flags */ _XfeConfigFlags(nw) = XfeConfigNone; /* Reset the preparation Flags */ _XfePrepareFlags(nw) = XfePrepareNone; /* buffer_type */ if (_XfeBufferType(nw) != _XfeBufferType(ow)) { _XfeBufferType(nw) = _XfeBufferType(ow); _XfeWarning(nw,MESSAGE7); } /* preferred_height */ if (_XfePreferredHeight(nw) != _XfePreferredHeight(ow)) { _XfePreferredHeight(nw) = _XfePreferredHeight(ow); _XfeWarning(nw,MESSAGE2); } /* preferred_width */ if (_XfePreferredWidth(nw) != _XfePreferredWidth(ow)) { _XfePreferredWidth(nw) = _XfePreferredWidth(ow); _XfeWarning(nw,MESSAGE3); } /* pointer_inside */ if (_XfePointerInside(nw) != _XfePointerInside(ow)) { _XfePointerInside(nw) = _XfePointerInside(ow); _XfeWarning(nw,MESSAGE4); } /* num_popups */ if (_XfeNumPopups(nw) != _XfeNumPopups(ow)) { _XfeNumPopups(nw) = _XfeNumPopups(ow); _XfeWarning(nw,MESSAGE5); } /* popup_list */ if (_XfePopupList(nw) != _XfePopupList(ow)) { _XfePopupList(nw) = _XfePopupList(ow); _XfeWarning(nw,MESSAGE6); } /* resize_width */ if (_XfeUsePreferredWidth(nw) != _XfeUsePreferredWidth(ow)) { if(_XfeUsePreferredWidth(nw)) { _XfeConfigFlags(nw) |= (XfeConfigLayout| XfeConfigGeometry| XfeConfigExpose); } } /* resize_height */ if (_XfeUsePreferredHeight(nw) != _XfeUsePreferredHeight(ow)) { if(_XfeUsePreferredHeight(nw)) { _XfeConfigFlags(nw) |= (XfeConfigLayout| XfeConfigGeometry| XfeConfigExpose); } } /* height */ if (_XfeHeight(nw) != _XfeHeight(ow)) { /* if resize_heigh is True, we dont allow width changes */ if (_XfeUsePreferredHeight(nw)) { _XfeHeight(nw) = _XfeHeight(ow); } else { _XfeConfigFlags(nw) |= (XfeConfigLayout|XfeConfigExpose); } } /* width */ if (_XfeWidth(nw) != _XfeWidth(ow)) { /* if resize_width is True, we dont allow width changes */ if (_XfeUsePreferredWidth(nw)) { _XfeWidth(nw) = _XfeWidth(ow); } else { _XfeConfigFlags(nw) |= (XfeConfigLayout|XfeConfigExpose); } } /* cursor */ if (_XfeCursor(nw) != _XfeCursor(ow)) { /* If the new cursor is good, define it */ if (_XfeCursorGood(_XfeCursor(nw))) { XfeCursorDefine(nw,_XfeCursor(nw)); } else { XfeCursorUndefine(nw); } } /* Changes that affect the layout and geometry */ if ((_XfeHighlightThickness(nw) != _XfeHighlightThickness(ow)) || (_XfeMarginTop(nw) != _XfeMarginTop(ow)) || (_XfeMarginBottom(nw) != _XfeMarginBottom(ow)) || (_XfeMarginLeft(nw) != _XfeMarginLeft(ow)) || (_XfeMarginRight(nw) != _XfeMarginRight(ow)) || (_XfeShadowThickness(nw) != _XfeShadowThickness(ow)) || (_XfeUnitType(nw) != _XfeUnitType(ow))) { _XfeConfigFlags(nw) |= (XfeConfigLayout|XfeConfigGeometry|XfeConfigExpose); } /* shadow_type */ if (_XfeShadowType(nw) != _XfeShadowType(ow)) { /* Make sure the new shadow type is ok */ XfeRepTypeCheck(nw,XmRShadowType,&_XfeShadowType(nw),XfeDEFAULT_SHADOW_TYPE); _XfeConfigFlags(nw) |= XfeConfigExpose; } /* sensitive */ if (_XfeSensitive(nw) != _XfeSensitive(ow)) { _XfeConfigFlags(nw) |= XfeConfigExpose; } /* pretend_sensitive */ if (_XfeIsSensitive(nw) != _XfeIsSensitive(ow)) { _XfeConfigFlags(nw) |= XfeConfigExpose; } /* background_pixel or background_pixmap */ if (((_XfeBackgroundPixel(nw) != _XfeBackgroundPixel(ow)) || (_XfeBackgroundPixmap(nw) != _XfeBackgroundPixmap(ow))) && (_XfeBufferType(nw) != XmBUFFER_NONE)) { /* Release the old background GC */ _XfePrimitiveReleaseBackgroundGC(nw); /* Allocate the new background GC */ _XfePrimitiveAllocateBackgroundGC(nw); } return _XfePrimitiveChainSetValues(ow,rw,nw,xfePrimitiveWidgetClass); }