wayland: Implement tool notification
Those must be notified to clients before proximity_in, only if the client didn't have a resource for this tool previously.
This commit is contained in:
parent
c17d85e16b
commit
a631010a7a
@ -164,6 +164,104 @@ input_device_get_capabilities (ClutterInputDevice *device)
|
|||||||
return capabilities;
|
return capabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum zwp_tablet_tool_v1_type
|
||||||
|
input_device_tool_get_type (ClutterInputDeviceTool *device_tool)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceToolType tool_type;
|
||||||
|
|
||||||
|
tool_type = clutter_input_device_tool_get_tool_type (device_tool);
|
||||||
|
|
||||||
|
switch (tool_type)
|
||||||
|
{
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_NONE:
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_PEN:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_PEN;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_ERASER:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_ERASER;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_BRUSH:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_BRUSH;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_PENCIL:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_PENCIL;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_AIRBRUSH:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_AIRBRUSH;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_MOUSE:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_MOUSE;
|
||||||
|
case CLUTTER_INPUT_DEVICE_TOOL_LENS:
|
||||||
|
return ZWP_TABLET_TOOL_V1_TYPE_LENS;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert_not_reached ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_wayland_tablet_tool_notify_capabilities (MetaWaylandTabletTool *tool,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
uint32_t capabilities;
|
||||||
|
|
||||||
|
capabilities = input_device_get_capabilities (tool->device);
|
||||||
|
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_PRESSURE))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_PRESSURE);
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_DISTANCE))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_DISTANCE);
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_TILT))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_TILT);
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_ROTATION))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_ROTATION);
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_SLIDER))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_SLIDER);
|
||||||
|
if (capabilities & (1 << ZWP_TABLET_TOOL_V1_CAPABILITY_WHEEL))
|
||||||
|
zwp_tablet_tool_v1_send_capability (resource,
|
||||||
|
ZWP_TABLET_TOOL_V1_CAPABILITY_WHEEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_wayland_tablet_tool_notify_details (MetaWaylandTabletTool *tool,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
guint64 serial;
|
||||||
|
|
||||||
|
zwp_tablet_tool_v1_send_type (resource,
|
||||||
|
input_device_tool_get_type (tool->device_tool));
|
||||||
|
|
||||||
|
serial = (guint64) clutter_input_device_tool_get_serial (tool->device_tool);
|
||||||
|
zwp_tablet_tool_v1_send_hardware_serial (resource, (uint32_t) (serial >> 32),
|
||||||
|
(uint32_t) (serial & G_MAXUINT32));
|
||||||
|
|
||||||
|
meta_wayland_tablet_tool_notify_capabilities (tool, resource);
|
||||||
|
|
||||||
|
/* FIXME: zwp_tablet_tool_v1.hardware_id_wacom missing */
|
||||||
|
|
||||||
|
zwp_tablet_tool_v1_send_done (resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_wayland_tablet_tool_ensure_resource (MetaWaylandTabletTool *tool,
|
||||||
|
struct wl_client *client)
|
||||||
|
{
|
||||||
|
struct wl_resource *seat_resource, *tool_resource;
|
||||||
|
|
||||||
|
seat_resource = meta_wayland_tablet_seat_lookup_resource (tool->seat, client);
|
||||||
|
|
||||||
|
if (seat_resource &&
|
||||||
|
!meta_wayland_tablet_tool_lookup_resource (tool, client))
|
||||||
|
{
|
||||||
|
tool_resource = meta_wayland_tablet_tool_create_new_resource (tool, client,
|
||||||
|
seat_resource,
|
||||||
|
0);
|
||||||
|
|
||||||
|
meta_wayland_tablet_seat_notify_tool (tool->seat, tool, client);
|
||||||
|
meta_wayland_tablet_tool_notify_details (tool, tool_resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
broadcast_proximity_in (MetaWaylandTabletTool *tool)
|
broadcast_proximity_in (MetaWaylandTabletTool *tool)
|
||||||
{
|
{
|
||||||
@ -230,7 +328,7 @@ meta_wayland_tablet_tool_set_focus (MetaWaylandTabletTool *tool,
|
|||||||
tool->focus_surface = NULL;
|
tool->focus_surface = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surface != NULL)
|
if (surface != NULL && tool->current_tablet)
|
||||||
{
|
{
|
||||||
struct wl_client *client;
|
struct wl_client *client;
|
||||||
struct wl_list *l;
|
struct wl_list *l;
|
||||||
@ -242,6 +340,7 @@ meta_wayland_tablet_tool_set_focus (MetaWaylandTabletTool *tool,
|
|||||||
|
|
||||||
move_resources_for_client (&tool->focus_resource_list,
|
move_resources_for_client (&tool->focus_resource_list,
|
||||||
&tool->resource_list, client);
|
&tool->resource_list, client);
|
||||||
|
meta_wayland_tablet_tool_ensure_resource (tool, client);
|
||||||
|
|
||||||
l = &tool->focus_resource_list;
|
l = &tool->focus_resource_list;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user