Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Aug 2005 10:22:55 +0200
From:      Dejan Lesjak <dejan.lesjak@guest.arnes.si>
To:        Thomas Mueller <tmueller@sysgo.com>, Udo Mueller <udo@ebi.xs4all.nl>, freebsd-ports@freebsd.org
Subject:   Re: FreeBSD Port: x11-toolkits/Xaw3d
Message-ID:  <200508311022.56056.dejan.lesjak@guest.arnes.si>
In-Reply-To: <20050831085144.2ad04920@tom.ulm.sysgo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--Boundary-00=_gjWFDK05w69pzeA
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Thomas Mueller wrote:

> On Tue, 30 Aug 2005 15:46:33 +0200, Udo Mueller wrote:
>> Xfig crashes since the new Xaw3d. If I want to go to Edit, Files etc.
>> Xfig crashes with core dumped. It must have to do with Xaw3d, because
>> before the update it was very stable.
> 
> The same applies for gv.
> 
>> How can I solve the problem, where do I get more information?
> 
> For xfig, there is a a patch on the Xaw3d Homepage at
>    http://www.visi.com/~hawkeyd/xaw3d.html
> 

Attached is patch to graphics/xfig port from that page. Please try it and see 
if it works.


Dejan

--Boundary-00=_gjWFDK05w69pzeA
Content-Type: text/x-diff;
  charset="us-ascii";
  name="xfig-xawfixup.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="xfig-xawfixup.diff"

Index: Makefile
===================================================================
RCS file: /usr/local/repos/freebsd/ports/graphics/xfig/Makefile,v
retrieving revision 1.53
diff -u -r1.53 Makefile
--- Makefile	10 Apr 2005 05:39:55 -0000	1.53
+++ Makefile	31 Aug 2005 08:13:53 -0000
@@ -7,7 +7,7 @@
 
 PORTNAME=	xfig
 PORTVERSION=	3.2.4
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	graphics
 MASTER_SITES=	http://www.xfig.org/xfigdist/ \
 		ftp://www-epb.lbl.gov/xfig/%SUBDIR%/
Index: files/patch-Imakefile
===================================================================
RCS file: files/patch-Imakefile
diff -N files/patch-Imakefile
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-Imakefile	31 Aug 2005 07:58:56 -0000
@@ -0,0 +1,150 @@
+--- Imakefile.orig	Thu Dec 19 18:57:11 2002
++++ Imakefile	Wed Aug 31 09:58:41 2005
+@@ -48,8 +48,8 @@
+ XCOMM Redefine the following if your PNG library and/or include file
+ XCOMM are in different places
+ 
+-PNGLIBDIR = $(USRLIBDIR)
+-PNGINC = -I/usr/local/include
++PNGLIBDIR = ${LOCALBASE}/lib
++PNGINC = -I${LOCALBASE}/include/libpng
+ 
+ XCOMM If don't want JPEG support, comment out the #define USEJPEG line
+ XCOMM Uncomment the #define for USEJPEG if you want to be able to import
+@@ -68,8 +68,8 @@
+ 
+ #ifdef USEJPEG
+ #ifdef USEINSTALLEDJPEG
+-JPEGLIBDIR = /usr/local/lib
+-JPEGINC = -I/usr/include/X11
++JPEGLIBDIR = ${LOCALBASE}/lib
++JPEGINC = -I${LOCALBASE}/include
+ #else
+ JPEGLIBDIR = ../jpeg
+ JPEGINC = -I$(JPEGLIBDIR)
+@@ -87,12 +87,12 @@
+ XCOMM Change XPMLIBDIR if necessary to point to the xpm library (libXpm)
+ XCOMM Change XPMINC if necessary to point to the include file for xpm (xpm.h)
+ 
+-XCOMM #define USEXPM
+-XCOMM #define USEXPM_ICON
++#define USEXPM
++#define USEXPM_ICON
+ 
+ #ifdef USEXPM
+ XPMLIBDIR = $(USRLIBDIR)
+-XPMINC = -I/usr/include/X11
++XPMINC = -I$(INCDIR)/X11
+ #endif
+ 
+ XCOMM Uncomment the following definiton if you want to use the small icons
+@@ -105,17 +105,20 @@
+ XCOMM Then be sure to change the XAW3DINC to point to the directory where your
+ XCOMM 3D Athena widget headers are located
+ 
+-XCOMM #define XAW3D
++#define XAW3D
+ 
+ #ifdef XAW3D
+-XAW3DINC = -I/usr/include/X11/Xaw3d
++XAW3DINC = -I$(INCDIR)/X11/Xaw3d
+ DUSEXAW3D = -DXAW3D
+ XAWLIB = -lXaw3d
++#else
++XAW_SRC = w_menuentry.c SmeCascade.c SmeBSB.c SimpleMenu.c
++XAW_OBJ = w_menuentry.o SmeCascade.o SmeBSB.o SimpleMenu.o
+ #endif
+ 
+ XCOMM Uncomment the following if you have a wheel mouse.  See docs for description.
+ 
+-XCOMM #define WHEELMOUSE
++#define WHEELMOUSE
+ 
+ #ifdef WHEELMOUSE
+ DUSEWHEELMOUSE = -DWHEELMOUSE
+@@ -154,7 +157,7 @@
+ XCOMM inline functions. With the "INLINE" keyword, you should notice that
+ XCOMM the display will be a bit faster in complex figures
+ 
+-XCOMM USEINLINE = -DUSE_INLINE
++USEINLINE = -DUSE_INLINE
+ 
+ XCOMM use (and change) the following if you want the multi-key data base file
+ XCOMM somewhere other than the standard X11 library directory
+@@ -166,7 +169,7 @@
+ 
+ XCOMM XFIGDOCDIR tells where the html and pdf documentation should go
+ XCOMM XFIGDOCDIR = $(DOCDIR)/xfig
+-XFIGDOCDIR = /usr/share/doc/xfig
++XFIGDOCDIR = $(LIBDIR)/xfig
+ 
+ XCOMM MANDIR tells where the standard man pages should go (no need to change it
+ XCOMM if you want the man pages installed in the standard place on your system
+@@ -234,7 +237,7 @@
+ #endif /* USEJPEG */
+ 
+ #ifdef I18N
+-I18N_DEFS = -DI18N -DSETLOCALE
++I18N_DEFS = -DI18N #-DSETLOCALE
+ I18N_SRC = w_i18n.c
+ I18N_OBJ = w_i18n.o
+ #endif
+@@ -251,11 +254,13 @@
+ 		$(HAVE_NO_STRCASECMP) \
+ 		$(NEED_STRERROR)
+ 
++/*
+ #ifdef InstallManPage
+ #undef InstallManPage
+ #endif
+ #define InstallManPage(file,dest)                                       @@\
+ InstallManPageLong(file,dest,file)
++*/
+ 
+ #ifdef USESMALLICONS
+ DUSESMALLICONS = -DUSE_SMALL_ICONS
+@@ -299,12 +304,12 @@
+ 		u_elastic.c u_error.c u_fonts.c u_free.c u_geom.c \
+ 		u_list.c u_markers.c u_pan.c u_print.c u_redraw.c u_scale.c u_search.c \
+ 		u_smartsearch.c u_translate.c u_undo.c w_digitize.c w_listwidget.c \
+-		w_browse.c w_capture.c w_srchrepl.c w_help.c w_layers.c w_menuentry.c \
++		w_browse.c w_capture.c w_srchrepl.c w_help.c w_layers.c \
+ 		w_canvas.c w_cmdpanel.c w_color.c w_cursor.c w_dir.c w_drawprim.c \
+ 		w_export.c w_file.c w_fontbits.c w_fontpanel.c w_grid.c w_icons.c \
+ 		w_indpanel.c w_library.c w_modepanel.c w_mousefun.c w_msgpanel.c \
+ 		w_print.c w_rottext.c w_rulers.c w_setup.c w_style.c w_util.c w_zoom.c \
+-		$(I18N_SRC) SmeCascade.c SmeBSB.c SimpleMenu.c
++		$(I18N_SRC) $(XAW_SRC)
+ 
+ XFIGOBJ =	d_arc.o d_arcbox.o d_box.o d_ellipse.o d_picobj.o \
+ 		d_subspline.o d_line.o d_regpoly.o d_spline.o d_text.o \
+@@ -321,12 +326,12 @@
+ 		u_elastic.o u_error.o u_fonts.o u_free.o u_geom.o \
+ 		u_list.o u_markers.o u_pan.o u_print.o u_redraw.o u_scale.o u_search.o \
+ 		u_smartsearch.o u_translate.o u_undo.o w_digitize.o w_listwidget.o \
+-		w_browse.o w_capture.o w_srchrepl.o w_help.o w_layers.o w_menuentry.o \
++		w_browse.o w_capture.o w_srchrepl.o w_help.o w_layers.o \
+ 		w_canvas.o w_cmdpanel.o w_color.o w_cursor.o w_dir.o w_drawprim.o \
+ 		w_export.o w_file.o w_fontbits.o w_fontpanel.o w_grid.o w_icons.o \
+ 		w_indpanel.o w_library.o w_modepanel.o w_mousefun.o w_msgpanel.o \
+ 		w_print.o w_rottext.o w_rulers.o w_setup.o w_style.o w_util.o w_zoom.o \
+-		$(I18N_OBJ) SmeCascade.o SmeBSB.o SimpleMenu.o
++		$(I18N_OBJ) $(XAW_OBJ)
+ 
+ XCOMM Other dependencies should be handled by "make depend"
+ 
+@@ -541,11 +546,13 @@
+ SpecialObjectRule(w_grid.o, w_grid.c  mode.h, )
+ SpecialObjectRule(w_indpanel.o, w_indpanel.c  mode.h w_indpanel.h object.h, )
+ SpecialObjectRule(w_library.o, w_library.c  mode.h, )
+-SpecialObjectRule(w_menuentry.o, w_menuentry.c  w_menuentry.h w_menuentryP.h, )
+ SpecialObjectRule(w_modepanel.o, w_modepanel.c  mode.h w_indpanel.h w_icons.h object.h, $(DUSESMALLICONS))
+ SpecialObjectRule(w_msgpanel.o, w_msgpanel.c  mode.h, )
+ SpecialObjectRule(w_rulers.o, w_rulers.c  mode.h, )
+ SpecialObjectRule(w_zoom.o, w_zoom.c  mode.h, )
++#ifndef XAW3D
++SpecialObjectRule(w_menuentry.o, w_menuentry.c  w_menuentry.h w_menuentryP.h, )
++#endif
+ 
+ #ifdef USEJPEG
+ #ifndef USEINSTALLEDJPEG
Index: files/patch-aa
===================================================================
RCS file: files/patch-aa
diff -N files/patch-aa
--- files/patch-aa	31 Jul 2003 07:41:49 -0000	1.16
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,102 +0,0 @@
---- Imakefile.orig	Thu Dec 19 18:57:11 2002
-+++ Imakefile	Wed Jul 23 16:27:24 2003
-@@ -48,8 +48,8 @@
- XCOMM Redefine the following if your PNG library and/or include file
- XCOMM are in different places
- 
--PNGLIBDIR = $(USRLIBDIR)
--PNGINC = -I/usr/local/include
-+PNGLIBDIR = ${LOCALBASE}/lib
-+PNGINC = -I${LOCALBASE}/include/libpng
- 
- XCOMM If don't want JPEG support, comment out the #define USEJPEG line
- XCOMM Uncomment the #define for USEJPEG if you want to be able to import
-@@ -68,8 +68,8 @@
- 
- #ifdef USEJPEG
- #ifdef USEINSTALLEDJPEG
--JPEGLIBDIR = /usr/local/lib
--JPEGINC = -I/usr/include/X11
-+JPEGLIBDIR = ${LOCALBASE}/lib
-+JPEGINC = -I${LOCALBASE}/include
- #else
- JPEGLIBDIR = ../jpeg
- JPEGINC = -I$(JPEGLIBDIR)
-@@ -87,12 +87,12 @@
- XCOMM Change XPMLIBDIR if necessary to point to the xpm library (libXpm)
- XCOMM Change XPMINC if necessary to point to the include file for xpm (xpm.h)
- 
--XCOMM #define USEXPM
--XCOMM #define USEXPM_ICON
-+#define USEXPM
-+#define USEXPM_ICON
- 
- #ifdef USEXPM
- XPMLIBDIR = $(USRLIBDIR)
--XPMINC = -I/usr/include/X11
-+XPMINC = -I$(INCDIR)/X11
- #endif
- 
- XCOMM Uncomment the following definiton if you want to use the small icons
-@@ -105,17 +105,17 @@
- XCOMM Then be sure to change the XAW3DINC to point to the directory where your
- XCOMM 3D Athena widget headers are located
- 
--XCOMM #define XAW3D
-+#define XAW3D
- 
- #ifdef XAW3D
--XAW3DINC = -I/usr/include/X11/Xaw3d
-+XAW3DINC = -I$(INCDIR)/X11/Xaw3d
- DUSEXAW3D = -DXAW3D
- XAWLIB = -lXaw3d
- #endif
- 
- XCOMM Uncomment the following if you have a wheel mouse.  See docs for description.
- 
--XCOMM #define WHEELMOUSE
-+#define WHEELMOUSE
- 
- #ifdef WHEELMOUSE
- DUSEWHEELMOUSE = -DWHEELMOUSE
-@@ -154,7 +154,7 @@
- XCOMM inline functions. With the "INLINE" keyword, you should notice that
- XCOMM the display will be a bit faster in complex figures
- 
--XCOMM USEINLINE = -DUSE_INLINE
-+USEINLINE = -DUSE_INLINE
- 
- XCOMM use (and change) the following if you want the multi-key data base file
- XCOMM somewhere other than the standard X11 library directory
-@@ -166,7 +166,7 @@
- 
- XCOMM XFIGDOCDIR tells where the html and pdf documentation should go
- XCOMM XFIGDOCDIR = $(DOCDIR)/xfig
--XFIGDOCDIR = /usr/share/doc/xfig
-+XFIGDOCDIR = $(LIBDIR)/xfig
- 
- XCOMM MANDIR tells where the standard man pages should go (no need to change it
- XCOMM if you want the man pages installed in the standard place on your system
-@@ -234,7 +234,7 @@
- #endif /* USEJPEG */
- 
- #ifdef I18N
--I18N_DEFS = -DI18N -DSETLOCALE
-+I18N_DEFS = -DI18N #-DSETLOCALE
- I18N_SRC = w_i18n.c
- I18N_OBJ = w_i18n.o
- #endif
-@@ -251,11 +251,13 @@
- 		$(HAVE_NO_STRCASECMP) \
- 		$(NEED_STRERROR)
- 
-+/*
- #ifdef InstallManPage
- #undef InstallManPage
- #endif
- #define InstallManPage(file,dest)                                       @@\
- InstallManPageLong(file,dest,file)
-+*/
- 
- #ifdef USESMALLICONS
- DUSESMALLICONS = -DUSE_SMALL_ICONS
Index: files/patch-figx.h
===================================================================
RCS file: files/patch-figx.h
diff -N files/patch-figx.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-figx.h	31 Aug 2005 07:59:55 -0000
@@ -0,0 +1,10 @@
+--- figx.h.orig	Fri Sep 20 23:00:53 2002
++++ figx.h	Wed Aug 31 09:49:42 2005
+@@ -36,6 +36,7 @@
+ #include <X11/Xaw3d/SmeBSB.h>
+ #include <X11/Xaw3d/Sme.h>
+ #include <X11/Xaw3d/SmeLine.h>
++#include <X11/Xaw3d/Tip.h>
+ #include <X11/Xaw3d/Toggle.h>
+ #include <X11/Xaw3d/Paned.h>
+ #include <X11/Xaw3d/Viewport.h>
Index: files/patch-w_cmdpanel.c
===================================================================
RCS file: files/patch-w_cmdpanel.c
diff -N files/patch-w_cmdpanel.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_cmdpanel.c	31 Aug 2005 08:00:14 -0000
@@ -0,0 +1,283 @@
+--- w_cmdpanel.c.orig	Thu Dec 19 18:51:19 2002
++++ w_cmdpanel.c	Wed Aug 31 09:49:42 2005
+@@ -37,7 +37,6 @@
+ #include "w_icons.h"
+ #include "w_indpanel.h"
+ #include "w_layers.h"
+-#include "w_menuentry.h"
+ #include "w_msgpanel.h"
+ #include "w_mousefun.h"
+ #include "w_print.h"
+@@ -46,6 +45,9 @@
+ #include "w_setup.h"
+ #include "w_style.h"
+ #include "w_zoom.h"
++#ifndef XAW3D
++#include "w_menuentry.h"
++#endif
+ #ifdef I18N
+ #include "d_text.h"
+ #endif  /* I18N */
+@@ -59,6 +61,15 @@
+ Widget	global_popup = 0;
+ Widget	global_panel;
+ 
++#define menu_item_bitmap_width 9
++#define menu_item_bitmap_height 8
++static unsigned char menu_item_bitmap_bits[] = {
++   0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
++   0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
++};
++
++static Pixmap menu_item_bitmap = None;
++
+ /* Widgets holding the ascii values for the string-based settings */
+ 
+ Widget	bal_delay;
+@@ -90,6 +101,13 @@
+ static int	off_paste_x,off_paste_y;
+ static int	orig_paste_x,orig_paste_y;
+ 
++#ifdef XAW3D
++extern update_indpanel();
++extern update_modepanel();
++extern update_layerpanel();
++extern update_mousepanel();
++extern update_rulerpanel();
++#else
+ /* popup message over command button when mouse enters it */
+ static void     cmd_balloon_trigger();
+ static void     cmd_unballoon();
+@@ -97,6 +115,7 @@
+ /* popup message over filename window when mouse enters it */
+ static void     filename_balloon_trigger();
+ static void     filename_unballoon();
++#endif
+ 
+ String  global_translations =
+         "<Message>WM_PROTOCOLS: DismissGlobal()\n";
+@@ -143,29 +162,28 @@
+ 	{NULL, 0, NULL},
+     };
+ 
+-#define PAGE_BRD_MSG	"page borders   (Meta-B)"
++#define PAGE_BRD_MSG	"page borders    (Meta-B)"
+ #define DPTH_MGR_MSG	"depth manager"
+-#define INFO_BAL_MSG	"info balloons  (Meta-Y)"
+-#define LINE_LEN_MSG	"line lengths   (Meta-L)"
+-#define VRTX_NUM_MSG	"vertex numbers         "
++#define INFO_BAL_MSG	"info balloons   (Meta-Y)"
++#define LINE_LEN_MSG	"line lengths    (Meta-L)"
++#define VRTX_NUM_MSG	"vertex numbers"
+ 
+ menu_def view_menu_items[] = {
+-	{"Manage Styles...      (Ctrl-Y)",  7, popup_manage_style_panel},
+-	{"Redraw                (Ctrl-L)",  0, redisplay_canvas},
+-	{"Portrait/Landscape    (Meta-C)",  3, change_orient},
+-	{"Zoom In               (Shift-Z)", 5, inc_zoom},
+-	{"Zoom Out              (z)",	    5, dec_zoom},
+-	{"Zoom to Fit canvas    (Ctrl-Z)",  8, fit_zoom},
+-	{"Unzoom",			    0, unzoom},
+-	{"Pan to origin",		    0, pan_origin},
+-	{"-",				    0, NULL},	/* make a dividing line */
++	{"Manage Styles...     (Ctrl-Y)",  7, popup_manage_style_panel},
++	{"Redraw               (Ctrl-L)",  0, redisplay_canvas},
++	{"Portrait/Landscape   (Meta-C)",  3, change_orient},
++	{"Zoom In              (Shift-Z)", 5, inc_zoom},
++	{"Zoom Out             (z)",	   5, dec_zoom},
++	{"Zoom to Fit canvas   (Ctrl-Z)",  8, fit_zoom},
++	{"Unzoom",			   0, unzoom},
++	{"Pan to origin",		   0, pan_origin},
++	{"-",				   0, NULL},	/* make a dividing line */
+ 	/* the following menu labels will be refreshed in refresh_view_menu() */
+-	/* 2 must be added to the underline value because of the "* " preceding the text */
+-	{PAGE_BRD_MSG,			    12, toggle_show_borders},
+-	{DPTH_MGR_MSG,			     7, toggle_show_depths},
+-	{INFO_BAL_MSG,			     8, toggle_show_balloons},
+-	{LINE_LEN_MSG,			    12, toggle_show_lengths},
+-	{VRTX_NUM_MSG,			     7, toggle_show_vertexnums},
++	{PAGE_BRD_MSG,			  10, toggle_show_borders},
++	{DPTH_MGR_MSG,			   5, toggle_show_depths},
++	{INFO_BAL_MSG,			   6, toggle_show_balloons},
++	{LINE_LEN_MSG,			   5, toggle_show_lengths},
++	{VRTX_NUM_MSG,			   5, toggle_show_vertexnums},
+ 	{NULL, 0, NULL},
+     };
+ 
+@@ -241,11 +259,13 @@
+     NextArg(XtNborderWidth, INTERNAL_BW);
+     name_panel = XtCreateManagedWidget("file_name", labelWidgetClass, tool,
+ 				      Args, ArgCount);
++#ifndef XAW3D
+     /* popup balloon when mouse passes over filename */
+     XtAddEventHandler(name_panel, EnterWindowMask, False,
+ 		      filename_balloon_trigger, (XtPointer) name_panel);
+     XtAddEventHandler(name_panel, LeaveWindowMask, False,
+ 		      filename_unballoon, (XtPointer) name_panel);
++#endif
+     /* add actions to position the menus if the user uses an accelerator */
+     XtAppAddActions(tool_app, menu_actions, XtNumber(menu_actions));
+     refresh_view_menu();
+@@ -276,12 +296,14 @@
+ 
+ 	/* now the menu itself */
+ 	menu->menuwidget = create_menu_item(menu);
+-	
++
++#ifndef XAW3D
+ 	/* popup when mouse passes over button */
+ 	XtAddEventHandler(menu->widget, EnterWindowMask, False,
+ 			  cmd_balloon_trigger, (XtPointer) menu);
+ 	XtAddEventHandler(menu->widget, LeaveWindowMask, False,
+ 			  cmd_unballoon, (XtPointer) menu);
++#endif
+ 
+ 	return menu->widget;
+ }
+@@ -304,7 +326,11 @@
+ 	    sprintf(id, "%1d", j + 1);
+ 	    FirstArg(XtNvertSpace, 10);
+ 	    NextArg(XtNunderline, 0); /* underline # digit */
++#ifndef XAW3D
+ 	    entry = XtCreateWidget(id, figSmeBSBObjectClass, menu, Args, ArgCount);
++#else
++	    entry = XtCreateWidget(id, smeBSBObjectClass, menu, Args, ArgCount);
++#endif
+ 	    XtAddCallback(entry, XtNcallback, load_recent_file, (XtPointer) my_strdup(id));
+ 	    if (j < max_recent_files)
+ 		XtManageChild(entry);
+@@ -354,8 +380,13 @@
+ 		/* normal menu entry */
+ 		FirstArg(XtNvertSpace, 10);
+ 		NextArg(XtNunderline, menup->menu[i].u_line); /* any underline */
++#ifndef XAW3D
+ 		entry = XtCreateManagedWidget(menup->menu[i].name, figSmeBSBObjectClass, 
+ 					menu, Args, ArgCount);
++#else
++		entry = XtCreateManagedWidget(menup->menu[i].name, smeBSBObjectClass, 
++					menu, Args, ArgCount);
++#endif
+ 		XtAddCallback(entry, XtNcallback, menup->menu[i].func, 
+ 					(XtPointer) menup->widget);
+ 	    }
+@@ -381,6 +412,7 @@
+     }
+ }
+ 
++#ifndef XAW3D
+ /* come here when the mouse passes over a button in the command panel */
+ 
+ static	Widget cmd_balloon_popup = (Widget) 0;
+@@ -466,6 +498,7 @@
+ 	cmd_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ static void
+ enter_cmd_but(widget, closure, event, continue_to_dispatch)
+@@ -1229,7 +1262,7 @@
+ 	strcpy(cur_pdfviewer, panel_get_value(pdfview));
+ 
+ 	XtPopdown(global_popup);
+-
++	
+ 	refresh_view_menu();
+ }
+ 
+@@ -1242,6 +1275,7 @@
+ 	global_popup = (Widget) 0;
+ }
+ 
++#ifndef XAW3D
+ /* come here when the mouse passes over the filename window */
+ 
+ static	Widget filename_balloon_popup = (Widget) 0;
+@@ -1313,6 +1347,7 @@
+ 	filename_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ /*
+  * Update the current filename in the name_panel widget, and the xfig icon.
+@@ -1459,6 +1494,7 @@
+      Boolean state;
+ {
+     Widget menu, w;
++    Pixmap bitmap;
+     char name[60];
+     DeclareStaticArgs(10);
+ 
+@@ -1471,25 +1507,36 @@
+ 	if (w == NULL) {
+ 	    fprintf(stderr, "xfig: can't find \"viewmenu%s\"\n", name);
+ 	} else {
+-	    if (state)
+-		sprintf(name, "Don't show %s", label);
+-	    else
+-		sprintf(name, "Show %s", label);
+-	    if (state)
+-		sprintf(name, "* Show %s", label);
+-	    else
+-		sprintf(name, "  Show %s", label);
++	    sprintf(name, "Show %s", label);
+ 	    FirstArg(XtNlabel, name);
++	    if (state) {
++		if (menu_item_bitmap == None)
++		    menu_item_bitmap = XCreateBitmapFromData(XtDisplay(menu),
++				RootWindowOfScreen(XtScreen(menu)),
++				(char *)menu_item_bitmap_bits,
++				menu_item_bitmap_width,
++				menu_item_bitmap_height);
++		bitmap = menu_item_bitmap;
++	    } else
++		bitmap = None;
++	    NextArg(XtNleftBitmap, bitmap);
++	    NextArg(XtNleftMargin, menu_item_bitmap_width + 4);
+ 	    SetValues(w);
+ 	}
+     }
+ }
+ 
+-/* update the menu entries with or without an asterisk */
++/* update the menu entries with or without a checkmark,
++	and set or clear all Tip widgets */
+ 
+ void
+ refresh_view_menu()
+ {
++#ifdef XAW3D
++    int i;
++    register main_menu_info *menu;
++#endif
++
+     /* turn off Compose key LED */
+     setCompLED(0);
+ 
+@@ -1498,4 +1545,25 @@
+     refresh_view_menu_item(INFO_BAL_MSG, appres.showballoons);
+     refresh_view_menu_item(LINE_LEN_MSG, appres.showlengths);
+     refresh_view_menu_item(VRTX_NUM_MSG, appres.shownums);
++
++#ifdef XAW3D
++    if (appres.showballoons) {
++	XawTipEnable(name_panel, "Current filename");
++	for (i = 0; i < NUM_CMD_MENUS; ++i) {
++	    menu = &main_menus[i];
++	    XawTipEnable(menu->widget, menu->hint);
++	}
++    } else {
++	XawTipDisable(name_panel);
++	for (i = 0; i < NUM_CMD_MENUS; ++i) {
++	    menu = &main_menus[i];
++	    XawTipDisable(menu->widget);
++	}
++    }
++    update_indpanel(cur_indmask);
++    update_modepanel();
++    update_layerpanel();
++    update_mousepanel();
++    update_rulerpanel();
++#endif
+ }
Index: files/patch-w_indpanel.c
===================================================================
RCS file: files/patch-w_indpanel.c
diff -N files/patch-w_indpanel.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_indpanel.c	31 Aug 2005 08:01:36 -0000
@@ -0,0 +1,194 @@
+--- w_indpanel.c.orig	Sat Oct 19 01:05:41 2002
++++ w_indpanel.c	Wed Aug 31 09:49:42 2005
+@@ -60,9 +60,11 @@
+ 
+ #define MAX_ARROWSIZE 3 /* maximum value for cur_arrowsizeshown */
+ 
++#ifndef XAW3D
+ /* popup message over button when mouse enters it */
+ static void     ind_balloon_trigger();
+ static void     ind_unballoon();
++#endif
+ 
+ /***** value panel set translations *****/
+ static String set_translations =
+@@ -471,7 +473,7 @@
+    0x3f, 0x02, 0x7f, 0x02, 0xff, 0x02, 0xff, 0x03};
+ 
+ /* create a ind_sw_info struct for the update widget 
+-   so we can use the balloon routines */
++   so we can use the balloon routines or the Tip widget */
+ 
+ static ind_sw_info upd_sw_info, upd_set_sw_info, upd_clr_sw_info, upd_tog_sw_info;
+ 
+@@ -506,10 +508,12 @@
+     strcpy(upd_sw_info.line1,"Selects which settings are updated");
+     upd_sw_info.line2[0] = '\0';
+     upd_sw_info.sw_width = 70;  /* rough guess */
++#ifndef XAW3D
+     XtAddEventHandler(upd_ctrl, EnterWindowMask, False,
+ 			ind_balloon_trigger, (XtPointer) &upd_sw_info);
+     XtAddEventHandler(upd_ctrl, LeaveWindowMask, False,
+ 			ind_unballoon, (XtPointer) &upd_sw_info);
++#endif
+ 
+     FirstArg(XtNborderWidth, 0);
+     NextArg(XtNjustify, XtJustifyCenter);
+@@ -518,11 +522,12 @@
+     NextArg(XtNinternalHeight, 0);
+     upd_ctrl_lab = XtCreateManagedWidget("upd_ctrl_label", labelWidgetClass,
+ 			upd_ctrl, Args, ArgCount);
+-
++#ifndef XAW3D
+     XtAddEventHandler(upd_ctrl_lab, EnterWindowMask, False,
+ 			ind_balloon_trigger, (XtPointer) &upd_sw_info);
+     XtAddEventHandler(upd_ctrl_lab, LeaveWindowMask, False,
+ 			ind_unballoon, (XtPointer) &upd_sw_info);
++#endif
+ 
+     FirstArg(XtNdefaultDistance, 0);
+     NextArg(XtNborderWidth, 0);
+@@ -545,10 +550,12 @@
+     strcpy(upd_set_sw_info.line1,"Sets all update flags");
+     upd_set_sw_info.line2[0] = '\0';
+     upd_set_sw_info.sw_width = UPD_BITS+6;
++#ifndef XAW3D
+     XtAddEventHandler(set_upd, EnterWindowMask, False,
+ 			ind_balloon_trigger, (XtPointer) &upd_set_sw_info);
+     XtAddEventHandler(set_upd, LeaveWindowMask, False,
+ 			ind_unballoon, (XtPointer) &upd_set_sw_info);
++#endif
+ 
+     clr_upd = XtCreateManagedWidget("clr_upd", commandWidgetClass,
+ 			upd_ctrl_btns, Args, ArgCount);
+@@ -558,10 +565,12 @@
+     strcpy(upd_clr_sw_info.line1,"Clears all update flags");
+     upd_clr_sw_info.line2[0] = '\0';
+     upd_clr_sw_info.sw_width = UPD_BITS+6;
++#ifndef XAW3D
+     XtAddEventHandler(clr_upd, EnterWindowMask, False,
+ 			ind_balloon_trigger, (XtPointer) &upd_clr_sw_info);
+     XtAddEventHandler(clr_upd, LeaveWindowMask, False,
+ 			ind_unballoon, (XtPointer) &upd_clr_sw_info);
++#endif
+ 
+     tog_upd = XtCreateManagedWidget("tog_upd", commandWidgetClass,
+ 			upd_ctrl_btns, Args, ArgCount);
+@@ -571,10 +580,12 @@
+     strcpy(upd_tog_sw_info.line1,"Toggles all update flags");
+     upd_tog_sw_info.line2[0] = '\0';
+     upd_tog_sw_info.sw_width = UPD_BITS+6;
++#ifndef XAW3D
+     XtAddEventHandler(tog_upd, EnterWindowMask, False,
+ 			ind_balloon_trigger, (XtPointer) &upd_tog_sw_info);
+     XtAddEventHandler(tog_upd, LeaveWindowMask, False,
+ 			ind_unballoon, (XtPointer) &upd_tog_sw_info);
++#endif
+ 
+     /* start with all components affected by update */
+     cur_updatemask = I_UPDATEMASK;
+@@ -669,11 +680,13 @@
+ 	/* (callbacks pass same data for ANY button) */
+ 	XtAddEventHandler(sw->button, ButtonReleaseMask, False,
+ 			  sel_ind_but, (XtPointer) sw);
++#ifndef XAW3D
+ 	/* popup when mouse passes over button */
+ 	XtAddEventHandler(sw->button, EnterWindowMask, False,
+ 			  ind_balloon_trigger, (XtPointer) sw);
+ 	XtAddEventHandler(sw->button, LeaveWindowMask, False,
+ 			  ind_unballoon, (XtPointer) sw);
++#endif
+ 	XtOverrideTranslations(sw->button,
+ 			       XtParseTranslationTable(ind_translations));
+     }
+@@ -898,6 +911,7 @@
+ 
+ }
+ 
++#ifndef XAW3D
+ /* come here when the mouse passes over a button in the indicator panel */
+ 
+ static	Widget ind_balloon_popup = (Widget) 0;
+@@ -980,6 +994,7 @@
+ 	ind_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ generate_choice_pixmaps(isw)
+     ind_sw_info	   *isw;
+@@ -1002,13 +1017,62 @@
+ update_indpanel(mask)
+     unsigned long   mask;
+ {
++#ifdef XAW3D
++    char	msg[60];
++#endif
+     register int    i;
+     register ind_sw_info *isw;
+ 
++    /*
++     * We must test for the widgets, as this is called by
++     * w_cmdpanel.c:refresh_view_menu().
++     */
++
++#ifdef XAW3D
++    if (upd_ctrl)
++	if (appres.showballoons)
++	    XawTipEnable(upd_ctrl, upd_sw_info.line1);
++	else
++	    XawTipDisable(upd_ctrl);
++    if (upd_ctrl_lab)
++	if (appres.showballoons)
++	    XawTipEnable(upd_ctrl_lab, upd_sw_info.line1);
++	else
++	    XawTipDisable(upd_ctrl_lab);
++    if (set_upd)
++	if (appres.showballoons)
++	    XawTipEnable(set_upd, upd_set_sw_info.line1);
++	else
++	    XawTipDisable(set_upd);
++    if (clr_upd)
++	if (appres.showballoons)
++	    XawTipEnable(clr_upd, upd_clr_sw_info.line1);
++	else
++	    XawTipDisable(clr_upd);
++    if (tog_upd)
++	if (appres.showballoons)
++	    XawTipEnable(tog_upd, upd_tog_sw_info.line1);
++	else
++	    XawTipDisable(tog_upd);
++    for (isw = ind_switches, i = 0; i < NUM_IND_SW; isw++, i++) {
++	if (!isw->button)
++	    continue;
++	if (appres.showballoons) {
++	    sprintf(msg, "%s", isw->line1);
++	    if (strlen(isw->line2))
++		sprintf(msg + strlen(msg), " %s", isw->line2);
++	    XawTipEnable(isw->button, msg);
++	} else
++	    XawTipDisable(isw->button);
++    }
++#endif
++
+     /* only update current mask if user wants to see relevant ind buttons */
+     if (appres.ShowAllButtons)
+ 	return;
+ 
++    if (!ind_box)
++	return;
+     cur_indmask = mask;
+     XtUnmanageChild(ind_box);
+     for (isw = ind_switches, i = 0; i < NUM_IND_SW; isw++, i++) {
+@@ -1034,9 +1098,11 @@
+     XButtonEvent xbutton;
+     ind_sw_info *isw = (ind_sw_info *) closure;
+ 
++#ifndef XAW3D
+     /* since this command popups a window, destroy the balloon popup now. */
+     ind_unballoon((Widget) 0, (XtPointer) 0, (XEvent*) 0, (Boolean*) 0);
+     app_flush();
++#endif
+ 
+     xbutton = event->xbutton;
+ #ifdef WHEELMOUSE
Index: files/patch-w_layers.c
===================================================================
RCS file: files/patch-w_layers.c
diff -N files/patch-w_layers.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_layers.c	31 Aug 2005 08:01:59 -0000
@@ -0,0 +1,126 @@
+--- w_layers.c.orig	Tue Nov  5 20:38:18 2002
++++ w_layers.c	Wed Aug 31 09:49:42 2005
+@@ -63,9 +63,11 @@
+ static	XtCallbackProc	switch_layer_mode();
+ static	XtActionProc	layer_exposed();
+ 
++#ifndef XAW3D
+ /* popup message over command button when mouse enters it */
+ static void     layer_balloon_trigger();
+ static void     layer_unballoon();
++#endif
+ 
+ static  void	draw_layer_button();
+ static  void	draw_layer_buttons();
+@@ -144,11 +146,13 @@
+     below = all_active_but = XtCreateManagedWidget("all_active", commandWidgetClass,
+ 				layer_form, Args, ArgCount);
+     XtAddCallback(below, XtNcallback, (XtCallbackProc)all_active, (XtPointer) NULL);
++#ifndef XAW3D
+     /* popup when mouse passes over button */
+     XtAddEventHandler(below, EnterWindowMask, False,
+ 			  layer_balloon_trigger, (XtPointer) "Display all depths");
+     XtAddEventHandler(below, LeaveWindowMask, False,
+ 			  layer_unballoon, (XtPointer) NULL);
++#endif
+ 
+     FirstArg(XtNlabel, "All Off");
+     NextArg(XtNfromVert, below);
+@@ -159,11 +163,13 @@
+     below = all_inactive_but = XtCreateManagedWidget("all_inactive", commandWidgetClass,
+ 				layer_form, Args, ArgCount);
+     XtAddCallback(below, XtNcallback, (XtCallbackProc)all_inactive, (XtPointer) NULL);
++#ifndef XAW3D
+     /* popup when mouse passes over button */
+     XtAddEventHandler(below, EnterWindowMask, False,
+ 			  layer_balloon_trigger, (XtPointer) "Hide all depths");
+     XtAddEventHandler(below, LeaveWindowMask, False,
+ 			  layer_unballoon, (XtPointer) NULL);
++#endif
+ 
+     FirstArg(XtNlabel, "Toggle ");
+     NextArg(XtNfromVert, below);
+@@ -174,11 +180,13 @@
+     below = toggle_all_but = XtCreateManagedWidget("toggle_all", commandWidgetClass,
+ 				layer_form, Args, ArgCount);
+     XtAddCallback(below, XtNcallback, (XtCallbackProc)toggle_all, (XtPointer) NULL);
++#ifndef XAW3D
+     /* popup when mouse passes over button */
+     XtAddEventHandler(below, EnterWindowMask, False,
+ 			  layer_balloon_trigger, (XtPointer) "Toggle displayed/hidden depths");
+     XtAddEventHandler(below, LeaveWindowMask, False,
+ 			  layer_unballoon, (XtPointer) NULL);
++#endif
+ 
+     /* radio buttons to switch between graying out inactive layers or blanking altogether */
+ 
+@@ -286,12 +294,13 @@
+     NextArg(XtNright, XtChainRight);
+     layer_viewp = XtCreateManagedWidget("layer_viewp", viewportWidgetClass, 
+ 			layer_viewform, Args, ArgCount);
++#ifndef XAW3D
+     /* popup when mouse passes over button */
+-
+     XtAddEventHandler(layer_viewp, EnterWindowMask, False,
+ 			  layer_balloon_trigger, (XtPointer) "Display or hide any depth");
+     XtAddEventHandler(layer_viewp, LeaveWindowMask, False,
+ 			  layer_unballoon, (XtPointer) NULL);
++#endif
+     XtAddEventHandler(layer_viewp, StructureNotifyMask, False,
+ 			  update_layers, (XtPointer) NULL);
+ 
+@@ -321,6 +330,9 @@
+     XtOverrideTranslations(layer_canvas,
+ 			   XtParseTranslationTable(layer_translations));
+ 
++#ifdef XAW3D
++    update_layerpanel();
++#endif
+ }
+ 
+ /* now that the mouse function and indicator panels have been sized
+@@ -728,6 +740,36 @@
+ 	return False;
+ }
+ 
++#ifdef XAW3D
++update_layerpanel()
++{
++    /*
++     * We must test for the widgets, as this is called by
++     * w_cmdpanel.c:refresh_view_menu().
++     */
++
++    if (all_active_but)
++	if (appres.showballoons)
++	    XawTipEnable(all_active_but, "Display all depths");
++	else
++	    XawTipDisable(all_active_but);
++    if (all_inactive_but)
++	if (appres.showballoons)
++	    XawTipEnable(all_inactive_but, "Hide all depths");
++	else
++	    XawTipDisable(all_inactive_but);
++    if (toggle_all_but)
++	if (appres.showballoons)
++	    XawTipEnable(toggle_all_but, "Toggle displayed/hidden depths");
++	else
++	    XawTipDisable(toggle_all_but);
++    if (layer_viewp)
++	if (appres.showballoons)
++	    XawTipEnable(layer_viewp, "Display or hide any depth");
++	else
++	    XawTipDisable(layer_viewp);
++}
++#else
+ static	Widget layer_balloon_popup = (Widget) 0;
+ static	XtIntervalId balloon_id = (XtIntervalId) 0;
+ static	Widget balloon_w;
+@@ -831,6 +873,7 @@
+ 	layer_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ /* map/unmap the depth manager on the right side */
+ 
Index: files/patch-w_library.c
===================================================================
RCS file: files/patch-w_library.c
diff -N files/patch-w_library.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_library.c	31 Aug 2005 08:02:27 -0000
@@ -0,0 +1,151 @@
+--- w_library.c.orig	Mon Nov 11 18:58:48 2002
++++ w_library.c	Wed Aug 31 09:49:42 2005
+@@ -40,7 +40,9 @@
+ #include "w_setup.h"
+ #include "w_icons.h"
+ #include "w_zoom.h"
++#ifndef XAW3D
+ #include "SmeCascade.h"
++#endif
+ 
+ #ifdef HAVE_NO_DIRENT
+ #include <sys/dir.h>
+@@ -73,7 +75,10 @@
+ static Widget	library_popup=0;
+ static Widget	put_cur_obj;
+ static Widget	library_form, title;
+-static Widget	lib_obj_label, library_label, library_menu, library_menu_button;
++static Widget	lib_obj_label, library_label, library_menu_button;
++#ifndef XAW3D
++static Widget	library_menu;
++#endif
+ static Widget	sel_view_button;
+ static Widget	object_form;
+ static Widget	icon_form, icon_viewport, icon_box;
+@@ -272,8 +277,10 @@
+     Dimension	    lwidth, lheight;
+     Dimension	    lawidth, laheight;
+ 
++#ifndef XAW3D
+     /* pop down the menu */
+     XtPopdown(library_menu);
++#endif
+ 
+     /* if already in the middle of loading a library, return */
+     if (loading_library) {
+@@ -629,8 +636,8 @@
+ 					    menuButtonWidgetClass,
+ 					    library_form, Args, ArgCount);
+     /* make the menu and attach it to the button */
+-    (void) make_library_menu(library_menu_button, 
+-    					library_rec, num_library_names);
++    (void) make_library_menu(library_menu_button, "menu",
++    			library_rec, num_library_names);
+ 
+     if (!actions_added) {
+ 	XtAppAddActions(tool_app, library_actions, XtNumber(library_actions));
+@@ -1000,20 +1007,27 @@
+     XtInstallAccelerators(library_form, cancel);
+ }
+ 
++#ifndef XAW3D
+ extern void popdown_subs();
++#endif
+ 
+ static Widget
+-make_library_menu(parent, librec, num)
++make_library_menu(parent, name, librec, num)
+     Widget	     parent;
++    char	    *name;
+     struct lib_rec  *librec[];
+     int		     num;
+ {
+-    Widget	     menu, entry, submenu;
+-    char	     name[200];
++    Widget	     menu, entry;
++#ifndef XAW3D
++    Widget	     submenu;
++#endif
++    char	     menu_name[200];
+     int		     i;
+ 
+-    menu = XtCreatePopupShell("menu", simpleMenuWidgetClass, 
+-				parent, NULL, ZERO);
++    menu = XtCreatePopupShell(name, simpleMenuWidgetClass, 
++			      parent, NULL, ZERO);
++#ifndef XAW3D
+     /* if this is the toplevel menu, add a callback to popdown any submenus if
+        the user releases the pointer button outside a submenu */
+     if (XtIsSubclass(parent, menuButtonWidgetClass)) {
+@@ -1021,29 +1035,54 @@
+ 	library_menu = menu;
+ 	XtAddCallback(menu, XtNpopdownCallback, popdown_subs, (XtPointer) NULL);
+     }
+-    
++#endif
++
+     for (i = 0; i < num; i++) {
+-	/* add one blank in front and after name to allow space for diamond and/or arrow */
+-	sprintf(name," %s ",librec[i]->name);
++#ifndef XAW3D
++	sprintf(menu_name, " %s ", librec[i]->name);
++#else
++	sprintf(menu_name, "%sMenu", librec[i]->name);
++#endif
+ 	if (librec[i]->nsubs) {
+-	    submenu = make_library_menu(menu, librec[i]->subdirs, 
+-	    					librec[i]->nsubs);
++#ifndef XAW3D
++	    submenu = make_library_menu(menu, menu_name, librec[i]->subdirs,
++					librec[i]->nsubs);
+ 	    FirstArg(XtNsubMenu, submenu);
+-	    NextArg(XtNrightBitmap, menu_cascade_arrow); /* use arrow to indicate cascade */
+-	    NextArg(XtNrightMargin, 9);			/* room to the right of the arrow */
++	    NextArg(XtNrightMargin, 9);
++#else
++	    FirstArg(XtNmenuName, XtNewString(menu_name));
++#endif
++	    NextArg(XtNrightBitmap, menu_cascade_arrow);
+ 	    if (librec[i]->figs_at_top) {
+-		NextArg(XtNselectCascade, True);	/* if there are fig files, make the */
+-		NextArg(XtNleftBitmap, diamond_pixmap);	/* cascade selectable and add a bitmap */
+-	    }						/* in the left bitmap of the BSB */
+-	    entry = XtCreateManagedWidget(name, smeCascadeObjectClass, menu, 
+-				Args, ArgCount);
+-	    /* if there are fig files at this level, make the dir name selectable */
++#ifndef XAW3D
++		NextArg(XtNselectCascade, True);
++#endif
++		NextArg(XtNleftBitmap, diamond_pixmap);
++	    }
++#ifndef XAW3D
++	    entry = XtCreateManagedWidget(menu_name, smeCascadeObjectClass,
++					  menu, Args, ArgCount);
++#else
++	    entry = XtCreateManagedWidget(librec[i]->name, smeBSBObjectClass,
++					  menu, Args, ArgCount);
++#endif
+ 	    if (librec[i]->figs_at_top)
+-		XtAddCallback(entry, XtNcallback, load_library, (XtPointer) librec[i]);
++		XtAddCallback(entry, XtNcallback, load_library,
++			      (XtPointer) librec[i]);
++#ifdef XAW3D
++	    (void) make_library_menu(menu, menu_name, librec[i]->subdirs,
++				     librec[i]->nsubs);
++#endif
+ 	} else {
+-	    entry = XtCreateManagedWidget(name, smeCascadeObjectClass, menu, 
+-				NULL, ZERO);
+-	    XtAddCallback(entry, XtNcallback, load_library, (XtPointer) librec[i]);
++#ifndef XAW3D
++	    entry = XtCreateManagedWidget(menu_name, smeCascadeObjectClass,
++					  menu, NULL, ZERO);
++#else
++	    entry = XtCreateManagedWidget(librec[i]->name, smeBSBObjectClass,
++					  menu, NULL, ZERO);
++#endif
++	    XtAddCallback(entry, XtNcallback, load_library,
++			  (XtPointer) librec[i]);
+ 	  }
+     }
+     return menu;
Index: files/patch-w_modepanel.c
===================================================================
RCS file: files/patch-w_modepanel.c
diff -N files/patch-w_modepanel.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_modepanel.c	31 Aug 2005 08:02:48 -0000
@@ -0,0 +1,143 @@
+--- w_modepanel.c.orig	Mon Sep 16 23:11:35 2002
++++ w_modepanel.c	Wed Aug 31 09:49:42 2005
+@@ -132,9 +132,11 @@
+ /* button selection event handler */
+ static void     sel_mode_but();
+ 
++#ifndef XAW3D
+ /* popup message over button when mouse enters it */
+ static void     mode_balloon_trigger();
+ static void     mode_unballoon();
++#endif
+ 
+ /* popdown message */
+ static void     turn_on();
+@@ -414,14 +416,21 @@
+ 	/* left button changes mode */
+ 	XtAddEventHandler(sw->widget, ButtonPressMask, False,
+ 			  sel_mode_but, (XtPointer) sw);
++#ifndef XAW3D
+ 	/* popup when mouse passes over button */
+ 	XtAddEventHandler(sw->widget, EnterWindowMask, False,
+ 			  mode_balloon_trigger, (XtPointer) sw);
+ 	XtAddEventHandler(sw->widget, LeaveWindowMask, False,
+ 			  mode_unballoon, (XtPointer) sw);
++#endif
+ 	XtOverrideTranslations(sw->widget,
+ 			       XtParseTranslationTable(mode_translations));
+     }
++
++#ifdef XAW3D
++    update_modepanel();
++#endif
++
+     return;
+ }
+ 
+@@ -467,6 +476,28 @@
+     SetValues(mode_panel);
+ }
+ 
++#ifdef XAW3D
++update_modepanel()
++{
++    register int    i;
++    register mode_sw_info *sw;
++
++    /*
++     * We must test for the widgets, as this is called by
++     * w_cmdpanel.c:refresh_view_menu().
++     */
++
++    for (i = 0; i < NUM_MODE_SW; ++i) {
++	sw = &mode_switches[i];
++	if (!sw->widget)
++	    continue;
++	if (appres.showballoons) {
++	    XawTipEnable(sw->widget, sw->modemsg);
++	} else
++	    XawTipDisable(sw->widget);
++    }
++}
++#else
+ /* come here when the mouse passes over a button in the mode panel */
+ 
+ static	Widget mode_balloon_popup = (Widget) 0;
+@@ -557,6 +588,7 @@
+ 	mode_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ /* come here when a button is pressed in the mode panel */
+ 
+@@ -585,45 +617,46 @@
+     else if (highlighting)
+ 	erase_objecthighlight();
+ 
++#ifndef XAW3D
+     /* if this command popups a window, destroy the balloon popup now. See the
+        note above about this above the command panel definition. */
+     if (msw->popup) {
+ 	mode_unballoon((Widget) 0, (XtPointer) 0, (XEvent*) 0, (Boolean*) 0);
+     }
+     app_flush();
++#endif
+ 
+     if (xbutton.button == Button1) {	/* left button */
+ 	turn_off_current();
+ 	turn_on(msw);
+-	if (msw->mode == F_UPDATE) {	/* map the set/clr/toggle button for update */
++
++	update_indpanel(0);	/* first remove ind buttons */
++	XtUnmanageChild(ind_panel);
++	if (msw->mode != F_UPDATE)
++	    XtUnmanageChild(upd_ctrl);
++	FirstArg(XtNwidth, 1);	/* force a resize to update scrollbar */
++	SetValues(ind_panel);
++	if (msw->mode == F_UPDATE) {
+ 	    if (cur_mode != F_UPDATE) {
+-		update_indpanel(0);	/* first remove ind buttons */
+-		XtUnmanageChild(ind_panel);
++		/* map the set/clr/toggle button for update */
+ 		XtManageChild(upd_ctrl);
+-		/* get the width of the update control panel */
+-		/* now put the ind_panel to our right */
+-		FirstArg(XtNfromHoriz, upd_ctrl);
+-		NextArg(XtNwidth, INDPANEL_WD-UPD_CTRL_WD-2*INTERNAL_BW); /* resize it */
+-		SetValues(ind_panel);
+-		XtManageChild(ind_panel);
+-		update_indpanel(msw->indmask);	/* now manage the relevant buttons */
+ 	    }
+-	} else { 	/* turn off the update boxes if not in update mode */
+-	    if (cur_mode == F_UPDATE) {	/* if previous mode is update and current */
+-		update_indpanel(0);	/* is not, first remove ind buttons */
++	    /* set the adjacent widget and width */
++	    FirstArg(XtNfromHoriz, upd_ctrl);
++	    NextArg(XtNwidth, INDPANEL_WD-UPD_CTRL_WD-2*INTERNAL_BW);
++	} else {
++	    if (cur_mode == F_UPDATE) {
++		/* unmap the set/clr/toggle button for update */
+ 		unmanage_update_buts();
+-		XtUnmanageChild(ind_panel);
+-		XtUnmanageChild(upd_ctrl);
+-		/* now put the ind_panel to the right of the canvas */
+-		FirstArg(XtNfromHoriz, NULL);
+-		NextArg(XtNwidth, INDPANEL_WD);	/* resize it */
+-		SetValues(ind_panel);
+-		XtManageChild(ind_panel);
+-		update_indpanel(msw->indmask);	/* now manage the relevant buttons */
+-	    } else {
+-		update_indpanel(msw->indmask);	/* just update indicator buttons */
+ 	    }
++	    /* clear the adjacent widget and set width */
++	    FirstArg(XtNfromHoriz, NULL);
++	    NextArg(XtNwidth, INDPANEL_WD);
+ 	}
++	SetValues(ind_panel);
++	XtManageChild(ind_panel);
++	update_indpanel(msw->indmask);	/* now manage the relevant buttons */
++
+ 	put_msg(msw->modemsg);
+ 	if ((cur_mode == F_GLUE || cur_mode == F_BREAK) &&
+ 	    msw->mode != F_GLUE && msw->mode != F_BREAK) {
Index: files/patch-w_mousefun.c
===================================================================
RCS file: files/patch-w_mousefun.c
diff -N files/patch-w_mousefun.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_mousefun.c	31 Aug 2005 08:03:06 -0000
@@ -0,0 +1,56 @@
+--- w_mousefun.c.orig	Wed Mar 27 01:22:48 2002
++++ w_mousefun.c	Wed Aug 31 09:49:42 2005
+@@ -54,9 +54,11 @@
+ static Pixmap	mousefun_pm;
+ static Pixmap	keybd_pm;
+ 
++#ifndef XAW3D
+ /* popup message over button when mouse enters it */
+ static void     mouse_balloon_trigger();
+ static void     mouse_unballoon();
++#endif
+ 
+ void
+ init_mousefun(tool)
+@@ -81,11 +83,15 @@
+ 
+     mousefun = XtCreateManagedWidget("mouse_panel", labelWidgetClass,
+ 				     tool, Args, ArgCount);
++#ifdef XAW3D
++    update_mousepanel();
++#else
+     /* popup when mouse passes over button */
+     XtAddEventHandler(mousefun, EnterWindowMask, False,
+ 		      mouse_balloon_trigger, (XtPointer) mousefun);
+     XtAddEventHandler(mousefun, LeaveWindowMask, False,
+ 		      mouse_unballoon, (XtPointer) mousefun);
++#endif
+ }
+ 
+ /* widgets are realized and windows exist at this point */
+@@ -105,6 +111,17 @@
+     set_mousefun("", "", "", "", "", "");
+ }
+ 
++#ifdef XAW3D
++update_mousepanel()
++{
++    if (mousefun)
++	if (appres.showballoons)
++	    XawTipEnable(mousefun,
++			 "Shows which mouse buttons\nare active in each mode");
++	else
++	    XawTipDisable(mousefun);
++}
++#else
+ /* come here when the mouse passes over a button in the mouse indicator panel */
+ 
+ static	Widget mouse_balloon_popup = (Widget) 0;
+@@ -184,6 +201,7 @@
+ 	mouse_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ static void
+ reset_mousefun()
Index: files/patch-w_rulers.c
===================================================================
RCS file: files/patch-w_rulers.c
diff -N files/patch-w_rulers.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_rulers.c	31 Aug 2005 08:03:29 -0000
@@ -0,0 +1,69 @@
+--- w_rulers.c.orig	Sat Oct 12 01:13:53 2002
++++ w_rulers.c	Wed Aug 31 09:49:42 2005
+@@ -117,9 +117,11 @@
+ static void	sideruler_selected();
+ static void	sideruler_exposed();
+ 
++#ifndef XAW3D
+ /* popup message over button when mouse enters it */
+ static void     unit_balloon_trigger();
+ static void     unit_unballoon();
++#endif
+ 
+ /* turn these into macros so we can use them in
+    struct initialization */
+@@ -356,17 +358,46 @@
+     unitbox_sw = XtCreateWidget("unitbox", labelWidgetClass, tool,
+ 				Args, ArgCount);
+     XtAppAddActions(tool_app, unitbox_actions, XtNumber(unitbox_actions));
++#ifndef XAW3D
+     /* popup when mouse passes over button */
+     XtAddEventHandler(unitbox_sw, EnterWindowMask, False,
+ 		      unit_balloon_trigger, (XtPointer) unitbox_sw);
+     XtAddEventHandler(unitbox_sw, LeaveWindowMask, False,
+ 		      unit_unballoon, (XtPointer) unitbox_sw);
++#endif
+     XtOverrideTranslations(unitbox_sw,
+ 			   XtParseTranslationTable(unitbox_translations));
++
++#ifdef XAW3D
++    update_rulerpanel();
++#endif
+ }
+ 
+ static Widget	unit_popup, unit_panel, cancel, set, beside, below, label;
+ 
++#ifdef XAW3D
++update_rulerpanel()
++{
++    char msg[80];
++
++    strcpy(msg, "Pan to 0,0        ");
++    if (appres.flipvisualhints)
++	sprintf(msg + strlen(msg), "(right button)");
++    else
++	sprintf(msg + strlen(msg), "(left button)");
++    sprintf(msg + strlen(msg), "\nSet Units/Scale   ");
++    if (appres.flipvisualhints)
++	sprintf(msg + strlen(msg), "(left button)");
++    else
++	sprintf(msg + strlen(msg), "(right button)");
++
++    if (unitbox_sw)
++	if (appres.showballoons)
++	    XawTipEnable(unitbox_sw, msg);
++	else
++	    XawTipDisable(unitbox_sw);
++}
++#else
+ /* come here when the mouse passes over the unit box */
+ 
+ static	Widget unit_balloon_popup = (Widget) 0;
+@@ -474,6 +505,7 @@
+ 	unit_balloon_popup = (Widget) 0;
+     }
+ }
++#endif
+ 
+ /* handle unit/scale settings */
+ 
Index: files/patch-w_util.c
===================================================================
RCS file: files/patch-w_util.c
diff -N files/patch-w_util.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-w_util.c	31 Aug 2005 08:03:51 -0000
@@ -0,0 +1,19 @@
+--- w_util.c.orig	Wed Dec 11 23:04:04 2002
++++ w_util.c	Wed Aug 31 09:49:42 2005
+@@ -352,16 +352,6 @@
+  * (use -1 if no line desired)
+  */
+ 
+-#include "SmeCascade.h"
+-
+-void
+-test_callback(w, value, garbage)
+-     Widget	    w;
+-     XtPointer	    value, garbage;
+-{
+-  fprintf(stderr,"%d chosen\n",(int) value);
+-}
+-
+ Widget
+ make_pulldown_menu(entries, nent, divide_line, divide_message, parent, callback)
+     char	   *entries[];

--Boundary-00=_gjWFDK05w69pzeA--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508311022.56056.dejan.lesjak>