tFix WM_CLASS and WM_WINDOW_ROLE properties - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3e017b1a89c1e0d8cb706638d0223afcf834e70d
 (DIR) parent bd17d359d6a9eb2461a939a33d710b2f0dade4f1
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Sun, 22 Nov 2015 11:53:19 +0100
       
       Fix WM_CLASS and WM_WINDOW_ROLE properties
       
       Instead of forcing class and instance names, which is what GTK does by
       default anyway, allow the user to set the instance name, but keep the
       general class as “Surf”.
       Is we won't support a “-name” parameter and don't implement a parsing of
       RESOURCE_NAME env variable, let's fallback on the third behaviour, use
       tthe name of the calling executable.
       That would let the user do things like 'ln -s ./surf ./surf-other;
       ./surf-other' and set different parameters for the two instances (in dwm
       for example).
       Try to generate a unique WM_WINDOW_ROLE (within the surf process)
       composed of “Surf” and the view ID.
       
       Diffstat:
         M surf.c                              |      20 ++++++++------------
       
       1 file changed, 8 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -948,6 +948,7 @@ showview(WebKitWebView *v, Client *c)
        GtkWidget *
        createwindow(Client *c)
        {
       +        char *wmstr;
                GtkWidget *w;
        
                if (embed) {
       t@@ -955,19 +956,14 @@ createwindow(Client *c)
                } else {
                        w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        
       -                /* TA:  20091214:  Despite what the GNOME docs say, the ICCCM
       -                 * is always correct, so we should still call this function.
       -                 * But when doing so, we *must* differentiate between a
       -                 * WM_CLASS and a resource on the window.  By convention, the
       -                 * window class (WM_CLASS) is capped, while the resource is in
       -                 * lowercase.   Both these values come as a pair.
       -                 */
       -                gtk_window_set_wmclass(GTK_WINDOW(w), "surf", "Surf");
       +                wmstr = g_path_get_basename(argv0);
       +                gtk_window_set_wmclass(GTK_WINDOW(w), wmstr, "Surf");
       +                g_free(wmstr);
        
       -                /* TA:  20091214:  And set the role here as well -- so that
       -                 * sessions can pick this up.
       -                 */
       -                gtk_window_set_role(GTK_WINDOW(w), "Surf");
       +                wmstr = g_strdup_printf("%s[%lu]", "Surf",
       +                        webkit_web_view_get_page_id(c->view));
       +                gtk_window_set_role(GTK_WINDOW(w), wmstr);
       +                g_free(wmstr);
        
                        gtk_window_set_default_size(GTK_WINDOW(w), 800, 600);
                }