/*----------------------------------------------------------------------*/ 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)); } }
/*----------------------------------------------------------------------*/ static Boolean SetValues(Widget ow,Widget rw,Widget nw,ArgList args,Cardinal *nargs) { Boolean redisplay = False; Boolean resize = False; XmCascadeButtonPart * old_cp = _XfeXmCascadeButtonPart(ow); XmCascadeButtonPart * new_cp = _XfeXmCascadeButtonPart(nw); XmLabelPart * old_lp = _XfeXmLabelPart(ow); XmLabelPart * new_lp = _XfeXmLabelPart(nw); XfeBmCascadePart * new_bmc = _XfeBmCascadePart(nw); XfeBmCascadePart * old_bmc = _XfeBmCascadePart(ow); /* accent_type */ if (new_bmc->accent_type != old_bmc->accent_type) { new_bmc->accent_type = old_bmc->accent_type; _XfeWarning(nw,MESSAGE2); } /* label_pixmap */ if (new_lp->pixmap != old_lp->pixmap) { _XfePixmapPrepare(nw,&new_lp->pixmap, &new_bmc->pixmap_width, &new_bmc->pixmap_height, XmNlabelPixmap); redisplay = True; resize = True; } /* arm_pixmap */ if (new_bmc->arm_pixmap != old_bmc->arm_pixmap) { Dimension width; Dimension height; assert( _XfePixmapGood(new_lp->pixmap) ); _XfePixmapPrepare(nw,&new_bmc->arm_pixmap, &width, &height, XmNarmPixmap); assert( width == new_bmc->pixmap_width ); assert( height == new_bmc->pixmap_height ); redisplay = True; resize = True; } if (resize) { Resize(nw); } return redisplay; }
/*----------------------------------------------------------------------*/ 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); }