fixing comment
[xmenu] / xmenu.c
diff --git a/xmenu.c b/xmenu.c
index bc66235..e66ce27 100644 (file)
--- a/xmenu.c
+++ b/xmenu.c
@@ -467,6 +467,7 @@ allocmenu(struct Menu *parent, struct Item *list, unsigned level)
        menu->y = 0;    /* calculated by setupmenu() */
        menu->level = level;
        menu->drawn = 0;
        menu->y = 0;    /* calculated by setupmenu() */
        menu->level = level;
        menu->drawn = 0;
+       menu->hasicon = 0;
 
        swa.override_redirect = (wflag) ? False : True;
        swa.background_pixel = dc.normal[ColorBG].pixel;
 
        swa.override_redirect = (wflag) ? False : True;
        swa.background_pixel = dc.normal[ColorBG].pixel;
@@ -541,6 +542,9 @@ buildmenutree(unsigned level, const char *label, const char *output, char *file)
                curritem->prev = NULL;
        }
 
                curritem->prev = NULL;
        }
 
+       if (curritem->file)
+               prevmenu->hasicon = 1;
+
        return rootmenu;
 }
 
        return rootmenu;
 }
 
@@ -718,7 +722,7 @@ setupitems(struct Menu *menu)
                 * padding appears 3 times: before the label and around the triangle.
                 */
                itemwidth = textwidth + config.triangle_width + config.horzpadding * 3;
                 * padding appears 3 times: before the label and around the triangle.
                 */
                itemwidth = textwidth + config.triangle_width + config.horzpadding * 3;
-               itemwidth += (iflag) ? 0 : config.iconsize + config.horzpadding;
+               itemwidth += (iflag || !menu->hasicon) ? 0 : config.iconsize + config.horzpadding;
                menu->w = MAX(menu->w, itemwidth);
        }
 }
                menu->w = MAX(menu->w, itemwidth);
        }
 }
@@ -751,10 +755,8 @@ setupmenupos(struct Menu *menu)
                else if (menu->parent->x > menu->w + config.border_pixels + config.gap_pixels)
                        menu->x = menu->parent->x - menu->w - config.border_pixels - config.gap_pixels;
 
                else if (menu->parent->x > menu->w + config.border_pixels + config.gap_pixels)
                        menu->x = menu->parent->x - menu->w - config.border_pixels - config.gap_pixels;
 
-               if (mon.y + mon.h - (menu->caller->y + menu->parent->y) > height)
+               if (mon.y + mon.h - (menu->caller->y + menu->parent->y) >= height)
                        menu->y = menu->caller->y + menu->parent->y;
                        menu->y = menu->caller->y + menu->parent->y;
-               else if (mon.y + mon.h - menu->parent->y > height)
-                       menu->y = menu->parent->y;
                else if (mon.y + mon.h > height)
                        menu->y = mon.y + mon.h - height;
        }
                else if (mon.y + mon.h > height)
                        menu->y = mon.y + mon.h - height;
        }
@@ -791,7 +793,7 @@ setupmenu(struct Menu *menu, XClassHint *classh)
        XStringListToTextProperty(&title, 1, &wintitle);
 
        /* set window manager hints */
        XStringListToTextProperty(&title, 1, &wintitle);
 
        /* set window manager hints */
-       sizeh.flags = PMaxSize | PMinSize;
+       sizeh.flags = USPosition | PMaxSize | PMinSize;
        sizeh.min_width = sizeh.max_width = menu->w;
        sizeh.min_height = sizeh.max_height = menu->h;
        XSetWMProperties(dpy, menu->win, &wintitle, NULL, NULL, 0, &sizeh, NULL, classh);
        sizeh.min_width = sizeh.max_width = menu->w;
        sizeh.min_height = sizeh.max_height = menu->h;
        XSetWMProperties(dpy, menu->win, &wintitle, NULL, NULL, 0, &sizeh, NULL, classh);
@@ -902,7 +904,7 @@ drawitems(struct Menu *menu)
 
                        /* draw text */
                        x = config.horzpadding;
 
                        /* draw text */
                        x = config.horzpadding;
-                       x += (iflag) ? 0 : config.horzpadding + config.iconsize;
+                       x += (iflag || !menu->hasicon) ? 0 : config.horzpadding + config.iconsize;
                        dsel = XftDrawCreate(dpy, item->sel, visual, colormap);
                        dunsel = XftDrawCreate(dpy, item->unsel, visual, colormap);
                        XSetForeground(dpy, dc.gc, dc.selected[ColorFG].pixel);
                        dsel = XftDrawCreate(dpy, item->sel, visual, colormap);
                        dunsel = XftDrawCreate(dpy, item->unsel, visual, colormap);
                        XSetForeground(dpy, dc.gc, dc.selected[ColorFG].pixel);