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 the 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.
This commit is contained in:
parent
bd17d359d6
commit
3e017b1a89
1 changed files with 8 additions and 12 deletions
20
surf.c
20
surf.c
|
@ -948,6 +948,7 @@ showview(WebKitWebView *v, Client *c)
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
createwindow(Client *c)
|
createwindow(Client *c)
|
||||||
{
|
{
|
||||||
|
char *wmstr;
|
||||||
GtkWidget *w;
|
GtkWidget *w;
|
||||||
|
|
||||||
if (embed) {
|
if (embed) {
|
||||||
|
@ -955,19 +956,14 @@ createwindow(Client *c)
|
||||||
} else {
|
} else {
|
||||||
w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
/* TA: 20091214: Despite what the GNOME docs say, the ICCCM
|
wmstr = g_path_get_basename(argv0);
|
||||||
* is always correct, so we should still call this function.
|
gtk_window_set_wmclass(GTK_WINDOW(w), wmstr, "Surf");
|
||||||
* But when doing so, we *must* differentiate between a
|
g_free(wmstr);
|
||||||
* 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");
|
|
||||||
|
|
||||||
/* TA: 20091214: And set the role here as well -- so that
|
wmstr = g_strdup_printf("%s[%lu]", "Surf",
|
||||||
* sessions can pick this up.
|
webkit_web_view_get_page_id(c->view));
|
||||||
*/
|
gtk_window_set_role(GTK_WINDOW(w), wmstr);
|
||||||
gtk_window_set_role(GTK_WINDOW(w), "Surf");
|
g_free(wmstr);
|
||||||
|
|
||||||
gtk_window_set_default_size(GTK_WINDOW(w), 800, 600);
|
gtk_window_set_default_size(GTK_WINDOW(w), 800, 600);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue