/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
Thomas E. Dickey (beginning revision 1.27 in 1996).
-$Id: ncurses.c,v 1.288 2007/05/12 23:04:11 tom Exp $
+$Id: ncurses.c,v 1.301 2008/02/09 17:19:55 tom Exp $
***************************************************************************/
#define NCURSES_CONST_PARAM const void
#ifdef TRACE
-static unsigned save_trace = TRACE_ORDINARY | TRACE_CALLS;
+static unsigned save_trace = TRACE_ORDINARY | TRACE_ICALLS | TRACE_CALLS;
extern unsigned _nc_tracing;
#endif
winstack[level].frame = box_win;
}
+#if USE_SOFTKEYS && (NCURSES_VERSION_PATCH < 20071229) && NCURSES_EXT_FUNCS
+static void
+slk_repaint(void)
+{
+ /* this chunk is now done in resize_term() */
+ slk_touch();
+ slk_clear();
+ slk_noutrefresh();
+}
+
+#else
+#define slk_repaint() /* nothing */
+#endif
+
/*
* For wgetch_test(), we create pairs of windows - one for a box, one for text.
* Resize both and paint the box in the parent.
touchwin(stdscr);
wnoutrefresh(stdscr);
-#if USE_SOFTKEYS
- /* FIXME: this chunk should be done in resizeterm() */
- slk_touch();
- slk_clear();
- slk_noutrefresh();
-#endif
+ slk_repaint();
for (n = 0; n < level; ++n) {
wresize(winstack[n].frame, high, wide);
getch_test(void)
{
int delay = begin_getch_test();
+
+ slk_restore();
wgetch_test(0, stdscr, delay);
forget_boxes();
finish_getch_test();
#if USE_WIDEC_SUPPORT
/*
- * For wgetch_test(), we create pairs of windows - one for a box, one for text.
+ * For wget_wch_test(), we create pairs of windows - one for a box, one for text.
* Resize both and paint the box in the parent.
*/
-#ifdef KEY_RESIZE
+#if defined(KEY_RESIZE) && HAVE_WRESIZE
static void
resize_wide_boxes(unsigned level, WINDOW *win)
{
touchwin(stdscr);
wnoutrefresh(stdscr);
-#if USE_SOFTKEYS
- /* FIXME: this chunk should be done in resizeterm() */
- slk_touch();
- slk_clear();
- slk_noutrefresh();
-#endif
+ slk_repaint();
for (n = 0; n < level; ++n) {
wresize(winstack[n].frame, high, wide);
} else
#endif /* NCURSES_MOUSE_VERSION */
if (code == KEY_CODE_YES) {
-#ifdef KEY_RESIZE
+#if defined(KEY_RESIZE) && HAVE_WRESIZE
if (c == KEY_RESIZE) {
resize_wide_boxes(level, win);
}
get_wch_test(void)
{
int delay = begin_getch_test();
+
+ slk_restore();
wget_wch_test(0, stdscr, delay);
forget_boxes();
finish_getch_test();
}
/* *INDENT-OFF* */
static const struct {
- attr_t attr;
+ chtype attr;
NCURSES_CONST char * name;
} attrs_to_test[] = {
{ A_STANDOUT, "STANDOUT" },
}
break;
#endif
+#if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE
+ case KEY_RESIZE:
+ wnoutrefresh(stdscr);
+ break;
+#endif
default:
beep();
}
- } while
- ((c = Getchar()) != EOF);
+ } while (!isQuit(c = Getchar()));
done:
slk_clear();
call_slk_color(fg, bg);
}
break;
-
+#if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE
+ case KEY_RESIZE:
+ wnoutrefresh(stdscr);
+ break;
+#endif
default:
beep();
}
- } while
- ((c = Getchar()) != EOF);
+ } while (!isQuit(c = Getchar()));
done:
slk_clear();
#if USE_WIDEC_SUPPORT
static cchar_t *
-merge_wide_attr(cchar_t *dst, cchar_t *src, attr_t attr, short pair)
+merge_wide_attr(cchar_t *dst, const cchar_t *src, attr_t attr, short pair)
{
int count = getcchar(src, NULL, NULL, NULL, 0);
wchar_t *wch = 0;
}
/* *INDENT-OFF* */
static struct {
- attr_t attr;
+ chtype attr;
const char *name;
} attrs_to_cycle[] = {
{ A_NORMAL, "normal" },
WINDOW *wind;
};
-#if defined(NCURSES_VERSION) && !NCURSES_OPAQUE
-#define keypad_active(win) (win)->_use_keypad
-#define scroll_active(win) (win)->_scroll
+#if defined(NCURSES_VERSION)
+#if (NCURSES_VERSION_PATCH < 20070331) && NCURSES_EXT_FUNCS
+#define is_keypad(win) (win)->_use_keypad
+#define is_scrollok(win) (win)->_scroll
+#elif !defined(is_keypad)
+#define is_keypad(win) FALSE
+#define is_scrollok(win) FALSE
+#endif
#else
-#define keypad_active(win) FALSE
-#define scroll_active(win) FALSE
+#define is_keypad(win) FALSE
+#define is_scrollok(win) FALSE
#endif
/* We need to know if these flags are actually set, so don't look in FRAME.
{
WINDOW *win = (curp ? curp->wind : stdscr);
(void) win;
- return keypad_active(win);
+ return is_keypad(win);
}
static bool
{
WINDOW *win = (curp ? curp->wind : stdscr);
(void) win;
- return scroll_active(win);
+ return is_scrollok(win);
}
static void
acs_and_scroll(void)
/* Demonstrate windows */
{
- int c, i;
+ int c;
FRAME *current = (FRAME *) 0, *neww;
WINDOW *usescr = stdscr;
#if HAVE_PUTWIN && HAVE_GETWIN
case CTRL('X'): /* resize window */
if (current) {
pair *tmp, ul, lr;
- int mx, my;
+ int i, mx, my;
move(0, 0);
clrtoeol();
}
}
-static const char *animals[] =
+static CONST_MENUS char *animals[] =
{
"Lions",
"Tigers",
MENU *m;
ITEM *items[SIZEOF(animals)];
ITEM **ip = items;
- const char **ap;
+ CONST_MENUS char **ap;
int mrows, mcols, c;
WINDOW *menuwin;
int finished = 0, c;
unsigned n = 0;
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0);
+#endif
+
move(18, 0);
addstr("Defined edit/traversal keys: ^Q/ESC- exit form\n");
addstr("^N -- go to next field ^P -- go to previous field\n");
free_fieldtype(fty_passwd);
noraw();
nl();
+
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0);
+#endif
}
#endif /* USE_LIBFORM */
break;
#endif
-#if USE_WIDEC_SUPPORT
+#if USE_WIDEC_SUPPORT && USE_LIBPANEL
case 'O':
demo_panels(init_wide_panel, fill_wide_panel);
break;
wbkgd(win, A_REVERSE);
werase(win);
wmove(win, 0, 0);
- wprintw(win, "footer: %d columns", cols);
+ wprintw(win, "footer: window %p, %d columns", win, cols);
wnoutrefresh(win);
return OK;
}
wbkgd(win, A_REVERSE);
werase(win);
wmove(win, 0, 0);
- wprintw(win, "header: %d columns", cols);
+ wprintw(win, "header: window %p, %d columns", win, cols);
wnoutrefresh(win);
return OK;
}
setlocale(LC_ALL, "");
- while ((c = getopt(argc, argv, "a:de:fhmp:s:t:")) != EOF) {
+ while ((c = getopt(argc, argv, "a:de:fhmp:s:t:")) != -1) {
switch (c) {
#ifdef NCURSES_VERSION
case 'a':