resolve #12 More control on event socket to user
This commit is contained in:
@@ -326,6 +326,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
int32_t get_event_socket_fd();
|
int32_t get_event_socket_fd();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect the event socket to IPC
|
||||||
|
* @param reconnect if true the event socket will be disconnected and connected again
|
||||||
|
* @note Automaticly called, when calling handle_event();
|
||||||
|
*/
|
||||||
|
void connect_event_socket(const bool reconnect = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnect the event socket
|
||||||
|
*/
|
||||||
|
void disconnect_event_socket();
|
||||||
|
|
||||||
sigc::signal<void, const workspace_event_t&> signal_workspace_event; ///< Workspace event signal
|
sigc::signal<void, const workspace_event_t&> signal_workspace_event; ///< Workspace event signal
|
||||||
sigc::signal<void> signal_output_event; ///< Output event signal
|
sigc::signal<void> signal_output_event; ///< Output event signal
|
||||||
sigc::signal<void> signal_mode_event; ///< Output mode event signal
|
sigc::signal<void> signal_mode_event; ///< Output mode event signal
|
||||||
@@ -333,8 +345,6 @@ public:
|
|||||||
sigc::signal<void, const bar_config_t&> signal_barconfig_update_event; ///< Barconfig update event signal
|
sigc::signal<void, const bar_config_t&> signal_barconfig_update_event; ///< Barconfig update event signal
|
||||||
sigc::signal<void, const binding_t&> signal_binding_event; ///< Binding event signal
|
sigc::signal<void, const binding_t&> signal_binding_event; ///< Binding event signal
|
||||||
sigc::signal<void, EventType, const std::shared_ptr<const buf_t>&> signal_event; ///< i3 event signal @note Default handler routes event to signal according to type
|
sigc::signal<void, EventType, const std::shared_ptr<const buf_t>&> signal_event; ///< i3 event signal @note Default handler routes event to signal according to type
|
||||||
protected:
|
|
||||||
void prepare_to_event_handling();
|
|
||||||
private:
|
private:
|
||||||
const int32_t m_main_socket;
|
const int32_t m_main_socket;
|
||||||
int32_t m_event_socket;
|
int32_t m_event_socket;
|
||||||
|
|||||||
24
src/ipc.cpp
24
src/ipc.cpp
@@ -371,18 +371,36 @@ connection::connection(const std::string& socket_path) : m_main_socket(i3_conne
|
|||||||
connection::~connection() {
|
connection::~connection() {
|
||||||
i3_disconnect(m_main_socket);
|
i3_disconnect(m_main_socket);
|
||||||
if (m_event_socket > 0)
|
if (m_event_socket > 0)
|
||||||
i3_disconnect(m_event_socket);
|
this->disconnect_event_socket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void connection::prepare_to_event_handling() {
|
void connection::connect_event_socket(const bool reconnect) {
|
||||||
|
if (m_event_socket > 0) {
|
||||||
|
if (reconnect) {
|
||||||
|
this->disconnect_event_socket();
|
||||||
|
} else {
|
||||||
|
I3IPC_ERR("Trying to initialize event socket secondary")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
m_event_socket = i3_connect(m_socket_path);
|
m_event_socket = i3_connect(m_socket_path);
|
||||||
this->subscribe(m_subscriptions);
|
this->subscribe(m_subscriptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void connection::disconnect_event_socket() {
|
||||||
|
if (m_event_socket <= 0) {
|
||||||
|
I3IPC_WARN("Trying to disconnect non-connected event socket")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
i3_disconnect(m_event_socket);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void connection::handle_event() {
|
void connection::handle_event() {
|
||||||
if (m_event_socket <= 0) {
|
if (m_event_socket <= 0) {
|
||||||
this->prepare_to_event_handling();
|
this->connect_event_socket();
|
||||||
}
|
}
|
||||||
auto buf = i3_recv(m_event_socket);
|
auto buf = i3_recv(m_event_socket);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user