Notification string to a queue of strings (#2517)
Fixes #2469 * made inputdata to queue<string> * changed back to front * fixed move semantics issue while popping queue * Removed ide file * commented test lines * review changes * review changes * Update CHANGELOG.md * Cleanup Co-authored-by: patrick96 <p.ziegler96@gmail.com>
This commit is contained in:
parent
1a59599388
commit
e5ab7e1c00
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,5 +6,6 @@
|
||||
*.swp
|
||||
*.tmp
|
||||
.tags
|
||||
*.user
|
||||
|
||||
polybar-*.tar
|
||||
|
@ -141,6 +141,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Clicks arriving in close succession, no longer get dropped. Before polybar
|
||||
would drop any click that arrived within 5ms of the previous one.
|
||||
- Increased the double click interval from 150ms to 400ms.
|
||||
- Stop ignoring actions if they arrive while the previous one hasn't been processed yet.
|
||||
([`#2469`](https://github.com/polybar/polybar/issues/2469))
|
||||
|
||||
### Fixed
|
||||
- `custom/script`: Concurrency issues with fast-updating tailed scripts.
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
#include "common.hpp"
|
||||
#include "components/eventloop.hpp"
|
||||
@ -15,6 +16,8 @@
|
||||
|
||||
POLYBAR_NS
|
||||
|
||||
using std::queue;
|
||||
|
||||
// fwd decl {{{
|
||||
|
||||
enum class alignment;
|
||||
@ -30,7 +33,6 @@ namespace modules {
|
||||
} // namespace modules
|
||||
using module_t = shared_ptr<modules::module_interface>;
|
||||
using modulemap_t = std::map<alignment, vector<module_t>>;
|
||||
|
||||
// }}}
|
||||
|
||||
class controller : public signal_receiver<SIGN_PRIORITY_CONTROLLER, signals::eventqueue::exit_reload,
|
||||
@ -83,9 +85,9 @@ class controller : public signal_receiver<SIGN_PRIORITY_CONTROLLER, signals::eve
|
||||
bool reload;
|
||||
bool update;
|
||||
bool force_update;
|
||||
string inputdata;
|
||||
queue<string> inputdata;
|
||||
|
||||
notifications_t() : quit(false), reload(false), update(false), force_update(false), inputdata(string{}) {}
|
||||
notifications_t() : quit(false), reload(false), update(false), force_update(false), inputdata(queue<string>{}) {}
|
||||
};
|
||||
|
||||
size_t setup_modules(alignment align);
|
||||
|
@ -128,13 +128,9 @@ bool controller::run(bool writeback, string snapshot_dst, bool confwatch) {
|
||||
*/
|
||||
void controller::trigger_action(string&& input_data) {
|
||||
std::unique_lock<std::mutex> guard(m_notification_mutex);
|
||||
|
||||
if (m_notifications.inputdata.empty()) {
|
||||
m_notifications.inputdata = std::move(input_data);
|
||||
m_log.trace("controller: Queueing input event '%s'", input_data);
|
||||
m_notifications.inputdata.push(std::move(input_data));
|
||||
trigger_notification();
|
||||
} else {
|
||||
m_log.trace("controller: Swallowing input event (pending data)");
|
||||
}
|
||||
}
|
||||
|
||||
void controller::trigger_quit(bool reload) {
|
||||
@ -215,8 +211,11 @@ void controller::notifier_handler() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.inputdata.empty()) {
|
||||
process_inputdata(std::move(data.inputdata));
|
||||
while (!data.inputdata.empty()) {
|
||||
auto inputdata = data.inputdata.front();
|
||||
data.inputdata.pop();
|
||||
m_log.trace("controller: Dequeueing inputdata: '%s'", inputdata);
|
||||
process_inputdata(std::move(inputdata));
|
||||
}
|
||||
|
||||
if (data.update) {
|
||||
@ -461,7 +460,6 @@ void controller::process_inputdata(string&& cmd) {
|
||||
m_log.err("controller: Error while forwarding input to shell -> %s", err.what());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process eventqueue update event
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user