#include "sys.h"
#include "wm.h"
-#define MODKEY ctrl
+#define MODKEY alt
+#define MARGIN 5
/* Loca types */
struct win_wm {
} col_t;
/* Mouse drag data */
-drag_t move_mode;
-win_t *move_win;
-ptr_t move_prev;
+static drag_t move_mode;
+static win_t *move_win;
+static ptr_t move_prev;
/* Window management data */
-list_t *wm_cols;
-win_t *wm_root;
+static list_t *wm_cols;
+static win_t *wm_root;
/* Helper functions */
static void set_mode(drag_t drag, win_t *win, ptr_t ptr)
y = 0;
for (list_t *ly = col->rows; ly; ly = ly->next) {
win_t *win = ly->data;
- sys_move(win, x, y, col->width,
- win->h * ((float)my / ty));
- y += win->h;
+ sys_move(win, x+MARGIN, y+MARGIN,
+ col->width - MARGIN*2,
+ win->h * ((float)my / ty) - MARGIN*2);
+ y += win->h + MARGIN*2;
}
x += col->width;
}
{
//printf("wm_handle_ptr: %p - %d,%d %d,%d (%d) -- \n",
// cwin, ptr.x, ptr.y, ptr.rx, ptr.ry, move_mode);
+
if (move_mode == none)
return 0;
- win_t *mwin = move_win;
+
+ /* Tiling */
int dx = ptr.rx - move_prev.rx;
int dy = ptr.ry - move_prev.ry;
move_prev = ptr;
- if (move_mode == move)
- sys_move(mwin, mwin->x+dx, mwin->y+dy, mwin->w, mwin->h);
- else if (move_mode == resize)
- sys_move(mwin, mwin->x, mwin->y, mwin->w+dx, mwin->h+dy);
+ if (move_mode == resize) {
+ list_t *row = move_win->wm->row;
+ list_t *col = move_win->wm->col;
+ list_t *lower = row->next;
+ list_t *right = col->next;
+ if (lower) {
+ ((win_t*)row->data)->h += dy;
+ ((win_t*)lower->data)->h -= dy;
+ }
+ if (right) {
+ ((col_t*)col->data)->width += dx;
+ ((col_t*)right->data)->width -= dx;
+ }
+ arrange(wm_cols);
+ }
+
+ /* Floating */
+ //win_t *mwin = move_win;
+ //int dx = ptr.rx - move_prev.rx;
+ //int dy = ptr.ry - move_prev.ry;
+ //move_prev = ptr;
+ //if (move_mode == move)
+ // sys_move(mwin, mwin->x+dx, mwin->y+dy, mwin->w, mwin->h);
+ //else if (move_mode == resize)
+ // sys_move(mwin, mwin->x, mwin->y, mwin->w+dx, mwin->h+dy);
+
return 0;
}
sys_watch(root, key_mouse1, MOD(.MODKEY=1));
sys_watch(root, key_mouse3, MOD(.MODKEY=1));
sys_watch(root, key_enter, MOD());
- key_t keys[] = {'h', 'j', 'k', 'l'};
+ Key_t keys[] = {'h', 'j', 'k', 'l'};
for (int i = 0; i < countof(keys); i++) {
sys_watch(root, keys[i], MOD(.MODKEY=1));
sys_watch(root, keys[i], MOD(.MODKEY=1,.shift=1));