/*----------------------------------------------------------------------*/ /* extern */ void XfeMenuItemEraseAccent(Widget item, unsigned char accent_type, Dimension offset_left, Dimension offset_right, Dimension shadow_thickness, Dimension accent_thickness) { Widget pw; GC gc; XGCValues values; int subwindow_mode; /* duh */ if (accent_type == XmACCENT_NONE) { return; } assert( _XfeIsAlive(item) ); assert( XmIsPushButton(item) || XmIsCascadeButton(item) ); pw = _XfeParent(item); assert( XmIsRowColumn(pw) ); gc = _XfemBackgroundGC(pw); /* Remember the old wubwindow mode values */ XGetGCValues(XtDisplay(item),gc,GCSubwindowMode,&values); subwindow_mode = values.subwindow_mode; /* Force the subwindow mode to IncludeInferiors */ XSetSubwindowMode(XtDisplay(item),gc,IncludeInferiors); switch(accent_type) { case XmACCENT_BOTTOM: AccentBottom(item,gc,None,offset_left,offset_right, shadow_thickness,accent_thickness,ACCENT_ERASE); break; case XmACCENT_ALL: AccentAll(item,gc,None,offset_left,offset_right, shadow_thickness,accent_thickness,ACCENT_ERASE); break; case XmACCENT_TOP: AccentTop(item,gc,None,offset_left,offset_right, shadow_thickness,accent_thickness,ACCENT_ERASE); break; default: break; } /* Restore the old subwindow mode */ XSetSubwindowMode(XtDisplay(item),gc,subwindow_mode); }
Widget XmCreateSimplePulldownMenu( Widget parent, String name, ArgList args, Cardinal arg_count ) { Widget rc; XmSimpleMenuRec mr; int n, i; Arg local_args[3]; WidgetList buttons; Cardinal num_buttons; _XmWidgetToAppContext(parent); _XmAppLock(app); XtGetSubresources(parent, &mr, name, XmCSimplePulldownMenu, SimpleMenuResources, XtNumber(SimpleMenuResources), args, arg_count); rc = XmCreatePulldownMenu(parent, name, args, arg_count); EvaluateConvenienceStructure(rc, &mr); if (mr.post_from_button >= 0) { n = 0; XtSetArg(local_args[n], XtNchildren, &buttons); n++; XtSetArg(local_args[n], XtNnumChildren, &num_buttons); n++; XtGetValues(parent, local_args, n); if (!num_buttons) { /* error condition */ _XmAppUnlock(app); return(rc); } else { for (i = 0; i < num_buttons; i++) { if (((XmIsCascadeButtonGadget(buttons[i])) || (XmIsCascadeButton(buttons[i]))) && (i == mr.post_from_button)) break; } if ( i < num_buttons) { n = 0; XtSetArg(local_args[n], XmNsubMenuId, rc); n++; XtSetValues(buttons[i], local_args, n); } } } _XmAppUnlock(app); return(rc); }
/*----------------------------------------------------------------------*/ /* extern */ Widget XfeCascadeGetSubMenu(Widget w) { assert( w != NULL ); assert( (XmIsCascadeButton(w) || XmIsCascadeButtonGadget(w) || XfeIsCascade(w)) ); if (XmIsCascadeButton(w)) { return ((XmCascadeButtonWidget) w) -> cascade_button . submenu; } else if (XfeIsCascade(w)) { return ((XfeCascadeWidget) w) -> xfe_cascade . sub_menu_id; } return ((XmCascadeButtonGadget) w) -> cascade_button . submenu; }
/*----------------------------------------------------------------------* * * Traverse a menu hierarchy * * * *----------------------------------------------------------------------*/ /* extern */ Widget XfeMenuGetMoreButton(Widget menu,String more_button_name) { Widget last; assert( _XfeIsAlive(menu) ); assert( XmIsRowColumn(menu) ); assert( more_button_name != NULL ); last = XfeChildrenGetLast(menu); if (_XfeIsAlive(last) && (XmIsCascadeButton(last) || XmIsCascadeButtonGadget(last)) && (strcmp(XtName(last),more_button_name) == 0)) { return last; } return NULL; }