polybar-dwm/include/modules/i3.hpp
Michael Carlberg ec39859093 feat: Window click handlers
New parameters for defining fallback click handlers
that will be triggered for the whole window unless
a module action is matched.

Parameters added to all [bar/foo] sections:

- `click-left = ...`
- `click-middle= ...`
- `click-right= ...`
- `scroll-up= ...`
- `scroll-down= ...`

Ref #226
2016-12-05 13:17:15 +01:00

80 lines
2.0 KiB
C++

#pragma once
#include <i3ipc++/ipc.hpp>
#include "components/config.hpp"
#include "config.hpp"
#include "modules/meta/event_module.hpp"
#include "utils/i3.hpp"
#include "utils/io.hpp"
POLYBAR_NS
namespace modules {
class i3_module : public event_module<i3_module> {
public:
enum class state {
NONE,
FOCUSED,
UNFOCUSED,
VISIBLE,
URGENT,
};
struct workspace {
explicit workspace(int index, enum state state_, label_t&& label)
: index(index), state(state_), label(forward<label_t>(label)) {}
operator bool();
int index;
enum state state;
label_t label;
};
using event_module::event_module;
void setup();
void stop();
bool has_event();
bool update();
bool build(builder* builder, const string& tag) const;
bool handle_event(string cmd);
bool receive_events() const {
return true;
}
private:
static constexpr const char* DEFAULT_TAGS{"<label-state> <label-mode>"};
static constexpr const char* DEFAULT_MODE{"default"};
static constexpr const char* DEFAULT_WS_ICON{"ws-icon-default"};
static constexpr const char* DEFAULT_WS_LABEL{"%icon% %name%"};
static constexpr const char* TAG_LABEL_STATE{"<label-state>"};
static constexpr const char* TAG_LABEL_MODE{"<label-mode>"};
static constexpr const char* EVENT_PREFIX{"i3wm"};
static constexpr const char* EVENT_CLICK{"i3wm-wsfocus-"};
static constexpr const char* EVENT_SCROLL_UP{"i3wm-wsnext"};
static constexpr const char* EVENT_SCROLL_DOWN{"i3wm-wsprev"};
map<state, label_t> m_statelabels;
vector<unique_ptr<workspace>> m_workspaces;
iconset_t m_icons;
label_t m_modelabel;
bool m_modeactive{false};
bool m_click = true;
bool m_scroll = true;
bool m_indexsort = false;
bool m_pinworkspaces = false;
bool m_strip_wsnumbers = false;
size_t m_wsname_maxlen = 0;
unique_ptr<i3_util::connection_t> m_ipc;
};
}
POLYBAR_NS_END