]> Pileus Git - wmpus/blobdiff - wm-wmii.c
Add margin
[wmpus] / wm-wmii.c
index 1b016487811f6b46694a38ae375ee76784dcdec6..304ce1c4686377447ad9e48b497f3fa623b0c014 100644 (file)
--- a/wm-wmii.c
+++ b/wm-wmii.c
@@ -5,7 +5,8 @@
 #include "sys.h"
 #include "wm.h"
 
-#define MODKEY ctrl
+#define MODKEY alt
+#define MARGIN 5
 
 /* Loca types */
 struct win_wm {
@@ -28,13 +29,13 @@ typedef struct {
 } 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)
@@ -84,9 +85,10 @@ static void arrange(list_t *cols)
                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;
        }
@@ -212,16 +214,40 @@ int wm_handle_ptr(win_t *cwin, ptr_t ptr)
 {
        //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;
 }
 
@@ -268,7 +294,7 @@ void wm_init(win_t *root)
        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));