+ auto layer_id = this->layers.get_layer_id(*surface_id);
+
+ if (! layer_id) {
+ return "Surface is not on any layer!";
+ }
+
+ struct LayoutState &state = **this->layers.get_layout_state(*surface_id);
+
+ // disable layers that are above our current layer
+ for (auto const &l : this->layers.mapping) {
+ if (l.layer_id <= *layer_id) {
+ continue;
+ }
+
+ bool flush = false;
+ if (l.state.main != -1) {
+ this->deactivate(l.state.main);
+ l.state.main = -1;
+ flush = true;
+ }
+
+ if (l.state.sub != -1) {
+ this->deactivate(l.state.sub);
+ l.state.sub = -1;
+ flush = true;
+ }
+
+ l.state.s = LayoutState::Single;
+
+ if (flush) {
+ this->controller->commit_changes();
+ this->display->flush();
+ }
+ }
+
+ if (state.main == *surface_id || state.sub == *surface_id) {