allanswers.org - comp.windows.x.intrinsics Frequently Asked Questions (FAQ)

 Home >  FAQ on different themes >

comp.windows.x.intrinsics Frequently Asked Questions (FAQ)

Section 1 of 4 - Prev - Next
All sections - 1 - 2 - 3 - 4


Archive-name: Xt-FAQ
Version: $Id: FAQ-Xt,v 1.44 1995/03/27 15:22:22 ware Exp ware $

		    The X Toolkit Intrinsics F.A.Q
			  A monthly posting

This article contains the answers to some Frequently Asked Questions
(FAQ) from comp.windows.x about the X Toolkit Intrinsics.  To submit
questions (preferably with an answer) send email to:

	ware@cis.ohio-state.edu

or you can find out more about me as:

	http://www.cis.ohio-state.edu/~ware

This FAQ is available on the archive site rtfm.mit.edu in the directory:

	file://rtfm.mit.edu/pub/usenet/comp.answers/Xt-FAQ

The name under which a FAQ is archived appears in the Archive-name
line at the top of the article.  This FAQ is archived as Xt-FAQ.  It
is also archived in

	file://ftp.x.org:/contrib/faqs/FAQ-Xt.

All code fragments are public domain.  


			       Contents

0.  Xt Glossary
1.  Software Versions
2.  Related FAQ's
3.  Why does my app core dump when I use signals/alarms/cthreads?
4.  How do I use a different visual than the default?
5.  Which visual should an application use?
6.  Why do only Shell widgets have a Visual?
7.  Which visual, depth and colormap do Shells inherit?
8.  I've done all the above and I still get a BadMatch error.  Why?
9.  Why doesn't my widget get destroyed when I call XtDestroyWidget()?
10. How do I exit but still execute the DestroyCallbacks?
11. How do I resize a Shell widget?
12. Why can't XtAppAddInput() handle files?
13. What good books and magazines are there on Xt?
14. What Widgets are available?
15. What alternatives to the Intrinsics are there?
16. How do I pass a float value to XtSetValues?
17. How do I write a resource converter?
18. How do I open multiple displays?
19. What changed from R3 to R4 to R5?
20. Where are the resources loaded from?
21. What order are callbacks executed in?
22. How do I know if a widget is visible?
23. How do I reparent a widget in Xt, i.e. XtReparentWidget()?
24. Why use XtMalloc, XtFree, etc?
25. How to debug an Xt application?
26. Why don't XtAddInput(), XtAddTimeout() and XtAddWorkProc() work?
27. What is and how can I implement drag and drop?
28. How can I add a C++ member function as a widget callback?
29. How can I identify the children of a manager widget?
30. Can I use XtMoveWidget(), ... to move widgets I created?
31. Why is XtGetValues() on XtNx, XtNy of my top level shell wrong?
32. Why do some people use XmN as resource names?
33. How do I make my life easier when designing an application?
34. Why can't I override translations? Only the first item works.
35. Why do I get "Warning: Widget class version mismatch"?
36. Where can I get a good file-selector widget?
37. Where can I find a hypertext widget or source code?
38. What widget is appropriate to use as a drawing canvas?
39. What is this link problem with _get_wmShellWidgetClass, XtInherit?
40. Why does XtGetValues not work for me (sic)?
41. Is this a memory leak in the X11R4 XtDestroyWidget()?!
42. Is this a memory leak in the X11R4 deletion of work procs?!
43. How do I query the user synchronously using Xt?
44. How do I simulate a button press/release event for a widget?
45. How to use Fallback resources (can I specify colors)?
46. What is the preferred way of setting the application resources?
47. How to get rid of that annoying flicker during updates?
48. How are created, managed, mapped, realized, etc. related?
49. How to use the String definition from a C++ library?

----------------------------------------------------------------------
Subject: 0.  Xt Glossary
----------------------------------------------------------------------

o The Xt Intrinsics implement an object oriented interface to C code
  to allow useful graphical components to be created.  Included with
  this are classes that provide the base functionality: Object,
  RectObj, Core, Composite, Constraint, Shell, OverrideShell, WMShell,
  etc.  The terms "Xt" and "Intrinsics" are used interchangeably,
  however, they are used very precisely to mean a specific library of the X
  window system.  In particular, it does not include the Athena,
  Motif, OLIT or any other widget set.  Without further widgets the
  Intrinsics are not especially useful.

o A widget refers to a user interface abstraction created via Xt.  The
  precise use, is any object that is a subclass of the Core class.  It
  is used loosely to refer to anything that is a subclass of the
  Object class although these are more accurately called windowless
  widgets or gadgets.

o Xlib is the C interface to the X11 protocol.  It is one layer below
  the Xt Intrinsics.  Typically a widget uses relatively few Xlib
  functions because Xt provides most such services although an
  understanding of Xlib helps with problems.

----------------------------------------------------------------------
Subject: 1.  Software Versions
----------------------------------------------------------------------

The following are the latest versions of Xt based software:
        _____________________________________________________________
	Software	Version		Released	Next Expected
        _____________________________________________________________
	X11R4		patch 18			(none)
	X11R5		patch 26	11/3/93		(none)
	X11R6		patch 13	11/3/95		(see R6.1)
	X11R6.1		patch 1		3/11/96		soon
	Athena Widgets	(see X11R6)
	Motif		2.0		6/21/94		??
	OLIT		??		??		??
	Xtra		2.5		6/15/92		??
	Xw		X11R4				(none)
	Xcu		X11R5				(none)
	fwf		4.1		5/24/96		??
        _____________________________________________________________

----------------------------------------------------------------------
Subject: 2.  Related FAQ's
----------------------------------------------------------------------

David B. Lewis (uunet!craft!faq) maintains the FAQ on X.  It
is posted monthly on comp.windows.x and located in:

	file://ftp.x.org/contrib/faqs/FAQ.

Liam R. E. Quin (lee@sq.sq.com) posts an FAQ list on Open Look to 
comp.windows.x.  

Ken Sall (ksall@cen.com) posts an FAQ list on Motif to
comp.windows.x.motif. it is also in

	file://ftp.x.org/contrib/faqs/Motif-FAQ

Pete Ware (ware@cis.ohio-state.edu) posts an FAQ list for
comp.windows.x.intrinsics; it is in

	file://ftp.x.org/contrib/faqs/FAQ-Xt

John L. Cwikla (cwikla@wri.com) posts an FAQ list that contains freely
available widgets; it is in:

	file://ftp.x.org/contrib/faqs/Widget.FAQ

----------------------------------------------------------------------
Subject: 3.  Why does my app core dump when I use signals/alarms/cthreads?
----------------------------------------------------------------------

In brief, Xlib, Xt and most widget sets have no mutual exclusion for
critical sections.  Any interrupt handler is likely to leave one of
the above libraries in an inconsistent state -- such as all the
appropriate flags not yet set, dangling pointers, in the middle of a
list traversal, etc.  Note that the ANSI C standard points out that
behavior of a signal handler is undefined if the signal handler calls
any function other than signal() itself, so this is not a problem
specific to Xlib and Xt; the POSIX specification mentions other
functions which may be called safely but it may not be assumed that
these functions are called by Xlib or Xt functions.

The only safe way to deal with signals is to set a flag in the
interrupt handler.  This flag later needs to be checked either by a
work procedure or a timeout callback.  It is incorrect to add either
of these in the interrupt handler.  As another note, it is dangerous
to add a work procedure that never finishes.  This effectively
preempts any work procedures previously added and so they will never
be called.  Another option is to open a pipe, tell the event loop
about the read end using XtAppAddInput() and then the signal handler
can write a byte to the write end of the pipe for each signal.
However, this could deadlock your process if the pipe fills up.

Why don't the Intrinsics deal with this problem?  Primarily because it
is supposed to be a portable layer to any hardware and operating
system.   Is that a good enough reason -- I don't think so.

        Note: the article in The X Journal 1:4 and the example in O'Reilly
Volume 6 are in error.

----------------------------------------------------------------------
Subject: 4.! How do I use a different visual than the default?
----------------------------------------------------------------------

This requires a more complicated answer than it should.  A window has
three things that are visual specific -- the visual, colormap and
border pixmap.  All widgets have their own Colormap and BorderPixmap
resource; only shell widgets have Visual resources (another questions
deals with why shells have a Visual).  The default value of these
resources is CopyFromParent which does exactly what it says.  In the
shell widget CopyFromParent gets evalulated as DefaultVisualOfScreen
and DefaultColormapOfScreen.  When any one of the three resources is
not properly set, a BadMatch error occurs when the window is
created.  They are not properly set because each of the values depends
on the visual being used.  

How to get this to work?  There are two parts to the answer.  The
first is if you want an application to start with a particular visual
and the second is if you want a particular shell within an application
to start with a different visual.  The second is actually easier
because the basic information you need is available.  The first is a
little harder because you'll need to initialize much of the toolkit
yourself in order to determine the needed information.

/*
 * Some sample code to start up an application using something other
 * than the default visual.
 *
 * To compile:
 *	cc -g visual.c -o visual -lXaw -lXmu -lXt -lXext -lX11 -lm
 *
 * To run:
 *	./visual -geometry 300x300 -depth 24 -visual StaticColor -fg blue -bg yellow
 *
 * you need to move the mouse to get the particular visuals colormap
 * to install.
 */

#include 
#include 
#include 

typedef struct
{
	Visual	*visual;
	int	depth;
} OptionsRec;

OptionsRec	Options;

XtResource resources[] =
{
	{"visual", "Visual", XtRVisual, sizeof (Visual *),
	XtOffsetOf (OptionsRec, visual), XtRImmediate, NULL},
	{"depth", "Depth", XtRInt, sizeof (int),
	XtOffsetOf (OptionsRec, depth), XtRImmediate, NULL},
};

XrmOptionDescRec Desc[] =
{
	{"-visual", "*visual", XrmoptionSepArg, NULL},
	{"-depth", "*depth", XrmoptionSepArg, NULL}
};



int
main (argc, argv)
	int		argc;
	char		**argv;
{
	XtAppContext	app;		/* the application context */
	Widget		top;		/* toplevel widget */
	Display		*dpy;		/* display */
	char		**xargv;	/* saved argument vector */
	int		xargc;		/* saved argument count */
	Colormap	colormap;	/* created colormap */
	XVisualInfo	vinfo;		/* template for find visual */
	XVisualInfo	*vinfo_list;	/* returned list of visuals */
	int		count;		/* number of matchs (only 1?) */
	Arg		args[10];
	Cardinal	cnt;
	char		*name = "test";
	char		*class = "Test";

	/*
	 * save the command line arguments
	 */

	xargc = argc;
	xargv = (char **) XtMalloc (argc * sizeof (char *));
	bcopy ((char *) argv, (char *) xargv, argc * sizeof (char *));

	/*
	 * The following creates a _dummy_ toplevel widget so we can
	 * retrieve the appropriate visual resource.
	 */
	cnt = 0;
	top = XtAppInitialize (&app, class, Desc, XtNumber (Desc), &argc, argv,
			       (String *) NULL, args, cnt);
	dpy = XtDisplay (top);
	cnt = 0;
	XtGetApplicationResources (top, &Options, resources,
				   XtNumber (resources),
				   args, cnt);
	cnt = 0;
	if (Options.visual && Options.visual != DefaultVisualOfScreen (XtScreen (top)))
	{
		XtSetArg (args[cnt], XtNvisual, Options.visual); ++cnt;
		/*
		 * Now we create an appropriate colormap.  We could
		 * use a default colormap based on the class of the
		 * visual; we could examine some property on the
		 * rootwindow to find the right colormap; we could
		 * do all sorts of things...
		 */
		colormap = XCreateColormap (dpy,
					    RootWindowOfScreen (XtScreen (top)),
					    Options.visual,
					    AllocNone);
		XtSetArg (args[cnt], XtNcolormap, colormap); ++cnt;

		/*
		 * Now find some information about the visual.
		 */
		vinfo.visualid = XVisualIDFromVisual (Options.visual);
		vinfo_list = XGetVisualInfo (dpy, VisualIDMask, &vinfo, &count);
		if (vinfo_list && count > 0)
		{
			XtSetArg (args[cnt], XtNdepth, vinfo_list[0].depth);
			++cnt;
			XFree ((XPointer) vinfo_list);
		}
	}
	XtDestroyWidget (top);


	/*
	 * Now create the real toplevel widget.
	 */
	XtSetArg (args[cnt], XtNargv, xargv); ++cnt;
	XtSetArg (args[cnt], XtNargc, xargc); ++cnt;
	top = XtAppCreateShell ((char *) NULL, class,
				applicationShellWidgetClass,
				dpy, args, cnt);

	/*
	 * Display the application and loop handling all events.
	 */
	XtRealizeWidget (top);
	XtAppMainLoop (app);
	return (0);
}

You can also try:

	file://ftp.x.org/contrib/widget/AppPlusS.tar.Z

The AppPlusShell adds the following to the application shell:

1) Visual/Colormap control thru resources
2) EditRes built in (can be turned on/off)
3) Catches the WM_DELETE_WINDOW

	It does this thru the following added resources:

For 1:
XtNvisualClass
XtNusePrivateColormap
XtNvisualID
XtNapplicationDepth

For 2:
XtNallowEditRes

For 3:
XtNsaveYourselfCallback



	The algorithm is as follows, in this order:

1) if XtNvisualID is set try to use the visual with this id, if
it exists.

2) if XtNapplicationDepth is set try to find a visual with 
that depth, otherwise set it to DefaultDepth().  This allows 
users to have:

*applicationDepth: 24

which will be used if it exists.  applicationDepth is needed
instead of *depth, since, IMO, most users will want to do

*depth: 24 

which would screw up for any subwidgets, if there were no visual
with a depth of 24.  Note that the depth gets correctly set in the 
initialize too.

3) if XtNvisualClass is set then find the visual with the that
class and the greatest depth.

4) if all else fails use the default visual/default depth.

5) if we the visualID == default visual id, and XtNusePrivateColormap
is FALSE, then use the default colormap, otherwise, create an
appropriate one.




	There only other thing of interest is if you define MOTIF
the code uses some Motif functions instead of their X/Xt
equivalents, but otherwise should work with pretty much any
Xt widget set.

	I use a version of this code in our product, and so it has
been used on just about every major U*x platform with success.


----------------------------------------------------------------------
Subject: 5.  Which visual should an application use?
----------------------------------------------------------------------

This is a point that can be argued about but one opinion is there is
no way for an application to know the appropriate visual -- it has to
be specified by the user.  If you disagree with this then your
application probably falls into the category of always using the
default visual or it is hardware specific and expects some particular
visual such as 24bit TrueColor with an OverlayPlane extension (or some
such).

Why?  No application runs in isolation.  Depending on the way a server
allocates resources I may not always want your application to run in
TrueColor mode if it is going to mess up my other applications.  I may
be very upset if it chooses to run in GreyScale instead of PsuedoColor
or just monochrome.

As an example, on a low end color Sun server there are many different
possible visuals: monochrome, 256 entry colormap, static gray, static
color, and a 3/3/2 TrueColor.  The SGI Iris's offer all the above 
plus 12 bit TrueColor, 24 bit TrueColor, an Overlay Plane.

----------------------------------------------------------------------
Subject: 6.  Why do only Shell widgets have a Visual?
----------------------------------------------------------------------

This is strictly by convention.  It makes it possible for an arbitrary
widget to know that the visual it uses can be found by looking for the
shell widget that is its ancestor and obtaining the visual of that
shell.

A widget can have its own visual resource.  If it does, it must have
its own realize method to use the visual when it calls
XCreateWindow().  You should also make this a resource that can be
obtained with XtGetValues() so other widgets can find it.  A
reasonable value is probably XtNvisual.

----------------------------------------------------------------------
Subject: 7.  Which visual, depth and colormap do Shells inherit?
----------------------------------------------------------------------

The default value for these resources are set to CopyFromParent.  This
is interpreted as the DefaultColormapOfScreen(), DefaultDepthOfScreen()
and the default visual of the screen if the widget has no parent -- i.e.
it is an applicationShellWidgetClass and the root of your widget tree.

If the parent of the widget is not null, then the shell copies
colormap and depth from its parent and uses CopyFromParent as the
visual.

----------------------------------------------------------------------
Subject: 8.  I've done all the above and I still get a BadMatch error.  Why?
----------------------------------------------------------------------

Some resource converters improperly cache references.  This was
especially true of X11R3 and earlier versions of Motif.

----------------------------------------------------------------------
Subject: 9.  Why doesn't my widget get destroyed when I call XtDestroyWidget()?
----------------------------------------------------------------------

See section 2.8 of the Xt specification.

It eventually does get destroyed, just not immediately.  The
Intrinsics destroy a widget in a two-phase process.  First it and all
of its children have a flag set that indicate it is being destroyed.
It is then put on a list of widgets to be destroyed.  This way any
pending X events or further references to that widget can be cleaned
up before the memory is actually freed.  The second phase is then
performed after all callbacks, event handlers, and actions have
completed, before checking for the next X event.  At this point the
list is traversed and each widget's memory is actually free()'d, among
other things.

As some further caveats/trivia, the widgets may be destroyed if the
Intrinsics determine that they have no further references to the
widgets on the list.  If so, then the phase 2 destruction occurs
immediately.  Also, if nested event loops are used, widgets placed on
the destroy list before entering the inner event loop are not
destroyed until returning to the outer event loop.

----------------------------------------------------------------------
Subject: 10. How do I exit but still execute the DestroyCallbacks?
----------------------------------------------------------------------

The problem is if a simple and entirely reasonable approach to exiting
an application is used, such as calling exit() directly, then a widget
may not have a chance to clean up any external state -- such as open
sockets, temporary files, allocated X resources, etc.  (this code for
simplicity reasons assumes only a single toplevel widget):


	Widget
	ToplevelGet (gw)
		Widget		gw;		/* widget to find toplevel */
	{
		Widget		top;

		for (top = gw; XtParent (top); top = XtParent (top))
			/* empty */;
		return (top);
	}

	void
	ExitCallback (gw, closure, call_data)
		Widget		gw;		/* widget */
		XtPointer	closure;	/* data the app specified */
		XtPointer	call_data;	/* widget specific data */
	{
		Widget		toplevel;

		toplevel = ToplevelGet (gw);
		XtUnmapWidget (toplevel);	/* make it disappear quickly */
		XtDestroyWidget (toplevel);
		exit (0);
	}

One can see that the above code exit's immediately after destroying
the toplevel widget.  The trouble is the phase 2 destruction may never
occur.  

This works for most widgets and most applications but will not work
for those widgets that have any external state.  You might think that
since it works now it will always work but remember that part of the
reason an object oriented approach is used is so one can be ignorant
of the implementation details for each widget.  Which means that the
widget may change and someday require that some external state is
cleaned up by the Destroy callbacks.

One alternative is to modify ExitCallback() to set a global flag and
then test for that flag in a private event loop.
Or try the following code:

	#include 

	extern Widget ToplevelGet (
	#if NeedFunctionPrototypes
		Widget		gw
	#endif
	);

	extern Boolean ExitWorkProc (
	#if NeedFunctionPrototypes
		XtPointer	closure
	#endif
	);

	extern void ExitCallback (
	#if NeedFunctionPrototypes
		Widget		gw,
		XtPointer	closure,
		XtPointer	call_data
	#endif
	);

	Widget
	ToplevelGet (gw)
	Widget		gw;		/* widget to find toplevel */
	{
		Widget		top;

		for (top = gw; XtParent (top); top = XtParent (top))
			/* empty */;
		return (top);
	}


	void
	ExitCallback (gw, closure, call_data)
	Widget		gw;		/* widget */
	XtPointer	closure;	/* data the app specified */
	XtPointer	call_data;	/* widget specific data */
	{
		Widget		toplevel;

		toplevel = ToplevelGet (gw);
		XtUnmapWidget (toplevel);	/* make it disappear quickly */
		XtDestroyWidget (toplevel);
		XtAppAddWorkProc (XtWidgetToApplicationContext (gw),
				  ExitWorkProc, (XtPointer) NULL);
	}

	Boolean
	ExitWorkProc (closure)
		XtPointer	closure;
	{
		exit (0);
		/*NOTREACHED*/
	}


ExitCallback() adds a work procedure that will get called when the
application is next idle -- which happens after all the events are
processed and the destroy callbacks are executed.

----------------------------------------------------------------------
Subject: 11. How do I resize a Shell widget?
----------------------------------------------------------------------

After it is realized, one doesn't resize a Shell widget.  The proper
thing is to resize the currently managed child of the Shell widget
using XtSetValues().  The geometry change is then propagated to the
Shell which asks the window manager which may or may not allow the
request.  However, the Shell must have the resource
XtNallowShellResize set to True otherwise it will not even ask the
window manager to grant the request and the Shell will not resize.

To change the position of a Shell, use XtSetValues() on the Shell, not
the child, and within the limits of the window manager it should be granted.

----------------------------------------------------------------------
Subject: 12. Why can't XtAppAddInput() handle files?
----------------------------------------------------------------------

It does, however Unix semantics for when I/O is ready for a file does
not fit most peoples' intuitive model.  In Unix terms a file
descriptor is ready for reading whenever the read() call would not
block, ignoring the setting of optional flags that indicate not to
block.  This works as expected for terminals, sockets and pipes.  For
a file the read() will always return but the return indicates an EOF
-- i.e. no more data.  The result is the code in the Intrinsics always
calls the input handler because it always thinks something is about to
be read.  The culprit is the select() system call or on SYSV based
OS's it is the poll() system call.

How to get around this on a Unix system?  The best approach is to use
another process to check for available input on the file.  Use a pipe
to connect the application with this other process and pass the file
descriptor from the pipe to XtAppAddInput().  A suitable program on
BSD systems is "tail -f filename".

It's rumored that select() on some systems is not _completely_
reliable.  In particular:

	- IBM AIX 3.1: this is one where it would work for a while
	  (several thousand times) and then stop until some other
	  event woke it up. This seemed to be the result of a race
	  condition in the Kernel.  IBM claims to have a fix for this.

	- Pyramid, doesn't work at all.

	- Ultrix (and possibly others where pipes are implemented as
	  sockets), wasn't completely broken, but although the writing
	  side wrote in 512 byte blocks the reading side received it
	  all broken up as if it was being put into the pipe a byte at
	  a time.  You can waste a lot of time by reading small blocks
	  (get raound it by detecting the situation and having
	  select() ignore the pipe for 10 mseconds - by then it had
	  been given the whole block).


Note that all the above descriptions used Unix terminology such as
read(), file descriptor, pipes, etc.  This is an OS dependent area and
may not be identical on all systems.  However the Intrinsic designers
felt it was a common enough operation that it should be included with
part of the toolkit.  Why they didn't also deal with signals at this
point I don't know.

----------------------------------------------------------------------
Subject: 13.!What good books and magazines are there on Xt?
----------------------------------------------------------------------

I have a favorite that is the definitive reference.  To my perspective
it offers a reasonable introduction but also goes into the full
details of the Intrinsics.  When I started using it I was already
familiar with Xt and the concepts behind it, so newcomers may or may
not find it useful.  I've always found it accurate and complete, which
means it's 1000 pages.

Asente, Paul J., and Swick, Ralph R., "X Window System Toolkit, The
	Complete Programmer's Guide and Specification", Digital Press,
	1990, ISBN 1-55558-051-3, order number EY-E757E-DP; and by
	Prentice-Hall, ISBN 0-13-972191-6. Also available through DEC
	Direct at 1-800-DIGITAL.

The other book I commonly recomend to novices is:

Young, Doug. "The X Window System: Applications and Programming with
	Xt (Motif Version)," Prentice Hall, 1989 (ISBN 0-13-497074-8).
	(ISBN 0-13-972167-3)

And of course O'Reilly has an entire series of manuals on X and Xt.
O'Reilly ordering is 800-998-9938.  In particular, Volume 5 is an Xt
reference done in manual page style.  The 3rd edition is extensively
overhauled and goes far beyond the MIT manual pages.  I'm finding it
very useful.  In particular, the permutted index and references to
other manual pages help a great deal in chasing down related
information.

I read two periodicals, "The X Resource" and the "The X Journal".
These are the only two dealing specifically with X.  "The X Resource"
is published quarterly, by O'Reilly, with one of the issues being the
MIT X Consortium Technical Conference Proceedings.  There is no
advertising.  I've found it informative with pretty good depth.  For
orders, call 1-800-998-9938, or email cathyr@ora.com.  For editorial
matters, email adrian@ora.com.  Table of contents are posted at
math.utah.edu in ~ftp/pub/tex/bib in TeX form and on ftp.uu.net in
~ftp/published/oreilly/xresource in ASCII form.


"The X Journal" is a bimonthly trade rag with lots of advertising.
The articles are informative and oriented toward a less technical
audience.  I read it more to see what's going on then with an
expectation of learning a great deal (but remember, I represent a
fairly small percentage of people).  Also, they have a pretty good
collection of people on the advisory board and as columnists.  Call
(908) 563-9033.

For German readers try:

	Brede et.al. "Programmieren mit OSF/Motif"
	Addison-Wesley, Germany (ISBN 3-89319-211-5)

It is a book which introduces Xt technics with motif widgets from an
applications programmers point of view (no widget design stuff).


----------------------------------------------------------------------
Subject: 14. What Widgets are available?
----------------------------------------------------------------------

There are three popular widget sets:

Athena	- The set provided with X11.  This is sufficient for most
	  purposes but is on the ugly side.  Recently, a 3d look is
	  available for ftp on file://ftp.x.org/contrib/Xaw3d.tar.Z.
Motif	- From OSF available for a license fee and commonly shipped on
	  many workstation vendors platforms (almost everyone but
	  Sun).  It looks good and works well but personally I think
	  it is poorly implemented.
OLIT	- The Open Look Intrinsics Toolkit is a set of widgets
	  implementing Sun's Open Look specification.  Developed by
	  AT&T.  I've never used it so can't comment on its quality.
	  I've heard rumours that it is a pain to actually get.

In addition the following collection of widgets are also available:

Xtra	- a library of widgets for sale from Graphical Software
	  Technology (310-328-9338).  It includes bar graph, stacked
	  bar graph, line graph, pie chart, xy plot, hypertext, help,
	  spreadsheet, and data entry form widgets.  I've never seen
	  them so I can't comment.
FWF	- The Free Widget Foundation is attempting to collect a set of
	  freely available widgets.  Included are a Pixmap editor,
	  FileDialog, and a few others.  The current set of widgets
	  can be obtained via anonymous ftp from the machine
	  a.cs.uiuc.edu (128.174.252.1) in the file pub/fwf.shar.Z.
Xcu	- The Cornell University widgets from Gene Dykes.  One of the
	  early widget sets released.  Provides a nice appearance for
	  buttons and has a mini command language.  Probably not so
	  widely used.
Xs	- The Sony widget set.  This was around during R3 days but
	  seemed to disappear.  It looked like it had promise.
Xw	- The HP widgets.  The precursor to Motif.  Originally written
	  for R3 there exists diffs to get it to work under R4 & R5.
	  Again, a pretty good widget set but has more or less died.
	  The precursor to this was the Xray toolkit which was
	  originally implemented for X10R4 and apparently provided
	  much experience for the designers of Xt.
Xo	- A widget set I'm working on.  It's still primitive but you
	  can give it a try in archive.cis.ohio-state.edu:pub/Xo/*

The following specialized widgets are also available:

Tbl	- Implements a tabular layout of widgets.  Supports Motif
	  widgets as children.  Part of Wcl.
Plots	- The Athena Plotting widgets (not the Athena widgets).
	  Contact gnb@bby.oz.au or joe@Athena.MIT.EDU.

John L. Cwikla (cwikla@wri.com) posts an FAQ list that contains freely
available widgets; it is in:

	file://ftp.x.org/contrib/faqs/Widget.FAQ

	A much more exciting version of this FAQ, complete with pictures,
links, and more complete documentation is available at 

	http://www.wri.com/~cwikla/widget

----------------------------------------------------------------------
Subject: 15. What alternatives to the Intrinsics are there?
----------------------------------------------------------------------

	__________________________________________
	Name		Language	Vendor
	__________________________________________
	Xview		C		Sun
	OI		C++		ParcPlace
	Interviews	C++		Stanford
	Tcl/tk		C		ftp.cs.berkeley.edu
	__________________________________________


However much I like C and admire the skill in both designing and
implementing the Intrinsics, hopefully some alternative will develop
in the next 3-5 years that uses an object oriented language.  Keep

Section 1 of 4 - Prev - Next
All sections - 1 - 2 - 3 - 4

Back to category FAQ on different themes - Use Smart Search
Home - Smart Search - About the project - Feedback

© allanswers.org | Terms of use

LiveInternet