void _gdk_mir_print_surface_event (const MirSurfaceEvent *event) { g_printerr ("SURFACE\n"); g_printerr (" Attribute "); switch (mir_surface_event_get_attribute (event)) { case mir_surface_attrib_type: g_printerr ("type"); break; case mir_surface_attrib_state: g_printerr ("state"); break; case mir_surface_attrib_swapinterval: g_printerr ("swapinterval"); break; case mir_surface_attrib_focus: g_printerr ("focus"); break; default: g_printerr ("%u", mir_surface_event_get_attribute (event)); break; } g_printerr ("\n"); g_printerr (" Value %i\n", mir_surface_event_get_attribute_value (event)); }
void MirSurface::handle_event(MirEvent const& e) { std::unique_lock<decltype(mutex)> lock(mutex); switch (mir_event_get_type(&e)) { case mir_event_type_surface: { auto sev = mir_event_get_surface_event(&e); auto a = mir_surface_event_get_attribute(sev); if (a < mir_surface_attribs) attrib_cache[a] = mir_surface_event_get_attribute_value(sev); break; } case mir_event_type_orientation: orientation = mir_orientation_event_get_direction(mir_event_get_orientation_event(&e)); break; case mir_event_type_keymap: { xkb_rule_names names; mir_keymap_event_get_rules(mir_event_get_keymap_event(&e), &names); keymapper->set_rules(names); break; } case mir_event_type_resize: { if (auto_resize_stream) { auto resize_event = mir_event_get_resize_event(&e); buffer_stream->set_size(geom::Size{ mir_resize_event_get_width(resize_event), mir_resize_event_get_height(resize_event)}); } break; } default: break; }; if (handle_event_callback) { auto callback = handle_event_callback; lock.unlock(); callback(&e); } }
static void handle_surface_event (GdkWindow *window, const MirSurfaceEvent *event) { GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); switch (mir_surface_event_get_attribute (event)) { case mir_surface_attrib_type: _gdk_mir_window_impl_set_surface_type (impl, mir_surface_event_get_attribute_value (event)); break; case mir_surface_attrib_state: _gdk_mir_window_impl_set_surface_state (impl, mir_surface_event_get_attribute_value (event)); // FIXME: notify break; case mir_surface_attrib_swapinterval: break; case mir_surface_attrib_focus: generate_focus_event (window, mir_surface_event_get_attribute_value (event) != 0); break; default: break; } }
void QMirClientInput::handleSurfaceEvent(const QPointer<QMirClientWindow> &window, const MirSurfaceEvent *event) { auto surfaceEventAttribute = mir_surface_event_get_attribute(event); switch (surfaceEventAttribute) { case mir_surface_attrib_focus: { window->handleSurfaceFocusChanged( mir_surface_event_get_attribute_value(event) == mir_surface_focused); break; } case mir_surface_attrib_visibility: { window->handleSurfaceExposeChange( mir_surface_event_get_attribute_value(event) == mir_surface_visibility_exposed); break; } // Remaining attributes are ones client sets for server, and server should not override them case mir_surface_attrib_state: { MirSurfaceState state = static_cast<MirSurfaceState>(mir_surface_event_get_attribute_value(event)); if (state == mir_surface_state_hidden) { window->handleSurfaceVisibilityChanged(false); } else { // it's visible! window->handleSurfaceVisibilityChanged(true); window->handleSurfaceStateChanged(mirSurfaceStateToWindowState(state)); } break; } case mir_surface_attrib_type: case mir_surface_attrib_swapinterval: case mir_surface_attrib_dpi: case mir_surface_attrib_preferred_orientation: case mir_surface_attribs: break; } }