Subject: bug#6563: closed (Re: bug#6563: [PATCH] 24.0.50; Set EWMH WM NAME properties)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 05 Jul 2010 10:32:02 +0000

Your bug report

#6563: [PATCH] 24.0.50; Set EWMH WM NAME properties

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
6563: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6563
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#6563: [PATCH] 24.0.50; Set EWMH WM NAME properties
From: Jan Djärv <[email-masked]>
To: James Cloos <[email-masked]>
Cc: [email-masked]
Date: Mon, 05 Jul 2010 12:31:31 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Applied, thanks.

	Jan D.

James Cloos skrev 2010-07-04 19.18:
> When compiled with gtk+, by calling gtk_window_set_title(), Emacs sets
> both the WM_NAME, WM_ICON_NAME and the _NET_WM_NAME, _NET_WM_ICON_NAME
> properties.
>
> Many current window managers prefer the _NET properties, which are
> defined to always be UTF8_STRING.  Some may even lack support for
> COMPOUND_TEXT.
>
> Like the _NET_* properties which Emacs already supports, _NET_WM_NAME
> and _NET_WM_ICON_NAME are specified at:
>
>    http://specs.freedesktop.org/wm-spec/wm-spec-latest.html
>
> The patch adds support for the _NET_WM_NAME and _NET_WM_ICON_NAME
> properties to the non-gtk+ builds.
>
> === modified file 'src/ChangeLog'
> --- src/ChangeLog	2010-07-03 14:35:54 +0000
> +++ src/ChangeLog	2010-07-04 17:09:04 +0000
> @@ -1,3 +1,12 @@
> +2010-07-04  James Cloos<[email-masked]
> +
> +	* xterm.c (x_term_init): Intern the _NET_WM_NAME and
> +	_NET_WM_ICON_NAME atoms.
> +
> +	* xfns.c (x_set_name_internal): Set the EWMH _NET_WM_NAME
> +	and _NET_WM_ICON_NAME properties, too, matching what is
> +	done in the gtk+ case.
> +
>   2010-07-03  Eli Zaretskii<[email-masked]>
>
>   	* msdos.c (IT_set_frame_parameters): Fix setting of colors in
>
> === modified file 'src/xfns.c'
> --- src/xfns.c	2010-07-02 12:19:29 +0000
> +++ src/xfns.c	2010-07-04 16:32:36 +0000
> @@ -1613,8 +1613,8 @@
>   	int bytes, stringp;
>           int do_free_icon_value = 0, do_free_text_value = 0;
>   	Lisp_Object coding_system;
> -#ifdef USE_GTK
>   	Lisp_Object encoded_name;
> +	Lisp_Object encoded_icon_name;
>   	struct gcpro gcpro1;
>
>   	/* As ENCODE_UTF_8 may cause GC and relocation of string data,
> @@ -1622,7 +1622,6 @@
>   	GCPRO1 (name);
>   	encoded_name = ENCODE_UTF_8 (name);
>   	UNGCPRO;
> -#endif
>
>   	coding_system = Qcompound_text;
>   	/* Note: Encoding strategy
> @@ -1638,7 +1637,12 @@
>   	   We may also be able to use "UTF8_STRING" in text.encoding
>   	   in the future which can encode all Unicode characters.
>   	   But, for the moment, there's no way to know that the
> -	   current window manager supports it or not.  */
> +	   current window manager supports it or not.
> +
> +	   Either way, we also set the _NET_WM_NAME and _NET_WM_ICON_NAME
> +	   properties.  Per the EWMH specification, those two properties
> +	   are always UTF8_STRING.  This matches what gtk_window_set_title()
> +	   does in the USE_GTK case. */
>   	text.value = x_encode_text (name, coding_system, 0,&bytes,&stringp,
>   				&do_free_text_value);
>   	text.encoding = (stringp ? XA_STRING
> @@ -1649,6 +1653,7 @@
>   	if (!STRINGP (f->icon_name))
>   	  {
>   	    icon = text;
> +	    encoded_icon_name = encoded_name;
>   	  }
>   	else
>   	  {
> @@ -1659,6 +1664,8 @@
>   			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
>   	    icon.format = 8;
>   	    icon.nitems = bytes;
> +
> +	    encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
>   	  }
>
>   #ifdef USE_GTK
> @@ -1666,9 +1673,21 @@
>                                 (char *) SDATA (encoded_name));
>   #else /* not USE_GTK */
>   	XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),&text);
> +	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
> +			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name,
> +			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
> +			 8, PropModeReplace,
> +			 (char *) SDATA (encoded_name),
> +			 SBYTES (encoded_name));
>   #endif /* not USE_GTK */
>
>   	XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),&icon);
> +	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
> +			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name,
> +			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
> +			 8, PropModeReplace,
> +			 (char *) SDATA (encoded_icon_name),
> +			 SBYTES (encoded_icon_name));
>
>   	if (do_free_icon_value)
>   	  xfree (icon.value);
>
> === modified file 'src/xterm.c'
> --- src/xterm.c	2010-07-02 12:19:29 +0000
> +++ src/xterm.c	2010-07-04 16:32:36 +0000
> @@ -10493,6 +10493,10 @@
>       = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False);
>     dpyinfo->Xatom_net_window_type_tooltip
>       = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE_TOOLTIP", False);
> +  dpyinfo->Xatom_net_wm_icon_name
> +    = XInternAtom (dpyinfo->display, "_NET_WM_ICON_NAME", False);
> +  dpyinfo->Xatom_net_wm_name
> +    = XInternAtom (dpyinfo->display, "_NET_WM_NAME", False);
>
>     dpyinfo->cut_buffers_initialized = 0;
>
>
>
>

Subject: [PATCH] 24.0.50; Set EWMH WM NAME properties
From: James Cloos <[email-masked]>
To: [email-masked]
Date: Sun, 04 Jul 2010 13:18:22 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

When compiled with gtk+, by calling gtk_window_set_title(), Emacs sets
both the WM_NAME, WM_ICON_NAME and the _NET_WM_NAME, _NET_WM_ICON_NAME
properties.

Many current window managers prefer the _NET properties, which are
defined to always be UTF8_STRING.  Some may even lack support for
COMPOUND_TEXT.

Like the _NET_* properties which Emacs already supports, _NET_WM_NAME
and _NET_WM_ICON_NAME are specified at:

  http://specs.freedesktop.org/wm-spec/wm-spec-latest.html

The patch adds support for the _NET_WM_NAME and _NET_WM_ICON_NAME
properties to the non-gtk+ builds.

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2010-07-03 14:35:54 +0000
+++ src/ChangeLog	2010-07-04 17:09:04 +0000
@@ -1,3 +1,12 @@
+2010-07-04  James Cloos  <[email-masked]
+
+	* xterm.c (x_term_init): Intern the _NET_WM_NAME and
+	_NET_WM_ICON_NAME atoms.
+
+	* xfns.c (x_set_name_internal): Set the EWMH _NET_WM_NAME
+	and _NET_WM_ICON_NAME properties, too, matching what is
+	done in the gtk+ case.
+
 2010-07-03  Eli Zaretskii  <[email-masked]>
 
 	* msdos.c (IT_set_frame_parameters): Fix setting of colors in

=== modified file 'src/xfns.c'
--- src/xfns.c	2010-07-02 12:19:29 +0000
+++ src/xfns.c	2010-07-04 16:32:36 +0000
@@ -1613,8 +1613,8 @@
 	int bytes, stringp;
         int do_free_icon_value = 0, do_free_text_value = 0;
 	Lisp_Object coding_system;
-#ifdef USE_GTK
 	Lisp_Object encoded_name;
+	Lisp_Object encoded_icon_name;
 	struct gcpro gcpro1;
 
 	/* As ENCODE_UTF_8 may cause GC and relocation of string data,
@@ -1622,7 +1622,6 @@
 	GCPRO1 (name);
 	encoded_name = ENCODE_UTF_8 (name);
 	UNGCPRO;
-#endif
 
 	coding_system = Qcompound_text;
 	/* Note: Encoding strategy
@@ -1638,7 +1637,12 @@
 	   We may also be able to use "UTF8_STRING" in text.encoding
 	   in the future which can encode all Unicode characters.
 	   But, for the moment, there's no way to know that the
-	   current window manager supports it or not.  */
+	   current window manager supports it or not.
+
+	   Either way, we also set the _NET_WM_NAME and _NET_WM_ICON_NAME
+	   properties.  Per the EWMH specification, those two properties
+	   are always UTF8_STRING.  This matches what gtk_window_set_title()
+	   does in the USE_GTK case. */
 	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,
 				    &do_free_text_value);
 	text.encoding = (stringp ? XA_STRING
@@ -1649,6 +1653,7 @@
 	if (!STRINGP (f->icon_name))
 	  {
 	    icon = text;
+	    encoded_icon_name = encoded_name;
 	  }
 	else
 	  {
@@ -1659,6 +1664,8 @@
 			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
 	    icon.format = 8;
 	    icon.nitems = bytes;
+
+	    encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
 	  }
 
 #ifdef USE_GTK
@@ -1666,9 +1673,21 @@
                               (char *) SDATA (encoded_name));
 #else /* not USE_GTK */
 	XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
+	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
+			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name,
+			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
+			 8, PropModeReplace,
+			 (char *) SDATA (encoded_name),
+			 SBYTES (encoded_name));
 #endif /* not USE_GTK */
 
 	XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon);
+	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
+			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name,
+			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
+			 8, PropModeReplace,
+			 (char *) SDATA (encoded_icon_name),
+			 SBYTES (encoded_icon_name));
 
 	if (do_free_icon_value)
 	  xfree (icon.value);

=== modified file 'src/xterm.c'
--- src/xterm.c	2010-07-02 12:19:29 +0000
+++ src/xterm.c	2010-07-04 16:32:36 +0000
@@ -10493,6 +10493,10 @@
     = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False);
   dpyinfo->Xatom_net_window_type_tooltip
     = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE_TOOLTIP", False);
+  dpyinfo->Xatom_net_wm_icon_name
+    = XInternAtom (dpyinfo->display, "_NET_WM_ICON_NAME", False);
+  dpyinfo->Xatom_net_wm_name
+    = XInternAtom (dpyinfo->display, "_NET_WM_NAME", False);
   
   dpyinfo->cut_buffers_initialized = 0;