shell: Move _NET_WM_PID query to NaTrayChild

It already does some other poking on the plug window, it
can do this as well.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2590>
This commit is contained in:
Carlos Garnacho 2022-12-23 12:25:19 +01:00 committed by Marge Bot
parent ab60902058
commit b8e3f5a536
3 changed files with 38 additions and 27 deletions

View File

@ -238,18 +238,10 @@ shell_tray_icon_set_child (ShellTrayIcon *tray_icon,
NaTrayChild *tray_child)
{
MetaDisplay *display = shell_global_get_display (shell_global_get ());
MetaX11Display *x11_display;
Display *xdisplay;
Window plug_xid;
Atom type;
int result, format;
gulong nitems, bytes_after, *val = NULL;
g_return_if_fail (tray_icon != NULL);
g_return_if_fail (tray_child != NULL);
x11_display = meta_display_get_x11_display (display);
/* We do all this now rather than computing it on the fly later,
* because the shell may want to see their values from a
* tray-icon-removed signal handler, at which point the plug has
@ -261,25 +253,7 @@ shell_tray_icon_set_child (ShellTrayIcon *tray_icon,
tray_icon->title = na_tray_child_get_title (tray_icon->tray_child);
na_tray_child_get_wm_class (tray_icon->tray_child,
NULL, &tray_icon->wm_class);
plug_xid = na_xembed_get_plug_window (NA_XEMBED (tray_icon->tray_child));
xdisplay = meta_x11_display_get_xdisplay (x11_display);
meta_x11_error_trap_push (x11_display);
result = XGetWindowProperty (xdisplay, plug_xid,
XInternAtom (xdisplay, "_NET_WM_PID", False),
0, G_MAXLONG, False, XA_CARDINAL,
&type, &format, &nitems,
&bytes_after, (guchar **)&val);
if (!meta_x11_error_trap_pop_with_return (x11_display) &&
result == Success &&
type == XA_CARDINAL &&
nitems == 1)
tray_icon->pid = *val;
if (val)
XFree (val);
tray_icon->pid = na_tray_child_get_pid (tray_icon->tray_child);
tray_icon->window_created_handler =
g_signal_connect (display,

View File

@ -219,3 +219,37 @@ na_tray_child_get_wm_class (NaTrayChild *child,
res_class,
res_name);
}
pid_t
na_tray_child_get_pid (NaTrayChild *child)
{
MetaX11Display *x11_display;
Display *xdisplay;
Atom type;
int result, format;
gulong nitems, bytes_after, *val = NULL;
pid_t pid = 0;
x11_display = na_xembed_get_x11_display (NA_XEMBED (child));
xdisplay = meta_x11_display_get_xdisplay (x11_display);
xdisplay = meta_x11_display_get_xdisplay (x11_display);
meta_x11_error_trap_push (x11_display);
result = XGetWindowProperty (xdisplay,
na_xembed_get_plug_window (NA_XEMBED (child)),
XInternAtom (xdisplay, "_NET_WM_PID", False),
0, G_MAXLONG, False, XA_CARDINAL,
&type, &format, &nitems,
&bytes_after, (guchar **)&val);
if (!meta_x11_error_trap_pop_with_return (x11_display) &&
result == Success &&
type == XA_CARDINAL &&
nitems == 1)
pid = *val;
if (val)
XFree (val);
return pid;
}

View File

@ -37,6 +37,9 @@ void na_tray_child_get_wm_class (NaTrayChild *child,
char **res_name,
char **res_class);
pid_t na_tray_child_get_pid (NaTrayChild *child);
G_END_DECLS
#endif /* __NA_TRAY_CHILD_H__ */