waybar/include/modules/sway/language.hpp

68 lines
1.7 KiB
C++
Raw Permalink Normal View History

#pragma once
#include <fmt/format.h>
2021-07-13 03:33:12 +02:00
#include <xkbcommon/xkbregistry.h>
#include <map>
#include <string>
2022-11-24 12:28:52 +01:00
#include "ALabel.hpp"
#include "bar.hpp"
#include "client.hpp"
#include "modules/sway/ipc/client.hpp"
#include "util/json.hpp"
namespace waybar::modules::sway {
2022-11-24 12:28:52 +01:00
class Language : public ALabel, public sigc::trackable {
public:
Language(const std::string& id, const Json::Value& config);
2023-03-02 14:57:07 +01:00
virtual ~Language() = default;
auto update() -> void override;
private:
2022-04-06 08:37:19 +02:00
enum class DispayedShortFlag { None = 0, ShortName = 1, ShortDescription = 1 << 1 };
2021-08-20 00:09:16 +02:00
2021-07-13 03:33:12 +02:00
struct Layout {
std::string full_name;
std::string short_name;
std::string variant;
2021-08-17 04:28:41 +02:00
std::string short_description;
2021-08-25 22:26:04 +02:00
std::string country_flag() const;
2021-07-13 03:33:12 +02:00
};
class XKBContext {
public:
2022-04-06 08:37:19 +02:00
XKBContext();
~XKBContext();
auto next_layout() -> Layout*;
2021-07-13 03:33:12 +02:00
private:
2022-04-06 08:37:19 +02:00
rxkb_context* context_ = nullptr;
rxkb_layout* xkb_layout_ = nullptr;
Layout* layout_ = nullptr;
std::map<std::string, rxkb_layout*> base_layouts_by_name_;
2021-07-13 03:33:12 +02:00
};
void onEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&);
2021-07-13 03:33:12 +02:00
auto set_current_layout(std::string current_layout) -> void;
auto init_layouts_map(const std::vector<std::string>& used_layouts) -> void;
const static std::string XKB_LAYOUT_NAMES_KEY;
const static std::string XKB_ACTIVE_LAYOUT_NAME_KEY;
2021-11-23 13:15:55 +01:00
2022-04-06 08:37:19 +02:00
Layout layout_;
2021-07-24 16:24:37 +02:00
std::string tooltip_format_ = "";
2021-07-13 03:33:12 +02:00
std::map<std::string, Layout> layouts_map_;
bool is_variant_displayed;
2021-08-20 00:09:16 +02:00
std::byte displayed_short_flag = static_cast<std::byte>(DispayedShortFlag::None);
2021-07-13 03:33:12 +02:00
2022-04-06 08:37:19 +02:00
util::JsonParser parser_;
std::mutex mutex_;
Ipc ipc_;
};
} // namespace waybar::modules::sway