[comp.windows.open-look] XView Notice bug ?

hari@matrix.UUCP (T hariharan) (04/10/91)

Read further only if you have "guide" installed.
Otherwise you can ignore this.

Store the rest of this message in a file and put it through "sh", i.e.:

mkdir /tmp/xvbug
cd /tmp/xvbug
# save the rest of this message in /tmp/xvbug/xvbug.shar
sh xvbug.shar

Then read README for further info.

# ---------------- Save from next line ------------------
echo Makefile 1>&2
cat > Makefile <<'End of Makefile'
# This file was generated by `gxv' from `fname.G'.

# Parameters.

PROGRAM = fname
SOURCES.c = fname_main.c
SOURCES.h = 
SOURCES.G = fname.G
STUBS.G = fname.G

# Derived parameters.

SOURCES = \
	$(SOURCES.G) \
	$(SOURCES.h) \
	$(SOURCES.l) \
	$(SOURCES.y) \
	$(SOURCES.c)

TARGETS.c = \
	$(SOURCES.G:%.G=%_ui.c)
#	$(STUBS.G:%.G=%_stubs.c)

TARGETS.h = \
	$(SOURCES.G:%.G=%_ui.h) \
	$(SOURCES.l:%.l=%.h) \
	$(SOURCES.y:%.y=%.h)

TARGETS.other = \
	$(SOURCES.G:%.G=%.info)

TARGETS = \
	$(TARGETS.other) \
	$(TARGETS.h) \
	$(TARGETS.c)

OBJECTS = \
	$(SOURCES.c:%.c=%.o) \
	$(TARGETS.c:%.c=%.o)

# Compiler flags.

CFLAGS += -g
CPPFLAGS += -I$(GUIDEHOME)/include -I$(OPENWINHOME)/include -DMAIN
LDFLAGS += -L$(GUIDEHOME)/lib -L$(OPENWINHOME)/lib
LDLIBS += -lguide -lguidexv -lxview -lolgx -lX

# Standard targets.

all:	 $(TARGETS.other) $(PROGRAM)
objects: $(SOURCES.c) $(TARGETS.c) $(TARGETS.h) $(OBJECTS)
sources: $(SOURCES)
targets: $(SOURCES) $(TARGETS)

$(PROGRAM): $(SOURCES.c) $(TARGETS.c) $(TARGETS.h) $(OBJECTS)
	$(LINK.c) -o $(PROGRAM) $(OBJECTS) $(LDLIBS)

# Targets to be used by a certain CASE tool.

stest: $(SOURCES.c) $(TARGETS.c) $(TARGETS.h) $(OBJECTS)
	#load $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) \
		-o $(PROGRAM) $(SOURCES.c) $(TARGETS.c) $(LDLIBS)

%_ui.c + %_ui.h + %_stubs.c + %.info: %.G
	$(GUIDEHOME)/bin/gxv $*

clean:
	$(RM) $(TARGETS) $(OBJECTS) $(SOURCES.G:%.G=%_stubs.c) core
End of Makefile
echo README 1>&2
cat > README <<'End of README'

1. run "make" to build "fname"

   NOTE: you need "guide" and the XView libraries for this.

2. run "fname". Type anything into the text field and hit <Return>.
   You'll find that the alert frame comes up and disappears immediately.

   Now, hit <LineFeed> or <Tab> instead of <Return>. The alert frame
   stays up until you hit <Return> or click the left mouse button.

   NOTE: Sometimes, the alert frame stays up even if you hit <Return>

This does seem to be a XView bug. However, "guide" handles this properly.
If you try to Load a non-existent file (hitting <Return> after typing the
filename), the alert frame does stay up. Looks like I'm missing something
here.

Please email your responses. I'll summarize.

Thanks,
Hari
uunet!matrix!hari
Matrix Computer Systems
1 Tara Boulevard
Nashua   NH   03062
(603) 888 7790
End of README
echo fname.G 1>&2
cat > fname.G <<'End of fname.G'
;GIL-2
(
(
	:type                   :base-window
	:name                   window1
	:owner                  nil
	:width                  400
	:height                 79
	:background-color       ""
	:foreground-color       ""
	:label                  "Base Window"
	:label-type             :string
	:mapped                 t
	:show-footer            t
	:resizable              t
	:icon-file              ""
	:icon-mask-file         ""
	:event-handler          nil
	:events                 ()
	:user-data              ()
)
(
	:type                   :control-area
	:name                   controls1
	:owner                  window1
	:help                   ""
	:x                      0
	:y                      0
	:width                  400
	:height                 79
	:background-color       ""
	:foreground-color       ""
	:show-border            nil
	:menu                   nil
	:event-handler          nil
	:events                 ()
	:user-data              ()
)
(
	:type                   :text-field
	:name                   textfield
	:owner                  controls1
	:help                   ""
	:x                      80
	:y                      32
	:width                  235
	:height                 15
	:foreground-color       ""
	:text-type              :alphanumeric
	:label                  "Filename:"
	:label-type             :string
	:value-x                155
	:value-y                32
	:layout-type            :horizontal
	:value-length           20
	:stored-length          80
	:read-only              nil
	:notify-handler         load_file_proc
	:event-handler          nil
	:events                 ()
	:user-data              ()
)
)
End of fname.G
echo fname_main.c 1>&2
cat > fname_main.c <<'End of fname_main.c'
/*
 * fname_stubs.c - Notify and event callback function stubs.
 * This file was generated by `gxv' from `fname.G'.
 * DO NOT EDIT BY HAND.
 */

#include <stdio.h>
#include <sys/param.h>
#include <sys/types.h>
#include <xview/xview.h>
#include <xview/panel.h>
#include <xview/textsw.h>
#include <xview/xv_xrect.h>
#include <xview/notice.h>
#include <gdd.h>
#include "fname_ui.h"

#ifdef MAIN

/*
 * Instance XV_KEY_DATA key.  An instance is a set of related
 * user interface objects.  A pointer to an object's instance
 * is stored under this key in every object.  This must be a
 * global variable.
 */
Attr_attribute	INSTANCE;

void
main(argc, argv)
	int		argc;
	char		**argv;
{
	fname_window1_objects	*fname_window1;
	
	/*
	 * Initialize XView.
	 */
	xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0);
	INSTANCE = xv_unique_key();
	
	/*
	 * Initialize user interface components.
	 */
	fname_window1 = fname_window1_objects_initialize(NULL, NULL);
	
	/*
	 * Turn control over to XView.
	 */
	xv_main_loop(fname_window1->window1);
	exit(0);
}

#endif

Panel_setting
load_file_proc(item, event)
	Panel_item item;
	Event *event;
{
	fname_window1_objects	*ip = (fname_window1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

	warn(ip->window1, event, "File does not exist",
	     (char *) xv_get(ip->textfield, PANEL_VALUE), NULL);
	return (PANEL_NONE);		/* ignore input character */
}
	
warn(frame, event, msg1, msg2)
	Event *event;
	Xv_opaque frame;
	char *msg1, *msg2;
{
#define MAXLINES 2 				/* allow 2 lines max */
	int	status, nmsgs;
	int xpos, ypos;
	char *errmsg;				/* 1st line of err msg */
	char *msg_array[MAXLINES+1];
	register char **cpp;
	Rect rect;

	msg_array[0] = msg1;
	msg_array[1] = msg2;
	msg_array[2] = NULL;

	frame_get_rect(frame, &rect);
	xpos = rect.r_width / 2;
	ypos = rect.r_height / 2;
	(void) notice_prompt(frame,
		event,
		NOTICE_FOCUS_XY, xpos, ypos,
		NOTICE_MESSAGE_STRINGS_ARRAY_PTR, msg_array,
		NOTICE_BUTTON_YES,	"Continue",
		0);
}
End of fname_main.c