static void handle_resize_event (GdkWindow *window, const MirResizeEvent *event) { window->width = mir_resize_event_get_width (event); window->height = mir_resize_event_get_height (event); _gdk_window_update_size (window); generate_configure_event (window, mir_resize_event_get_width (event), mir_resize_event_get_height (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); } }
void _gdk_mir_print_resize_event (const MirResizeEvent *event) { g_printerr ("RESIZE\n"); g_printerr (" Size (%i, %i)\n", mir_resize_event_get_width (event), mir_resize_event_get_height (event)); }
void QMirClientInput::customEvent(QEvent* event) { Q_ASSERT(QThread::currentThread() == thread()); UbuntuEvent* ubuntuEvent = static_cast<UbuntuEvent*>(event); const MirEvent *nativeEvent = ubuntuEvent->nativeEvent; if ((ubuntuEvent->window == nullptr) || (ubuntuEvent->window->window() == nullptr)) { qCWarning(mirclient) << "Attempted to deliver an event to a non-existent window, ignoring."; return; } // Event filtering. long result; if (QWindowSystemInterface::handleNativeEvent( ubuntuEvent->window->window(), mEventFilterType, const_cast<void *>(static_cast<const void *>(nativeEvent)), &result) == true) { qCDebug(mirclient, "event filtered out by native interface"); return; } qCDebug(mirclientInput, "customEvent(type=%s)", nativeEventTypeToStr(mir_event_get_type(nativeEvent))); // Event dispatching. switch (mir_event_get_type(nativeEvent)) { case mir_event_type_input: dispatchInputEvent(ubuntuEvent->window, mir_event_get_input_event(nativeEvent)); break; case mir_event_type_resize: { auto resizeEvent = mir_event_get_resize_event(nativeEvent); // Enable workaround for Screen rotation auto const targetWindow = ubuntuEvent->window; if (targetWindow) { auto const screen = static_cast<QMirClientScreen*>(targetWindow->screen()); if (screen) { screen->handleWindowSurfaceResize( mir_resize_event_get_width(resizeEvent), mir_resize_event_get_height(resizeEvent)); } targetWindow->handleSurfaceResized( mir_resize_event_get_width(resizeEvent), mir_resize_event_get_height(resizeEvent)); } break; } case mir_event_type_surface: handleSurfaceEvent(ubuntuEvent->window, mir_event_get_surface_event(nativeEvent)); break; case mir_event_type_surface_output: handleSurfaceOutputEvent(ubuntuEvent->window, mir_event_get_surface_output_event(nativeEvent)); break; case mir_event_type_orientation: dispatchOrientationEvent(ubuntuEvent->window->window(), mir_event_get_orientation_event(nativeEvent)); break; case mir_event_type_close_surface: QWindowSystemInterface::handleCloseEvent(ubuntuEvent->window->window()); break; default: qCDebug(mirclient, "unhandled event type: %d", static_cast<int>(mir_event_get_type(nativeEvent))); } }