aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan D2010-07-05 12:28:27 +0200
committerJan D2010-07-05 12:28:27 +0200
commit00be444c737e95c7455aa1808d9da75d4affd51f (patch)
tree1022102a524a2315ac29dd66104ff2352dfe441f /src
parentff919460978866c8a3be6b16a4bc2e7cee089354 (diff)
downloademacs-00be444c737e95c7455aa1808d9da75d4affd51f.tar.gz
emacs-00be444c737e95c7455aa1808d9da75d4affd51f.zip
Set _NET_WM(_ICON)_NAME as per Extended Window Manager Hints (Bug#6563).
* 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.
Diffstat (limited to 'src')
-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 @@
12010-07-05 James Cloos <cloos@jhcloos.com>
2
3 * xterm.h (Xatom_net_wm_name, Xatom_net_wm_icon_name): New.
4
5 * xterm.c (x_term_init): Intern the _NET_WM_NAME and
6 _NET_WM_ICON_NAME atoms.
7
8 * xfns.c (x_set_name_internal): Set the EWMH _NET_WM_NAME
9 and _NET_WM_ICON_NAME properties, too, matching what is
10 done in the Gtk+ case.
11
12010-07-05 Jan Djärv <jan.h.d@swipnet.se> 122010-07-05 Jan Djärv <jan.h.d@swipnet.se>
2 13
3 * xterm.c (XTring_bell, XTset_terminal_window): Fix wrong prototype. 14 * 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)
1553 int bytes, stringp; 1553 int bytes, stringp;
1554 int do_free_icon_value = 0, do_free_text_value = 0; 1554 int do_free_icon_value = 0, do_free_text_value = 0;
1555 Lisp_Object coding_system; 1555 Lisp_Object coding_system;
1556#ifdef USE_GTK
1557 Lisp_Object encoded_name; 1556 Lisp_Object encoded_name;
1557 Lisp_Object encoded_icon_name;
1558 struct gcpro gcpro1; 1558 struct gcpro gcpro1;
1559 1559
1560 /* As ENCODE_UTF_8 may cause GC and relocation of string data, 1560 /* 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)
1562 GCPRO1 (name); 1562 GCPRO1 (name);
1563 encoded_name = ENCODE_UTF_8 (name); 1563 encoded_name = ENCODE_UTF_8 (name);
1564 UNGCPRO; 1564 UNGCPRO;
1565#endif
1566 1565
1567 coding_system = Qcompound_text; 1566 coding_system = Qcompound_text;
1568 /* Note: Encoding strategy 1567 /* Note: Encoding strategy
@@ -1578,7 +1577,12 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
1578 We may also be able to use "UTF8_STRING" in text.encoding 1577 We may also be able to use "UTF8_STRING" in text.encoding
1579 in the future which can encode all Unicode characters. 1578 in the future which can encode all Unicode characters.
1580 But, for the moment, there's no way to know that the 1579 But, for the moment, there's no way to know that the
1581 current window manager supports it or not. */ 1580 current window manager supports it or not.
1581
1582 Either way, we also set the _NET_WM_NAME and _NET_WM_ICON_NAME
1583 properties. Per the EWMH specification, those two properties
1584 are always UTF8_STRING. This matches what gtk_window_set_title()
1585 does in the USE_GTK case. */
1582 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp, 1586 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,
1583 &do_free_text_value); 1587 &do_free_text_value);
1584 text.encoding = (stringp ? XA_STRING 1588 text.encoding = (stringp ? XA_STRING
@@ -1589,6 +1593,7 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
1589 if (!STRINGP (f->icon_name)) 1593 if (!STRINGP (f->icon_name))
1590 { 1594 {
1591 icon = text; 1595 icon = text;
1596 encoded_icon_name = encoded_name;
1592 } 1597 }
1593 else 1598 else
1594 { 1599 {
@@ -1599,6 +1604,8 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
1599 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); 1604 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
1600 icon.format = 8; 1605 icon.format = 8;
1601 icon.nitems = bytes; 1606 icon.nitems = bytes;
1607
1608 encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
1602 } 1609 }
1603 1610
1604#ifdef USE_GTK 1611#ifdef USE_GTK
@@ -1606,9 +1613,21 @@ x_set_name_internal (FRAME_PTR f, Lisp_Object name)
1606 (char *) SDATA (encoded_name)); 1613 (char *) SDATA (encoded_name));
1607#else /* not USE_GTK */ 1614#else /* not USE_GTK */
1608 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text); 1615 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
1616 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
1617 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name,
1618 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
1619 8, PropModeReplace,
1620 (char *) SDATA (encoded_name),
1621 SBYTES (encoded_name));
1609#endif /* not USE_GTK */ 1622#endif /* not USE_GTK */
1610 1623
1611 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon); 1624 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon);
1625 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
1626 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name,
1627 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
1628 8, PropModeReplace,
1629 (char *) SDATA (encoded_icon_name),
1630 SBYTES (encoded_icon_name));
1612 1631
1613 if (do_free_icon_value) 1632 if (do_free_icon_value)
1614 xfree (icon.value); 1633 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)
10207 = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False); 10207 = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False);
10208 dpyinfo->Xatom_net_window_type_tooltip 10208 dpyinfo->Xatom_net_window_type_tooltip
10209 = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE_TOOLTIP", False); 10209 = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE_TOOLTIP", False);
10210 dpyinfo->Xatom_net_wm_icon_name
10211 = XInternAtom (dpyinfo->display, "_NET_WM_ICON_NAME", False);
10212 dpyinfo->Xatom_net_wm_name
10213 = XInternAtom (dpyinfo->display, "_NET_WM_NAME", False);
10210 10214
10211 dpyinfo->cut_buffers_initialized = 0; 10215 dpyinfo->cut_buffers_initialized = 0;
10212 10216
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
370 /* XSettings atoms and windows. */ 370 /* XSettings atoms and windows. */
371 Atom Xatom_xsettings_sel, Xatom_xsettings_prop, Xatom_xsettings_mgr; 371 Atom Xatom_xsettings_sel, Xatom_xsettings_prop, Xatom_xsettings_mgr;
372 Window xsettings_window; 372 Window xsettings_window;
373
374 /* Frame name and icon name */
375 Atom Xatom_net_wm_name, Xatom_net_wm_icon_name;
373}; 376};
374 377
375#ifdef HAVE_X_I18N 378#ifdef HAVE_X_I18N