void xaw_update_one_value (widget_instance *instance, Widget widget, widget_value *val) { #ifdef LWLIB_WIDGETS_ATHENA widget_value *old_wv; /* copy the call_data slot into the "return" widget_value */ for (old_wv = instance->info->val->contents; old_wv; old_wv = old_wv->next) if (!strcmp (val->name, old_wv->name)) { val->call_data = old_wv->call_data; break; } if (XtIsSubclass (widget, toggleWidgetClass)) { Xt_GET_VALUE (widget, XtNstate, &val->selected); val->edited = True; } #ifndef NEED_MOTIF else if (XtIsSubclass (widget, asciiTextWidgetClass)) { String buf = 0; Xt_GET_VALUE (widget, XtNstring, &buf); if (val->value) { free (val->value); val->value = 0; } /* I don't think this causes a leak. */ if (buf) val->value = strdup (buf); val->edited = True; } #endif #endif /* LWLIB_WIDGETS_ATHENA */ }
/* Used by x_update_scrollbar_instance_status. */ static void update_one_scrollbar_bs (struct frame *f, Widget sb_widget) { Boolean use_backing_store; Xt_GET_VALUE (FRAME_X_TEXT_WIDGET (f), XtNuseBackingStore, &use_backing_store); if (use_backing_store && sb_widget) { unsigned long mask = CWBackingStore; XSetWindowAttributes attrs; attrs.backing_store = Always; XChangeWindowAttributes (XtDisplay (sb_widget), XtWindow (sb_widget), mask, &attrs); } }
void xaw_update_one_widget (widget_instance *instance, Widget widget, widget_value *val, Boolean UNUSED (deep_p)) { if (0) ; #ifdef LWLIB_SCROLLBARS_ATHENA else if (XtIsSubclass (widget, scrollbarWidgetClass)) { xaw_update_scrollbar (instance, widget, val); } #endif #ifdef LWLIB_WIDGETS_ATHENA #ifndef NEED_MOTIF else if (XtIsSubclass (widget, asciiTextWidgetClass)) { } #endif #endif #ifdef LWLIB_DIALOGS_ATHENA else if (XtIsSubclass (widget, dialogWidgetClass)) Xt_SET_VALUE (widget, XtNlabel, val->contents->value); #endif /* LWLIB_DIALOGS_ATHENA */ #ifdef LWLIB_WIDGETS_ATHENA else if (XtClass (widget) == labelWidgetClass) Xt_SET_VALUE (widget, XtNlabel, val->value); #endif /* LWLIB_WIDGETS_ATHENA */ #if defined (LWLIB_DIALOGS_ATHENA) || defined (LWLIB_WIDGETS_ATHENA) else if (XtIsSubclass (widget, commandWidgetClass)) { Arg al [3]; #ifndef LWLIB_DIALOGS_ATHENA3D { Dimension bw = 0; Xt_GET_VALUE (widget, XtNborderWidth, &bw); if (bw == 0) /* Don't let buttons end up with 0 borderwidth, that's ugly... Yeah, all this should really be done through app-defaults files or fallback resources, but that's a whole different can of worms that I don't feel like opening right now. Making Athena widgets not look like shit is just entirely too much work. */ Xt_SET_VALUE (widget, XtNborderWidth, 1); } #endif /* ! LWLIB_DIALOGS_ATHENA3D */ lw_remove_accelerator_spec (val->value); Xt_SET_ARG (al [0], XtNlabel, val->value); Xt_SET_ARG (al [1], XtNsensitive, val->enabled); /* Force centered button text. See above. */ Xt_SET_ARG (al [2], XtNjustify, XtJustifyCenter); XtSetValues (widget, al, 3); XtRemoveAllCallbacks (widget, XtNcallback); XtAddCallback (widget, XtNcallback, xaw_generic_callback, instance); #ifdef LWLIB_WIDGETS_ATHENA /* set the selected state */ if (XtIsSubclass (widget, toggleWidgetClass)) Xt_SET_VALUE (widget, XtNstate, val->selected); #endif /* LWLIB_WIDGETS_ATHENA */ } #endif /* LWLIB_DIALOGS_ATHENA */ /* Lastly update our global arg values. */ if (val->args && val->args->nargs) XtSetValues (widget, val->args->args, val->args->nargs); }