diff options
Diffstat (limited to 'src/Ewmh.cc')
-rw-r--r-- | src/Ewmh.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/Ewmh.cc b/src/Ewmh.cc index 6bcd3e6..ea23a22 100644 --- a/src/Ewmh.cc +++ b/src/Ewmh.cc | |||
@@ -189,6 +189,15 @@ void Ewmh::initForScreen(BScreen &screen) { | |||
189 | 189 | ||
190 | void Ewmh::setupClient(WinClient &winclient) { | 190 | void Ewmh::setupClient(WinClient &winclient) { |
191 | updateStrut(winclient); | 191 | updateStrut(winclient); |
192 | |||
193 | FbTk::FbString newtitle = winclient.textProperty(m_net_wm_name); | ||
194 | if (!newtitle.empty()) { | ||
195 | winclient.setTitle(newtitle); | ||
196 | } | ||
197 | newtitle = winclient.textProperty(m_net_wm_icon_name); | ||
198 | if (!newtitle.empty()) { | ||
199 | winclient.setIconTitle(newtitle); | ||
200 | } | ||
192 | } | 201 | } |
193 | 202 | ||
194 | void Ewmh::setupFrame(FluxboxWindow &win) { | 203 | void Ewmh::setupFrame(FluxboxWindow &win) { |
@@ -268,7 +277,7 @@ void Ewmh::setupFrame(FluxboxWindow &win) { | |||
268 | &ret_type, &fmt, &nitems, &bytes_after, | 277 | &ret_type, &fmt, &nitems, &bytes_after, |
269 | (unsigned char **) &data) && data) { | 278 | (unsigned char **) &data) && data) { |
270 | unsigned int desktop = static_cast<long>(*data); | 279 | unsigned int desktop = static_cast<long>(*data); |
271 | if (desktop == -1 && !win.isStuck()) | 280 | if (desktop == (unsigned int)(-1) && !win.isStuck()) |
272 | win.stick(); | 281 | win.stick(); |
273 | else | 282 | else |
274 | win.setWorkspace(desktop); | 283 | win.setWorkspace(desktop); |
@@ -433,11 +442,21 @@ void Ewmh::updateWorkspaceNames(BScreen &screen) { | |||
433 | strcpy(names[i], workspacenames[i].c_str()); | 442 | strcpy(names[i], workspacenames[i].c_str()); |
434 | } | 443 | } |
435 | 444 | ||
445 | #ifdef X_HAVE_UTF8_STRING | ||
446 | Xutf8TextListToTextProperty(FbTk::App::instance()->display(), | ||
447 | names, number_of_desks, XUTF8StringStyle, &text); | ||
448 | XSetTextProperty(FbTk::App::instance()->display(), screen.rootWindow().window(), | ||
449 | &text, m_net_desktop_names); | ||
450 | |||
451 | XFree(text.value); | ||
452 | |||
453 | #else | ||
436 | if (XStringListToTextProperty(names, number_of_desks, &text)) { | 454 | if (XStringListToTextProperty(names, number_of_desks, &text)) { |
437 | XSetTextProperty(FbTk::App::instance()->display(), screen.rootWindow().window(), | 455 | XSetTextProperty(FbTk::App::instance()->display(), screen.rootWindow().window(), |
438 | &text, m_net_desktop_names); | 456 | &text, m_net_desktop_names); |
439 | XFree(text.value); | 457 | XFree(text.value); |
440 | } | 458 | } |
459 | #endif | ||
441 | 460 | ||
442 | for (size_t i = 0; i < number_of_desks; i++) | 461 | for (size_t i = 0; i < number_of_desks; i++) |
443 | delete [] names[i]; | 462 | delete [] names[i]; |
@@ -810,7 +829,17 @@ bool Ewmh::propertyNotify(WinClient &winclient, Atom the_property) { | |||
810 | if (the_property == m_net_wm_strut) { | 829 | if (the_property == m_net_wm_strut) { |
811 | updateStrut(winclient); | 830 | updateStrut(winclient); |
812 | return true; | 831 | return true; |
813 | } | 832 | } else if (the_property == m_net_wm_name) { |
833 | FbTk::FbString newtitle = winclient.textProperty(the_property); | ||
834 | if (!newtitle.empty()) | ||
835 | winclient.setTitle(newtitle); | ||
836 | return true; | ||
837 | } else if (the_property == m_net_wm_icon_name) { | ||
838 | FbTk::FbString newtitle = winclient.textProperty(the_property); | ||
839 | if (!newtitle.empty()) | ||
840 | winclient.setIconTitle(newtitle); | ||
841 | return true; | ||
842 | } | ||
814 | 843 | ||
815 | return false; | 844 | return false; |
816 | } | 845 | } |
@@ -841,6 +870,7 @@ void Ewmh::createAtoms() { | |||
841 | 870 | ||
842 | m_net_properties = XInternAtom(disp, "_NET_PROPERTIES", False); | 871 | m_net_properties = XInternAtom(disp, "_NET_PROPERTIES", False); |
843 | m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False); | 872 | m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False); |
873 | m_net_wm_icon_name = XInternAtom(disp, "_NET_WM_ICON_NAME", False); | ||
844 | m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False); | 874 | m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False); |
845 | 875 | ||
846 | // type atoms | 876 | // type atoms |
@@ -1017,6 +1047,8 @@ void Ewmh::updateStrut(WinClient &winclient) { | |||
1017 | } | 1047 | } |
1018 | } | 1048 | } |
1019 | 1049 | ||
1050 | |||
1051 | |||
1020 | void Ewmh::updateActions(FluxboxWindow &win) { | 1052 | void Ewmh::updateActions(FluxboxWindow &win) { |
1021 | 1053 | ||
1022 | /* From Extended Window Manager Hints, draft 1.3: | 1054 | /* From Extended Window Manager Hints, draft 1.3: |
@@ -1151,3 +1183,4 @@ void Ewmh::clearState(FluxboxWindow &win) { | |||
1151 | void Ewmh::saveState(FluxboxWindow &win, WindowState *state) { | 1183 | void Ewmh::saveState(FluxboxWindow &win, WindowState *state) { |
1152 | m_savedstate[&win] = state; | 1184 | m_savedstate[&win] = state; |
1153 | } | 1185 | } |
1186 | |||