wmii

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

commit 5662a1b15c55102e4d6107ef35ea39cfe37bc6d7
parent 69ddb68f004252c64fb8da7018185dd614045549
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed, 12 Apr 2006 11:08:31 +0200

added /def/grabmod, which allows to set the modifier key for mouse grab based moves/resizals (default is Mod1)


Diffstat:
cmd/wm/fs.c | 30++++++++++++++++++++++++++++++
cmd/wm/key.c | 6+++---
cmd/wm/view.c | 4++--
cmd/wm/wm.c | 2++
cmd/wm/wm.h | 4++++
rc/wmiirc | 1+
6 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -39,6 +39,7 @@ enum { WMII_IOUNIT = 2048 }; * /def/normcolors FsFnormcolors normal colors * /def/rules FsFrules rules * /def/keys FsFkeys keys + * /def/grabmod FsFgrabmod grab modifier * /tags FsFtags * /bar/ FsDbar * /bar/lab/ FsDlabel @@ -182,6 +183,7 @@ qid2name(Qid *qid) case FsFselcolors: return "selcolors"; break; case FsFnormcolors: return "normcolors"; break; case FsFfont: return "font"; break; + case FsFgrabmod: return "grabmod"; break; case FsFrules: return "rules"; break; case FsFkeys: return "keys"; break; case FsFcolors: return "colors"; break; @@ -263,6 +265,8 @@ name2type(char *name, unsigned char dir_type) return FsFnormcolors; if(!strncmp(name, "font", 5)) return FsFfont; + if(!strncmp(name, "grabmod", 8)) + return FsFgrabmod; if(!strncmp(name, "keys", 5)) return FsFkeys; if(!strncmp(name, "rules", 6)) @@ -400,6 +404,7 @@ mkqid(Qid *dir, char *wname, Qid *new) goto Mkfile; break; case FsFborder: + case FsFgrabmod: case FsFfont: case FsFrules: case FsFselcolors: @@ -544,6 +549,8 @@ type2stat(Stat *stat, char *wname, Qid *dir) break; case FsFfont: return mkstat(stat, dir, wname, strlen(def.font), IXP_DMREAD | IXP_DMWRITE); + case FsFgrabmod: + return mkstat(stat, dir, wname, strlen(def.grabmod), IXP_DMREAD | IXP_DMWRITE); break; } return 0; @@ -920,6 +927,8 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "rules", &m->qid); p = ixp_enc_stat(p, &stat); + fcall->count += type2stat(&stat, "grabmod", &m->qid); + p = ixp_enc_stat(p, &stat); break; case FsDview: if(view.size) { @@ -1088,6 +1097,10 @@ xread(IXPConn *c, Fcall *fcall) else if(fcall->count) memcpy(p, def.rules, fcall->count); break; + case FsFgrabmod: + if((fcall->count = strlen(def.grabmod))) + memcpy(p, def.grabmod, fcall->count); + break; case FsFfont: if((fcall->count = strlen(def.font))) memcpy(p, def.font, fcall->count); @@ -1301,6 +1314,23 @@ xwrite(IXPConn *c, Fcall *fcall) memcpy(def.rules + fcall->offset, fcall->data, fcall->count); def.rules[fcall->offset + fcall->count] = 0; break; + case FsFgrabmod: + { + unsigned long mod; + if(fcall->count > sizeof(buf)) + return Ebadvalue; + memcpy(buf, fcall->data, fcall->count); + buf[fcall->count] = 0; + mod = mod_key_of_str(buf); + if((mod != Mod1Mask) || (mod != Mod2Mask) || (mod != Mod3Mask) + || (mod != Mod4Mask) || (mod != Mod5Mask)) + return Ebadvalue; + cext_strlcpy(def.grabmod, buf, sizeof(def.grabmod)); + def.mod = mod; + if(view.size) + restack_view(view.data[sel]); + } + break; case FsFfont: if(def.font) free(def.font); diff --git a/cmd/wm/key.c b/cmd/wm/key.c @@ -36,8 +36,8 @@ init_lock_keys() valid_mask = 255 & ~(num_lock_mask | LockMask); } -static unsigned long -blitz_strtomod(char *val) +unsigned long +mod_key_of_str(char *val) { unsigned long mod = 0; if (strstr(val, "Shift")) @@ -130,7 +130,7 @@ get_key(const char *name) else kstr = seq[i]; k->key = XKeysymToKeycode(dpy, XStringToKeysym(kstr)); - k->mod = blitz_strtomod(seq[i]); + k->mod = mod_key_of_str(seq[i]); } if(r) { r->id = id++; diff --git a/cmd/wm/view.c b/cmd/wm/view.c @@ -248,8 +248,8 @@ restack_view(View *v) Client *c = a->frame.data[j]->client; if((v->sel == i) && (a->sel == j)) { ungrab_mouse(c->framewin, AnyModifier, AnyButton); - grab_mouse(c->framewin, Mod1Mask, Button1); - grab_mouse(c->framewin, Mod1Mask, Button3); + grab_mouse(c->framewin, def.mod, Button1); + grab_mouse(c->framewin, def.mod, Button3); } else grab_mouse(c->framewin, AnyModifier, Button1); diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -296,6 +296,8 @@ main(int argc, char *argv[]) blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor)); blitz_loadcolor(dpy, screen, def.normcolor, &def.norm); + cext_strlcpy(def.grabmod, "Mod1", sizeof(def.grabmod)); + def.mod = Mod1Mask; init_atoms(); init_cursors(); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -50,6 +50,7 @@ enum { FsFselcolors, FsFnormcolors, FsFkeys, + FsFgrabmod, FsFborder, FsFbar, FsFgeom, @@ -149,6 +150,8 @@ typedef struct { unsigned int keyssz; char *rules; unsigned int rulessz; + char grabmod[5]; + unsigned long mod; } Default; /* global variables */ @@ -252,6 +255,7 @@ void new_ixp_conn(IXPConn *c); void handle_key(Window w, unsigned long mod, KeyCode keycode); void update_keys(); void init_lock_keys(); +unsigned long mod_key_of_str(char *val); /* mouse.c */ void do_mouse_resize(Client *c, Align align); diff --git a/rc/wmiirc b/rc/wmiirc @@ -49,6 +49,7 @@ status & proglist $OLD_PATH >/tmp/ns.$USER.$DISPLAY/progs & # SHORTCUTS +xwrite /def/grabmod $MODKEY wmiir write /def/keys <<EOF $MODKEY-$LEFT $MODKEY-$RIGHT