summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog11
-rw-r--r--src/xfns.c25
-rw-r--r--src/xterm.c4
-rw-r--r--src/xterm.h3
4 files changed, 40 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8c95c3c3206..643708d85c0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
+2010-07-05 James Cloos <cloos@jhcloos.com>
+
+ * xterm.h (Xatom_net_wm_name, Xatom_net_wm_icon_name): New.
+
+ * 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-05 Jan Djärv <jan.h.d@swipnet.se>
* xterm.c (XTring_bell, XTset_terminal_window): Fix wrong prototype.
diff --git a/src/xfns.c b/src/xfns.c
index 76735fcc74f..bf312705229 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1553,8 +1553,8 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
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,
@@ -1562,7 +1562,6 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
GCPRO1 (name);
encoded_name = ENCODE_UTF_8 (name);
UNGCPRO;
-#endif
coding_system = Qcompound_text;
/* Note: Encoding strategy
@@ -1578,7 +1577,12 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
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
@@ -1589,6 +1593,7 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
if (!STRINGP (f->icon_name))
{
icon = text;
+ encoded_icon_name = encoded_name;
}
else
{
@@ -1599,6 +1604,8 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
: 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
@@ -1606,9 +1613,21 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
(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);
diff --git a/src/xterm.c b/src/xterm.c
index 6d24324cc5a..ad254fc469a 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -10207,6 +10207,10 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
= 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;
diff --git a/src/xterm.h b/src/xterm.h
index 099c194ad72..b22c225fed7 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -370,6 +370,9 @@ struct x_display_info
/* XSettings atoms and windows. */
Atom Xatom_xsettings_sel, Xatom_xsettings_prop, Xatom_xsettings_mgr;
Window xsettings_window;
+
+ /* Frame name and icon name */
+ Atom Xatom_net_wm_name, Xatom_net_wm_icon_name;
};
#ifdef HAVE_X_I18N