summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Dreßler <verdre@v0yd.nl>2020-04-06 13:03:49 +0200
committerFlorian Müllner <florian.muellner@gmail.com>2020-05-21 23:10:23 +0000
commitdac09a8e2332b4093d515343a162bc13b125dd72 (patch)
tree515c4901c0489e49d49c68c6188d9e860e1d4ed1
parent11f224f4b0404dac1d219b69a75e9d273c79dcae (diff)
downloadmutter-dac09a8e2332b4093d515343a162bc13b125dd72.tar.gz
window: Use client PID for meta_window_get_pid()
The shell uses the PID of windows to map them to apps or to find out which window/app triggered a dialog. It currently fails to do that in some situations on Wayland, because meta_window_get_pid() only returns a valid PID for x11 clients. So use the client PID instead of the X11-exclusive _NET_WM_PID property to find out the PID of the process that started the window. We can do that by simply renaming the already existing meta_window_get_client_pid() API to meta_window_get_pid() and moving the old API providing the _NET_WM_PID to meta_window_get_netwm_pid(). https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1180
-rw-r--r--src/core/delete.c2
-rw-r--r--src/core/window-private.h2
-rw-r--r--src/core/window.c23
-rw-r--r--src/meta/window.h2
-rw-r--r--src/wayland/meta-xwayland.c2
5 files changed, 7 insertions, 24 deletions
diff --git a/src/core/delete.c b/src/core/delete.c
index 28ca63d89..2727711f9 100644
--- a/src/core/delete.c
+++ b/src/core/delete.c
@@ -95,7 +95,7 @@ meta_window_delete (MetaWindow *window,
void
meta_window_kill (MetaWindow *window)
{
- pid_t pid = meta_window_get_client_pid (window);
+ pid_t pid = meta_window_get_pid (window);
if (pid > 0)
{
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 0d1ff6831..c72dc41d8 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -821,8 +821,6 @@ gboolean meta_window_handle_ui_frame_event (MetaWindow *window,
void meta_window_handle_ungrabbed_event (MetaWindow *window,
const ClutterEvent *event);
-uint32_t meta_window_get_client_pid (MetaWindow *window);
-
void meta_window_get_client_area_rect (const MetaWindow *window,
cairo_rectangle_int_t *rect);
void meta_window_get_titlebar_rect (MetaWindow *window,
diff --git a/src/core/window.c b/src/core/window.c
index 75012ed6c..d3b2c7d7e 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -902,7 +902,7 @@ meta_window_update_sandboxed_app_id (MetaWindow *window)
g_clear_pointer (&window->sandboxed_app_id, g_free);
- pid = meta_window_get_client_pid (window);
+ pid = meta_window_get_pid (window);
if (pid == 0)
return;
@@ -7584,7 +7584,7 @@ meta_window_get_transient_for (MetaWindow *window)
}
/**
- * meta_window_get_client_pid:
+ * meta_window_get_pid:
* @window: a #MetaWindow
*
* Returns the pid of the process that created this window, if available
@@ -7593,26 +7593,11 @@ meta_window_get_transient_for (MetaWindow *window)
* Return value: the pid, or 0 if not known.
*/
uint32_t
-meta_window_get_client_pid (MetaWindow *window)
-{
- return META_WINDOW_GET_CLASS (window)->get_client_pid (window);
-}
-
-/**
- * meta_window_get_pid:
- * @window: a #MetaWindow
- *
- * Returns pid of the process that created this window, if known (obtained from
- * the _NET_WM_PID property).
- *
- * Return value: the pid, or -1 if not known.
- */
-int
meta_window_get_pid (MetaWindow *window)
{
- g_return_val_if_fail (META_IS_WINDOW (window), -1);
+ g_return_val_if_fail (META_IS_WINDOW (window), 0);
- return window->net_wm_pid;
+ return META_WINDOW_GET_CLASS (window)->get_client_pid (window);
}
/**
diff --git a/src/meta/window.h b/src/meta/window.h
index cb0f1afe6..46bdab964 100644
--- a/src/meta/window.h
+++ b/src/meta/window.h
@@ -328,7 +328,7 @@ META_EXPORT
guint32 meta_window_get_user_time (MetaWindow *window);
META_EXPORT
-int meta_window_get_pid (MetaWindow *window);
+uint32_t meta_window_get_pid (MetaWindow *window);
META_EXPORT
const char *meta_window_get_client_machine (MetaWindow *window);
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index ac55599d4..1b67c0a92 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -713,7 +713,7 @@ window_created_cb (MetaDisplay *display,
{
/* Ignore all internal windows */
if (!window->xwindow ||
- meta_window_get_client_pid (window) == getpid ())
+ meta_window_get_pid (window) == getpid ())
return;
manager->x11_windows = g_list_prepend (manager->x11_windows, window);