From: thefiddler Date: Sat, 26 Apr 2014 18:27:00 +0000 (+0200) Subject: [X11] Set WM_CLASS property X-Git-Tag: 2.0-0~177 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a79086bb20682139b1bc7e03494b0811057c8e08;p=platform%2Fcore%2Fcsapi%2Fopentk.git [X11] Set WM_CLASS property This allows Ubuntu Unity and Gnome Shell to detect and display the correct application name. --- diff --git a/Source/OpenTK/Platform/X11/Functions.cs b/Source/OpenTK/Platform/X11/Functions.cs index 4a22d66..6fae04f 100644 --- a/Source/OpenTK/Platform/X11/Functions.cs +++ b/Source/OpenTK/Platform/X11/Functions.cs @@ -513,6 +513,9 @@ namespace OpenTK.Platform.X11 [DllImport("libX11")] public static extern void XFreeEventData(IntPtr display, ref XGenericEventCookie cookie); + [DllImport("libX11")] + public static extern void XSetClassHint(IntPtr display, IntPtr window, ref XClassHint hint); + [DllImport("libXi")] static extern int XISelectEvents(IntPtr dpy, Window win, [In] XIEventMask[] masks, int num_masks); [DllImport("libXi")] diff --git a/Source/OpenTK/Platform/X11/Structs.cs b/Source/OpenTK/Platform/X11/Structs.cs index f105d57..3deefa1 100644 --- a/Source/OpenTK/Platform/X11/Structs.cs +++ b/Source/OpenTK/Platform/X11/Structs.cs @@ -748,6 +748,14 @@ namespace OpenTK.Platform.X11 public IntPtr nitems; } + internal struct XClassHint + { + [MarshalAs(UnmanagedType.LPStr)] + public string Name; + [MarshalAs(UnmanagedType.LPStr)] + public string Class; + } + internal enum XWindowClass { InputOutput = 1, diff --git a/Source/OpenTK/Platform/X11/X11GLNative.cs b/Source/OpenTK/Platform/X11/X11GLNative.cs index 37becf4..5c32458 100644 --- a/Source/OpenTK/Platform/X11/X11GLNative.cs +++ b/Source/OpenTK/Platform/X11/X11GLNative.cs @@ -89,6 +89,8 @@ namespace OpenTK.Platform.X11 IntPtr _atom_net_frame_extents; + IntPtr _atom_wm_class; + readonly IntPtr _atom_xa_cardinal = new IntPtr(6); //IntPtr _atom_motif_wm_hints; @@ -194,12 +196,20 @@ namespace OpenTK.Platform.X11 hints.base_width = width; hints.base_height = height; hints.flags = (IntPtr)(XSizeHintsFlags.PSize | XSizeHintsFlags.PPosition); + + XClassHint class_hint = new XClassHint(); + class_hint.Name = Assembly.GetEntryAssembly().GetName().Name.ToLower(); + class_hint.Class = Assembly.GetEntryAssembly().GetName().Name; + using (new XLock(window.Display)) { Functions.XSetWMNormalHints(window.Display, window.Handle, ref hints); // Register for window destroy notification Functions.XSetWMProtocols(window.Display, window.Handle, new IntPtr[] { _atom_wm_destroy }, 1); + + // Set the window class hints + Functions.XSetClassHint(window.Display, window.Handle, ref class_hint); } // Set the initial window size to ensure X, Y, Width, Height and the rest @@ -296,7 +306,7 @@ namespace OpenTK.Platform.X11 _atom_net_frame_extents = Functions.XInternAtom(window.Display, "_NET_FRAME_EXTENTS", false); - + // string[] atom_names = new string[] // { // //"WM_TITLE",