--- Begin Message ---
Subject: |
[PATCH] 24.0.50; Set EWMH WM NAME properties |
Date: |
Sun, 04 Jul 2010 13:18:22 -0400 |
User-agent: |
Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) |
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 <address@hidden
+
+ * 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 <address@hidden>
* 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;
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#6563: [PATCH] 24.0.50; Set EWMH WM NAME properties |
Date: |
Mon, 05 Jul 2010 12:31:31 +0200 |
User-agent: |
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; sv-SE; rv:1.9.2.4) Gecko/20100608 Thunderbird/3.1 |
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<address@hidden
+
+ * 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<address@hidden>
* 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;
--- End Message ---