Creating windowed branch for -w
I will remove the -w (windowed) option from the master branch, for it raises more problems than solutions, I will maintain it in the windowed branch.
This commit is contained in:
parent
8455c36913
commit
21a9aaecb1
40
xmenu.c
40
xmenu.c
|
@ -73,6 +73,7 @@ struct Menu {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function declarations */
|
/* function declarations */
|
||||||
|
static int menuexist(void);
|
||||||
static void getcolor(const char *s, XftColor *color);
|
static void getcolor(const char *s, XftColor *color);
|
||||||
static void getresources(void);
|
static void getresources(void);
|
||||||
static void setupdc(void);
|
static void setupdc(void);
|
||||||
|
@ -113,7 +114,7 @@ static struct Geometry geom;
|
||||||
static struct ScreenGeometry screengeom;
|
static struct ScreenGeometry screengeom;
|
||||||
|
|
||||||
/* flag variables */
|
/* flag variables */
|
||||||
static Bool override_redirect = True;
|
static int wflag = 0;
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ main(int argc, char *argv[])
|
||||||
while ((ch = getopt(argc, argv, "w")) != -1) {
|
while ((ch = getopt(argc, argv, "w")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'w':
|
case 'w':
|
||||||
override_redirect = False;
|
wflag = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
|
@ -147,6 +148,12 @@ main(int argc, char *argv[])
|
||||||
colormap = DefaultColormap(dpy, screen);
|
colormap = DefaultColormap(dpy, screen);
|
||||||
wmdelete=XInternAtom(dpy, "WM_DELETE_WINDOW", True);
|
wmdelete=XInternAtom(dpy, "WM_DELETE_WINDOW", True);
|
||||||
|
|
||||||
|
/* exit if another menu exists */
|
||||||
|
if (menuexist()) {
|
||||||
|
XCloseDisplay(dpy);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* setup */
|
/* setup */
|
||||||
getresources();
|
getresources();
|
||||||
setupdc();
|
setupdc();
|
||||||
|
@ -160,7 +167,7 @@ main(int argc, char *argv[])
|
||||||
calcmenu(rootmenu);
|
calcmenu(rootmenu);
|
||||||
|
|
||||||
/* grab mouse and keyboard */
|
/* grab mouse and keyboard */
|
||||||
if (override_redirect) {
|
if (!wflag) {
|
||||||
grabpointer();
|
grabpointer();
|
||||||
grabkeyboard();
|
grabkeyboard();
|
||||||
}
|
}
|
||||||
|
@ -173,6 +180,27 @@ main(int argc, char *argv[])
|
||||||
run();
|
run();
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check whether another menu exists */
|
||||||
|
static int
|
||||||
|
menuexist(void)
|
||||||
|
{
|
||||||
|
Window wina, winb; /* unused variables */
|
||||||
|
Window *children;
|
||||||
|
unsigned nchildren;
|
||||||
|
XClassHint classh;
|
||||||
|
|
||||||
|
if (XQueryTree(dpy, rootwin, &wina, &winb, &children, &nchildren) == 0)
|
||||||
|
errx(1, "could not query tree");
|
||||||
|
|
||||||
|
while (nchildren-- > 0) {
|
||||||
|
if (XGetClassHint(dpy, *children, &classh) != 0)
|
||||||
|
if (strcmp(classh.res_class, PROGNAME) == 0)
|
||||||
|
return 1;
|
||||||
|
children++;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +338,7 @@ allocmenu(struct Menu *parent, struct Item *list, unsigned level)
|
||||||
menu->y = 0; /* calculated by calcmenu() */
|
menu->y = 0; /* calculated by calcmenu() */
|
||||||
menu->level = level;
|
menu->level = level;
|
||||||
|
|
||||||
swa.override_redirect = override_redirect;
|
swa.override_redirect = (wflag) ? False : True;
|
||||||
swa.background_pixel = dc.decoration[ColorBG].pixel;
|
swa.background_pixel = dc.decoration[ColorBG].pixel;
|
||||||
swa.border_pixel = dc.decoration[ColorFG].pixel;
|
swa.border_pixel = dc.decoration[ColorFG].pixel;
|
||||||
swa.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask
|
swa.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask
|
||||||
|
@ -431,7 +459,7 @@ calcscreengeom(void)
|
||||||
screengeom.screenh = DisplayHeight(dpy, screen);
|
screengeom.screenh = DisplayHeight(dpy, screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* recursivelly calculate height and position of the menus */
|
/* recursivelly calculate menu geometry and set window hints */
|
||||||
static void
|
static void
|
||||||
calcmenu(struct Menu *menu)
|
calcmenu(struct Menu *menu)
|
||||||
{
|
{
|
||||||
|
@ -642,7 +670,7 @@ setcurrmenu(struct Menu *currmenu_new)
|
||||||
/* map menus from currmenu (inclusive) until lcamenu (exclusive) */
|
/* map menus from currmenu (inclusive) until lcamenu (exclusive) */
|
||||||
item = NULL;
|
item = NULL;
|
||||||
for (menu = currmenu; menu != lcamenu; menu = menu->parent) {
|
for (menu = currmenu; menu != lcamenu; menu = menu->parent) {
|
||||||
if (override_redirect == False)
|
if (wflag)
|
||||||
recalcmenu(menu);
|
recalcmenu(menu);
|
||||||
XMapWindow(dpy, menu->win);
|
XMapWindow(dpy, menu->win);
|
||||||
if (item != NULL)
|
if (item != NULL)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user