summaryrefslogtreecommitdiff
path: root/dmenu.c
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2023-10-29 18:15:23 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2023-10-29 18:15:23 +0530
commitd57b61e776b90ea50dc11da1ba6c5ec4986d9594 (patch)
tree3b650711642b02922e25d4d74b6ecb8eb8c8a477 /dmenu.c
parentaf34cca93b2954a43804e278267454bb0cf67a67 (diff)
applied gridnav patch
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/dmenu.c b/dmenu.c
index 69a5e07..0757615 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -377,6 +377,8 @@ keypress(XKeyEvent *ev)
int len;
KeySym ksym;
Status status;
+ int i, offscreen = 0;
+ struct item *tmpsel;
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
switch (status) {
@@ -503,6 +505,27 @@ insert:
calcoffsets();
break;
case XK_Left:
+ if (columns > 1) {
+ if (!sel)
+ return;
+ tmpsel = sel;
+ for (i = 0; i < lines; i++) {
+ if (!tmpsel->left || tmpsel->left->right != tmpsel) {
+ if (offscreen)
+ break;
+ return;
+ }
+ if (tmpsel == curr)
+ offscreen = 1;
+ tmpsel = tmpsel->left;
+ }
+ sel = tmpsel;
+ if (offscreen) {
+ curr = prev;
+ calcoffsets();
+ }
+ break;
+ }
if (cursor > 0 && (!sel || !sel->left || lines > 0)) {
cursor = nextrune(-1);
break;
@@ -539,6 +562,27 @@ insert:
sel->out = 1;
break;
case XK_Right:
+ if (columns > 1) {
+ if (!sel)
+ return;
+ tmpsel = sel;
+ for (i = 0; i < lines; i++) {
+ if (!tmpsel->right || tmpsel->right->left != tmpsel) {
+ if (offscreen)
+ break;
+ return;
+ }
+ tmpsel = tmpsel->right;
+ if (tmpsel == next)
+ offscreen = 1;
+ }
+ sel = tmpsel;
+ if (offscreen) {
+ curr = next;
+ calcoffsets();
+ }
+ break;
+ }
if (text[cursor] != '\0') {
cursor = nextrune(+1);
break;