예제 #1
0
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 */
}
예제 #2
0
/* 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);
    }
}
예제 #3
0
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);
}