From 2bf2011cf162b25e8b3ceae3057bb8fd13218ff9 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sun, 29 Jan 2012 03:52:00 +0100 Subject: [PATCH] Init display and W after option in main --- src/wmfs.c | 42 ++++++++++++++++++++++++++---------------- src/wmfs.h | 2 +- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/wmfs.c b/src/wmfs.c index 901c44e..c985c88 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -514,18 +514,28 @@ uicb_quit(Uicb cmd) } static void -exec_uicb_function(char *func, char *cmd) +exec_uicb_function(Display *dpy, Window root, char *func, char *cmd) { - XChangeProperty(W->dpy, W->root, ATOM("_WMFS_FUNCTION"), ATOM("UTF8_STRING"), + Atom utf8s = XInternAtom(dpy, "UTF8_STRING", false); + XClientMessageEvent e = { + .type = ClientMessage, + .message_type = XInternAtom(dpy, "_WMFS_FUNCTION", false), + .window = root, + .format = 32, + .data.l[4] = true + }; + + XChangeProperty(dpy,root, XInternAtom(dpy, "_WMFS_FUNCTION", false), utf8s, 8, PropModeReplace, (unsigned char*)func, strlen(func)); if(!cmd) cmd = ""; - XChangeProperty(W->dpy, W->root, ATOM("_WMFS_CMD"), ATOM("UTF8_STRING"), + XChangeProperty(dpy, root, XInternAtom(dpy, "_WMFS_CMD", false), utf8s, 8, PropModeReplace, (unsigned char*)cmd, strlen(cmd)); - ewmh_send_message(W->root, W->root, "_WMFS_FUNCTION", 0, 0, 0, 0, True); + XSendEvent(dpy, root, false, StructureNotifyMask, (XEvent*)&e); + XSync(dpy, False); } int @@ -533,12 +543,11 @@ main(int argc, char **argv) { int i; bool r; + Display *dpy; + char path[MAX_PATH_LEN] = { 0 }; (void)argc; - W = (struct wmfs*)xcalloc(1, sizeof(struct wmfs)); - - /* Default path ~/.config/wmfs/wmfsrc */ - sprintf(W->confpath, "%s/"CONFIG_DEFAULT_PATH, getenv("HOME")); + sprintf(path, "%s/"CONFIG_DEFAULT_PATH, getenv("HOME")); /* Opt */ while((i = getopt(argc, argv, "hvC:c:")) != -1) @@ -552,37 +561,38 @@ main(int argc, char **argv) " -v Show WMFS version\n" " -c Execute a specified UICB function\n" " -C Launch WMFS with a specified configuration file\n", argv[0]); - free(W); exit(EXIT_SUCCESS); break; case 'v': printf("wmfs("WMFS_VERSION") 2 beta\n"); - free(W); exit(EXIT_SUCCESS); break; case 'c': - if(!(W->dpy = XOpenDisplay(NULL))) + if(!(dpy = XOpenDisplay(NULL))) { fprintf(stderr, "%s: Can't open X server\n", argv[0]); exit(EXIT_FAILURE); } - W->root = DefaultRootWindow(W->dpy); - exec_uicb_function(optarg, argv[optind]); + exec_uicb_function(dpy, DefaultRootWindow(dpy), optarg, argv[optind]); - XCloseDisplay(W->dpy); - free(W); + XCloseDisplay(dpy); exit(EXIT_SUCCESS); break; case 'C': - strncpy(W->confpath, optarg, sizeof(W->confpath)); + strncpy(path, optarg, sizeof(W->confpath)); break; } } + W = (struct wmfs*)xcalloc(1, sizeof(struct wmfs)); + + /* Default path ~/.config/wmfs/wmfsrc */ + W->confpath = path; + /* Get X display */ if(!(W->dpy = XOpenDisplay(NULL))) { diff --git a/src/wmfs.h b/src/wmfs.h index bda56d9..b5e922b 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -320,7 +320,7 @@ struct wmfs GC gc, rgc; Atom *net_atom; char **argv; - char confpath[MAX_PATH_LEN]; + char *confpath; struct barwin *last_clicked_barwin; /* FIFO stuffs */