aboutsummaryrefslogtreecommitdiff
path: root/include/sway/input_state.h
diff options
context:
space:
mode:
authorZandr Martin <zandrmartin@gmail.com>2016-09-02 13:46:19 -0500
committerZandr Martin <zandrmartin@gmail.com>2016-09-02 13:46:19 -0500
commit79ffea328c992c5109406771a59a9f016d85970d (patch)
tree5d965e72127f227ea0a38dc5c6e4fc14e08d9498 /include/sway/input_state.h
parentb374c35758777f98e5ddbe4b0dc43bd7c80f36d7 (diff)
parent4e6d7b125895955e3a84583c6d61f3eb2f8a4fe9 (diff)
Merge branch 'master' of git://github.com/SirCmpwn/sway into commands-refactor
Diffstat (limited to 'include/sway/input_state.h')
-rw-r--r--include/sway/input_state.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/include/sway/input_state.h b/include/sway/input_state.h
new file mode 100644
index 00000000..903301fb
--- /dev/null
+++ b/include/sway/input_state.h
@@ -0,0 +1,102 @@
+#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
+bool check_key(uint32_t key_sym, uint32_t key_code);
+
+// returns true if key_sym matches latest released key.
+bool check_released_key(uint32_t key_sym);
+
+// sets a key as pressed
+void press_key(uint32_t key_sym, uint32_t key_code);
+
+// unsets a key as pressed
+void release_key(uint32_t key_sym, uint32_t key_code);
+
+
+/* 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,
+};
+
+enum pointer_mode {
+ // Target
+ M_FLOATING = 1,
+ M_TILING = 2,
+ // Action
+ M_DRAGGING = 4,
+ M_RESIZING = 8,
+};
+
+struct pointer_button_state {
+ bool held;
+ // state at the point it was pressed
+ int x, y;
+ swayc_t *view;
+};
+
+extern struct pointer_state {
+ // mouse clicks
+ struct pointer_button_state left;
+ struct pointer_button_state right;
+ struct pointer_button_state scroll;
+
+ // change in pointer position
+ struct {
+ int x, y;
+ } delta;
+
+ // view pointer is currently over
+ swayc_t *view;
+
+ // Pointer mode
+ int mode;
+} pointer_state;
+
+enum modifier_state {
+ MOD_STATE_UNCHANGED = 0,
+ MOD_STATE_PRESSED = 1,
+ MOD_STATE_RELEASED = 2
+};
+
+void pointer_position_set(struct wlc_origin *new_origin, bool force_focus);
+void center_pointer_on(swayc_t *view);
+
+// 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);
+
+void input_init(void);
+
+/**
+ * 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);
+
+#endif
+