X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=cprogs%2Fxacpi-simple.c;h=180df33ff1e31ba847dd52e2a5dfd4f00fb75f51;hp=d18624f0bca51b00158766277eb3297266c20009;hb=414ea17c0481b726e985f6a5892b8e2f1f4959bf;hpb=004f87de1499fa37d381633dab590558257596bf diff --git a/cprogs/xacpi-simple.c b/cprogs/xacpi-simple.c index d18624f..180df33 100644 --- a/cprogs/xacpi-simple.c +++ b/cprogs/xacpi-simple.c @@ -15,6 +15,24 @@ * * [1] battery must be quite badly degraded */ +/* + * Copyright (C) 2004 Ian Jackson + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3, + * or (at your option) any later version. + * + * This is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this file; if not, consult the Free Software + * Foundation's website at www.fsf.org, or the GNU Project website at + * www.gnu.org. + */ #include #include @@ -327,6 +345,8 @@ static void initacquire(void) { GC(empty) static XrmDatabase xrm; +static Display *disp; +static int screen; static const char defaultresources[]= #define GC(g) @@ -350,19 +370,6 @@ static const XrmOptionDescRec optiontable[]= { #undef C }; -static void parseargs(int argc, char **argv) { - XrmInitialize(); - - xrm= XrmGetStringDatabase((char*)defaultresources); - if (!xrm) fail("xrmgetstringdatabase"); - - XrmParseCommand(&xrm, (XrmOptionDescRec*)optiontable, - sizeof(optiontable)/sizeof(*optiontable), - program_name, &argc, argv); - - /* if (argc>0) badusage();*/ -} - static const char *getresource(const char *want) { char name_buf[256], class_buf[256]; XrmValue val; @@ -379,13 +386,44 @@ static const char *getresource(const char *want) { return val.addr; } +static void more_resources(const char *str, const char *why) { + XrmDatabase more; + + if (!str) return; + + more= XrmGetStringDatabase((char*)str); + if (!more) fail(why); + XrmCombineDatabase(more,&xrm,0); +} + +static void parseargs(int argc, char **argv) { + Screen *screenscreen; + + XrmInitialize(); + + XrmParseCommand(&xrm, (XrmOptionDescRec*)optiontable, + sizeof(optiontable)/sizeof(*optiontable), + program_name, &argc, argv); + + if (argc>1) badusage(); + + disp= XOpenDisplay(getresource("display")); + if (!disp) fail("could not open display"); + + screen= DefaultScreen(disp); + + screenscreen= ScreenOfDisplay(disp,screen); + if (!screenscreen) fail("screenofdisplay"); + more_resources(XScreenResourceString(screenscreen), "screen resources"); + more_resources(XResourceManagerString(disp), "display resources"); + more_resources(defaultresources, "default resources"); +} + /*---------- display ----------*/ -static Display *disp; static Window win; static int width, height; static Colormap cmap; -static int screen; static unsigned long lastbackground; typedef struct { @@ -510,7 +548,7 @@ static void colour(unsigned long *pix_r, const char *whichcolour) { } static void initgraphics(int argc, char **argv) { - int r; + int xwmgr, r; const char *geom_string; XSizeHints *normal_hints; XWMHints *wm_hints; @@ -520,11 +558,6 @@ static void initgraphics(int argc, char **argv) { program_name_silly= (char*)program_name; - disp= XOpenDisplay(getresource("display")); - if (!disp) fail("could not open display"); - - screen= DefaultScreen(disp); - normal_hints= XAllocSizeHints(); wm_hints= XAllocWMHints(); class_hint= XAllocClassHint(); @@ -534,7 +567,7 @@ static void initgraphics(int argc, char **argv) { geom_string= getresource("geometry"); - r= XWMGeometry(disp,screen, geom_string,"128x32", 0, + xwmgr= XWMGeometry(disp,screen, geom_string,"128x32", 0, normal_hints, &pos_x, &pos_y, &width, &height, @@ -560,7 +593,8 @@ static void initgraphics(int argc, char **argv) { normal_hints->y= pos_y; normal_hints->width= width; normal_hints->height= height; - if (geom_string) normal_hints->flags |= USPosition; + if ((xwmgr & XValue) || (xwmgr & YValue)) + normal_hints->flags |= USPosition; wm_hints->flags= InputHint; wm_hints->input= False;