wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit c4edc4f3fd9240472ac95e1796ee0865d04b91f0
parent 49c2f172368cb2ec192ae92212fc96c107d29ec1
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sun,  5 Mar 2006 13:22:42 +0100

enumerized cursors


Diffstat:
cmd/wm/client.c | 2+-
cmd/wm/mouse.c | 44++++++++++++++++++++++----------------------
cmd/wm/wm.c | 25++++++++++++-------------
cmd/wm/wm.h | 39++++++++++++++++++++++-----------------
4 files changed, 57 insertions(+), 53 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -45,7 +45,7 @@ alloc_client(Window w, XWindowAttributes *wa) DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &fwa); - c->cursor = normal_cursor; + c->cursor = cursor[CurNormal]; XDefineCursor(dpy, c->framewin, c->cursor); c->gc = XCreateGC(dpy, c->framewin, 0, 0); XSync(dpy, False); diff --git a/cmd/wm/mouse.c b/cmd/wm/mouse.c @@ -16,7 +16,7 @@ cursor_for_motion(Client *c, int x, int y) int n, e, w, s, tn, te, tw, ts; if(!def.border) - return normal_cursor; + return cursor[CurNormal]; /* rectangle attributes of client are used */ w = x < def.border; @@ -30,23 +30,23 @@ cursor_for_motion(Client *c, int x, int y) ts = s > f->rect.height - bar_height(); if((w && n) || (w && tn) || (n && tw)) - return nw_cursor; + return cursor[CurNW]; else if((e && n) || (e && tn) || (n && te)) - return ne_cursor; + return cursor[CurNE]; else if((w && s) || (w && ts) || (s && tw)) - return sw_cursor; + return cursor[CurSW]; else if((e && s) || (e && ts) || (s && te)) - return se_cursor; + return cursor[CurSE]; else if(w) - return w_cursor; + return cursor[CurW]; else if(e) - return e_cursor; + return cursor[CurE]; else if(n) - return n_cursor; + return cursor[CurN]; else if(s) - return s_cursor; + return cursor[CurS]; - return normal_cursor; + return cursor[CurNormal]; } Align @@ -82,29 +82,29 @@ xy2align(XRectangle *rect, int x, int y) } Align -cursor2align(Cursor cursor) +cursor2align(Cursor cur) { - if(cursor == w_cursor) + if(cur == cursor[CurW]) return WEST; - else if(cursor == nw_cursor) + else if(cur == cursor[CurNW]) return NWEST; - else if(cursor == n_cursor) + else if(cur == cursor[CurN]) return NORTH; - else if(cursor == ne_cursor) + else if(cur == cursor[CurNE]) return NEAST; - else if(cursor == e_cursor) + else if(cur == cursor[CurE]) return EAST; - else if(cursor == se_cursor) + else if(cur == cursor[CurSE]) return SEAST; - else if(cursor == s_cursor) + else if(cur == cursor[CurS]) return SOUTH; - else if(cursor == sw_cursor) + else if(cur == cursor[CurSW]) return SWEST; return CENTER; /* should not happen */ } static int -check_vert_match(XRectangle * r, XRectangle * neighbor) +check_vert_match(XRectangle *r, XRectangle *neighbor) { /* check if neighbor matches edge */ return (((neighbor->y <= r->y) @@ -317,7 +317,7 @@ mouse_move(Client *c) XGrabServer(dpy); while(XGrabPointer (dpy, root, False, ButtonMotionMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, None, move_cursor, + GrabModeAsync, GrabModeAsync, None, cursor[CurMove], CurrentTime) != GrabSuccess) usleep(20000); @@ -559,7 +559,7 @@ mouse_resize(Client *c, Align align) XGrabServer(dpy); while(XGrabPointer (dpy, c->framewin, False, ButtonMotionMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, None, resize_cursor, + GrabModeAsync, GrabModeAsync, None, cursor[CurResize], CurrentTime) != GrabSuccess) usleep(20000); diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -148,18 +148,17 @@ init_atoms() static void init_cursors() { - normal_cursor = XCreateFontCursor(dpy, XC_left_ptr); - resize_cursor = XCreateFontCursor(dpy, XC_sizing); - move_cursor = XCreateFontCursor(dpy, XC_fleur); - drag_cursor = XCreateFontCursor(dpy, XC_cross); - w_cursor = XCreateFontCursor(dpy, XC_left_side); - e_cursor = XCreateFontCursor(dpy, XC_right_side); - n_cursor = XCreateFontCursor(dpy, XC_top_side); - s_cursor = XCreateFontCursor(dpy, XC_bottom_side); - nw_cursor = XCreateFontCursor(dpy, XC_top_left_corner); - ne_cursor = XCreateFontCursor(dpy, XC_top_right_corner); - sw_cursor = XCreateFontCursor(dpy, XC_bottom_left_corner); - se_cursor = XCreateFontCursor(dpy, XC_bottom_right_corner); + cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); + cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); + cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); + cursor[CurW] = XCreateFontCursor(dpy, XC_left_side); + cursor[CurE] = XCreateFontCursor(dpy, XC_right_side); + cursor[CurN] = XCreateFontCursor(dpy, XC_top_side); + cursor[CurS] = XCreateFontCursor(dpy, XC_bottom_side); + cursor[CurNW] = XCreateFontCursor(dpy, XC_top_left_corner); + cursor[CurNE] = XCreateFontCursor(dpy, XC_top_right_corner); + cursor[CurSW] = XCreateFontCursor(dpy, XC_bottom_left_corner); + cursor[CurSE] = XCreateFontCursor(dpy, XC_bottom_right_corner); } static void @@ -180,7 +179,7 @@ init_screen() rect.width = DisplayWidth(dpy, screen); rect.height = DisplayHeight(dpy, screen); - XDefineCursor(dpy, root, normal_cursor); + XDefineCursor(dpy, root, cursor[CurNormal]); } /* diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -10,7 +10,7 @@ #include "ixp.h" #include "blitz.h" -/* array indexes of atoms */ +/* WM atoms */ enum { WMState, WMProtocols, @@ -18,6 +18,7 @@ enum { WMLast }; +/* NET atoms */ enum { NetNumWS, NetSelWS, @@ -25,12 +26,29 @@ enum { NetLast }; +/* Column modes */ enum { Colequal, Colstack, Colmax }; +/* Cursor */ +enum { + CurNormal, + CurResize, + CurMove, + CurW, + CurE, + CurN, + CurS, + CurNW, + CurNE, + CurSW, + CurSE, + CurLast +}; + /* 8-bit qid.path.type */ enum { Droot, @@ -70,7 +88,6 @@ typedef struct Area Area; typedef struct Frame Frame; typedef struct Client Client; - struct Area { unsigned short id; Frame **frame; @@ -176,19 +193,7 @@ Default def; Atom wm_atom[WMLast]; Atom net_atom[NetLast]; -Cursor normal_cursor; -Cursor resize_cursor; -Cursor move_cursor; -Cursor drag_cursor; -Cursor w_cursor; -Cursor e_cursor; -Cursor n_cursor; -Cursor s_cursor; -Cursor nw_cursor; -Cursor ne_cursor; -Cursor sw_cursor; -Cursor se_cursor; - +Cursor cursor[CurLast]; unsigned int valid_mask, num_lock_mask; /* area.c */ @@ -267,8 +272,8 @@ void init_lock_modifiers(); void mouse_resize(Client *c, Align align); void mouse_move(Client *c); Cursor cursor_for_motion(Client *c, int x, int y); -Align cursor2align(Cursor cursor); -Align xy2align(XRectangle * rect, int x, int y); +Align cursor2align(Cursor cur); +Align xy2align(XRectangle *rect, int x, int y); void drop_move(Client *c, XRectangle *new, XPoint *pt); void grab_mouse(Window w, unsigned long mod, unsigned int button); void ungrab_mouse(Window w, unsigned long mod, unsigned int button);