diff --git a/include/i3ipc++/ipc.hpp b/include/i3ipc++/ipc.hpp index bc8be07..917f244 100644 --- a/include/i3ipc++/ipc.hpp +++ b/include/i3ipc++/ipc.hpp @@ -218,6 +218,15 @@ struct binding_t { }; +/** + * A mode + */ +struct mode_t { + std::string change; ///< The current mode in use + bool pango_markup; ///< Should pango markup be used for displaying this mode +}; + + /** * A bar configuration */ @@ -340,7 +349,7 @@ public: sigc::signal signal_workspace_event; ///< Workspace event signal sigc::signal signal_output_event; ///< Output event signal - sigc::signal signal_mode_event; ///< Output mode event signal + sigc::signal signal_mode_event; ///< Output mode event signal sigc::signal signal_window_event; ///< Window event signal sigc::signal signal_barconfig_update_event; ///< Barconfig update event signal sigc::signal signal_binding_event; ///< Binding event signal diff --git a/src/ipc.cpp b/src/ipc.cpp index 9ac8d4d..1622d18 100644 --- a/src/ipc.cpp +++ b/src/ipc.cpp @@ -188,6 +188,18 @@ static std::shared_ptr parse_binding_from_json(const Json::Value& v #undef i3IPC_TYPE_STR } +static std::shared_ptr parse_mode_from_json(const Json::Value& value) { + if (value.isNull()) + return std::shared_ptr(); + Json::Value change = value["change"]; + Json::Value pango_markup = value["pango_markup"]; + + std::shared_ptr p (new mode_t()); + p->change = change.asString(); + p->pango_markup = pango_markup.asBool(); + return p; +} + static std::shared_ptr parse_bar_config_from_json(const Json::Value& value) { #define i3IPC_TYPE_STR "PARSE BAR CONFIG FROM JSON" @@ -298,10 +310,14 @@ connection::connection(const std::string& socket_path) : m_main_socket(i3_conne I3IPC_DEBUG("OUTPUT") signal_output_event.emit(); break; - case ET_MODE: + case ET_MODE: { I3IPC_DEBUG("MODE") - signal_mode_event.emit(); + Json::Value root; + IPC_JSON_READ(root); + std::shared_ptr mode_data = parse_mode_from_json(root); + signal_mode_event.emit(*mode_data); break; + } case ET_WINDOW: { window_event_t ev; Json::Value root;