fix(xwindow): Look for unicode wm_name

Ref #205
This commit is contained in:
Michael Carlberg 2016-11-30 13:38:40 +01:00
parent 6aba583c3e
commit d67515d575
4 changed files with 26 additions and 17 deletions

View File

@ -52,6 +52,8 @@ namespace modules {
if (!(title = ewmh_util::get_visible_name(ewmh, m_window)).empty()) {
return title;
} else if (!(title = ewmh_util::get_wm_name(ewmh, m_window)).empty()) {
return title;
} else if (!(title = icccm_util::get_wm_name(m_connection, m_window)).empty()) {
return title;
} else {

View File

@ -19,6 +19,7 @@ namespace ewmh_util {
bool supports(xcb_ewmh_connection_t* ewmh, xcb_atom_t atom, int screen = 0);
string get_wm_name(xcb_ewmh_connection_t* conn, xcb_window_t win);
string get_visible_name(xcb_ewmh_connection_t* conn, xcb_window_t win);
string get_icon_name(xcb_ewmh_connection_t* conn, xcb_window_t win);
string get_reply_string(xcb_ewmh_get_utf8_strings_reply_t* reply);

View File

@ -48,30 +48,37 @@ namespace ewmh_util {
return supports;
}
string get_wm_name(xcb_ewmh_connection_t* conn, xcb_window_t win) {
xcb_ewmh_get_utf8_strings_reply_t utf8_reply;
if (xcb_ewmh_get_wm_name_reply(conn, xcb_ewmh_get_wm_name(conn, win), &utf8_reply, nullptr)) {
return get_reply_string(&utf8_reply);
}
return "";
}
string get_visible_name(xcb_ewmh_connection_t* conn, xcb_window_t win) {
xcb_ewmh_get_utf8_strings_reply_t utf8_reply;
if (!xcb_ewmh_get_wm_visible_name_reply(conn, xcb_ewmh_get_wm_visible_name(conn, win), &utf8_reply, nullptr)) {
return "";
if (xcb_ewmh_get_wm_visible_name_reply(conn, xcb_ewmh_get_wm_visible_name(conn, win), &utf8_reply, nullptr)) {
return get_reply_string(&utf8_reply);
}
return get_reply_string(&utf8_reply);
return "";
}
string get_icon_name(xcb_ewmh_connection_t* conn, xcb_window_t win) {
xcb_ewmh_get_utf8_strings_reply_t utf8_reply;
if (!xcb_ewmh_get_wm_icon_name_reply(conn, xcb_ewmh_get_wm_icon_name(conn, win), &utf8_reply, nullptr)) {
return "";
if (xcb_ewmh_get_wm_icon_name_reply(conn, xcb_ewmh_get_wm_icon_name(conn, win), &utf8_reply, nullptr)) {
return get_reply_string(&utf8_reply);
}
return get_reply_string(&utf8_reply);
return "";
}
string get_reply_string(xcb_ewmh_get_utf8_strings_reply_t* reply) {
if (reply == nullptr || !reply->strings_len) {
if (reply == nullptr) {
return "";
}
char buffer[BUFSIZ]{'\0'};
strncpy(buffer, reply->strings, reply->strings_len);
string str(reply->strings, reply->strings_len);
xcb_ewmh_get_utf8_strings_reply_wipe(reply);
return buffer;
return str;
}
uint32_t get_current_desktop(xcb_ewmh_connection_t* conn, int screen) {

View File

@ -5,20 +5,19 @@ POLYBAR_NS
namespace icccm_util {
string get_wm_name(xcb_connection_t* conn, xcb_window_t win) {
xcb_icccm_get_text_property_reply_t reply;
if (!xcb_icccm_get_wm_name_reply(conn, xcb_icccm_get_wm_name(conn, win), &reply, nullptr)) {
return "";
if (xcb_icccm_get_wm_name_reply(conn, xcb_icccm_get_wm_name(conn, win), &reply, nullptr)) {
return get_reply_string(&reply);
}
return get_reply_string(&reply);
return "";
}
string get_reply_string(xcb_icccm_get_text_property_reply_t* reply) {
if (reply->name == nullptr || !reply->name_len) {
if (reply->name == nullptr) {
return "";
}
char buffer[BUFSIZ]{'\0'};
strncpy(buffer, reply->name, reply->name_len);
string str(reply->name, reply->name_len);
xcb_icccm_get_text_property_reply_wipe(reply);
return buffer;
return str;
}
}