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:
Michael Jennings 1999-09-14 23:22:06 +00:00
parent 7da9c03c0c
commit 5ee36e0fd6
10 changed files with 71 additions and 82 deletions

View File

@ -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.
-------------------------------------------------------------------------------

View File

@ -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 {

View File

@ -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

View File

@ -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));

View File

@ -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)

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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();
} }
} }