2015-08-20 05:22:15 +02:00
|
|
|
#ifndef _SWAY_KEY_STATE_H
|
|
|
|
#define _SWAY_KEY_STATE_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "container.h"
|
|
|
|
|
|
|
|
/* Keyboard state */
|
|
|
|
|
|
|
|
// returns true if key has been pressed, otherwise false
|
2015-08-23 21:28:49 +02:00
|
|
|
bool check_key(uint32_t key_sym, uint32_t key_code);
|
2015-08-20 05:22:15 +02:00
|
|
|
|
2016-01-07 21:43:00 +01:00
|
|
|
// returns true if key_sym matches latest released key.
|
|
|
|
bool check_released_key(uint32_t key_sym);
|
|
|
|
|
2015-08-20 05:22:15 +02:00
|
|
|
// sets a key as pressed
|
2015-08-23 21:28:49 +02:00
|
|
|
void press_key(uint32_t key_sym, uint32_t key_code);
|
2015-08-20 05:22:15 +02:00
|
|
|
|
|
|
|
// unsets a key as pressed
|
2015-08-23 21:28:49 +02:00
|
|
|
void release_key(uint32_t key_sym, uint32_t key_code);
|
2015-08-20 05:22:15 +02:00
|
|
|
|
2015-08-23 03:01:38 +02:00
|
|
|
|
2015-08-20 05:22:15 +02:00
|
|
|
/* Pointer state */
|
|
|
|
|
|
|
|
enum pointer_values {
|
|
|
|
M_LEFT_CLICK = 272,
|
|
|
|
M_RIGHT_CLICK = 273,
|
|
|
|
M_SCROLL_CLICK = 274,
|
|
|
|
M_SCROLL_UP = 275,
|
|
|
|
M_SCROLL_DOWN = 276,
|
|
|
|
};
|
|
|
|
|
2015-08-23 03:01:38 +02:00
|
|
|
enum pointer_mode {
|
|
|
|
// Target
|
2015-08-23 16:59:18 +02:00
|
|
|
M_FLOATING = 1,
|
|
|
|
M_TILING = 2,
|
2015-08-23 03:01:38 +02:00
|
|
|
// Action
|
2015-08-23 16:59:18 +02:00
|
|
|
M_DRAGGING = 4,
|
|
|
|
M_RESIZING = 8,
|
2015-08-23 03:01:38 +02:00
|
|
|
};
|
|
|
|
|
2015-08-23 06:03:45 +02:00
|
|
|
struct pointer_button_state {
|
|
|
|
bool held;
|
|
|
|
// state at the point it was pressed
|
|
|
|
int x, y;
|
|
|
|
swayc_t *view;
|
|
|
|
};
|
|
|
|
|
2015-08-20 05:22:15 +02:00
|
|
|
extern struct pointer_state {
|
2015-08-23 03:01:38 +02:00
|
|
|
// mouse clicks
|
2015-08-23 06:03:45 +02:00
|
|
|
struct pointer_button_state left;
|
|
|
|
struct pointer_button_state right;
|
|
|
|
struct pointer_button_state scroll;
|
2015-08-23 03:01:38 +02:00
|
|
|
|
2015-08-23 06:03:45 +02:00
|
|
|
// change in pointer position
|
2015-08-23 03:01:38 +02:00
|
|
|
struct {
|
|
|
|
int x, y;
|
|
|
|
} delta;
|
|
|
|
|
2015-08-23 06:03:45 +02:00
|
|
|
// view pointer is currently over
|
2015-08-23 03:01:38 +02:00
|
|
|
swayc_t *view;
|
|
|
|
|
|
|
|
// Pointer mode
|
|
|
|
int mode;
|
2015-08-20 05:22:15 +02:00
|
|
|
} pointer_state;
|
|
|
|
|
2016-01-05 00:49:11 +01:00
|
|
|
enum modifier_state {
|
|
|
|
MOD_STATE_UNCHANGED = 0,
|
|
|
|
MOD_STATE_PRESSED = 1,
|
|
|
|
MOD_STATE_RELEASED = 2
|
|
|
|
};
|
|
|
|
|
2015-10-28 00:41:28 +01:00
|
|
|
void pointer_position_set(struct wlc_origin *new_origin, bool force_focus);
|
2015-10-26 12:20:32 +01:00
|
|
|
void center_pointer_on(swayc_t *view);
|
2015-10-28 00:41:28 +01:00
|
|
|
|
2015-08-23 03:01:38 +02:00
|
|
|
// on button release unset mode depending on the button.
|
|
|
|
// on button press set mode conditionally depending on the button
|
|
|
|
void pointer_mode_set(uint32_t button, bool condition);
|
|
|
|
|
|
|
|
// Update mode in mouse motion
|
|
|
|
void pointer_mode_update(void);
|
|
|
|
|
|
|
|
// Reset mode on any keypress;
|
|
|
|
void pointer_mode_reset(void);
|
|
|
|
|
2015-08-20 23:14:26 +02:00
|
|
|
void input_init(void);
|
2015-08-20 05:22:15 +02:00
|
|
|
|
2016-01-05 00:49:11 +01:00
|
|
|
/**
|
|
|
|
* Check if state of mod changed from current state to new_state.
|
|
|
|
*
|
|
|
|
* Returns MOD_STATE_UNCHANGED if the state didn't change, MOD_STATE_PRESSED if
|
|
|
|
* the state changed to pressed and MOD_STATE_RELEASED if the state changed to
|
|
|
|
* released.
|
|
|
|
*/
|
|
|
|
uint32_t modifier_state_changed(uint32_t new_state, uint32_t mod);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update the current modifiers state to new_state.
|
|
|
|
*/
|
|
|
|
void modifiers_state_update(uint32_t new_state);
|
|
|
|
|
2015-08-20 05:22:15 +02:00
|
|
|
#endif
|
|
|
|
|