diff options
| author | Jan D | 2010-07-05 12:28:27 +0200 |
|---|---|---|
| committer | Jan D | 2010-07-05 12:28:27 +0200 |
| commit | 00be444c737e95c7455aa1808d9da75d4affd51f (patch) | |
| tree | 1022102a524a2315ac29dd66104ff2352dfe441f /src | |
| parent | ff919460978866c8a3be6b16a4bc2e7cee089354 (diff) | |
| download | emacs-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/ChangeLog | 11 | ||||
| -rw-r--r-- | src/xfns.c | 25 | ||||
| -rw-r--r-- | src/xterm.c | 4 | ||||
| -rw-r--r-- | src/xterm.h | 3 |
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 @@ | |||
| 1 | 2010-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 | |||
| 1 | 2010-07-05 Jan Djärv <jan.h.d@swipnet.se> | 12 | 2010-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 |