mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-25 23:10:47 -08:00
(dumpglyphs): Check the dimension of FONT while
setting `byte1' and `byte2' members of *CP. (XTread_socket): Trap the BadMatch error that can occur after a XSetInputFocus if window is not visible.
This commit is contained in:
parent
f3216838e8
commit
bf7253f4a2
1 changed files with 28 additions and 9 deletions
37
src/xterm.c
37
src/xterm.c
|
|
@ -733,7 +733,12 @@ dumpglyphs (f, left, top, gp, n, hl, just_foreground, cmpcharp)
|
|||
ccl->reg[0] = charset;
|
||||
ccl->reg[1] = cp->byte2;
|
||||
ccl_driver (ccl, NULL, NULL, 0, 0, NULL);
|
||||
cp->byte2 = ccl->reg[1];
|
||||
/* We assume that MSBs are appropriately
|
||||
set/reset by CCL program. */
|
||||
if (font->max_byte1 == 0) /* 1-byte font */
|
||||
cp->byte2 = ccl->reg[1];
|
||||
else
|
||||
cp->byte1 = ccl->reg[1], cp->byte2 = ccl->reg[2];
|
||||
}
|
||||
else
|
||||
for (cp = x_2byte_buffer; cp < x_2byte_buffer + len; cp++)
|
||||
|
|
@ -741,7 +746,12 @@ dumpglyphs (f, left, top, gp, n, hl, just_foreground, cmpcharp)
|
|||
ccl->reg[0] = charset;
|
||||
ccl->reg[1] = cp->byte1, ccl->reg[2] = cp->byte2;
|
||||
ccl_driver (ccl, NULL, NULL, 0, 0, NULL);
|
||||
cp->byte1 = ccl->reg[1], cp->byte2 = ccl->reg[2];
|
||||
/* We assume that MSBs are appropriately
|
||||
set/reset by CCL program. */
|
||||
if (font->max_byte1 == 0) /* 1-byte font */
|
||||
cp->byte2 = ccl->reg[1];
|
||||
else
|
||||
cp->byte1 = ccl->reg[1], cp->byte2 = ccl->reg[2];
|
||||
}
|
||||
}
|
||||
else if (fontp->encoding[charset])
|
||||
|
|
@ -3825,19 +3835,28 @@ XTread_socket (sd, bufp, numchars, expected)
|
|||
could be the shell widget window
|
||||
if the frame has no title bar. */
|
||||
f = x_any_window_to_frame (dpyinfo, event.xclient.window);
|
||||
/* Since we set WM_TAKE_FOCUS, we must call
|
||||
XSetInputFocus explicitly. But not if f is null,
|
||||
since that might be an event for a deleted frame. */
|
||||
#ifdef HAVE_X_I18N
|
||||
/* Not quite sure this is needed -pd */
|
||||
if (f && FRAME_XIC (f))
|
||||
XSetICFocus (FRAME_XIC (f));
|
||||
#endif
|
||||
/* Since we set WM_TAKE_FOCUS, we must call
|
||||
XSetInputFocus explicitly. But not if f is null,
|
||||
since that might be an event for a deleted frame. */
|
||||
if (f)
|
||||
XSetInputFocus (event.xclient.display,
|
||||
event.xclient.window,
|
||||
RevertToPointerRoot,
|
||||
event.xclient.data.l[1]);
|
||||
{
|
||||
Display *d = event.xclient.display;
|
||||
/* Catch and ignore errors, in case window has been
|
||||
iconified by a window manager such as GWM. */
|
||||
int count = x_catch_errors (d);
|
||||
XSetInputFocus (d, event.xclient.window,
|
||||
RevertToPointerRoot,
|
||||
event.xclient.data.l[1]);
|
||||
/* This is needed to detect the error
|
||||
if there is an error. */
|
||||
XSync (d, False);
|
||||
x_uncatch_errors (d, count);
|
||||
}
|
||||
/* Not certain about handling scroll bars here */
|
||||
}
|
||||
else if (event.xclient.data.l[0]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue