x11: Don't set NET_WM_PID when sandboxed

It is not useful, and some window managers misinterpret it and
add some "runs as root" indication to the window decoration.

See https://github.com/mate-desktop/marco/issues/301
This commit is contained in:
Matthias Clasen 2018-05-28 12:09:47 -04:00
parent c83441ae4a
commit 60aeb15116
2 changed files with 19 additions and 13 deletions

View File

@ -1436,7 +1436,6 @@ gdk_x11_display_open (const gchar *display_name)
gchar *argv[1];
XClassHint *class_hint;
gulong pid;
gint ignore;
gint maj, min;
@ -1600,11 +1599,15 @@ gdk_x11_display_open (const gchar *display_name)
if (gdk_sm_client_id)
set_sm_client_id (display, gdk_sm_client_id);
pid = getpid ();
XChangeProperty (display_x11->xdisplay,
display_x11->leader_window,
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
if (!gdk_running_in_sandbox ())
{
/* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
pid_t pid = getpid ();
XChangeProperty (display_x11->xdisplay,
display_x11->leader_window,
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
}
/* We don't yet know a valid time. */
display_x11->user_time = 0;

View File

@ -718,7 +718,6 @@ setup_toplevel_window (GdkSurface *surface,
Display *xdisplay = GDK_SURFACE_XDISPLAY (surface);
XID xid = GDK_SURFACE_XID (surface);
XSizeHints size_hints;
long pid;
Window leader_window;
set_wm_protocols (surface);
@ -749,12 +748,16 @@ setup_toplevel_window (GdkSurface *surface,
/* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME */
XSetWMProperties (xdisplay, xid, NULL, NULL, NULL, 0, NULL, NULL, NULL);
pid = getpid ();
XChangeProperty (xdisplay, xid,
gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
XA_CARDINAL, 32,
PropModeReplace,
(guchar *)&pid, 1);
if (!gdk_running_in_sandbox ())
{
/* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
pid_t pid = getpid ();
XChangeProperty (xdisplay, xid,
gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
XA_CARDINAL, 32,
PropModeReplace,
(guchar *)&pid, 1);
}
leader_window = GDK_X11_DISPLAY (x11_screen->display)->leader_window;
if (!leader_window)