Commit 68f124b9 authored by Peter Hutterer's avatar Peter Hutterer

tools: fix grab argument passing for libinput debug-events

The &grab pointer we used to pass as userdata was the address of the function
argument which goes out of scope at the end of the function. This works fine
for devices immediately opened but when a device connects later, the address
may have been re-used since and it's content is undefined. If not NULL, we
end up grabbing the device.

Instead pass the grab option in which is guaranteed to live until the end of
main.

#26Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 0a13223c)
parent e1fe0cd5
......@@ -991,7 +991,7 @@ main(int argc, char **argv)
return 1;
}
li = tools_open_backend(backend, seat_or_device, verbose, grab);
li = tools_open_backend(backend, seat_or_device, verbose, &grab);
if (!li)
return 1;
......
......@@ -958,7 +958,7 @@ main(int argc, char **argv)
return 1;
}
li = tools_open_backend(backend, seat_or_device, verbose, grab);
li = tools_open_backend(backend, seat_or_device, verbose, &grab);
if (!li)
return 1;
......
......@@ -251,7 +251,7 @@ static const struct libinput_interface interface = {
};
static struct libinput *
tools_open_udev(const char *seat, bool verbose, bool grab)
tools_open_udev(const char *seat, bool verbose, bool *grab)
{
struct libinput *li;
struct udev *udev = udev_new();
......@@ -261,7 +261,7 @@ tools_open_udev(const char *seat, bool verbose, bool grab)
return NULL;
}
li = libinput_udev_create_context(&interface, &grab, udev);
li = libinput_udev_create_context(&interface, grab, udev);
if (!li) {
fprintf(stderr, "Failed to initialize context from udev\n");
goto out;
......@@ -285,12 +285,12 @@ out:
}
static struct libinput *
tools_open_device(const char *path, bool verbose, bool grab)
tools_open_device(const char *path, bool verbose, bool *grab)
{
struct libinput_device *device;
struct libinput *li;
li = libinput_path_create_context(&interface, &grab);
li = libinput_path_create_context(&interface, grab);
if (!li) {
fprintf(stderr, "Failed to initialize context from %s\n", path);
return NULL;
......@@ -315,7 +315,7 @@ struct libinput *
tools_open_backend(enum tools_backend which,
const char *seat_or_device,
bool verbose,
bool grab)
bool *grab)
{
struct libinput *li;
......
......@@ -104,7 +104,7 @@ int tools_parse_option(int option,
struct libinput* tools_open_backend(enum tools_backend which,
const char *seat_or_device,
bool verbose,
bool grab);
bool *grab);
void tools_device_apply_config(struct libinput_device *device,
struct tools_options *options);
int tools_exec_command(const char *prefix, int argc, char **argv);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment