mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-11 05:51:21 -08:00
Set WM_CLIENT_MACHINE and _NET_WM_PID properties (Bug#5828).
* xfns.c (set_machine_and_pid_properties): New function.
(Fx_create_frame): Call set_machine_and_pid_properties.
This commit is contained in:
parent
feb72cfb93
commit
3e6bec3b8c
2 changed files with 47 additions and 2 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2010-04-04 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* xfns.c (set_machine_and_pid_properties): New function.
|
||||
(Fx_create_frame): Call set_machine_and_pid_properties.
|
||||
|
||||
2010-04-03 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* bidi.c (bidi_resolve_explicit, bidi_level_of_next_char): Check
|
||||
|
|
|
|||
44
src/xfns.c
44
src/xfns.c
|
|
@ -203,6 +203,10 @@ Lisp_Object Qfont_param;
|
|||
|
||||
extern Lisp_Object Vwindow_system_version;
|
||||
|
||||
/* In editfns.c */
|
||||
|
||||
extern Lisp_Object Vsystem_name;
|
||||
|
||||
/* The below are defined in frame.c. */
|
||||
|
||||
#if GLYPH_DEBUG
|
||||
|
|
@ -3145,6 +3149,37 @@ If FRAME is nil, use the selected frame. */)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
static void
|
||||
set_machine_and_pid_properties (struct frame *f)
|
||||
{
|
||||
/* See the above comment "Note: Encoding strategy". */
|
||||
XTextProperty text;
|
||||
int bytes, stringp;
|
||||
int do_free_text_value = 0;
|
||||
|
||||
text.value = x_encode_text (Vsystem_name,
|
||||
Qcompound_text, 0, &bytes, &stringp,
|
||||
&do_free_text_value);
|
||||
text.encoding = (stringp ? XA_STRING
|
||||
: FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
|
||||
text.format = 8;
|
||||
text.nitems = bytes;
|
||||
XSetWMClientMachine (FRAME_X_DISPLAY (f),
|
||||
FRAME_OUTER_WINDOW (f),
|
||||
&text);
|
||||
if (do_free_text_value)
|
||||
xfree (text.value);
|
||||
|
||||
long pid = (long)getpid();
|
||||
XChangeProperty (FRAME_X_DISPLAY (f),
|
||||
FRAME_OUTER_WINDOW (f),
|
||||
XInternAtom (FRAME_X_DISPLAY (f),
|
||||
"_NET_WM_PID",
|
||||
False),
|
||||
XA_CARDINAL, 32, PropModeReplace,
|
||||
(unsigned char *) &pid, 1);
|
||||
}
|
||||
|
||||
DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
|
||||
1, 1, 0,
|
||||
doc: /* Make a new X window, which is called a "frame" in Emacs terms.
|
||||
|
|
@ -3531,19 +3566,24 @@ This function is an internal primitive--use `make-frame' instead. */)
|
|||
;
|
||||
}
|
||||
|
||||
BLOCK_INPUT;
|
||||
|
||||
/* Set machine name and pid for the purpose of window managers. */
|
||||
set_machine_and_pid_properties(f);
|
||||
|
||||
/* Set the WM leader property. GTK does this itself, so this is not
|
||||
needed when using GTK. */
|
||||
if (dpyinfo->client_leader_window != 0)
|
||||
{
|
||||
BLOCK_INPUT;
|
||||
XChangeProperty (FRAME_X_DISPLAY (f),
|
||||
FRAME_OUTER_WINDOW (f),
|
||||
dpyinfo->Xatom_wm_client_leader,
|
||||
XA_WINDOW, 32, PropModeReplace,
|
||||
(unsigned char *) &dpyinfo->client_leader_window, 1);
|
||||
UNBLOCK_INPUT;
|
||||
}
|
||||
|
||||
UNBLOCK_INPUT;
|
||||
|
||||
/* Initialize `default-minibuffer-frame' in case this is the first
|
||||
frame on this terminal. */
|
||||
if (FRAME_HAS_MINIBUF_P (f)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue