#ifdef HAVE_BG_PIXMAP
bgPixmap.destroy ();
#endif
+#ifdef HAVE_AFTERIMAGE
+ if (asv)
+ destroy_asvisual (asv, 0);
+ if (asimman)
+ destroy_image_manager (asimman, 0);
+#endif
if (display)
{
selection_clear ();
+ selection_clear (true);
#ifdef USE_XIM
im_destroy ();
free (allocated [i]);
free (selection.text);
+ free (selection.clip_text);
// TODO: manage env vars in child only(!)
free (env_display);
free (env_term);
if (recalc_y)
szHint.y += DisplayHeight (dpy, display->screen) - szHint.height - 2 * ext_bwidth;
- ncol = width / fwidth;
+ ncol = width / fwidth;
nrow = height / fheight;
}
ws.ws_row = nrow;
ws.ws_xpixel = width;
ws.ws_ypixel = height;
- (void)ioctl (pty->pty, TIOCSWINSZ, &ws);
+ ioctl (pty->pty, TIOCSWINSZ, &ws);
#if 0
// TIOCSWINSZ is supposed to do this automatically and correctly
prop = (*fs)[1]->properties ();
prop.height += lineSpace;
+ prop.width += letterSpace;
fs->set_prop (prop, false);
window_calc (newwidth, newheight);
- if (!HOOK_INVOKE ((this, HOOK_RESIZE_ALL_WINDOWS, DT_INT, newwidth, DT_INT, newheight, DT_END)))
- XSetWMNormalHints (dpy, parent[0], &szHint);
+ bool set_hint = !HOOK_INVOKE ((this, HOOK_RESIZE_ALL_WINDOWS, DT_INT, newwidth, DT_INT, newheight, DT_END));
+
+ // to avoid races between us and the wm, we clear the incremental size hints around the xresizewindow
+ if (set_hint)
+ {
+ szHint.flags &= ~(PBaseSize | PResizeInc);
+ XSetWMNormalHints (dpy, parent[0], &szHint);
+ szHint.flags |= PBaseSize | PResizeInc;
+ }
if (!ignoreparent)
{
#endif
}
+ if (set_hint)
+ XSetWMNormalHints (dpy, parent[0], &szHint);
+
fix_screen = ncol != prev_ncol || nrow != prev_nrow;
if (fix_screen || newwidth != old_width || newheight != old_height)
if (bgPixmap.window_size_sensitive ())
update_background ();
#endif
-
- scr_clear ();
}
if (fix_screen || old_height == 0)
bool
rxvt_term::IMisRunning ()
{
- char *p;
Atom atom;
Window win;
char server[IMBUFSIZ];
/* get current locale modifier */
- if ((p = XSetLocaleModifiers (NULL)) != NULL)
+ if (char *p = XSetLocaleModifiers (0))
{
strcpy (server, "@server=");
- strncat (server, & (p[4]), IMBUFSIZ - 9); /* skip "@im=" */
+ strncat (server, p + 4, IMBUFSIZ - 9); /* skip "@im=" */
- if ((p = strchr (server + 1, '@')) != NULL) /* first one only */
+ if (p = strchr (server + 1, '@')) /* first one only */
*p = '\0';
atom = XInternAtom (dpy, server, False);
if (text)
{
- void *str;
+ wchar_t *str;
if (!text->encoding_is_wchar && text->string.multi_byte)
{
if (term->rs[Rs_imLocale])
SET_LOCALE (term->rs[Rs_imLocale]);
- str = rxvt_temp_buf ((text->length + 1) * sizeof (wchar_t));
- mbstowcs ((wchar_t *)str, text->string.multi_byte, text->length + 1);
+ str = rxvt_temp_buf<wchar_t> (text->length + 1);
+ mbstowcs (str, text->string.multi_byte, text->length + 1);
if (term->rs[Rs_imLocale])
SET_LOCALE (term->locale);
}
else
- str = (void *)text->string.wide_char;
+ str = text->string.wide_char;
HOOK_INVOKE ((term, HOOK_XIM_PREEDIT_DRAW,
DT_INT, call_data->caret,