Tue Sep 14 16:41:08 PDT 1999 Michael Jennings <mej@eterm.org>
Worked around a XF86 3.9.16 (perhaps Xinerama) problem. Also added some XIM changes from Sung-Hyun Nam <namsh@lgic.co.kr> to handle buffer overflows. SVN revision: 274
This commit is contained in:
parent
7da9c03c0c
commit
5ee36e0fd6
|
@ -2386,3 +2386,10 @@ Mon Sep 13 12:23:36 PDT 1999 Michael Jennings <mej@eterm.org>
|
||||||
without all the crap on the command line. :-)
|
without all the crap on the command line. :-)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
Tue Sep 14 16:41:08 PDT 1999 Michael Jennings <mej@eterm.org>
|
||||||
|
|
||||||
|
Worked around a XF86 3.9.16 (perhaps Xinerama) problem. Also added
|
||||||
|
some XIM changes from Sung-Hyun Nam <namsh@lgic.co.kr> to handle
|
||||||
|
buffer overflows.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
19
src/events.c
19
src/events.c
|
@ -242,7 +242,7 @@ handle_property_notify(event_t * ev)
|
||||||
free_desktop_pixmap();
|
free_desktop_pixmap();
|
||||||
}
|
}
|
||||||
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
||||||
scr_expose(0, 0, TermWin_TotalWidth(), TermWin_TotalHeight());
|
scr_touch();
|
||||||
scrollbar_show(0);
|
scrollbar_show(0);
|
||||||
|
|
||||||
} else if (ev->xany.window == desktop_window) {
|
} else if (ev->xany.window == desktop_window) {
|
||||||
|
@ -254,7 +254,7 @@ handle_property_notify(event_t * ev)
|
||||||
free_desktop_pixmap();
|
free_desktop_pixmap();
|
||||||
}
|
}
|
||||||
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
||||||
scr_expose(0, 0, TermWin_TotalWidth(), TermWin_TotalHeight());
|
scr_touch();
|
||||||
scrollbar_show(0);
|
scrollbar_show(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -321,16 +321,15 @@ handle_visibility_notify(event_t * ev)
|
||||||
REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0);
|
REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0);
|
||||||
switch (ev->xvisibility.state) {
|
switch (ev->xvisibility.state) {
|
||||||
case VisibilityUnobscured:
|
case VisibilityUnobscured:
|
||||||
#ifdef USE_SMOOTH_REFRESH
|
D_X11(("handle_visibility_notify(): Window completely visible\n"));
|
||||||
refresh_type = SMOOTH_REFRESH;
|
|
||||||
#else
|
|
||||||
refresh_type = FAST_REFRESH;
|
refresh_type = FAST_REFRESH;
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case VisibilityPartiallyObscured:
|
case VisibilityPartiallyObscured:
|
||||||
|
D_X11(("handle_visibility_notify(): Window partially hidden\n"));
|
||||||
refresh_type = SLOW_REFRESH;
|
refresh_type = SLOW_REFRESH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
D_X11(("handle_visibility_notify(): Window completely hidden\n"));
|
||||||
refresh_type = NO_REFRESH;
|
refresh_type = NO_REFRESH;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -349,7 +348,7 @@ handle_focus_in(event_t * ev)
|
||||||
if (background_is_pixmap() && (images[image_bg].norm != images[image_bg].selected)) {
|
if (background_is_pixmap() && (images[image_bg].norm != images[image_bg].selected)) {
|
||||||
images[image_bg].current = images[image_bg].selected;
|
images[image_bg].current = images[image_bg].selected;
|
||||||
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
||||||
scr_expose(0, 0, TermWin_TotalWidth(), TermWin_TotalHeight());
|
scr_touch();
|
||||||
}
|
}
|
||||||
if (Options & Opt_scrollbar_popup) {
|
if (Options & Opt_scrollbar_popup) {
|
||||||
map_scrollbar(Options & Opt_scrollBar);
|
map_scrollbar(Options & Opt_scrollBar);
|
||||||
|
@ -374,7 +373,7 @@ handle_focus_out(event_t * ev)
|
||||||
if (background_is_pixmap() && (images[image_bg].norm != images[image_bg].selected)) {
|
if (background_is_pixmap() && (images[image_bg].norm != images[image_bg].selected)) {
|
||||||
images[image_bg].current = images[image_bg].norm;
|
images[image_bg].current = images[image_bg].norm;
|
||||||
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
||||||
scr_expose(0, 0, TermWin_TotalWidth(), TermWin_TotalHeight());
|
scr_touch();
|
||||||
}
|
}
|
||||||
if (Options & Opt_scrollbar_popup) {
|
if (Options & Opt_scrollbar_popup) {
|
||||||
map_scrollbar(0);
|
map_scrollbar(0);
|
||||||
|
@ -450,6 +449,10 @@ handle_expose(event_t * ev)
|
||||||
|
|
||||||
REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0);
|
REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0);
|
||||||
if (ev->xany.window == TermWin.vt) {
|
if (ev->xany.window == TermWin.vt) {
|
||||||
|
if (refresh_type == NO_REFRESH) {
|
||||||
|
print_warning("Received Expose event while obscured. Possible X server bug!");
|
||||||
|
refresh_type = FAST_REFRESH;
|
||||||
|
}
|
||||||
scr_expose(ev->xexpose.x, ev->xexpose.y, ev->xexpose.width, ev->xexpose.height);
|
scr_expose(ev->xexpose.x, ev->xexpose.y, ev->xexpose.width, ev->xexpose.height);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
|
@ -188,9 +188,6 @@
|
||||||
/* Continuous scrolling by pressing the scrollbar arrow buttons */
|
/* Continuous scrolling by pressing the scrollbar arrow buttons */
|
||||||
#define SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
|
#define SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
|
||||||
|
|
||||||
/* To allow smooth refresh when the terminal window is fully unobscured. */
|
|
||||||
/* #define USE_SMOOTH_REFRESH */
|
|
||||||
|
|
||||||
/* Delay periods for continuous scrolling */
|
/* Delay periods for continuous scrolling */
|
||||||
/* #define SCROLLBAR_INITIAL_DELAY 40 */
|
/* #define SCROLLBAR_INITIAL_DELAY 40 */
|
||||||
/* #define SCROLLBAR_CONTINUOUS_DELAY 2 */
|
/* #define SCROLLBAR_CONTINUOUS_DELAY 2 */
|
||||||
|
@ -368,9 +365,7 @@ inline void *memmove(void *, const void *, size_t);
|
||||||
# define NSCREENS 1
|
# define NSCREENS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SMOOTH_REFRESH
|
#ifndef DEFAULT_REFRESH
|
||||||
# define DEFAULT_REFRESH SMOOTH_REFRESH
|
|
||||||
#else
|
|
||||||
# define DEFAULT_REFRESH FAST_REFRESH
|
# define DEFAULT_REFRESH FAST_REFRESH
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ static char *rs_greek_keyboard = NULL;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PIXMAP_SUPPORT
|
#ifdef PIXMAP_SUPPORT
|
||||||
char *rs_pixmapScale = NULL;
|
char *rs_pixmapScale = NULL;
|
||||||
const char *rs_saveUnder = NULL;
|
const char *rs_backing_store = NULL;
|
||||||
char *rs_icon = NULL;
|
char *rs_icon = NULL;
|
||||||
char *rs_cmod_image = NULL;
|
char *rs_cmod_image = NULL;
|
||||||
char *rs_cmod_red = NULL;
|
char *rs_cmod_red = NULL;
|
||||||
|
@ -429,9 +429,7 @@ static const struct {
|
||||||
#ifdef META8_OPTION
|
#ifdef META8_OPTION
|
||||||
OPT_BOOL('8', "meta-8", "Meta key toggles 8-bit", &rs_meta8, &Options, Opt_meta8),
|
OPT_BOOL('8', "meta-8", "Meta key toggles 8-bit", &rs_meta8, &Options, Opt_meta8),
|
||||||
#endif
|
#endif
|
||||||
#ifdef BACKING_STORE
|
OPT_BLONG("backing-store", "use backing store", &rs_backing_store, &Options, Opt_backing_store),
|
||||||
OPT_BLONG("save-under", "use backing store", &rs_saveUnder, &Options, Opt_saveUnder),
|
|
||||||
#endif
|
|
||||||
OPT_BLONG("no-cursor", "disable the text cursor", &rs_noCursor, &Options, Opt_noCursor),
|
OPT_BLONG("no-cursor", "disable the text cursor", &rs_noCursor, &Options, Opt_noCursor),
|
||||||
OPT_BLONG("pause", "pause for a keypress after the child process exits", &rs_pause, &Options, Opt_pause),
|
OPT_BLONG("pause", "pause for a keypress after the child process exits", &rs_pause, &Options, Opt_pause),
|
||||||
OPT_BLONG("xterm-select", "duplicate xterm's broken selection behavior", &rs_xterm_select, &Options, Opt_xterm_select),
|
OPT_BLONG("xterm-select", "duplicate xterm's broken selection behavior", &rs_xterm_select, &Options, Opt_xterm_select),
|
||||||
|
@ -792,11 +790,6 @@ version(void)
|
||||||
#else
|
#else
|
||||||
printf(" -SCROLLBAR_BUTTON_CONTINUAL_SCROLLING");
|
printf(" -SCROLLBAR_BUTTON_CONTINUAL_SCROLLING");
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_SMOOTH_REFRESH
|
|
||||||
printf(" +USE_SMOOTH_REFRESH");
|
|
||||||
#else
|
|
||||||
printf(" -USE_SMOOTH_REFRESH");
|
|
||||||
#endif
|
|
||||||
#ifdef MENU_SHADOW_IN
|
#ifdef MENU_SHADOW_IN
|
||||||
printf(" +MENU_SHADOW_IN");
|
printf(" +MENU_SHADOW_IN");
|
||||||
#else
|
#else
|
||||||
|
@ -2078,18 +2071,14 @@ parse_toggles(char *buff)
|
||||||
Options &= ~(Opt_borderless);
|
Options &= ~(Opt_borderless);
|
||||||
rs_borderless = *false_vals;
|
rs_borderless = *false_vals;
|
||||||
}
|
}
|
||||||
} else if (!BEG_STRCASECMP(buff, "save_under ")) {
|
} else if (!BEG_STRCASECMP(buff, "backing_store ")) {
|
||||||
#ifdef BACKING_STORE
|
|
||||||
if (bool_val) {
|
if (bool_val) {
|
||||||
Options |= Opt_saveUnder;
|
Options |= Opt_backing_store;
|
||||||
rs_saveUnder = *true_vals;
|
rs_backing_store = *true_vals;
|
||||||
} else {
|
} else {
|
||||||
Options &= ~(Opt_saveUnder);
|
Options &= ~(Opt_backing_store);
|
||||||
rs_saveUnder = *false_vals;
|
rs_backing_store = *false_vals;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
print_warning("Support for the save_under attribute was not compiled in, ignoring");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else if (!BEG_STRCASECMP(buff, "no_cursor ")) {
|
} else if (!BEG_STRCASECMP(buff, "no_cursor ")) {
|
||||||
if (bool_val) {
|
if (bool_val) {
|
||||||
|
@ -3626,7 +3615,7 @@ save_config(char *path)
|
||||||
fprintf(fp, " scrollbar_right %d\n", (Options & Opt_scrollBar_right ? 1 : 0));
|
fprintf(fp, " scrollbar_right %d\n", (Options & Opt_scrollBar_right ? 1 : 0));
|
||||||
fprintf(fp, " scrollbar_popup %d\n", (Options & Opt_scrollbar_popup ? 1 : 0));
|
fprintf(fp, " scrollbar_popup %d\n", (Options & Opt_scrollbar_popup ? 1 : 0));
|
||||||
fprintf(fp, " borderless %d\n", (Options & Opt_borderless ? 1 : 0));
|
fprintf(fp, " borderless %d\n", (Options & Opt_borderless ? 1 : 0));
|
||||||
fprintf(fp, " save_under %d\n", (Options & Opt_saveUnder ? 1 : 0));
|
fprintf(fp, " backing_store %d\n", (Options & Opt_backing_store ? 1 : 0));
|
||||||
fprintf(fp, " no_cursor %d\n", (Options & Opt_noCursor ? 1 : 0));
|
fprintf(fp, " no_cursor %d\n", (Options & Opt_noCursor ? 1 : 0));
|
||||||
fprintf(fp, " pause %d\n", (Options & Opt_pause ? 1 : 0));
|
fprintf(fp, " pause %d\n", (Options & Opt_pause ? 1 : 0));
|
||||||
fprintf(fp, " xterm_select %d\n", (Options & Opt_xterm_select ? 1 : 0));
|
fprintf(fp, " xterm_select %d\n", (Options & Opt_xterm_select ? 1 : 0));
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
# define Opt_scrollBar_right (1LU << 14)
|
# define Opt_scrollBar_right (1LU << 14)
|
||||||
# define Opt_borderless (1LU << 15)
|
# define Opt_borderless (1LU << 15)
|
||||||
# define Opt_pixmapTrans (1LU << 16)
|
# define Opt_pixmapTrans (1LU << 16)
|
||||||
# define Opt_saveUnder (1LU << 17)
|
# define Opt_backing_store (1LU << 17)
|
||||||
# define Opt_noCursor (1LU << 18)
|
# define Opt_noCursor (1LU << 18)
|
||||||
# define Opt_pause (1LU << 19)
|
# define Opt_pause (1LU << 19)
|
||||||
# define Opt_homeOnInput (1LU << 20)
|
# define Opt_homeOnInput (1LU << 20)
|
||||||
|
|
16
src/screen.c
16
src/screen.c
|
@ -1638,20 +1638,6 @@ scr_expose(int x, int y, int width, int height)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
|
||||||
/*
|
|
||||||
* Refresh the entire screen
|
|
||||||
*/
|
|
||||||
#ifdef __GNUC__
|
|
||||||
inline void
|
|
||||||
#else
|
|
||||||
void
|
|
||||||
#endif
|
|
||||||
scr_touch(void)
|
|
||||||
{
|
|
||||||
scr_expose(0, 0, TermWin.width, TermWin.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
* Move the display so that the line represented by scrollbar value Y is at
|
* Move the display so that the line represented by scrollbar value Y is at
|
||||||
|
@ -2184,8 +2170,6 @@ scr_refresh(int type)
|
||||||
#if defined(PIXMAP_SUPPORT) && defined(PIXMAP_BUFFERING)
|
#if defined(PIXMAP_SUPPORT) && defined(PIXMAP_BUFFERING)
|
||||||
XClearWindow(Xdisplay, TermWin.vt);
|
XClearWindow(Xdisplay, TermWin.vt);
|
||||||
#endif
|
#endif
|
||||||
if (type & SMOOTH_REFRESH)
|
|
||||||
XSync(Xdisplay, False);
|
|
||||||
D_SCREEN(("scr_refresh() exiting.\n"));
|
D_SCREEN(("scr_refresh() exiting.\n"));
|
||||||
|
|
||||||
#ifdef PROFILE_SCREEN
|
#ifdef PROFILE_SCREEN
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#define CHECK_SELECTION do { \
|
#define CHECK_SELECTION do { \
|
||||||
if (selection.op) selection_check(); \
|
if (selection.op) selection_check(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#define scr_touch() scr_expose(0, 0, TermWin.width, TermWin.height)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CLEAR_ROWS : clear <num> rows starting from row <row>
|
* CLEAR_ROWS : clear <num> rows starting from row <row>
|
||||||
|
@ -254,7 +255,6 @@ extern void set_multichar_encoding(const char *);
|
||||||
extern int scr_get_fgcolor(void);
|
extern int scr_get_fgcolor(void);
|
||||||
extern int scr_get_bgcolor(void);
|
extern int scr_get_bgcolor(void);
|
||||||
extern void scr_expose(int, int, int, int);
|
extern void scr_expose(int, int, int, int);
|
||||||
extern void scr_touch(void);
|
|
||||||
extern int scr_move_to(int, int);
|
extern int scr_move_to(int, int);
|
||||||
extern int scr_page(int, int);
|
extern int scr_page(int, int);
|
||||||
extern void scr_bell(void);
|
extern void scr_bell(void);
|
||||||
|
|
|
@ -203,12 +203,13 @@ scrollbar_init(void)
|
||||||
Attributes.background_pixel = PixColors[scrollColor];
|
Attributes.background_pixel = PixColors[scrollColor];
|
||||||
Attributes.border_pixel = PixColors[bgColor];
|
Attributes.border_pixel = PixColors[bgColor];
|
||||||
Attributes.override_redirect = TRUE;
|
Attributes.override_redirect = TRUE;
|
||||||
|
Attributes.save_under = TRUE;
|
||||||
cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
|
cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
|
||||||
mask = ExposureMask | EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask
|
mask = ExposureMask | EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask
|
||||||
| Button1MotionMask | Button2MotionMask | Button3MotionMask;
|
| Button1MotionMask | Button2MotionMask | Button3MotionMask;
|
||||||
|
|
||||||
scrollBar.win = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
scrollBar.win = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
|
CWOverrideRedirect | CWBackingStore | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
|
||||||
XDefineCursor(Xdisplay, scrollBar.win, cursor);
|
XDefineCursor(Xdisplay, scrollBar.win, cursor);
|
||||||
XSelectInput(Xdisplay, scrollBar.win, mask);
|
XSelectInput(Xdisplay, scrollBar.win, mask);
|
||||||
|
|
||||||
|
|
57
src/term.c
57
src/term.c
|
@ -93,17 +93,27 @@ char *def_colorName[] =
|
||||||
char *rs_color[NRS_COLORS];
|
char *rs_color[NRS_COLORS];
|
||||||
Pixel PixColors[NRS_COLORS + NSHADOWCOLORS];
|
Pixel PixColors[NRS_COLORS + NSHADOWCOLORS];
|
||||||
|
|
||||||
|
/* To handle buffer overflows properly, we must malloc a buffer. Free it when done. */
|
||||||
|
#ifdef USE_XIM
|
||||||
|
# define LK_RET() do {if (kbuf_alloced) FREE(kbuf); return;} while (0)
|
||||||
|
#else
|
||||||
|
# define LK_RET() return
|
||||||
|
#endif
|
||||||
/* Convert the keypress event into a string */
|
/* Convert the keypress event into a string */
|
||||||
void
|
void
|
||||||
lookup_key(XEvent * ev)
|
lookup_key(XEvent * ev)
|
||||||
{
|
{
|
||||||
|
|
||||||
static int numlock_state = 0;
|
static int numlock_state = 0;
|
||||||
static unsigned char kbuf[KBUFSZ];
|
|
||||||
int ctrl, meta, shft, len;
|
int ctrl, meta, shft, len;
|
||||||
KeySym keysym;
|
KeySym keysym;
|
||||||
#ifdef USE_XIM
|
#ifdef USE_XIM
|
||||||
int valid_keysym;
|
int valid_keysym;
|
||||||
|
static unsigned char short_buf[256];
|
||||||
|
unsigned char *kbuf = short_buf;
|
||||||
|
int kbuf_alloced = 0;
|
||||||
|
#else
|
||||||
|
static unsigned char kbuf[KBUFSZ];
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG >= DEBUG_CMD
|
#if DEBUG >= DEBUG_CMD
|
||||||
static int debug_key = 1; /* accessible by a debugger only */
|
static int debug_key = 1; /* accessible by a debugger only */
|
||||||
|
@ -130,11 +140,16 @@ lookup_key(XEvent * ev)
|
||||||
Status status_return;
|
Status status_return;
|
||||||
|
|
||||||
kbuf[0] = '\0';
|
kbuf[0] = '\0';
|
||||||
len = XmbLookupString(Input_Context, &ev->xkey, kbuf, sizeof(kbuf),
|
len = XmbLookupString(Input_Context, &ev->xkey, (char *)kbuf,
|
||||||
&keysym, &status_return);
|
sizeof(short_buf), &keysym, &status_return);
|
||||||
|
if (status_return == XBufferOverflow) {
|
||||||
|
kbuf = (unsigned char *) MALLOC(len + 1);
|
||||||
|
kbuf_alloced = 1;
|
||||||
|
len = XmbLookupString(Input_Context, &ev->xkey, (char *)kbuf, len, &keysym, &status_return);
|
||||||
|
}
|
||||||
valid_keysym = (status_return == XLookupKeySym) || (status_return == XLookupBoth);
|
valid_keysym = (status_return == XLookupKeySym) || (status_return == XLookupBoth);
|
||||||
} else {
|
} else {
|
||||||
len = XLookupString(&ev->xkey, kbuf, sizeof(kbuf), &keysym, NULL);
|
len = XLookupString(&ev->xkey, kbuf, sizeof(short_buf), &keysym, NULL);
|
||||||
}
|
}
|
||||||
#else /* USE_XIM */
|
#else /* USE_XIM */
|
||||||
len = XLookupString(&ev->xkey, kbuf, sizeof(kbuf), &keysym, NULL);
|
len = XLookupString(&ev->xkey, kbuf, sizeof(kbuf), &keysym, NULL);
|
||||||
|
@ -154,7 +169,7 @@ lookup_key(XEvent * ev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (action_dispatch(ev, keysym)) {
|
if (action_dispatch(ev, keysym)) {
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
if (len) {
|
if (len) {
|
||||||
if (keypress_exit) {
|
if (keypress_exit) {
|
||||||
|
@ -167,17 +182,17 @@ lookup_key(XEvent * ev)
|
||||||
if ((Options & Opt_report_as_keysyms) && (keysym >= 0xff00)) {
|
if ((Options & Opt_report_as_keysyms) && (keysym >= 0xff00)) {
|
||||||
len = sprintf(kbuf, "\e[k%X;%X~", (unsigned int) (ev->xkey.state & 0xff), (unsigned int) (keysym & 0xff));
|
len = sprintf(kbuf, "\e[k%X;%X~", (unsigned int) (ev->xkey.state & 0xff), (unsigned int) (keysym & 0xff));
|
||||||
tt_write(kbuf, len);
|
tt_write(kbuf, len);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
#ifdef HOTKEY
|
#ifdef HOTKEY
|
||||||
/* for some backwards compatibility */
|
/* for some backwards compatibility */
|
||||||
if (HOTKEY) {
|
if (HOTKEY) {
|
||||||
if (keysym == ks_bigfont) {
|
if (keysym == ks_bigfont) {
|
||||||
change_font(0, FONT_UP);
|
change_font(0, FONT_UP);
|
||||||
return;
|
LK_RET();
|
||||||
} else if (keysym == ks_smallfont) {
|
} else if (keysym == ks_smallfont) {
|
||||||
change_font(0, FONT_DN);
|
change_font(0, FONT_DN);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -202,31 +217,31 @@ lookup_key(XEvent * ev)
|
||||||
case XK_Prior: /* Shift+Prior = scroll back */
|
case XK_Prior: /* Shift+Prior = scroll back */
|
||||||
if (TermWin.saveLines) {
|
if (TermWin.saveLines) {
|
||||||
scr_page(UP, lnsppg);
|
scr_page(UP, lnsppg);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_Next: /* Shift+Next = scroll forward */
|
case XK_Next: /* Shift+Next = scroll forward */
|
||||||
if (TermWin.saveLines) {
|
if (TermWin.saveLines) {
|
||||||
scr_page(DN, lnsppg);
|
scr_page(DN, lnsppg);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_Insert: /* Shift+Insert = paste mouse selection */
|
case XK_Insert: /* Shift+Insert = paste mouse selection */
|
||||||
selection_request(ev->xkey.time, ev->xkey.x, ev->xkey.y);
|
selection_request(ev->xkey.time, ev->xkey.x, ev->xkey.y);
|
||||||
return;
|
LK_RET();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Eterm extras */
|
/* Eterm extras */
|
||||||
case XK_KP_Add: /* Shift+KP_Add = bigger font */
|
case XK_KP_Add: /* Shift+KP_Add = bigger font */
|
||||||
change_font(0, FONT_UP);
|
change_font(0, FONT_UP);
|
||||||
return;
|
LK_RET();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_KP_Subtract: /* Shift+KP_Subtract = smaller font */
|
case XK_KP_Subtract: /* Shift+KP_Subtract = smaller font */
|
||||||
change_font(0, FONT_DN);
|
change_font(0, FONT_DN);
|
||||||
return;
|
LK_RET();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,14 +252,14 @@ lookup_key(XEvent * ev)
|
||||||
case XK_Prior:
|
case XK_Prior:
|
||||||
if (TermWin.saveLines) {
|
if (TermWin.saveLines) {
|
||||||
scr_page(UP, TermWin.nrow * 4 / 5);
|
scr_page(UP, TermWin.nrow * 4 / 5);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_Next:
|
case XK_Next:
|
||||||
if (TermWin.saveLines) {
|
if (TermWin.saveLines) {
|
||||||
scr_page(DN, TermWin.nrow * 4 / 5);
|
scr_page(DN, TermWin.nrow * 4 / 5);
|
||||||
return;
|
LK_RET();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -260,7 +275,7 @@ lookup_key(XEvent * ev)
|
||||||
#endif
|
#endif
|
||||||
#ifdef PRINTPIPE
|
#ifdef PRINTPIPE
|
||||||
scr_printscreen(ctrl | shft);
|
scr_printscreen(ctrl | shft);
|
||||||
return;
|
LK_RET();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -272,7 +287,7 @@ lookup_key(XEvent * ev)
|
||||||
greek_reset();
|
greek_reset();
|
||||||
} else
|
} else
|
||||||
xterm_seq(XTerm_title, APL_NAME "-" VERSION);
|
xterm_seq(XTerm_title, APL_NAME "-" VERSION);
|
||||||
return;
|
LK_RET();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -298,7 +313,7 @@ lookup_key(XEvent * ev)
|
||||||
tt_write(&ch, 1);
|
tt_write(&ch, 1);
|
||||||
}
|
}
|
||||||
tt_write(kbuf, len);
|
tt_write(kbuf, len);
|
||||||
return;
|
LK_RET();
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
switch (keysym) {
|
switch (keysym) {
|
||||||
|
@ -598,7 +613,7 @@ sprintf(kbuf,"\033[%02d~", (int)((n) + (keysym - fkey))); \
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return; /* not mapped */
|
LK_RET(); /* not mapped */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* these modifications only affect the static keybuffer
|
* these modifications only affect the static keybuffer
|
||||||
|
@ -1150,7 +1165,7 @@ process_window_mode(unsigned int nargs, int args[])
|
||||||
XClearWindow(Xdisplay, TermWin.vt);
|
XClearWindow(Xdisplay, TermWin.vt);
|
||||||
XSync(Xdisplay, False);
|
XSync(Xdisplay, False);
|
||||||
scr_touch();
|
scr_touch();
|
||||||
scr_refresh(SMOOTH_REFRESH);
|
scr_refresh(DEFAULT_REFRESH);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
if (i + 2 >= nargs)
|
if (i + 2 >= nargs)
|
||||||
|
@ -1795,7 +1810,7 @@ xterm_seq(int op, const char *str)
|
||||||
free_desktop_pixmap();
|
free_desktop_pixmap();
|
||||||
}
|
}
|
||||||
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
|
||||||
scr_expose(0, 0, TermWin_TotalWidth(), TermWin_TotalHeight());
|
scr_touch();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -169,7 +169,6 @@ Create_Windows(int argc, char *argv[])
|
||||||
} else {
|
} else {
|
||||||
mwmhints.flags = 0;
|
mwmhints.flags = 0;
|
||||||
}
|
}
|
||||||
Attributes.save_under = TRUE;
|
|
||||||
Attributes.backing_store = WhenMapped;
|
Attributes.backing_store = WhenMapped;
|
||||||
Attributes.colormap = cmap;
|
Attributes.colormap = cmap;
|
||||||
|
|
||||||
|
@ -400,19 +399,15 @@ Create_Windows(int argc, char *argv[])
|
||||||
cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
|
cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
|
||||||
|
|
||||||
/* the vt window */
|
/* the vt window */
|
||||||
|
if ((!(Options & Opt_borderless)) && (Options & Opt_backing_store)) {
|
||||||
#ifdef BACKING_STORE
|
|
||||||
if ((!(Options & Opt_borderless)) && (Options & Opt_saveUnder)) {
|
|
||||||
D_X11(("Creating term window with save_under = TRUE\n"));
|
D_X11(("Creating term window with save_under = TRUE\n"));
|
||||||
TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, szHint.width, szHint.height, 0, Xdepth, InputOutput, CopyFromParent,
|
TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, szHint.width, szHint.height, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWBackingStore | CWColormap, &Attributes);
|
||||||
if (!(background_is_pixmap()) && !(Options & Opt_borderless)) {
|
if (!(background_is_pixmap()) && !(Options & Opt_borderless)) {
|
||||||
XSetWindowBackground(Xdisplay, TermWin.vt, PixColors[bgColor]);
|
XSetWindowBackground(Xdisplay, TermWin.vt, PixColors[bgColor]);
|
||||||
XClearWindow(Xdisplay, TermWin.vt);
|
XClearWindow(Xdisplay, TermWin.vt);
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
#endif
|
|
||||||
{
|
|
||||||
D_X11(("Creating term window with no backing store\n"));
|
D_X11(("Creating term window with no backing store\n"));
|
||||||
TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, szHint.width, szHint.height, 0, Xdepth, InputOutput, CopyFromParent,
|
TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, 0, 0, szHint.width, szHint.height, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWColormap, &Attributes);
|
CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWColormap, &Attributes);
|
||||||
|
@ -610,7 +605,7 @@ resize_window1(unsigned int width, unsigned int height)
|
||||||
|| ((Options & Opt_viewport_mode) || (images[image_bg].mode & MODE_VIEWPORT))) {
|
|| ((Options & Opt_viewport_mode) || (images[image_bg].mode & MODE_VIEWPORT))) {
|
||||||
resize_subwindows(width, height);
|
resize_subwindows(width, height);
|
||||||
scrollbar_show(0);
|
scrollbar_show(0);
|
||||||
scr_expose(0, 0, width, height);
|
scr_touch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue