add -r option
authorphillbush <phillbush@cock.li>
Mon, 9 Nov 2020 19:46:25 +0000 (16:46 -0300)
committerphillbush <phillbush@cock.li>
Mon, 9 Nov 2020 19:46:25 +0000 (16:46 -0300)
xmenu.1
xmenu.c

diff --git a/xmenu.1 b/xmenu.1
index 30ea36b..f5d95e5 100644 (file)
--- a/xmenu.1
+++ b/xmenu.1
@@ -3,7 +3,7 @@
 xmenu \- menu utility for X
 .SH SYNOPSIS
 .B xmenu
 xmenu \- menu utility for X
 .SH SYNOPSIS
 .B xmenu
-.RB [ \-iw ]
+.RB [ \-irw ]
 .RB [ -p
 .IR position ]
 .RI [ title ]
 .RB [ -p
 .IR position ]
 .RI [ title ]
@@ -54,6 +54,10 @@ specifies that
 .B xmenu
 must spawn at the position 100x500 of the monitor 0.
 .TP
 .B xmenu
 must spawn at the position 100x500 of the monitor 0.
 .TP
+.B -r
+If this option is set, the right mouse button is disabled;
+so pressing it will not trigger any menu item.
+.TP
 .B -w
 Asks the window manager to draw a border around the menus.
 This option may be buggy in some window managers,
 .B -w
 Asks the window manager to draw a border around the menus.
 This option may be buggy in some window managers,
diff --git a/xmenu.c b/xmenu.c
index 3eab38d..4bea2da 100644 (file)
--- a/xmenu.c
+++ b/xmenu.c
@@ -31,6 +31,7 @@ static Atom netatom[NetLast];
 
 /* flags */
 static int iflag = 0;   /* whether to disable icons */
 
 /* flags */
 static int iflag = 0;   /* whether to disable icons */
+static int rflag = 0;   /* whether to disable right-click */
 static int mflag = 0;   /* whether the user specified a monitor with -p */
 static int pflag = 0;   /* whether the user specified a position with -p */
 static int wflag = 0;   /* whether to let the window manager control XMenu */
 static int mflag = 0;   /* whether the user specified a monitor with -p */
 static int pflag = 0;   /* whether the user specified a position with -p */
 static int wflag = 0;   /* whether to let the window manager control XMenu */
@@ -42,7 +43,7 @@ static int wflag = 0;   /* whether to let the window manager control XMenu */
 static void
 usage(void)
 {
 static void
 usage(void)
 {
-       (void)fprintf(stderr, "usage: xmenu [-iw] [-p position] [title]\n");
+       (void)fprintf(stderr, "usage: xmenu [-irw] [-p position] [title]\n");
        exit(1);
 }
 
        exit(1);
 }
 
@@ -1055,6 +1056,17 @@ itemcycle(struct Menu *currmenu, int direction)
        return item;
 }
 
        return item;
 }
 
+/* check if button is used to open a item on click */
+static int
+isclickbutton(unsigned int button)
+{
+       if (button == Button1)
+               return 1;
+       if (!rflag && button == Button3)
+               return 1;
+       return 0;
+}
+
 /* run event loop */
 static void
 run(struct Menu *currmenu)
 /* run event loop */
 static void
 run(struct Menu *currmenu)
@@ -1091,6 +1103,8 @@ run(struct Menu *currmenu)
                        drawmenus(currmenu);
                        break;
                case ButtonRelease:
                        drawmenus(currmenu);
                        break;
                case ButtonRelease:
+                       if (!isclickbutton(ev.xbutton.button))
+                               break;
                        menu = getmenu(currmenu, ev.xbutton.window);
                        item = getitem(menu, ev.xbutton.y);
                        if (menu == NULL || item == NULL)
                        menu = getmenu(currmenu, ev.xbutton.window);
                        item = getitem(menu, ev.xbutton.y);
                        if (menu == NULL || item == NULL)
@@ -1240,7 +1254,7 @@ main(int argc, char *argv[])
        XClassHint classh;
        int ch;
 
        XClassHint classh;
        int ch;
 
-       while ((ch = getopt(argc, argv, "ip:w")) != -1) {
+       while ((ch = getopt(argc, argv, "ip:rw")) != -1) {
                switch (ch) {
                case 'i':
                        iflag = 1;
                switch (ch) {
                case 'i':
                        iflag = 1;
@@ -1249,6 +1263,9 @@ main(int argc, char *argv[])
                        pflag = 1;
                        parseposition(optarg);
                        break;
                        pflag = 1;
                        parseposition(optarg);
                        break;
+               case 'r':
+                       rflag = 1;
+                       break;
                case 'w':
                        wflag = 1;
                        break;
                case 'w':
                        wflag = 1;
                        break;