diff options
Diffstat (limited to 'xkbwatch.c')
-rw-r--r-- | xkbwatch.c | 368 |
1 files changed, 203 insertions, 165 deletions
@@ -1,4 +1,3 @@ -/* $Xorg: xkbwatch.c,v 1.4 2000/08/17 19:54:51 cpqbld Exp $ */ /************************************************************ Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc. @@ -24,7 +23,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ -/* $XFree86: xc/programs/xkbutils/xkbwatch.c,v 3.4 2001/01/17 23:46:14 dawes Exp $ */ #include <stdlib.h> #include <X11/X.h> @@ -36,24 +34,20 @@ #include <X11/Xaw/Cardinals.h> #include <X11/Xaw/Box.h> -#define OPAQUE_DEFINED #define BOOLEAN_DEFINED -#define DEBUG_VAR_NOT_LOCAL -#define DEBUG_VAR debugFlags #include "utils.h" #include "LED.h" /***====================================================================***/ -static Display * inDpy,*outDpy; -static int evBase,errBase; +static Display *inDpy, *outDpy; +static int evBase, errBase; /***====================================================================***/ - static XrmOptionDescRec options[] = { -{"-off", "*on.on", XrmoptionNoArg, "FALSE"}, -{"-on", "*on.on", XrmoptionNoArg, "TRUE"} + {"-off", "*on.on", XrmoptionNoArg, "FALSE"}, + {"-on", "*on.on", XrmoptionNoArg, "TRUE"} }; /***====================================================================***/ @@ -61,172 +55,216 @@ static XrmOptionDescRec options[] = { int main(int argc, char *argv[]) { -Widget toplevel; -XtAppContext app_con; -Widget panel; -Widget base[XkbNumModifiers]; -Widget latched[XkbNumModifiers]; -Widget locked[XkbNumModifiers]; -Widget effective[XkbNumModifiers]; -Widget compat[XkbNumModifiers]; -Widget baseBox,latchBox,lockBox,effBox,compatBox; -register int i; -unsigned bit; -XkbEvent ev; -XkbStateRec state; -static Arg hArgs[]= {{ XtNorientation, (XtArgVal)XtorientHorizontal }}; -static Arg vArgs[]= {{ XtNorientation, (XtArgVal)XtorientVertical }}; -static Arg onArgs[]= {{ XtNon, (XtArgVal)True }}; -static Arg offArgs[]= {{ XtNon, (XtArgVal)False }}; -static char * fallback_resources[] = { - "*Box*background: grey50", - "*Box*borderWidth: 0", - "*Box*vSpace: 1", - NULL -}; + Widget toplevel; + XtAppContext app_con; + Widget panel; + Widget base[XkbNumModifiers]; + Widget latched[XkbNumModifiers]; + Widget locked[XkbNumModifiers]; + Widget effective[XkbNumModifiers]; + Widget compat[XkbNumModifiers]; + Widget baseBox, latchBox, lockBox, effBox, compatBox; + register int i; + unsigned bit; + XkbEvent ev; + XkbStateRec state; + static Arg hArgs[] = { {XtNorientation, (XtArgVal) XtorientHorizontal} }; + static Arg vArgs[] = { {XtNorientation, (XtArgVal) XtorientVertical} }; + static Arg onArgs[] = { {XtNon, (XtArgVal) True} }; + static Arg offArgs[] = { {XtNon, (XtArgVal) False} }; + static char *fallback_resources[] = { + "*Box*background: grey50", + "*Box*borderWidth: 0", + "*Box*vSpace: 1", + NULL + }; + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-version") == 0) { + printf("xkbwatch (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION); + exit(0); + } + } - uSetEntryFile(NullString); - uSetDebugFile(NullString); uSetErrorFile(NullString); toplevel = XtOpenApplication(&app_con, "XkbWatch", - options, XtNumber(options), &argc, argv, - fallback_resources, - sessionShellWidgetClass, NULL, ZERO); - if (toplevel==NULL) { - uFatalError("Couldn't create application top level\n"); - exit(1); + options, XtNumber(options), &argc, argv, + fallback_resources, + sessionShellWidgetClass, NULL, ZERO); + if (toplevel == NULL) { + uFatalError("Couldn't create application top level\n"); + exit(1); } - inDpy= outDpy= XtDisplay(toplevel); + inDpy = outDpy = XtDisplay(toplevel); if (inDpy) { - int i1,mn,mj; - mj= XkbMajorVersion; - mn= XkbMinorVersion; - if (!XkbQueryExtension(inDpy,&i1,&evBase,&errBase,&mj,&mn)) { - uFatalError("Server doesn't support a compatible XKB\n"); - exit(1); - } + int i1, mn, mj; + + mj = XkbMajorVersion; + mn = XkbMinorVersion; + if (!XkbQueryExtension(inDpy, &i1, &evBase, &errBase, &mj, &mn)) { + uFatalError("Server doesn't support a compatible XKB\n"); + exit(1); + } } - panel= XtCreateManagedWidget("xkbwatch",boxWidgetClass,toplevel,vArgs,1); - if (panel==NULL) { - uFatalError("Couldn't create top level box\n"); - exit(1); + panel = + XtCreateManagedWidget("xkbwatch", boxWidgetClass, toplevel, vArgs, 1); + if (panel == NULL) { + uFatalError("Couldn't create top level box\n"); + exit(1); } - baseBox= XtCreateManagedWidget("base",boxWidgetClass,panel,hArgs,1); - if (baseBox==NULL) - uFatalError("Couldn't create base modifiers box\n"); - latchBox= XtCreateManagedWidget("latched",boxWidgetClass,panel,hArgs,1); - if (latchBox==NULL) - uFatalError("Couldn't create latched modifiers box\n"); - lockBox= XtCreateManagedWidget("locked",boxWidgetClass,panel,hArgs,1); - if (lockBox==NULL) - uFatalError("Couldn't create locked modifiers box\n"); - effBox= XtCreateManagedWidget("effective",boxWidgetClass,panel,hArgs,1); - if (effBox==NULL) - uFatalError("Couldn't create effective modifiers box\n"); - compatBox= XtCreateManagedWidget("compat",boxWidgetClass,panel,hArgs,1); - if (compatBox==NULL) - uFatalError("Couldn't create compatibility state box\n"); - XkbSelectEvents(inDpy,XkbUseCoreKbd,XkbStateNotifyMask,XkbStateNotifyMask); - XkbGetState(inDpy,XkbUseCoreKbd,&state); - for (i=XkbNumModifiers-1,bit=0x80;i>=0;i--,bit>>=1) { - ArgList list; - char buf[30]; - sprintf(buf,"base%d",i); - if (state.base_mods&bit) list= onArgs; - else list= offArgs; - base[i]= XtCreateManagedWidget(buf,ledWidgetClass,baseBox,list,1); - sprintf(buf,"latched%d",i); - if (state.latched_mods&bit) list= onArgs; - else list= offArgs; - latched[i]= XtCreateManagedWidget(buf,ledWidgetClass,latchBox,list,1); - sprintf(buf,"locked%d",i); - if (state.locked_mods&bit) list= onArgs; - else list= offArgs; - locked[i]= XtCreateManagedWidget(buf,ledWidgetClass,lockBox,list,1); - sprintf(buf,"effective%d",i); - if (state.mods&bit) list= onArgs; - else list= offArgs; - effective[i]= XtCreateManagedWidget(buf,ledWidgetClass,effBox,list,1); - sprintf(buf,"compat%d",i); - if (state.compat_state&bit) list= onArgs; - else list= offArgs; - compat[i]= XtCreateManagedWidget(buf,ledWidgetClass,compatBox,list,1); + baseBox = XtCreateManagedWidget("base", boxWidgetClass, panel, hArgs, 1); + if (baseBox == NULL) + uFatalError("Couldn't create base modifiers box\n"); + latchBox = + XtCreateManagedWidget("latched", boxWidgetClass, panel, hArgs, 1); + if (latchBox == NULL) + uFatalError("Couldn't create latched modifiers box\n"); + lockBox = XtCreateManagedWidget("locked", boxWidgetClass, panel, hArgs, 1); + if (lockBox == NULL) + uFatalError("Couldn't create locked modifiers box\n"); + effBox = + XtCreateManagedWidget("effective", boxWidgetClass, panel, hArgs, 1); + if (effBox == NULL) + uFatalError("Couldn't create effective modifiers box\n"); + compatBox = + XtCreateManagedWidget("compat", boxWidgetClass, panel, hArgs, 1); + if (compatBox == NULL) + uFatalError("Couldn't create compatibility state box\n"); + XkbSelectEvents(inDpy, XkbUseCoreKbd, XkbStateNotifyMask, + XkbStateNotifyMask); + XkbGetState(inDpy, XkbUseCoreKbd, &state); + for (i = XkbNumModifiers - 1, bit = 0x80; i >= 0; i--, bit >>= 1) { + ArgList list; + + char buf[30]; + + sprintf(buf, "base%d", i); + if (state.base_mods & bit) + list = onArgs; + else + list = offArgs; + base[i] = XtCreateManagedWidget(buf, ledWidgetClass, baseBox, list, 1); + sprintf(buf, "latched%d", i); + if (state.latched_mods & bit) + list = onArgs; + else + list = offArgs; + latched[i] = + XtCreateManagedWidget(buf, ledWidgetClass, latchBox, list, 1); + sprintf(buf, "locked%d", i); + if (state.locked_mods & bit) + list = onArgs; + else + list = offArgs; + locked[i] = + XtCreateManagedWidget(buf, ledWidgetClass, lockBox, list, 1); + sprintf(buf, "effective%d", i); + if (state.mods & bit) + list = onArgs; + else + list = offArgs; + effective[i] = + XtCreateManagedWidget(buf, ledWidgetClass, effBox, list, 1); + sprintf(buf, "compat%d", i); + if (state.compat_state & bit) + list = onArgs; + else + list = offArgs; + compat[i] = + XtCreateManagedWidget(buf, ledWidgetClass, compatBox, list, 1); } XtRealizeWidget(toplevel); while (1) { - XtAppNextEvent(app_con,&ev.core); - if (ev.core.type==evBase+XkbEventCode) { - if (ev.any.xkb_type==XkbStateNotify) { - unsigned changed; - if (ev.state.changed&XkbModifierBaseMask) { - changed= ev.state.base_mods^state.base_mods; - state.base_mods= ev.state.base_mods; - for (i=0,bit=1;i<XkbNumModifiers;i++,bit<<=1) { - if (changed&bit) { - ArgList list; - if (state.base_mods&bit) list= onArgs; - else list= offArgs; - XtSetValues(base[i],list,1); - } - } - } - if (ev.state.changed&XkbModifierLatchMask) { - changed= ev.state.latched_mods^state.latched_mods; - state.latched_mods= ev.state.latched_mods; - for (i=0,bit=1;i<XkbNumModifiers;i++,bit<<=1) { - if (changed&bit) { - ArgList list; - if (state.latched_mods&bit) list= onArgs; - else list= offArgs; - XtSetValues(latched[i],list,1); - } - } - } - if (ev.state.changed&XkbModifierLockMask) { - changed= ev.state.locked_mods^state.locked_mods; - state.locked_mods= ev.state.locked_mods; - for (i=0,bit=1;i<XkbNumModifiers;i++,bit<<=1) { - if (changed&bit) { - ArgList list; - if (state.locked_mods&bit) list= onArgs; - else list= offArgs; - XtSetValues(locked[i],list,1); - } - } - } - if (ev.state.changed&XkbModifierStateMask) { - changed= ev.state.mods^state.mods; - state.mods= ev.state.mods; - for (i=0,bit=1;i<XkbNumModifiers;i++,bit<<=1) { - if (changed&bit) { - ArgList list; - if (state.mods&bit) list= onArgs; - else list= offArgs; - XtSetValues(effective[i],list,1); - } - } - } - if (ev.state.changed&XkbCompatStateMask) { - changed= ev.state.compat_state^state.compat_state; - state.compat_state= ev.state.compat_state; - for (i=0,bit=1;i<XkbNumModifiers;i++,bit<<=1) { - if (changed&bit) { - ArgList list; - if (state.compat_state&bit) list= onArgs; - else list= offArgs; - XtSetValues(compat[i],list,1); - } - } - } - } - } - else XtDispatchEvent(&ev.core); + XtAppNextEvent(app_con, &ev.core); + if (ev.core.type == evBase + XkbEventCode) { + if (ev.any.xkb_type == XkbStateNotify) { + unsigned changed; + + if (ev.state.changed & XkbModifierBaseMask) { + changed = ev.state.base_mods ^ state.base_mods; + state.base_mods = ev.state.base_mods; + for (i = 0, bit = 1; i < XkbNumModifiers; i++, bit <<= 1) { + if (changed & bit) { + ArgList list; + + if (state.base_mods & bit) + list = onArgs; + else + list = offArgs; + XtSetValues(base[i], list, 1); + } + } + } + if (ev.state.changed & XkbModifierLatchMask) { + changed = ev.state.latched_mods ^ state.latched_mods; + state.latched_mods = ev.state.latched_mods; + for (i = 0, bit = 1; i < XkbNumModifiers; i++, bit <<= 1) { + if (changed & bit) { + ArgList list; + + if (state.latched_mods & bit) + list = onArgs; + else + list = offArgs; + XtSetValues(latched[i], list, 1); + } + } + } + if (ev.state.changed & XkbModifierLockMask) { + changed = ev.state.locked_mods ^ state.locked_mods; + state.locked_mods = ev.state.locked_mods; + for (i = 0, bit = 1; i < XkbNumModifiers; i++, bit <<= 1) { + if (changed & bit) { + ArgList list; + + if (state.locked_mods & bit) + list = onArgs; + else + list = offArgs; + XtSetValues(locked[i], list, 1); + } + } + } + if (ev.state.changed & XkbModifierStateMask) { + changed = ev.state.mods ^ state.mods; + state.mods = ev.state.mods; + for (i = 0, bit = 1; i < XkbNumModifiers; i++, bit <<= 1) { + if (changed & bit) { + ArgList list; + + if (state.mods & bit) + list = onArgs; + else + list = offArgs; + XtSetValues(effective[i], list, 1); + } + } + } + if (ev.state.changed & XkbCompatStateMask) { + changed = ev.state.compat_state ^ state.compat_state; + state.compat_state = ev.state.compat_state; + for (i = 0, bit = 1; i < XkbNumModifiers; i++, bit <<= 1) { + if (changed & bit) { + ArgList list; + + if (state.compat_state & bit) + list = onArgs; + else + list = offArgs; + XtSetValues(compat[i], list, 1); + } + } + } + } + } + else + XtDispatchEvent(&ev.core); } /* BAIL: */ - if (inDpy) - XCloseDisplay(inDpy); - if (outDpy!=inDpy) - XCloseDisplay(outDpy); - inDpy= outDpy= NULL; + if (inDpy) + XCloseDisplay(inDpy); + if (outDpy != inDpy) + XCloseDisplay(outDpy); + inDpy = outDpy = NULL; return 0; } |