Update libinput_tool_ref/unref() to return the tool object

For consistency with the other ref/unref funtions, see
13e9a1d744

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2014-06-27 11:05:30 +10:00
parent cf5ba7056f
commit 9a2f2ab46b
3 changed files with 51 additions and 8 deletions

View file

@ -583,21 +583,25 @@ libinput_tool_get_serial(struct libinput_tool *tool)
return tool->serial; return tool->serial;
} }
LIBINPUT_EXPORT void LIBINPUT_EXPORT struct libinput_tool *
libinput_tool_ref(struct libinput_tool *tool) libinput_tool_ref(struct libinput_tool *tool)
{ {
tool->refcount++; tool->refcount++;
return tool;
} }
LIBINPUT_EXPORT void LIBINPUT_EXPORT struct libinput_tool *
libinput_tool_unref(struct libinput_tool *tool) libinput_tool_unref(struct libinput_tool *tool)
{ {
assert(tool->refcount > 0); assert(tool->refcount > 0);
if (--tool->refcount == 0) { tool->refcount--;
list_remove(&tool->link); if (tool->refcount > 0)
free(tool); return tool;
}
list_remove(&tool->link);
free(tool);
return NULL;
} }
struct libinput_source * struct libinput_source *

View file

@ -1010,8 +1010,9 @@ libinput_tool_get_type(struct libinput_tool *tool);
* Increment the ref count of tool by one * Increment the ref count of tool by one
* *
* @param tool The tool to increment the ref count of * @param tool The tool to increment the ref count of
* @return The passed tool
*/ */
void struct libinput_tool *
libinput_tool_ref(struct libinput_tool *tool); libinput_tool_ref(struct libinput_tool *tool);
/** /**
@ -1021,8 +1022,9 @@ libinput_tool_ref(struct libinput_tool *tool);
* the memory allocated for tool will be freed. * the memory allocated for tool will be freed.
* *
* @param tool The tool to decrement the ref count of * @param tool The tool to decrement the ref count of
* @return NULL if the tool was destroyed otherwise the passed tool
*/ */
void struct libinput_tool *
libinput_tool_unref(struct libinput_tool *tool); libinput_tool_unref(struct libinput_tool *tool);
/** /**

View file

@ -537,6 +537,42 @@ START_TEST(invalid_serials)
} }
END_TEST END_TEST
START_TEST(tool_ref)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event_tablet *tablet_event;
struct libinput_event *event;
struct libinput_tool *tool;
litest_drain_events(li);
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
litest_event(dev, EV_SYN, SYN_REPORT, 0);
libinput_dispatch(li);
while ((event = libinput_get_event(li))) {
if (libinput_event_get_type(event) ==
LIBINPUT_EVENT_TABLET_TOOL_UPDATE) {
break;
}
libinput_event_destroy(event);
}
tablet_event = libinput_event_get_tablet_event(event);
tool = libinput_event_tablet_get_tool(tablet_event);
ck_assert_notnull(tool);
ck_assert(tool == libinput_tool_ref(tool));
ck_assert(tool == libinput_tool_unref(tool));
ck_assert(libinput_tool_unref(tool) == NULL);
libinput_event_destroy(event);
}
END_TEST
START_TEST(pad_buttons_ignored) START_TEST(pad_buttons_ignored)
{ {
struct litest_device *dev = litest_current_device(); struct litest_device *dev = litest_current_device();
@ -589,6 +625,7 @@ END_TEST
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
litest_add("tablet:tool", tool_ref, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
litest_add("tablet:tool_serial", tool_serial, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY); litest_add("tablet:tool_serial", tool_serial, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
litest_add("tablet:tool_serial", serial_changes_tool, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY); litest_add("tablet:tool_serial", serial_changes_tool, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
litest_add("tablet:tool_serial", invalid_serials, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY); litest_add("tablet:tool_serial", invalid_serials, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);