app/main: add send_event() to binding_api
[staging/windowmanager.git] / src / app.cpp
index 76668cc..53a1a86 100644 (file)
@@ -352,7 +352,6 @@ char const *App::activate_surface(uint32_t surface_id) {
    /// // XXX: I am not sure I even need 5 elements...
    /// this->last_active.resize(std::min(int(this->last_active.size()), 5));
 
-
    // no error
    return nullptr;
 }
@@ -441,6 +440,22 @@ void App::surface_removed(uint32_t surface_id) {
                   });
 }
 
+void App::emit_activated(char const *label) {
+   this->api.send_event("activated", json_object_new_string(label));
+}
+
+void App::emit_deactivated(char const *label) {
+   this->api.send_event("deactivated", json_object_new_string(label));
+}
+
+void App::emit_syncdraw(char const *label) {
+   this->api.send_event("syncdraw", json_object_new_string(label));
+}
+
+void App::emit_visible(char const *label, bool is_visible) {
+   this->api.send_event(is_visible ? "visible" : "invisible", json_object_new_string(label));
+}
+
 result<int> App::request_surface(char const *drawing_name) {
    auto lid = this->layers.get_layer_id(std::string(drawing_name));
    if (!lid) {
@@ -475,7 +490,11 @@ char const *App::activate_surface(char const *drawing_name) {
    if (osid) {
       logdebug("ativate surface with name %s and id %u", drawing_name,
                osid.value());
-      return this->activate_surface(osid.value());
+      auto ret = this->activate_surface(osid.value());
+      if (!ret) {
+         this->emit_activated(drawing_name);
+      }
+      return ret;
    }
 
    logerror("surface %s unknown", drawing_name);