コード例 #1
0
ファイル: Stroke.c プロジェクト: idunham/dtextra
static void 
_StrokeInitialize(Widget W)
{
	StrokeStatePtr NewState;

	if (StrokeStateList == NULL)
	{
		NewState = XtNew(StrokeState_t);
		NewState->next = StrokeStateList;
		StrokeStateList = NewState;
		NewState->widget = W;
		NewState->InStroke = False;
		NewState->points = NULL;
		NewState->box = NULL;
		NewState->Map = NULL;
		NewState->npoints = 0;
		NewState->maxpoints = 0;
		NewState->gc = (GC)NULL;
		XtGetApplicationResources(W,
					  NewState,
					  resources, XtNumber(resources),
					  NULL, 0);
		if (NewState->slop < 3)
		{
			XtWarning("Stroke slop cannot be less than 3");
			NewState->slop = 3;
		}
	}
	XtAppAddActions(XtWidgetToApplicationContext(W),
			Actions, XtNumber(Actions));
}
コード例 #2
0
ファイル: StrToLong.c プロジェクト: idunham/tinyxlib
/*ARGSUSED*/
Boolean
XmuCvtLongToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
                   XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data)
{
    static char buffer[32];
    size_t size;

    if (*num_args != 0)
        XtWarning("Long to String conversion needs no extra arguments");

    XmuSnprintf(buffer, sizeof(buffer), "%ld", *(long *)fromVal->addr);

    size = strlen(buffer) + 1;
    if (toVal->addr != NULL)
    {
        if (toVal->size < size)
        {
            toVal->size = size;
            return (False);
        }
        strcpy((char *)toVal->addr, buffer);
    }
    else
        toVal->addr = (XPointer)buffer;
    toVal->size = sizeof(String);

    return (True);
}
コード例 #3
0
ファイル: ToolTip.c プロジェクト: CPFDSoftware-Tony/gmv
void
_XmToolTipLeave (Widget w,
                 XEvent * event,
                 String * params,
                 Cardinal * num_params)
{
    XmToolTipConfigTrait ttp = ToolTipGetData (w);

    if (!ttp)
    {
        XtWarning ("_XmToolTipLeave() - ttp == NULL.");
        return;
    }


    if (ttp->timer)
    {
        XtRemoveTimeOut (ttp->timer);
        ttp->timer = (XtIntervalId) NULL;
    }
    else
    {
        if (event && (ttp->duration_timer || ttp->post_duration == 0))
        {
            ttp->leave_time = event->xcrossing.time;
        }
        ToolTipUnpost (ttp, NULL);
    }

}
コード例 #4
0
void main (int argc, char **argv)
{
    XtAppContext context;
    Display *display;
    
    /*
    ** Initialize toolkit and open display.
    */
    XtToolkitInitialize ();
    context = XtCreateApplicationContext();
    /*
    ** Keep the same application name, so I don't have to muck around the 
    ** Xdefaults file
    */
    display = XtOpenDisplay (context, NULL, "phase", "Space", NULL,
                                0, &argc, argv);
    if (!display) {
	XtWarning("Space: Can't open display");
	exit(0);
    }
    
    /*
    ** Create an event display panel
    */
    DisplayEventFileSp(display, exit);
    /*
    ** Process events.
    */
    XtAppMainLoop (context);
}
コード例 #5
0
ファイル: StrToBS.c プロジェクト: xtforever/libXmu
/*ARGSUSED*/
void
XmuCvtStringToBackingStore(XrmValue *args, Cardinal *num_args,
			   XrmValuePtr fromVal, XrmValuePtr toVal)
{
    XrmQuark	q;
  char name[11];
    static int	backingStoreType;

    if (*num_args != 0)
        XtWarning("String to BackingStore conversion needs no extra arguments");

  InitializeQuarks();
  XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));

  q = XrmStringToQuark (name);
  if (q == QnotUseful)
	backingStoreType = NotUseful;
  else if (q == QwhenMapped)
    	backingStoreType = WhenMapped;
  else if (q == Qalways)
	backingStoreType = Always;
  else if (q == Qdefault)
    	backingStoreType = Always + WhenMapped + NotUseful;
  else
    {
      XtStringConversionWarning((char *)fromVal->addr, XtRBackingStore);
      return;
    }
  toVal->size = sizeof(int);
  toVal->addr = (XPointer)&backingStoreType;
}
コード例 #6
0
ファイル: CutPaste.c プロジェクト: Bluerise/bitrig-xenocara
/* ARGSUSED */
static void
SelectionCallback(Widget w, XtPointer cldat, Atom *selection, Atom *type,
		  XtPointer val, unsigned long *length, int *format)
{
    XPointer value = (XPointer)val;
    BitmapWidget BW = (BitmapWidget) w;
    Pixmap *pixmap;

   switch (*type) {

    case XA_BITMAP:
    case XA_PIXMAP:
	DestroyBitmapImage(&BW->bitmap.storage);
	pixmap = (Pixmap *) value;
	BW->bitmap.storage = GetImage(BW, *pixmap);
	XFree((char *)pixmap);
	break;

    default:
	XtWarning(" selection request failed.  BitmapWidget");
	break;
    }

    BW->bitmap.selection.limbo = FALSE;
}
コード例 #7
0
ファイル: file.c プロジェクト: hirose31/xfusen
/*
 * Cloase & Query file-dialog [callback]
 */
XtCallbackProc FileDialogQuery(Widget w,int ans,caddr_t caller)
{
  String fname;
  Boolean stat;

  XtPopdown(dbase);

  if (ans == FALSE)
    return;

  XtVaGetValues(dlText,XtNstring,&fname,NULL);

  stat = FALSE;
  switch(dlog_mode) {
  case Fsave:
    stat = SaveFile(current_win->text,fname);
    break;
  case Fload:
    stat = LoadFile(current_win->text,fname);
    break;
  }

  if (stat == FALSE) {
    XtWarning("Can't Open textfile.");
  }
}
コード例 #8
0
ファイル: xgrid_view.c プロジェクト: likueimo/ubuntu_gmt4
static void doSave (Widget w,
	XtPointer client_data,
	XtPointer callData __attribute__((unused)))
{
  String saveName;
  int    err;
  char	 msg[256];
  
  ViewData *view = client_data;

  saveName = XawDialogGetValueString(XtParent(w));
  strcpy(view->fileName, saveName);
  WriteGridToFile((Grid *)view->grid, view->fileName, &err);
  if (err) {
    sprintf(msg, "Unable to save file %s: C error code %d", saveName, err);
    setMessageLine(msg);
    XtWarning(msg);
  } else {
    XtVaSetValues(XtShell(w), XtNtitle, view->fileName, NULL);
    gridHasChanged = False;
    XtPopdown(saveChangesPopup);
    XtDestroyWidget(saveChangesPopup);
    /* MUST do this, otherwise save dialog loops forever */
    saveChangesPopup = NULL;
  }
}
コード例 #9
0
/*ARGSUSED*/
static String _XtDefaultLanguageProc(
    Display   *dpy,	/* unused */
    String     xnl,
    XtPointer  closure)	/* unused */
{
    if (! setlocale(LC_ALL, xnl))
	XtWarning("locale not supported by C library, locale unchanged");

    if (! XSupportsLocale()) {
	XtWarning("locale not supported by Xlib, locale set to C");
	setlocale(LC_ALL, "C");
    }
    if (! XSetLocaleModifiers(""))
	XtWarning("X locale modifiers not supported, using default");

    return setlocale(LC_ALL, NULL); /* re-query in case overwritten */
}
コード例 #10
0
ファイル: display.c プロジェクト: rogerhu/dd-wrt
/*@ -usedef -compdef -mustfreefresh @*/
static void set_color(String color)
{
    Display *dpy = XtDisplay(draww);
    Colormap cmap = DefaultColormapOfScreen(XtScreen(draww));
    XColor col, unused;

    if (XAllocNamedColor(dpy, cmap, color, &col, &unused)==0) {
	char buf[32];

	(void)snprintf(buf, sizeof(buf), "Can't alloc %s", color);
	XtWarning(buf);
	return;
    }
    (void)XSetForeground(dpy, drawGC, col.pixel);
}
コード例 #11
0
ファイル: StrToLong.c プロジェクト: idunham/tinyxlib
void
XmuCvtStringToLong(XrmValuePtr args, Cardinal *num_args,
                   XrmValuePtr fromVal, XrmValuePtr toVal)
{
    static long l;

    if (*num_args != 0)
        XtWarning("String to Long conversion needs no extra arguments");
    if (sscanf((char *)fromVal->addr, "%ld", &l) == 1)
    {
        toVal->size = sizeof(long);
        toVal->addr = (XPointer)&l;
    }
    else
        XtStringConversionWarning((char *)fromVal->addr, XtRLong);
}
コード例 #12
0
ファイル: Scale.c プロジェクト: Bluerise/bitrig-xenocara
static void 
GetRectangleBuffer(ScaleWidget sw, Cardinal buffer_size)
    /*
     * This procedure will realloc a new rectangles buffer.
     * If the new buffer size is less than nrectangles, some
     * information will be lost.
     */
{
    if (buffer_size == 0) {
	buffer_size = DefaultBufferSize;
	XtWarning("buffer size has to be a positive number greater than zero");
    }
    sw->scale.rectangles = (XRectangle *)
	XtRealloc((char *) sw->scale.rectangles, 
		  buffer_size * sizeof(XRectangle));
    sw->scale.buffer_size = buffer_size;
}
コード例 #13
0
ファイル: xmcvt.c プロジェクト: juddy/edcde
void
DtkshCvtStringToNamedValue(
        XrmValue *args,
        Cardinal *nargs,
        XrmValuePtr fval,
        XrmValuePtr toval )
{
	/*
	 * same buffer will get used each time
	 */
	static int ret;
	struct named_integer *table;
	int numtable;
	char *value;
	register int i;
        char * errbuf;
        char * errmsg;

	value = (String)fval->addr;

	if (*nargs != 1) {
		toval->addr = NULL;
		toval->size = 0;
		return;
	}
	table = (struct named_integer *)args[0].addr;
	numtable = args[0].size/sizeof(struct named_integer);

	for (i = 0; i < numtable; i++) {
		if (DtCompareISOLatin1(value, (char *)(table[i].name))) {
			toval->addr = (caddr_t)&table[i].value;
			toval->size = sizeof(table[i].value);
			return;
		}
	}
	errmsg =strdup(GETMESSAGE(16,2, 
             "DtkshCvtStringToNamedValue: Unable to convert the string '%s'"));
        errbuf = XtMalloc(strlen(errmsg) + strlen(value) + 10);
        sprintf(errbuf, errmsg, value);
	XtWarning(errbuf);
        free(errmsg);
        XtFree(errbuf);
	toval->addr = NULL;
	toval->size = 0;
	return;
}
コード例 #14
0
ファイル: StrToBS.c プロジェクト: xtforever/libXmu
/*ARGSUSED*/
Boolean
XmuCvtBackingStoreToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
			   XrmValuePtr fromVal, XrmValuePtr toVal,
			   XtPointer *data)
{
  static String buffer;
  Cardinal size;

  switch (*(int *)fromVal->addr)
    {
    case NotUseful:
      buffer = (String)XtEnotUseful;
      break;
    case WhenMapped:
      buffer = (String)XtEwhenMapped;
      break;
    case Always:
      buffer = (String)XtEalways;
      break;
    case (Always + WhenMapped + NotUseful):
      buffer = (String)XtEdefault;
      break;
    default:
      XtWarning("Cannot convert BackingStore to String");
      toVal->addr = NULL;
      toVal->size = 0;
      return (False);
    }

  size = strlen(buffer) + 1;
  if (toVal->addr != NULL)
    {
      if (toVal->size < size)
	{
	  toVal->size = size;
	  return (False);
	}
      strcpy((char *)toVal->addr, buffer);
    }
  else
    toVal->addr = (XPointer)buffer;
  toVal->size = sizeof(String);

  return (True);
}
コード例 #15
0
ファイル: Mrmerror.c プロジェクト: fjardon/motif
/*ARGSUSED*/
Cardinal 
Urm__UT_Error (char			*module,
	       char			*error,
	       IDBFile			file_id, /* unused */
	       URMResourceContextPtr	context_id, /* unused */
	       Cardinal			status)
{

  /*
   *  Local variables
   */
  char		msg[300] ;	/* error message */


  /*
   * construct error message
   */

  /* Old form
   * sprintf (msg, "%s detected error %s - %s", module, error,
   *	      Urm__UT_UrmCodeString(status)) ;
   */
  sprintf (msg, "%s: %s - %s", module, error, Urm__UT_UrmCodeString(status)) ;

  /*
   * Print or save the message depending on the reporting style
   */
  urm__latest_error_code = status ;

  switch ( urm__err_out )
    {
    case URMErrOutMemory:
      if ( urm__latest_error_msg != NULL )
	XtFree (urm__latest_error_msg) ;
      urm__latest_error_msg = (String) XtMalloc (strlen(msg)+1) ;
      strcpy (urm__latest_error_msg, msg) ;
      return status ;
    case URMErrOutStdout:
    default:
      XtWarning (msg) ;
      return status ;
    }

}
コード例 #16
0
ファイル: main-xaw.c プロジェクト: NickMcConnell/Oangband
/*
 * Load a font
 */
static XFontStruct *getFont(AngbandWidget widget,
                            String font, Boolean fallback)
{
	Display *dpy = XtDisplay((Widget) widget);
	char buf[256];
	XFontStruct *fnt = NULL;

	if (!(fnt = XLoadQueryFont(dpy, font)) && fallback)
	{
		sprintf(buf, "Can't find the font \"%s\", trying fixed\n", font);
		XtWarning(buf);
		if (!(fnt = XLoadQueryFont(dpy, "fixed")))
		{
			XtError("Can't fint the font \"fixed\"!, bailing out\n");
		}
	}

	return fnt;
}
コード例 #17
0
ファイル: Axes.c プロジェクト: gwowen/seismicunix
static void XtcwpStringToAxesStyle (XrmValue *args, int *nargs,
                                    XrmValue *fromVal, XrmValue *toVal)
{
    static int result;
    char *string=fromVal->addr;
    args += 0*(*nargs); /* keep compiler happy */

    /* convert axes style string in fromVal to int in toVal */
    if (strcmp(string,"normal")==0)
        result = XtcwpNORMAL;
    else if (strcmp(string,"seismic")==0)
        result = XtcwpSEISMIC;
    else {
        result = XtcwpNORMAL;
        XtWarning("Invalid AxesStyle specification!");
    }
    toVal->size = sizeof(int);
    toVal->addr = (char *)&result;
}
コード例 #18
0
ファイル: StrToJust.c プロジェクト: dimkr/tinyxlib
/*ARGSUSED*/
Boolean
XmuCvtJustifyToString(Display *dpy, XrmValue* args, Cardinal *num_args,
		      XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
{
  static String buffer;
  Cardinal size;

  switch (*(XtJustify *)fromVal->addr)
    {
    case XtJustifyLeft:
      buffer = XtEleft;
      break;
    case XtJustifyCenter:
      buffer = XtEcenter;
      break;
    case XtJustifyRight:
      buffer = XtEright;
      break;
    default:
      XtWarning("Cannot convert Justify to String");
      toVal->addr = NULL;
      toVal->size = 0;
      return (False);
    }

  size = strlen(buffer) + 1;
  if (toVal->addr != NULL)
    {
      if (toVal->size < size)
	{
	  toVal->size = size;
	  return (False);
	}
      strcpy((char *)toVal->addr, buffer);
    }
  else
    toVal->addr = (XPointer)buffer;
  toVal->size = sizeof(String);

  return (True);
}
コード例 #19
0
ファイル: ToolTip.c プロジェクト: CPFDSoftware-Tony/gmv
void
_XmToolTipEnter (Widget wid,
                 XEvent * event,
                 String * params,
                 Cardinal * num_params)
{
    XmToolTipConfigTrait ttp;           /* ToolTip pointer */

    ttp = ToolTipGetData (wid);

    if (ttp == NULL)
    {
        XtWarning ("ToolTipGetData() returned NULL in _XmToolTipEnter()");
        return;
    }
    if ((XmIsPrimitive (wid) || XmIsGadget(wid)) && XmGetToolTipString(wid))
    {
        if (ttp->enable && !ttp->timer)
        {
            unsigned long delay;

            if (event &&
                    (event->xcrossing.time - ttp->leave_time < ttp->post_delay))
            {
                delay = 0;
            }
            else
            {
                delay = (unsigned long) ttp->post_delay;
            }
            if (ttp->duration_timer)
            {
                XtRemoveTimeOut (ttp->duration_timer);
                ttp->duration_timer = (XtIntervalId) NULL;
            }
            ttp->timer =
                XtAppAddTimeOut (XtWidgetToApplicationContext (wid), delay,
                                 (XtTimerCallbackProc) ToolTipPost, wid);
        }
    }
}
コード例 #20
0
ファイル: Simple.c プロジェクト: aosm/X11
static void
XawSimpleClassPartInitialize(WidgetClass cclass)
{
    SimpleWidgetClass c = (SimpleWidgetClass)cclass;
    SimpleWidgetClass super = (SimpleWidgetClass)c->core_class.superclass;

    if (c->simple_class.change_sensitive == NULL) {
	char buf[BUFSIZ];

	(void)XmuSnprintf(buf, sizeof(buf),
			  "%s Widget: The Simple Widget class method "
			  "'change_sensitive' is undefined.\nA function "
			  "must be defined or inherited.",
			  c->core_class.class_name);
	XtWarning(buf);
	c->simple_class.change_sensitive = ChangeSensitive;
    }

    if (c->simple_class.change_sensitive == XtInheritChangeSensitive)
	c->simple_class.change_sensitive = super->simple_class.change_sensitive;
}
コード例 #21
0
ファイル: StrToOrnt.c プロジェクト: choderalab/ambermini
/*ARGSUSED*/
Boolean
XmuCvtOrientationToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
			  XrmValuePtr fromVal, XrmValuePtr toVal,
			  XtPointer *data)
{
  static String buffer;
  Cardinal size;

  switch (*(XtOrientation *)fromVal->addr)
    {
    case XtorientVertical:
      buffer = XtEvertical;
      break;
    case XtorientHorizontal:
      buffer = XtEhorizontal;
      break;
    default:
      XtWarning("Cannot convert Orientation to String");
      toVal->addr = NULL;
      toVal->size = 0;
      return (False);
    }

  size = strlen(buffer) + 1;
  if (toVal->addr != NULL)
    {
      if (toVal->size < size)
	{
	  toVal->size = size;
	  return (False);
	}
      strcpy((char *)toVal->addr, buffer);
    }
  else
    toVal->addr = (XPointer)buffer;
  toVal->size = sizeof(String);

  return (True);
}
コード例 #22
0
ファイル: Axes.c プロジェクト: gwowen/seismicunix
/* resource type converters */
static void XtcwpStringToAxesGrid (XrmValue *args, int *nargs,
                                   XrmValue *fromVal, XrmValue *toVal)
{
    static int result;
    char *string=fromVal->addr;

    args += 0*(*nargs); /* keep compiler happy */
    /* convert axes grid string in fromVal to int in toVal */
    if (strcmp(string,"none")==0)
        result = XtcwpNONE;
    else if (strcmp(string,"dot")==0)
        result = XtcwpDOT;
    else if (strcmp(string,"dash")==0)
        result = XtcwpDASH;
    else if (strcmp(string,"solid")==0)
        result = XtcwpSOLID;
    else {
        result = XtcwpNONE;
        XtWarning("Invalid AxesGrid specification!");
    }
    toVal->size = sizeof(int);
    toVal->addr = (char *)&result;
}
コード例 #23
0
ファイル: Command.c プロジェクト: aosm/X11
/*ARGSUSED*/
static void 
Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
{
    CommandWidget cbw = (CommandWidget)w;

    if (*num_params == (Cardinal)0)
	cbw->command.highlighted = HighlightWhenUnset;
    else {
	if (*num_params != (Cardinal)1)
	    XtWarning("Too many parameters passed to highlight action table.");
	switch (params[0][0]) {
	    case 'A':
	    case 'a':
		cbw->command.highlighted = HighlightAlways;
		break;
	    default:
		cbw->command.highlighted = HighlightWhenUnset;
		break;
	}
    }

    if (XtIsRealized(w))
	PaintCommandWidget(w, event, HighlightRegion(cbw), True);
}
コード例 #24
0
ファイル: ToolTip.c プロジェクト: CPFDSoftware-Tony/gmv
static void
ToolTipPostFinish (Widget slide,
                   XtPointer client_data,
                   XtPointer call_data)
{
    XmToolTipConfigTrait ttp;

    ttp = (XmToolTipConfigTrait) client_data;

    if (ttp == NULL)
    {
        XtWarning ("ToolTipPostFinish() - ttp==NULL");
        return;
    }

    ttp->slider = NULL;
    if (ttp->post_duration > 0)
    {
        ttp->duration_timer =
            XtAppAddTimeOut (XtWidgetToApplicationContext (ttp->label),
                             (unsigned long) ttp->post_duration,
                             (XtTimerCallbackProc) ToolTipUnpost, client_data);
    }
}
コード例 #25
0
ファイル: main-uil.c プロジェクト: LucyScott/mdsplus
/*
 * Main Program
 */
int main(int argc, char **argv)
{
    Display *display;
    Arg args[256];
    Cardinal ac;
    /*SUPPRESS 591*/
    Boolean argok;
    XtAppContext context;
    Widget w;
    Widget parent;
    
    /* Begin user code block <declarations> */
    /* End user code block <declarations> */
    
    /*
     * Hierarchy variable declarations
     * Set "*newMrmStyle:False" in ~/.bxrc for bx25 style declarations
     */
    
    MrmHierarchy HierarchyID;
    MrmType MrmWClass;
    static char *UidFile [] = { BX_UID_FILE_NAME };
    MRMRegisterArg NamesList[49];
    Cardinal Nlac;
    Nlac = 0;
    NamesList[Nlac].name = "CloseTree";
    NamesList[Nlac++].value = (XtPointer) CloseTree;
    NamesList[Nlac].name = "CommandEntered";
    NamesList[Nlac++].value = (XtPointer) CommandEntered;
    NamesList[Nlac].name = "CreateTree";
    NamesList[Nlac++].value = (XtPointer) CreateTree;
    NamesList[Nlac].name = "MDisplayData";
    NamesList[Nlac++].value = (XtPointer) MDisplayData;
    NamesList[Nlac].name = "MDoAction";
    NamesList[Nlac++].value = (XtPointer) MDoAction;
    NamesList[Nlac].name = "MessageClear";
    NamesList[Nlac++].value = (XtPointer) MessageClear;
    NamesList[Nlac].name = "MessageDismiss";
    NamesList[Nlac++].value = (XtPointer) MessageDismiss;
    NamesList[Nlac].name = "ModifyData";
    NamesList[Nlac++].value = (XtPointer) ModifyData;
    NamesList[Nlac].name = "MenuUnmap";
    NamesList[Nlac++].value = (XtPointer) MenuUnmap;
    NamesList[Nlac].name = "BxManageCB";
    NamesList[Nlac++].value = (XtPointer) BxManageCB;
    NamesList[Nlac].name = "MSetupDevice";
    NamesList[Nlac++].value = (XtPointer) MSetupDevice;
    NamesList[Nlac].name = "SetDefault";
    NamesList[Nlac++].value = (XtPointer) SetDefault;
    NamesList[Nlac].name = "MModifyData";
    NamesList[Nlac++].value = (XtPointer) MModifyData;
    NamesList[Nlac].name = "DisplayNci";
    NamesList[Nlac++].value = (XtPointer) DisplayNci;
    NamesList[Nlac].name = "BxExitCB";
    NamesList[Nlac++].value = (XtPointer) BxExitCB;
    NamesList[Nlac].name = "MTurnOnOff";
    NamesList[Nlac++].value = (XtPointer) MTurnOnOff;
    NamesList[Nlac].name = "DisplayData";
    NamesList[Nlac++].value = (XtPointer) DisplayData;
    NamesList[Nlac].name = "MSetDefault";
    NamesList[Nlac++].value = (XtPointer) MSetDefault;
    NamesList[Nlac].name = "MDisplayNci";
    NamesList[Nlac++].value = (XtPointer) MDisplayNci;
    NamesList[Nlac].name = "TurnOnOff";
    NamesList[Nlac++].value = (XtPointer) TurnOnOff;
    NamesList[Nlac].name = "DoAction";
    NamesList[Nlac++].value = (XtPointer) DoAction;
    NamesList[Nlac].name = "OpenTree";
    NamesList[Nlac++].value = (XtPointer) OpenTree;
    NamesList[Nlac].name = "AddListTree";
    NamesList[Nlac++].value = (XtPointer) AddListTree;
    NamesList[Nlac].name = "SetupDevice";
    NamesList[Nlac++].value = (XtPointer) SetupDevice;
    NamesList[Nlac].name = "AddNode";
    NamesList[Nlac++].value = (XtPointer) AddNode;
#ifdef __hpux
    NamesList[Nlac].name = "AddListTree";
    NamesList[Nlac++].value = (XtPointer) AddListTree;
#endif
    NamesList[Nlac].name = "AddNodeApply";
    NamesList[Nlac++].value = (XtPointer) AddNodeApply;
    NamesList[Nlac].name = "AddNodeDismiss";
    NamesList[Nlac++].value = (XtPointer) AddNodeDismiss;
    NamesList[Nlac].name = "SetUsage";
    NamesList[Nlac++].value = (XtPointer) SetUsage;
    NamesList[Nlac].name = "AddDeviceDismiss";
    NamesList[Nlac++].value = (XtPointer) AddDeviceDismiss;
    NamesList[Nlac].name = "CreateAddDevice";
    NamesList[Nlac++].value = (XtPointer) CreateAddDevice;
    NamesList[Nlac].name = "AddDevice";
    NamesList[Nlac++].value = (XtPointer) AddDevice;
    NamesList[Nlac].name = "WriteTree";
    NamesList[Nlac++].value = (XtPointer) WriteTree;
    NamesList[Nlac].name = "ModifyTags";
    NamesList[Nlac++].value = (XtPointer) ModifyTags;
    NamesList[Nlac].name = "tag_button_proc";
    NamesList[Nlac++].value = (XtPointer) tag_button_proc;
    NamesList[Nlac].name = "tag_selection_proc";
    NamesList[Nlac++].value = (XtPointer) tag_selection_proc;
#ifdef __hpux
    NamesList[Nlac].name = "WriteTree";
    NamesList[Nlac++].value = (XtPointer) WriteTree;
#endif
    NamesList[Nlac].name = "DeleteNode";
    NamesList[Nlac++].value = (XtPointer) DeleteNode;
    NamesList[Nlac].name = "DeleteNodeNow";
    NamesList[Nlac++].value = (XtPointer) DeleteNodeNow;
    NamesList[Nlac].name = "RenameNode";
    NamesList[Nlac++].value = (XtPointer) RenameNode;
    NamesList[Nlac].name = "AddNodeStart";
    NamesList[Nlac++].value = (XtPointer) AddNodeStart;
 
    NamesList[Nlac].name = NULL;
    NamesList[Nlac].value = NULL;
    
    
    MrmInitialize();
    XtToolkitInitialize();
    context = XtCreateApplicationContext();
    display = XtOpenDisplay(context, 0, BX_APP_NAME, BX_APP_CLASS,
#ifndef XtSpecificationRelease
        options, XtNumber(options), (Cardinal*)&argc, argv);
#else
#if XtSpecificationRelease == 4
        options, XtNumber(options), (Cardinal*)&argc, argv);
#else
        options, XtNumber(options), &argc, argv);
#endif
#endif
    if(display == NULL)
    {
        XtWarning("cannot open display");
        exit(1);
    }
    /*
     * So converters work.
     */

    XtInitializeWidgetClass(applicationShellWidgetClass);

    /*
     * Install the tearOffModel resource converter
     */
#if (XmVersion >= 1002)
    XmRepTypeInstallTearOffModelConverter();
#endif
    
    /*
     * Register special BuilderXcessory converters
     */
    RegisterBxConverters(context);
    
    
    /* Begin user code block <create_shells> */
    XmdsInitialize();
    /* End user code block <create_shells> */
    /*
     * The applicationShell is created as an unrealized
     * parent for multiple topLevelShells.  The topLevelShells
     * are created as popup children of the applicationShell.
     * This is a recommendation of Paul Asente & Ralph Swick in
     * _X_Window_System_Toolkit_ p. 677.
     */
    ac = 0;
    AppShell = parent = XtAppCreateShell( BX_APP_NAME, BX_APP_CLASS,
                  applicationShellWidgetClass, display, args, ac);
    
    MrmRegisterNames(NamesList, Nlac);
    
    HierarchyID = 0;
    MrmOpenHierarchy((MrmCount)(1), UidFile, 0, &HierarchyID);
    XtInitializeWidgetClass(topLevelShellWidgetClass);
    ac = 0;
    XtSetArg(args[ac], XmNtitle, "Traverser"); ac++;
    XtSetArg(args[ac], XmNiconName, "Traverser"); ac++;
    XtSetArg(args[ac], XmNx, 947); ac++;
    XtSetArg(args[ac], XmNy, 349); ac++;
    XtSetArg(args[ac], XmNwidth, 509); ac++;
    XtSetArg(args[ac], XmNheight, 672); ac++;
    TopLevelShell = XtCreatePopupShell( "topLevelShell",
                        topLevelShellWidgetClass, AppShell, args, ac);
    MainWindow = NULL;
    MrmFetchWidget(HierarchyID, "mainWindow", TopLevelShell,
            &MainWindow, &MrmWClass);
    
    WriteDialog = NULL;
    MrmFetchWidget(HierarchyID, "writeDialog", MainWindow,
            &WriteDialog, &MrmWClass);
    
    AddDialog = NULL;
    MrmFetchWidget(HierarchyID, "addDialog", MainWindow,
            &AddDialog, &MrmWClass);
    
    AddDeviceDialog = NULL;
    MrmFetchWidget(HierarchyID, "addDeviceDialog", MainWindow,
            &AddDeviceDialog, &MrmWClass);
    
    OpenDialog = NULL;
    MrmFetchWidget(HierarchyID, "openDialog", MainWindow,
            &OpenDialog, &MrmWClass);
    
    MrmCloseHierarchy(HierarchyID);
    
    XtManageChild(MainWindow);
    XtPopup(XtParent(MainWindow), XtGrabNone);
    
    /* Begin user code block <app_procedures> */
    /* End user code block <app_procedures> */
    
    /* Begin user code block <main_loop> */
    /* End user code block <main_loop> */
XtVaSetValues(TopLevelShell,XmNdeleteResponse, XmDO_NOTHING, NULL);
XmAddWMProtocolCallback(TopLevelShell,XmInternAtom(XtDisplay(TopLevelShell),"WM_DELETE_WINDOW",True),(XtCallbackProc)CloseWindow,NULL);
    
    XtAppMainLoop(context);
    
    /*
     * A return value even though XtAppMainLoop never ends. 
     */
     return(0); 
}
コード例 #26
0
ファイル: main-xaw.c プロジェクト: NickMcConnell/Oangband
/*
 * Font and internal_border can be changed on the fly.
 *
 * The entire widget is redrawn if any of those parameters change (all
 * can potentially have effects that spans the whole widget).
 *
 * Color changes are handled elsewhere.
 *
 * This function is very underspecified, in terms of how these changes can
 * occur, and what is true about the various AngbandWidget's passed in.  It
 * is very likely that this code no longer works.
 */
static Boolean SetValues(AngbandWidget current, AngbandWidget request,
                         AngbandWidget wnew, ArgList args,
                         Cardinal *num_args)
{
	Display *dpy = XtDisplay(wnew);

	Boolean font_changed = FALSE;
	Boolean border_changed = FALSE;
	int height, width;
	int i;


	/* Handle font change */
	if (wnew->angband.font != current->angband.font)
	{
		/* Check if the font exists */
		wnew->angband.fnt = getFont(wnew, wnew->angband.font, FALSE);

		/* The font didn't exist */
		if (wnew->angband.fnt == NULL)
		{
			wnew->angband.fnt = current->angband.fnt;
			wnew->angband.font = current->angband.font;
			XtWarning("Couldn't find the requested font!");
		}
		else
		{
			font_changed = TRUE;

			/* Free the old font */
			XFreeFont(XtDisplay((Widget)wnew), current->angband.fnt);
			/* Update font information */
			wnew->angband.fontheight = wnew->angband.fnt->ascent +
				wnew->angband.fnt->descent;
			wnew->angband.fontwidth = wnew->angband.fnt->max_bounds.width;
			wnew->angband.fontascent = wnew->angband.fnt->ascent;
		}
	}

	/* Handle font change */
	if (font_changed)
	{
		/* Update all GC's */
		for (i = 0; i < NUM_COLORS; i++)
		{
			/* Steal the old GC */
			wnew->angband.gc[i] = current->angband.gc[i];
			current->angband.gc[i] = NULL;

			/* Be sure the correct font is ready */
			XSetFont(dpy, wnew->angband.gc[i], wnew->angband.fnt->fid);
		}

		/* Steal the old GC */
		wnew->angband.gc[NUM_COLORS] = current->angband.gc[NUM_COLORS];
		current->angband.gc[NUM_COLORS] = NULL;
	}


	/* Check if internal border width has changed, used later */
	if (current->angband.internal_border != wnew->angband.internal_border)
	{
		border_changed = TRUE;
	}


	/* If the font or the internal border has changed, all geometry */
	/* has to be recalculated */
	if (font_changed || border_changed)
	{
		/* Change window size */
		height = ((current->core.height - 2 * current->angband.internal_border) /
		          current->angband.fontheight * wnew->angband.fontheight +
		          2 * current->angband.internal_border);
		width = ((current->core.width -  2 * current->angband.internal_border) /
		         current->angband.fontwidth * wnew->angband.fontwidth +
		         2 * wnew->angband.internal_border);

		/* Get the new width */
		if (XtMakeResizeRequest((Widget)wnew, width, height, NULL, NULL) ==
		    XtGeometryNo)
		{
			/* Not allowed */
			XtWarning("Size change denied!");
		}
		else
		{
			/* Recalculate size hints */
			calculateSizeHints(wnew);
		}
	}

	/* Tell it to redraw the widget if anything has changed */
	return (font_changed || border_changed);
}
コード例 #27
0
ファイル: xtt_xnav_motif.cpp プロジェクト: Strongc/proview
Widget XNavMotif::build_menu( Widget Parent,
			      int   MenuType,
			      const char *MenuTitle,
			      void *MenuUserData,
			      void (*Callback)( Widget, XNav *, XmAnyCallbackStruct *),
			      void *CallbackData,
			      xmenu_sMenuItem *Items,
			      int *idx)
{
  Widget Menu, Cascade, W;
  int i;
  unsigned int Level;
  XmString Str;
  WidgetClass Class;
  Arg ArgList[5]; 
  XmFontList fontlist;
  XFontStruct *font;
  XmFontListEntry fontentry;

  // Set default fontlist
  font = XLoadQueryFont( flow_Display(Parent),
  	      "-*-Helvetica-Bold-R-Normal--12-*-*-*-P-*-ISO8859-1");
  fontentry = XmFontListEntryCreate( (char*) "tag1", XmFONT_IS_FONT, font);
  fontlist = XmFontListAppendEntry( NULL, fontentry);
  XtFree( (char *)fontentry);

  i = 0;
  XtSetArg(ArgList[i], XmNuserData, MenuUserData); i++;
  XtSetArg(ArgList[i], XmNbuttonFontList, fontlist); i++;
  XtSetArg(ArgList[i], XmNlabelFontList, fontlist); i++;
  if (MenuType == MENU_PULLDOWN || MenuType == MENU_OPTION)
    Menu = XmCreatePulldownMenu(Parent, (char*) "_pulldown", ArgList, i);
  else if (MenuType == MENU_POPUP)
    Menu = XmCreatePopupMenu(Parent, (char*) "_popup", ArgList, i);  
  else  {
    XtWarning("Invalid menu type passed to BuildMenu().");
    return NULL;
  }

  if (MenuType == MENU_PULLDOWN) {
    Str = XmStringCreateSimple((char*) MenuTitle);	
    Cascade = XtVaCreateManagedWidget(MenuTitle,
	    xmCascadeButtonGadgetClass, Parent,
	    XmNsubMenuId,   Menu,
	    XmNlabelString, Str,
	    NULL);
    XmStringFree(Str);
  } 
  else if (MenuType == MENU_OPTION) {
    Str = XmStringCreateSimple((char*) MenuTitle);
    XtSetArg(ArgList[0], XmNsubMenuId, Menu);
    XtSetArg(ArgList[1], XmNlabelString, Str);
    Cascade = XmCreateOptionMenu(Parent, (char*) MenuTitle, ArgList, 2);
    XmStringFree(Str);
  }

  XmFontListFree( fontlist);

  Level = Items[*idx].Level;

  for (; Items[*idx].Level != 0 && Items[*idx].Level >= Level; (*idx)++) {
    if (Items[*idx].Item == xmenu_eMenuItem_Cascade ||
      Items[*idx].Item == xmenu_eMenuItem_Ref) {
      if (MenuType == MENU_OPTION) {
        XtWarning("You can't have submenus from option menu items.");
        return NULL;
      } 
      else {
        i = *idx;
        (*idx)++;	
        build_menu(Menu, MENU_PULLDOWN, 
		   Lng::translate( Items[i].Name), MenuUserData, 
		   Callback, CallbackData, Items, idx);
        (*idx)--;
      }
    }
    else {
      if (Items[*idx].Item == xmenu_eMenuItem_Separator)
        Class = xmSeparatorGadgetClass;
      else
        Class = xmPushButtonGadgetClass;
 
      W = XtVaCreateManagedWidget(Lng::translate( Items[*idx].Name), 
		    Class, Menu,
		    XmNuserData, *idx,
		    XmNsensitive, (Boolean)(Items[*idx].Flags.f.Sensitive == 1),
		    NULL);

      if (Callback && Class == xmPushButtonGadgetClass)
        XtAddCallback(W, XmNactivateCallback, (XtCallbackProc) Callback, 
		      (XtPointer) CallbackData);
    }
  }

  return MenuType == MENU_POPUP ? Menu : Cascade;
}
コード例 #28
0
/*
 * Initialize a term_data
 */
static errr term_data_init(term_data *td, Widget topLevel,
                           int key_buf, String name,
                           ArgList widget_arg, Cardinal widget_arg_no, int i)
{
	Widget parent;
	term *t = &td->t;

	int cols = 80;
	int rows = 24;

	char buf[80];
	cptr str;

	int val;

	/* Create the shell widget */
	parent = XtCreatePopupShell(name, topLevelShellWidgetClass, topLevel,
	                            NULL, 0);

	/* Window specific cols */
	sprintf(buf, "ANGBAND_X11_COLS_%d", i);
	str = getenv(buf);
	val = (str != NULL) ? atoi(str) : -1;
	if (val > 0) cols = val;

	/* Window specific rows */
	sprintf(buf, "ANGBAND_X11_ROWS_%d", i);
	str = getenv(buf);
	val = (str != NULL) ? atoi(str) : -1;
	if (val > 0) rows = val;

	/* Hack the main window must be at least 80x24 */
	if (i == 0)
	{
		if (cols < 80) cols = 80;
		if (rows < 24) rows = 24;
	}

	/* Reset the initial size */
	widget_arg[0].value = rows;
	widget_arg[1].value = cols;

	/* Hack  ox==oy in xaw port */

	/* Window specific inner border offset (ox) */
	sprintf(buf, "ANGBAND_X11_IBOX_%d", i);
	str = getenv(buf);
	val = (str != NULL) ? atoi(str) : -1;
	if (val > 0) widget_arg[6].value = val;

	/* Window specific inner border offset (oy) */
	sprintf(buf, "ANGBAND_X11_IBOY_%d", i);
	str = getenv(buf);
	val = (str != NULL) ? atoi(str) : -1;
	if (val > 0) widget_arg[6].value = val;

	/* Create the interior widget */
	td->widget = (AngbandWidget)
	XtCreateManagedWidget(name, angbandWidgetClass,
	                      parent, widget_arg, widget_arg_no);

	/* Initialize the term (full size) */
	term_init(t, cols, rows, key_buf);

	/* Use a "soft" cursor */
	t->soft_cursor = TRUE;

	/* Erase with "white space" */
	t->attr_blank = TERM_WHITE;
	t->char_blank = ' ';

	/* Hooks */
	t->xtra_hook = Term_xtra_xaw;
	t->curs_hook = Term_curs_xaw;
	t->wipe_hook = Term_wipe_xaw;
	t->text_hook = Term_text_xaw;

	/* Save the data */
	t->data = td;

	/* Register the keypress event handler */
	XtAddEventHandler((Widget)td->widget, KeyPressMask,
	                  False, (XtEventHandler) handle_event, td);

	/* Redraw callback */
	XtAddCallback((Widget)td->widget, XtNredrawCallback,
	              react_redraw, td);

	/* Realize the widget */
	XtRealizeWidget(parent);

	/* Have we redefined the font? */
	if (streq(td->widget->angband.font, DEFAULT_X11_FONT))
	{
		XFontStruct *fnt;

		/* Check if the font exists */
		fnt = getFont(td->widget, (String) get_default_font(i), FALSE);

		/* The font didn't exist */
		if (fnt == NULL)
		{
			XtWarning("Couldn't find the requested font!");
		}
		else
		{
			int height, width;

			/* Free the old font */
			XFreeFont(XtDisplay((Widget)td->widget), td->widget->angband.fnt);

			/* Update font information */
			td->widget->angband.fontheight = fnt->ascent + fnt->descent;
			td->widget->angband.fontwidth = fnt->max_bounds.width;
			td->widget->angband.fontascent = fnt->ascent;

			for (i = 0; i < NUM_COLORS; i++)
			{
				/* Be sure the correct font is ready */
				XSetFont(XtDisplay((Widget)td->widget),
					 td->widget->angband.gc[i], fnt->fid);
			}

			/* Get the window shape */
			height = (td->widget->angband.start_rows *
				td->widget->angband.fontheight +
				2 * td->widget->angband.internal_border);
			width = (td->widget->angband.start_columns *
				td->widget->angband.fontwidth +
				2 * td->widget->angband.internal_border);

			/* Request a change to the new shape */
			if (XtMakeResizeRequest((Widget)td->widget,
				 width, height, NULL, NULL) == XtGeometryNo)
			{
				/* Not allowed */
				XtWarning("Size change denied!");
			}
			else
			{
				/* Recalculate size hints */
				calculateSizeHints(td->widget);
			}
		}
	}

	/* Make it visible */
	XtPopup(parent, XtGrabNone);

	/* Activate (important) */
	Term_activate(t);


	Resize_term(td->widget);

	return 0;
}
コード例 #29
0
ファイル: MwRow.c プロジェクト: UlricE/Mowitz
static Widget TraverseInside(Widget w , int where , Time *time)
{
    MwBaseConstWidget cw = (MwBaseConstWidget) w;
    int gravitation,fgrav;
    int i;

    switch (where)
    {
    case MW_TRAVERSE_FIRST:
        cw->baseConst.current_focused = NULL;
        for(i = 0  ; i < cw->composite.num_children ; i++)
        {
            XtVaGetValues(cw->composite.children[i] ,
                          XtNgravitation , &gravitation , NULL);

            if (gravitation == XtCleft)
            {
                MwSetTraverseDirection(cw->composite.children[i] , where);
                if (XtCallAcceptFocus(cw->composite.children[i] , time))
                {
                    cw->baseConst.current_focused =
                        cw->composite.children[i];
                    break;
                }
            }
        }
        if (!cw->baseConst.current_focused)
        {
            for(i = cw->composite.num_children - 1 ; i >= 0 ; i--)
            {
                XtVaGetValues(cw->composite.children[i] ,
                              XtNgravitation , &gravitation , NULL);

                if (gravitation == XtCright)
                {
                    MwSetTraverseDirection(cw->composite.children[i] , where);
                    if (XtCallAcceptFocus(cw->composite.children[i] , time))
                    {
                        cw->baseConst.current_focused =
                            cw->composite.children[i];
                        break;
                    }
                }
            }
        }
        break;
    case MW_TRAVERSE_LAST:
        cw->baseConst.current_focused = NULL;
        for(i = 0 ; i < cw->composite.num_children ; i++)
        {
            XtVaGetValues(cw->composite.children[i] ,
                          XtNgravitation , &gravitation , NULL);

            if (gravitation == XtCright)
            {
                MwSetTraverseDirection(cw->composite.children[i] , where);
                if (XtCallAcceptFocus(cw->composite.children[i] , time))
                {
                    cw->baseConst.current_focused =
                        cw->composite.children[i];
                    break;
                }
            }
        }
        if (!cw->baseConst.current_focused)
        {
            for(i = cw->composite.num_children - 1; i >= 0 ; i--)
            {
                XtVaGetValues(cw->composite.children[i] ,
                              XtNgravitation , &gravitation , NULL);

                if (gravitation == XtCleft)
                {
                    MwSetTraverseDirection(cw->composite.children[i] , where);
                    if (XtCallAcceptFocus(cw->composite.children[i] , time))
                    {
                        cw->baseConst.current_focused =
                            cw->composite.children[i];
                        break;
                    }
                }
            }
        }
        break;
    case MW_TRAVERSE_NEXT:
        if (cw->composite.num_children)
        {
            for(i = 0 ;  i < cw->composite.num_children &&
                    cw->baseConst.current_focused !=
                    cw->composite.children[i]  ; i++);

            if (i < cw->composite.num_children &&
                    cw->baseConst.current_focused)
            {
                XtVaGetValues(cw->composite.children[i] ,
                              XtNgravitation , &fgrav , NULL);

                cw->baseConst.current_focused = NULL;

                if (fgrav == XtCleft)
                {
                    for ( i = i + 1 ; i < cw->composite.num_children ; i++)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);
                        if (gravitation == fgrav)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }
                else
                {
                    for ( i = i - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);
                        if (gravitation == fgrav)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }

                }
                if (!cw->baseConst.current_focused && fgrav == XtCleft)
                {
                    for(i = cw->composite.num_children - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);

                        if (gravitation != fgrav)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                cw->baseConst.current_focused = NULL;
                for(i = 0  ; i < cw->composite.num_children ; i++)
                {
                    XtVaGetValues(cw->composite.children[i] ,
                                  XtNgravitation , &gravitation , NULL);

                    if (gravitation == XtCleft)
                    {
                        MwSetTraverseDirection(cw->composite.children[i] , where);
                        if (XtCallAcceptFocus(cw->composite.children[i] , time))
                        {
                            cw->baseConst.current_focused =
                                cw->composite.children[i];
                            break;
                        }
                    }
                }
                if (!cw->baseConst.current_focused)
                {
                    for(i = cw->composite.num_children - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);

                        if (gravitation == XtCright)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }
            }
        }
        break;
    case MW_TRAVERSE_PREV:
        if (cw->composite.num_children)
        {
            for(i = 0 ;  i < cw->composite.num_children &&
                    cw->baseConst.current_focused !=
                    cw->composite.children[i]  ; i++);

            if (i < cw->composite.num_children &&
                    cw->baseConst.current_focused)
            {
                XtVaGetValues(cw->composite.children[i] ,
                              XtNgravitation , &fgrav , NULL);

                cw->baseConst.current_focused = NULL;

                if (fgrav == XtCleft)
                {
                    cw->baseConst.current_focused = NULL;
                    for( i = i - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);
                        if (fgrav == gravitation)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }
                else
                {
                    cw->baseConst.current_focused = NULL;
                    for( i = i + 1 ; i < cw->composite.num_children ; i++)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);
                        if (fgrav == gravitation)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }
                if (!cw->baseConst.current_focused && fgrav == XtCright)
                {
                    for(i = cw->composite.num_children - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);

                        if (gravitation != fgrav)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }

                }
            }
            else
            {
                for(i = 0 ; i < cw->composite.num_children ; i++)
                {
                    XtVaGetValues(cw->composite.children[i] ,
                                  XtNgravitation , &gravitation , NULL);

                    if (gravitation == XtCright)
                    {
                        MwSetTraverseDirection(cw->composite.children[i] , where);
                        if (XtCallAcceptFocus(cw->composite.children[i] , time))
                        {
                            cw->baseConst.current_focused =
                                cw->composite.children[i];
                            break;
                        }
                    }
                }
                if (!cw->baseConst.current_focused)
                {
                    for(i = cw->composite.num_children - 1 ; i >= 0 ; i--)
                    {
                        XtVaGetValues(cw->composite.children[i] ,
                                      XtNgravitation , &gravitation , NULL);

                        if (gravitation == XtCleft)
                        {
                            MwSetTraverseDirection(cw->composite.children[i] , where);
                            if (XtCallAcceptFocus(cw->composite.children[i] , time))
                            {
                                cw->baseConst.current_focused =
                                    cw->composite.children[i];
                                break;
                            }
                        }
                    }
                }

            }
        }
        break;
    case MW_TRAVERSE_ACTUAL:
        if (cw->composite.num_children)
        {
            for(i = 0 ;  i < cw->composite.num_children &&
                    cw->baseConst.current_focused !=
                    cw->composite.children[i]  ; i++);

            if (i < cw->composite.num_children &&
                    cw->baseConst.current_focused)
            {
                MwSetTraverseDirection(cw->composite.children[i] , where);
                XtCallAcceptFocus(cw->composite.children[i] , time);
            }
        }
        else
        {
            cw->baseConst.current_focused = NULL;
        }
        break;
    default:
        XtWarning("Unknown direction");
    }

    return cw->baseConst.current_focused;
}
コード例 #30
0
ファイル: ToolTip.c プロジェクト: CPFDSoftware-Tony/gmv
static void
ToolTipPost (XtPointer client_data,
             XtIntervalId * id)
{
    Widget w = (Widget) client_data;

    int rx,
        ry,
        x,
        y;
    unsigned int key;
    Window root,
           child;
    XtWidgetGeometry geo;
    Position destX,
             destY;

    XmToolTipConfigTrait ttp; /* ToolTip pointer */

    ttp = ToolTipGetData (w);

    if (ttp == NULL)
    {
        XtWarning ("ToolTipGetData() returned NULL in ToolTipPost()");
        return;
    }

    ttp->timer = (XtIntervalId) NULL;

    XQueryPointer (XtDisplay (w),
                   XtWindow (w), &root, &child, &rx, &ry, &x, &y, &key);

    if (ttp->duration_timer != (XtIntervalId) NULL)
    {
        XtRemoveTimeOut (ttp->duration_timer);
        ttp->duration_timer = (XtIntervalId) NULL;
    }

    if (XmIsPrimitive(w) || XmIsGadget(w))
    {
        XtVaSetValues (ttp->label,
                       XmNlabelString,
                       XmGetToolTipString(w),
                       NULL);
    }
    else
    {
        XmString string;

        string = XmStringCreateLocalized (XtName (w));
        XtVaSetValues (ttp->label, XmNlabelString, string, NULL);
        XmStringFree (string);
    }
    XtQueryGeometry (ttp->label, NULL, &geo);

    /* rws 25 Feb 2001
       Fix for Bug #1153
       Don't let the tip be off the right/bottom of the screen
     */
    destX = rx + (XmIsGadget (w) ? XtX (w) : 0) - x + XtWidth (w) / 2;
    if (destX + geo.width > WidthOfScreen (XtScreen (w)))
    {
        destX = WidthOfScreen (XtScreen (w)) - geo.width;
    }
    destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w);
    if (destY + geo.height > HeightOfScreen (XtScreen (w)))
    {
        destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y - geo.height;
    }

    XtVaSetValues (XtParent (ttp->label),
                   XmNx, rx + 1,
                   XmNy, ry + 1, XmNwidth, 1, XmNheight, 1, NULL);
    ttp->slider =
        XtVaCreateWidget ("ToolTipSlider", xmSlideContextWidgetClass,
                          XmGetXmDisplay (XtDisplay (w)), XmNslideWidget,
                          XtParent (ttp->label),
                          XmNslideDestX, destX,
                          XmNslideDestY, destY,
                          XmNslideDestWidth, geo.width,
                          XmNslideDestHeight, geo.height, NULL);

    XtAddCallback (ttp->slider, XmNslideFinishCallback,
                   (XtCallbackProc) ToolTipPostFinish, ttp);

    XtPopup (XtParent (ttp->label), XtGrabNone);
}