static void handlePointerButton(_GLFWwindow* window, int pressed, const MirPointerEvent* pointer_event) { MirPointerButton button = mir_pointer_event_buttons (pointer_event); int mods = mir_pointer_event_modifiers(pointer_event); const int publicMods = mirModToGLFWMod(mods); int publicButton; switch (button) { case mir_pointer_button_primary: publicButton = GLFW_MOUSE_BUTTON_LEFT; break; case mir_pointer_button_secondary: publicButton = GLFW_MOUSE_BUTTON_RIGHT; break; case mir_pointer_button_tertiary: publicButton = GLFW_MOUSE_BUTTON_MIDDLE; break; case mir_pointer_button_forward: // FIXME What is the forward button? publicButton = GLFW_MOUSE_BUTTON_4; break; case mir_pointer_button_back: // FIXME What is the back button? publicButton = GLFW_MOUSE_BUTTON_5; break; default: break; } _glfwInputMouseClick(window, publicButton, pressed, publicMods); }
static void handleMouseButton(_GLFWwindow* window, int pressed, int mods, MirMotionButton button) { static int lastButton; int publicButton; const int publicMods = mirModToGLFWMod(mods); switch (button) { case mir_motion_button_primary: publicButton = GLFW_MOUSE_BUTTON_LEFT; break; case mir_motion_button_secondary: publicButton = GLFW_MOUSE_BUTTON_RIGHT; break; case mir_motion_button_tertiary: publicButton = GLFW_MOUSE_BUTTON_MIDDLE; break; case mir_motion_button_forward: // FIXME What is the forward button? publicButton = GLFW_MOUSE_BUTTON_4; break; case mir_motion_button_back: // FIXME What is the back button? publicButton = GLFW_MOUSE_BUTTON_5; break; default: publicButton = lastButton; break; } lastButton = publicButton; _glfwInputMouseClick(window, publicButton, pressed, publicMods); }
static void handleKeyEvent(const MirKeyEvent key, _GLFWwindow* window) { const int pressed = key.action == mir_key_action_up ? GLFW_RELEASE : GLFW_PRESS; const int mods = mirModToGLFWMod(key.modifiers); const long text = _glfwKeySym2Unicode(key.key_code); const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT)); _glfwInputKey(window, toGLFWKeyCode(key.scan_code), key.scan_code, pressed, mods); if (text != -1) _glfwInputChar(window, text, mods, plain); }
static void handlePointerButton(_GLFWwindow* window, int pressed, const MirPointerEvent* pointer_event) { int mods = mir_pointer_event_modifiers(pointer_event); const int publicMods = mirModToGLFWMod(mods); MirPointerButton button = mir_pointer_button_primary; static uint32_t oldButtonStates = 0; uint32_t newButtonStates = mir_pointer_event_buttons(pointer_event); int publicButton = GLFW_MOUSE_BUTTON_LEFT; // XOR our old button states our new states to figure out what was added or removed button = newButtonStates ^ oldButtonStates; switch (button) { case mir_pointer_button_primary: publicButton = GLFW_MOUSE_BUTTON_LEFT; break; case mir_pointer_button_secondary: publicButton = GLFW_MOUSE_BUTTON_RIGHT; break; case mir_pointer_button_tertiary: publicButton = GLFW_MOUSE_BUTTON_MIDDLE; break; case mir_pointer_button_forward: // FIXME What is the forward button? publicButton = GLFW_MOUSE_BUTTON_4; break; case mir_pointer_button_back: // FIXME What is the back button? publicButton = GLFW_MOUSE_BUTTON_5; break; default: break; } oldButtonStates = newButtonStates; _glfwInputMouseClick(window, publicButton, pressed, publicMods); }