Use focused_title_change_event to update titles
This fixes issue mihirlad55/polybar-dwm-module#4 where the title would not update if the title of the currently focused window changed. The focused_title_change_event is raised exactly when the focused window's title changes, so this should automatically update the title using the callback when necessary.
This commit is contained in:
parent
136fc3efed
commit
8e5b5258e2
@ -67,6 +67,7 @@ namespace modules {
|
|||||||
shared_ptr<std::vector<dwmipc::Monitor>> m_monitors;
|
shared_ptr<std::vector<dwmipc::Monitor>> m_monitors;
|
||||||
unsigned int m_active_mon_num = 0;
|
unsigned int m_active_mon_num = 0;
|
||||||
unsigned int m_bar_mon = 0;
|
unsigned int m_bar_mon = 0;
|
||||||
|
unsigned int m_focused_client_id = 0;
|
||||||
|
|
||||||
std::unordered_map<state_t, label_t> m_state_labels;
|
std::unordered_map<state_t, label_t> m_state_labels;
|
||||||
vector<tag_t> m_tags;
|
vector<tag_t> m_tags;
|
||||||
|
@ -111,19 +111,28 @@ namespace modules {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_focused_client_id = ev.new_win_id;
|
||||||
m_title_label->reset_tokens();
|
m_title_label->reset_tokens();
|
||||||
if (ev.new_win_id != 0) {
|
if (m_focused_client_id != 0) {
|
||||||
auto focused_client = m_ipc->get_client(ev.new_win_id);
|
auto focused_client = m_ipc->get_client(m_focused_client_id);
|
||||||
m_title_label->replace_token("%title%", focused_client->name);
|
m_title_label->replace_token("%title%", focused_client->name);
|
||||||
} else {
|
} else {
|
||||||
m_title_label->replace_token("%title%", "");
|
m_title_label->replace_token("%title%", "");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
m_ipc->on_focused_title_change = [this](const dwmipc::FocusedTitleChangeEvent& ev) {
|
||||||
|
if (ev.monitor_num == m_bar_mon && ev.client_window_id == m_focused_client_id) {
|
||||||
|
m_title_label->reset_tokens();
|
||||||
|
m_title_label->replace_token("%title%", ev.new_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
m_ipc->subscribe(dwmipc::Event::LAYOUT_CHANGE);
|
m_ipc->subscribe(dwmipc::Event::LAYOUT_CHANGE);
|
||||||
m_ipc->subscribe(dwmipc::Event::CLIENT_FOCUS_CHANGE);
|
m_ipc->subscribe(dwmipc::Event::CLIENT_FOCUS_CHANGE);
|
||||||
m_ipc->subscribe(dwmipc::Event::TAG_CHANGE);
|
m_ipc->subscribe(dwmipc::Event::TAG_CHANGE);
|
||||||
m_ipc->subscribe(dwmipc::Event::MONITOR_FOCUS_CHANGE);
|
m_ipc->subscribe(dwmipc::Event::MONITOR_FOCUS_CHANGE);
|
||||||
|
m_ipc->subscribe(dwmipc::Event::FOCUSED_TITLE_CHANGE);
|
||||||
} catch (const dwmipc::IPCError& err) {
|
} catch (const dwmipc::IPCError& err) {
|
||||||
throw module_error(err.what());
|
throw module_error(err.what());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user