mirror of
https://github.com/polybar/polybar.git
synced 2026-02-27 18:05:42 +00:00
Only modules can now be action handlers. This also slightly simplifies the controller because we don't need to keep track of input handlers, we can just use the module list.
56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
#include "utils/actions.hpp"
|
|
|
|
#include <cassert>
|
|
#include <stdexcept>
|
|
|
|
#include "common.hpp"
|
|
#include "modules/meta/base.hpp"
|
|
|
|
POLYBAR_NS
|
|
|
|
namespace actions_util {
|
|
string get_action_string(const modules::module_interface& module, string action, string data) {
|
|
string str = "#" + module.name_raw() + "." + action;
|
|
if (!data.empty()) {
|
|
str += "." + data;
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
std::tuple<string, string, string> parse_action_string(string action_str) {
|
|
assert(action_str.front() == '#');
|
|
|
|
action_str.erase(0, 1);
|
|
|
|
auto action_sep = action_str.find('.');
|
|
|
|
if (action_sep == string::npos) {
|
|
throw std::runtime_error("Missing separator between name and action");
|
|
}
|
|
|
|
auto module_name = action_str.substr(0, action_sep);
|
|
|
|
if (module_name.empty()) {
|
|
throw std::runtime_error("The module name must not be empty");
|
|
}
|
|
|
|
auto action = action_str.substr(action_sep + 1);
|
|
auto data_sep = action.find('.');
|
|
string data;
|
|
|
|
if (data_sep != string::npos) {
|
|
data = action.substr(data_sep + 1);
|
|
action.erase(data_sep);
|
|
}
|
|
|
|
if (action.empty()) {
|
|
throw std::runtime_error("The action name must not be empty");
|
|
}
|
|
|
|
return std::tuple<string, string, string>{module_name, action, data};
|
|
}
|
|
} // namespace actions_util
|
|
|
|
POLYBAR_NS_END
|