]> diplodocus.org Git - xorg-xinput/commitdiff
Merge branch 'master' into mpx
authorPeter Hutterer <peter@cs.unisa.edu.au>
Mon, 7 Apr 2008 07:54:16 +0000 (17:24 +0930)
committerPeter Hutterer <peter@cs.unisa.edu.au>
Mon, 7 Apr 2008 07:54:16 +0000 (17:24 +0930)
Conflicts:

src/xinput.c

(just a whitespace conflict)

1  2 
src/Makefile.am
src/list.c
src/xinput.c
src/xinput.h

diff --combined src/Makefile.am
index 5b09539fd45266a74ebd1e01d199d7438270777c,d537512fb5ac955e958f12ce362118d6a9862017..39580a5876d89e72b49a0a1837d1bb8d32849083
  
  bin_PROGRAMS = xinput
  
xinput_CFLAGS = $(XINPUT_CFLAGS)
- xinput_LDADD = $(XINPUT_LIBS) -lm
AM_CFLAGS = $(XINPUT_CFLAGS)
+ xinput_LDADD = $(XINPUT_LIBS)
  
  xinput_SOURCES = \
      buttonmap.c \
      feedback.c \
 +    hierarchy.c \
      list.c \
      setint.c \
 +    setcp.c \
      setmode.c \
      setptr.c \
      state.c \
diff --combined src/list.c
index a802c10caddc4fa28789faa728b96bf3d40e5630,4004ada51cf76179a76e5b18ffe06f8fe353469e..a50987265e9d10b11cc6c22f11e2b290db4c748a
@@@ -5,15 -5,15 +5,15 @@@
   * documentation for any purpose is  hereby granted without fee, provided that
   * the  above copyright   notice appear  in   all  copies and  that both  that
   * copyright  notice   and   this  permission   notice  appear  in  supporting
-  * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
+  * documentation, and that   the  name of  the authors  not  be  used  in
   * advertising or publicity pertaining to distribution of the software without
-  * specific,  written      prior  permission.     Frederic  Lepied   makes  no
+  * specific,  written      prior  permission.     The authors  make  no
   * representations about the suitability of this software for any purpose.  It
   * is provided "as is" without express or implied warranty.
   *
-  * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
+  * THE AUTHORS DISCLAIM ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
   * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
-  * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
+  * EVENT  SHALL THE AUTHORS  BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
   * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
   * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
   * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
@@@ -23,7 -23,6 +23,7 @@@
  
  #include "xinput.h"
  #include <string.h>
 +#include <X11/extensions/XIproto.h> /* for XI_Device***ChangedNotify */
  
  static void
  print_info(XDeviceInfo        *info, Bool shortformat)
@@@ -34,7 -33,6 +34,7 @@@
      XButtonInfoPtr    b;
      XValuatorInfoPtr  v;
      XAxisInfoPtr      a;
 +    XAttachInfoPtr      att;
  
      printf("\"%s\"\tid=%ld\t[", info->name, info->id);
  
                    printf ("\t\tResolution is %d\n", a->resolution);
                }
                break;
 +            case AttachClass:
 +                att = (XAttachInfoPtr)any;
 +                printf("\tAttached to %d\n", att->attached);
 +                break;
  
            default:
                printf ("unknown class\n");
@@@ -116,56 -110,25 +116,56 @@@ list(Display    *display
      XDeviceInfo               *info;
      int                       loop;
      int                 shortformat = False;
 +    int                 daemon = False;
  
      shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0);
 +    daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0);
  
 -    if (argc == 0 || shortformat) {
 +    if (argc == 0 || shortformat || daemon) {
        int             num_devices;
 -
 -      info = XListInputDevices(display, &num_devices);
 -
 -      for(loop=0; loop<num_devices; loop++) {
 -          print_info(info+loop, shortformat);
 -      }
 +        XEvent  ev;
 +
 +        if (daemon)
 +        {
 +            XiSelectEvent(display, DefaultRootWindow(display), NULL,
 +                          XI_DeviceHierarchyChangedMask |
 +                          XI_DeviceClassesChangedMask);
 +        }
 +
 +        do {
 +            info = XListInputDevices(display, &num_devices);
 +            for(loop=0; loop<num_devices; loop++) {
 +                print_info(info+loop, shortformat);
 +            }
 +
 +            /* just wait for the next generic event to come along */
 +            while (daemon && !XNextEvent(display, &ev))
 +            {
 +                if (ev.type == GenericEvent)
 +                {
 +                    XGenericEvent* gev = (XGenericEvent*)&ev;
 +                    /* we just assume that extension is IReqCode, pretty save
 +                       since we don't register for other events. */
 +                    if (gev->evtype == XI_DeviceHierarchyChangedNotify)
 +                    {
 +                        printf("Hierarchy change.\n");
 +                    } else if (gev->evtype == XI_DeviceClassesChangedNotify)
 +                    {
 +                        printf("Device classes changed.\n");
 +                        free(((XDeviceClassesChangedEvent*)&ev)->inputclassinfo);
 +                    }
 +                    break;
 +                }
 +            }
 +        } while(daemon);
      } else {
        int     ret = EXIT_SUCCESS;
  
        for(loop=0; loop<argc; loop++) {
-           info = find_device_info(display, argv[0], False);
+           info = find_device_info(display, argv[loop], False);
  
            if (!info) {
-               fprintf(stderr, "unable to find device %s\n", argv[0]);
+               fprintf(stderr, "unable to find device %s\n", argv[loop]);
                ret = EXIT_FAILURE;
            } else {
                print_info(info, shortformat);
diff --combined src/xinput.c
index 0fe88789c816b39e84ee40ecb7740c6aa79b9844,1b12ca5a3b2409f60dda1224a9f6633c8764afa7..32a78335a8cdcc0dd590bd9f8b594acf0260dde9
@@@ -5,15 -5,15 +5,15 @@@
   * documentation for any purpose is  hereby granted without fee, provided that
   * the  above copyright   notice appear  in   all  copies and  that both  that
   * copyright  notice   and   this  permission   notice  appear  in  supporting
-  * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
+  * documentation, and that   the  name of  the authors  not  be  used  in
   * advertising or publicity pertaining to distribution of the software without
-  * specific,  written      prior  permission.     Frederic  Lepied   makes  no
+  * specific,  written      prior  permission.     The authors  make  no
   * representations about the suitability of this software for any purpose.  It
   * is provided "as is" without express or implied warranty.
   *
-  * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
+  * THE AUTHORS DISCLAIM ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
   * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
-  * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
+  * EVENT  SHALL THE AUTHORS  BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
   * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
   * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
   * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
@@@ -32,7 -32,7 +32,7 @@@ typedef int (*prog)
  #endif
  );
  
 -typedef struct 
 +typedef struct
  {
      char      *func_name;
      char      *arg_desc;
@@@ -66,7 -66,7 +66,7 @@@ static entry drivers[] 
       set_mode
      },
      {"list",
 -     "[--short || <device name>...]",
 +     "[--loop || --short || <device name>...]",
       list
      },
      {"query-state",
       "",
       version
      },
 +    { "create-master",
 +      "<id> [sendCore (dflt:1)] [enable (dflt:1)]",
 +      create_master
 +    },
 +    { "remove-master",
 +      "<id> [returnMode (dflt:Floating)] [returnPointer] [returnKeyboard]",
 +      remove_master
 +    },
 +    { "reattach",
 +      "<id> <master>",
 +      change_attachment
 +    },
 +    { "float",
 +      "<id>",
 +      float_device
 +    },
 +    { "set-cp",
 +      "<window> <device>",
 +      set_clientpointer
 +    },
      {0, 0, 0
      }
  };
@@@ -110,7 -90,7 +110,7 @@@ is_xinput_present(Display   *display
  {
      XExtensionVersion *version;
      Bool              present;
 -    
 +
      version = XGetExtensionVersion(display, INAME);
  
      if (version && (version != (XExtensionVersion*) NoSuchExtension)) {
@@@ -128,6 -108,7 +128,7 @@@ find_device_info(Display   *display
                 Bool           only_extended)
  {
      XDeviceInfo       *devices;
+     XDeviceInfo *found = NULL;
      int               loop;
      int               num_devices;
      int               len = strlen(name);
        if ((!only_extended || (devices[loop].use >= IsXExtensionDevice)) &&
            ((!is_id && strcmp(devices[loop].name, name) == 0) ||
             (is_id && devices[loop].id == id))) {
-           return &devices[loop];
+           if (found) {
+               fprintf(stderr,
+                       "Warning: There are multiple devices named \"%s\".\n"
+                       "To ensure the correct one is selected, please use "
+                       "the device ID instead.\n\n", name);
+           } else {
+               found = &devices[loop];
+           }
        }
      }
-     return NULL;
+     return found;
  }
  
  static void
- usage()
+ usage(void)
  {
      entry     *pdriver = drivers;
  
diff --combined src/xinput.h
index 961d1f756203f0f65c83f86a33b813b6dac5a2a6,aa2cf70c408431265d6bf5a3b7e0c49c704c98ef..add9aab946d3b5e85a6f77d879b4c3957c189fa4
@@@ -5,15 -5,15 +5,15 @@@
   * documentation for any purpose is  hereby granted without fee, provided that
   * the  above copyright   notice appear  in   all  copies and  that both  that
   * copyright  notice   and   this  permission   notice  appear  in  supporting
-  * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
+  * documentation, and that   the  name of  the authors  not  be  used  in
   * advertising or publicity pertaining to distribution of the software without
-  * specific,  written      prior  permission.     Frederic  Lepied   makes  no
+  * specific,  written      prior  permission.     The authors  make  no
   * representations about the suitability of this software for any purpose.  It
   * is provided "as is" without express or implied warranty.
   *
-  * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
+  * THE AUTHORS DISCLAIM ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
   * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
-  * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
+  * EVENT  SHALL THE AUTHORS  BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
   * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
   * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
   * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
@@@ -152,59 -152,5 +152,59 @@@ query_state
  #endif
  );
  
 -/* end of xinput.h
 - */
 +int
 +create_master(
 +#if NeedFunctionPrototypes
 +               Display*       display,
 +               int            argc,
 +               char           *argv[],
 +               char           *prog_name,
 +               char           *prog_desc
 +#endif
 +);
 +
 +int
 +remove_master(
 +#if NeedFunctionPrototypes
 +               Display*       display,
 +               int            argc,
 +               char           *argv[],
 +               char           *prog_name,
 +               char           *prog_desc
 +#endif
 +);
 +
 +int
 +change_attachment(
 +#if NeedFunctionPrototypes
 +               Display*       display,
 +               int            argc,
 +               char           *argv[],
 +               char           *prog_name,
 +               char           *prog_desc
 +#endif
 +);
 +
 +int
 +float_device(
 +#if NeedFunctionPrototypes
 +               Display*       display,
 +               int            argc,
 +               char           *argv[],
 +               char           *prog_name,
 +               char           *prog_desc
 +#endif
 +);
 +
 +int
 +set_clientpointer(
 +#if NeedFunctionPrototypes
 +               Display*       display,
 +               int            argc,
 +               char           *argv[],
 +               char           *prog_name,
 +               char           *prog_desc
 +#endif
 +);
 +
 +/* end of xinput.h */