aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authortaiyu <taiyu.len@gmail.com>2015-08-23 07:59:18 -0700
committertaiyu <taiyu.len@gmail.com>2015-08-23 07:59:18 -0700
commitd72cc925416847adaf2636cea0773ef6d9a46461 (patch)
treea1c882aca8348ae0558872759df2e8e01f49be62 /sway
parent299406a048e8db3342987a9cfb2ce8b61df6bd82 (diff)
downloadsway-d72cc925416847adaf2636cea0773ef6d9a46461.tar.xz
style
Diffstat (limited to 'sway')
-rw-r--r--sway/handlers.c25
-rw-r--r--sway/input_state.c101
2 files changed, 70 insertions, 56 deletions
diff --git a/sway/handlers.c b/sway/handlers.c
index d26ce5f3..0bb4f613 100644
--- a/sway/handlers.c
+++ b/sway/handlers.c
@@ -17,6 +17,12 @@
#include "input_state.h"
#include "resize.h"
+// Event should be sent to client
+#define EVENT_PASSTHROUGH false
+
+// Event handled by sway and should not be sent to client
+#define EVENT_HANDLED true
+
static bool pointer_test(swayc_t *view, void *_origin) {
const struct mouse_origin *origin = _origin;
// Determine the output that the view is under
@@ -276,7 +282,7 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
uint32_t key, uint32_t sym, enum wlc_key_state state) {
if (locked_view_focus && state == WLC_KEY_STATE_PRESSED) {
- return false;
+ return EVENT_PASSTHROUGH;
}
// reset pointer mode on keypress
@@ -289,7 +295,7 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
if (sym < 70000 /* bullshit made up number */) {
if (!isalnum(sym) && sym != ' ' && sym != XKB_KEY_Escape && sym != XKB_KEY_Tab) {
// God fucking dammit
- return false;
+ return EVENT_PASSTHROUGH;
}
}
@@ -320,14 +326,14 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
if (match) {
if (state == WLC_KEY_STATE_PRESSED) {
handle_command(config, binding->command);
- return true;
+ return EVENT_HANDLED;
} else if (state == WLC_KEY_STATE_RELEASED) {
// TODO: --released
}
}
}
}
- return false;
+ return EVENT_PASSTHROUGH;
}
static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct wlc_origin *origin) {
@@ -351,13 +357,12 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
set_focused_container(pointer_state.view);
}
}
- return false;
+ return EVENT_PASSTHROUGH;
}
static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct wlc_modifiers *modifiers,
uint32_t button, enum wlc_button_state state, const struct wlc_origin *origin) {
- enum { DONT_SEND_CLICK = true, SEND_CLICK = false };
// Update view pointer is on
pointer_state.view = container_under_pointer();
@@ -412,7 +417,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
// dont change focus or mode if fullscreen
if (swayc_is_fullscreen(focused)) {
- return SEND_CLICK;
+ return EVENT_PASSTHROUGH;
}
// set pointer mode
@@ -421,12 +426,12 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
// Return if mode has been set
if (pointer_state.mode) {
- return DONT_SEND_CLICK;
+ return EVENT_HANDLED;
}
// Always send mouse release
if (state == WLC_BUTTON_STATE_RELEASED) {
- return SEND_CLICK;
+ return EVENT_PASSTHROUGH;
}
// Check whether to change focus
@@ -448,7 +453,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
}
// Finally send click
- return SEND_CLICK;
+ return EVENT_PASSTHROUGH;
}
static void handle_wlc_ready(void) {
diff --git a/sway/input_state.c b/sway/input_state.c
index 8450fe7a..acf90d75 100644
--- a/sway/input_state.c
+++ b/sway/input_state.c
@@ -56,23 +56,24 @@ static struct mode_state {
// initial view state
double x, y, w, h;
swayc_t *ptr;
- // containers resized with tiling resize
+ // Containers used for resizing horizontally
struct {
- double x, w;
+ double w;
swayc_t *ptr;
struct {
- double x, w;
+ double w;
swayc_t *ptr;
- } sib;
- } lr;
+ } parent;
+ } horiz;
+ // Containers used for resizing vertically
struct {
- double y, h;
+ double h;
swayc_t *ptr;
struct {
- double y, h;
+ double h;
swayc_t *ptr;
- } sib;
- } tb;
+ } parent;
+ } vert;
} initial;
static struct {
@@ -92,23 +93,19 @@ static void set_initial_view(swayc_t *view) {
static void set_initial_sibling(void) {
bool reset = true;
- if ((initial.lr.ptr = get_swayc_in_direction(initial.ptr, lock.left ? MOVE_RIGHT: MOVE_LEFT))) {
- initial.lr.x = initial.lr.ptr->x;
- initial.lr.w = initial.lr.ptr->width;
- initial.lr.sib.ptr = get_swayc_in_direction(initial.lr.ptr, lock.left ? MOVE_LEFT : MOVE_RIGHT);
- initial.lr.sib.x = initial.lr.sib.ptr->x;
- initial.lr.sib.w = initial.lr.sib.ptr->width;
+ if ((initial.horiz.ptr = get_swayc_in_direction(initial.ptr, lock.left ? MOVE_RIGHT: MOVE_LEFT))) {
+ initial.horiz.w = initial.horiz.ptr->width;
+ initial.horiz.parent.ptr = get_swayc_in_direction(initial.horiz.ptr, lock.left ? MOVE_LEFT : MOVE_RIGHT);
+ initial.horiz.parent.w = initial.horiz.parent.ptr->width;
reset = false;
}
- if ((initial.tb.ptr = get_swayc_in_direction(initial.ptr, lock.top ? MOVE_DOWN: MOVE_UP))) {
- initial.tb.y = initial.tb.ptr->y;
- initial.tb.h = initial.tb.ptr->height;
- initial.tb.sib.ptr = get_swayc_in_direction(initial.tb.ptr, lock.top ? MOVE_UP : MOVE_DOWN);
- initial.tb.sib.y = initial.tb.sib.ptr->y;
- initial.tb.sib.h = initial.tb.sib.ptr->height;
+ if ((initial.vert.ptr = get_swayc_in_direction(initial.ptr, lock.top ? MOVE_DOWN: MOVE_UP))) {
+ initial.vert.h = initial.vert.ptr->height;
+ initial.vert.parent.ptr = get_swayc_in_direction(initial.vert.ptr, lock.top ? MOVE_UP : MOVE_DOWN);
+ initial.vert.parent.h = initial.vert.parent.ptr->height;
reset = false;
}
- // If nothing changes just undo the mode
+ // If nothing will change just undo the mode
if (reset) {
pointer_state.mode = 0;
}
@@ -123,6 +120,16 @@ static void reset_initial_view(void) {
pointer_state.mode = 0;
}
+static void reset_initial_sibling(void) {
+ initial.horiz.ptr->width = initial.horiz.w;
+ initial.horiz.parent.ptr->width = initial.horiz.parent.w;
+ initial.vert.ptr->height = initial.vert.h;
+ initial.vert.parent.ptr->height = initial.vert.parent.h;
+ arrange_windows(initial.horiz.ptr->parent, -1, -1);
+ arrange_windows(initial.vert.ptr->parent, -1, -1);
+ pointer_state.mode = 0;
+}
+
// Mode set left/right click
static void pointer_mode_set_left(void) {
@@ -228,7 +235,7 @@ void pointer_mode_update(void) {
if (initial.w + dx > min_sane_w) {
initial.ptr->width = initial.w + dx;
}
- } else { //lock.right
+ } else { // lock.right
if (initial.w - dx > min_sane_w) {
initial.ptr->width = initial.w - dx;
initial.ptr->x = initial.x + dx;
@@ -238,7 +245,7 @@ void pointer_mode_update(void) {
if (initial.h + dy > min_sane_h) {
initial.ptr->height = initial.h + dy;
}
- } else { //lock.bottom
+ } else { // lock.bottom
if (initial.h - dy > min_sane_h) {
initial.ptr->height = initial.h - dy;
initial.ptr->y = initial.y + dy;
@@ -264,34 +271,34 @@ void pointer_mode_update(void) {
dx -= pointer_state.right.x;
dy -= pointer_state.right.y;
// resize if we can
- if (initial.lr.ptr) {
+ if (initial.horiz.ptr) {
if (lock.left) {
// Check whether its fine to resize
- if (initial.w + dx > min_sane_w && initial.lr.w - dx > min_sane_w) {
- initial.lr.ptr->width = initial.lr.w - dx;
- initial.lr.sib.ptr->width = initial.lr.sib.w + dx;
+ if (initial.w + dx > min_sane_w && initial.horiz.w - dx > min_sane_w) {
+ initial.horiz.ptr->width = initial.horiz.w - dx;
+ initial.horiz.parent.ptr->width = initial.horiz.parent.w + dx;
}
- } else { //lock.right
- if (initial.w - dx > min_sane_w && initial.lr.w + dx > min_sane_w) {
- initial.lr.ptr->width = initial.lr.w + dx;
- initial.lr.sib.ptr->width = initial.lr.sib.w - dx;
+ } else { // lock.right
+ if (initial.w - dx > min_sane_w && initial.horiz.w + dx > min_sane_w) {
+ initial.horiz.ptr->width = initial.horiz.w + dx;
+ initial.horiz.parent.ptr->width = initial.horiz.parent.w - dx;
}
}
- arrange_windows(initial.lr.ptr->parent, -1, -1);
+ arrange_windows(initial.horiz.ptr->parent, -1, -1);
}
- if (initial.tb.ptr) {
+ if (initial.vert.ptr) {
if (lock.top) {
- if (initial.h + dy > min_sane_h && initial.tb.h - dy > min_sane_h) {
- initial.tb.ptr->height = initial.tb.h - dy;
- initial.tb.sib.ptr->height = initial.tb.sib.h + dy;
+ if (initial.h + dy > min_sane_h && initial.vert.h - dy > min_sane_h) {
+ initial.vert.ptr->height = initial.vert.h - dy;
+ initial.vert.parent.ptr->height = initial.vert.parent.h + dy;
}
- } else { //lock.bottom
- if (initial.h - dy > min_sane_h && initial.tb.h + dy > min_sane_h) {
- initial.tb.ptr->height = initial.tb.h + dy;
- initial.tb.sib.ptr->height = initial.tb.sib.h - dy;
+ } else { // lock.bottom
+ if (initial.h - dy > min_sane_h && initial.vert.h + dy > min_sane_h) {
+ initial.vert.ptr->height = initial.vert.h + dy;
+ initial.vert.parent.ptr->height = initial.vert.parent.h - dy;
}
}
- arrange_windows(initial.tb.ptr->parent, -1, -1);
+ arrange_windows(initial.vert.ptr->parent, -1, -1);
}
default:
return;
@@ -300,15 +307,17 @@ void pointer_mode_update(void) {
void pointer_mode_reset(void) {
switch (pointer_state.mode) {
- case M_FLOATING | M_DRAGGING:
case M_FLOATING | M_RESIZING:
+ case M_FLOATING | M_DRAGGING:
reset_initial_view();
break;
- case M_TILING | M_DRAGGING:
case M_TILING | M_RESIZING:
+ (void) reset_initial_sibling;
+ break;
+
+ case M_TILING | M_DRAGGING:
default:
- return;
+ break;
}
}
-