Commit 75bf0d33 authored by David Benjamin's avatar David Benjamin Committed by Chong Yidong
Browse files

Fix focus handling for embedded frames.

* xfns.c (Fx_focus_frame): Use it for embedded frames.

* xterm.c (x_embed_request_focus): New function.

* xterm.h: Add prototype.

Fixes: debbugs:9977
parent 29232a68
2012-01-07 David Benjamin <davidben@mit.edu> (tiny change)
* xterm.c (x_embed_request_focus): New function.
* xterm.h: Add prototype.
* xfns.c (Fx_focus_frame): Use it for embedded frames (Bug#9977).
2012-01-05 Glenn Morris <rgm@gnu.org>
* emacs.c (emacs_copyright): Update short copyright year to 2012.
......
......@@ -3519,9 +3519,21 @@ FRAME nil means use the selected frame. */)
BLOCK_INPUT;
x_catch_errors (dpy);
XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
RevertToParent, CurrentTime);
x_ewmh_activate_frame (f);
if (FRAME_X_EMBEDDED_P (f))
{
/* For Xembedded frames, normally the embedder forwards key
events. See XEmbed Protocol Specification at
http://freedesktop.org/wiki/Specifications/xembed-spec */
xembed_request_focus (f);
}
else
{
XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
RevertToParent, CurrentTime);
x_ewmh_activate_frame (f);
}
x_uncatch_errors ();
UNBLOCK_INPUT;
......
......@@ -8981,6 +8981,18 @@ x_lower_frame (struct frame *f)
}
}
/* Request focus with XEmbed */
void
xembed_request_focus (FRAME_PTR f)
{
/* See XEmbed Protocol Specification at
http://freedesktop.org/wiki/Specifications/xembed-spec */
if (f->async_visible)
xembed_send_message (f, CurrentTime,
XEMBED_REQUEST_FOCUS, 0, 0, 0);
}
/* Activate frame with Extended Window Manager Hints */
void
......
......@@ -967,6 +967,7 @@ extern void x_clear_errors (Display *);
extern void x_set_window_size (struct frame *, int, int, int);
extern void x_set_mouse_position (struct frame *, int, int);
extern void x_set_mouse_pixel_position (struct frame *, int, int);
extern void xembed_request_focus (struct frame *);
extern void x_ewmh_activate_frame (struct frame *);
extern void x_make_frame_visible (struct frame *);
extern void x_make_frame_invisible (struct frame *);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment