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 929a19ca89
commit a73fa04e92
2 changed files with 19 additions and 13 deletions

View File

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

View File

@ -902,7 +902,6 @@ setup_toplevel_window (GdkWindow *window,
XID xid = GDK_WINDOW_XID (window); XID xid = GDK_WINDOW_XID (window);
GdkX11Screen *x11_screen = GDK_X11_SCREEN (GDK_WINDOW_SCREEN (parent)); GdkX11Screen *x11_screen = GDK_X11_SCREEN (GDK_WINDOW_SCREEN (parent));
XSizeHints size_hints; XSizeHints size_hints;
long pid;
Window leader_window; Window leader_window;
set_wm_protocols (window); set_wm_protocols (window);
@ -933,12 +932,16 @@ setup_toplevel_window (GdkWindow *window,
/* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME */ /* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME */
XSetWMProperties (xdisplay, xid, NULL, NULL, NULL, 0, NULL, NULL, NULL); XSetWMProperties (xdisplay, xid, NULL, NULL, NULL, 0, NULL, NULL, NULL);
pid = getpid (); if (!gdk_running_in_sandbox ())
XChangeProperty (xdisplay, xid, {
gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"), /* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
XA_CARDINAL, 32, pid_t pid = getpid ();
PropModeReplace, XChangeProperty (xdisplay, xid,
(guchar *)&pid, 1); 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; leader_window = GDK_X11_DISPLAY (x11_screen->display)->leader_window;
if (!leader_window) if (!leader_window)