[PATCH] winex11: Set res_class to the program name for Crostini.

Francois Gouget fgouget at codeweavers.com
Thu Apr 16 17:47:16 CDT 2020


GNOME implements the startup notification protocol correctly which
means it checks StartupWMClass against both WM name (res_name) and
WM class (res_class). Thus it does not need this patch.
The situation is different for desktop environments that thunk to
Wayland such as Crostini. Wayland does not have separate concepts
that WM name and WM class can be mapped to. So Crostini decided to
only use res_class resulting in it trying to match 'Wine' to the
program name stored in StartupWMClass.
While Crostini's choice is unfortunate for Wine, most other
applications (e.g. all GTK applications) already store the same value
in both WM name and class. So in the interest of compatiblity it makes
sense for Wine to do the same.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---

Actually GTK applications capitalize the binary name in res_class. But, 
at least in Crostini, the match is case-insensitive so I don't think 
it's worth adding a capitalized version of program_name.

 dlls/winex11.drv/window.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 4676b099358..52e345ceb61 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -822,10 +822,8 @@ static void set_initial_wm_hints( Display *display, Window window )
     /* class hints */
     if ((class_hints = XAllocClassHint()))
     {
-        static char wine[] = "Wine";
-
         class_hints->res_name = process_name;
-        class_hints->res_class = wine;
+        class_hints->res_class = process_name;
         XSetClassHint( display, window, class_hints );
         XFree( class_hints );
     }
-- 
2.20.1



More information about the wine-devel mailing list