wayland/pointer: Return on scroll without client

Return early from handle_scroll_event if no client is focused to avoid
redundant calculations.

Refactor, no functional changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1966>
This commit is contained in:
José Expósito 2021-09-20 19:53:39 +02:00 committed by Marge Bot
parent d703ba56c3
commit cea5c47671

View File

@ -721,10 +721,15 @@ handle_scroll_event (MetaWaylandPointer *pointer,
wl_fixed_t x_value = 0, y_value = 0; wl_fixed_t x_value = 0, y_value = 0;
int x_discrete = 0, y_discrete = 0; int x_discrete = 0, y_discrete = 0;
enum wl_pointer_axis_source source = -1; enum wl_pointer_axis_source source = -1;
MetaWaylandPointerClient *client;
if (clutter_event_is_pointer_emulated (event)) if (clutter_event_is_pointer_emulated (event))
return; return;
client = pointer->focus_client;
if (!client)
return;
switch (event->scroll.scroll_source) switch (event->scroll.scroll_source)
{ {
case CLUTTER_SCROLL_SOURCE_WHEEL: case CLUTTER_SCROLL_SOURCE_WHEEL:
@ -780,51 +785,48 @@ handle_scroll_event (MetaWaylandPointer *pointer,
return; return;
} }
if (pointer->focus_client) wl_resource_for_each (resource, &client->pointer_resources)
{ {
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources) int client_version = wl_resource_get_version (resource);
{
int client_version = wl_resource_get_version (resource);
if (client_version >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION) if (client_version >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION)
wl_pointer_send_axis_source (resource, source); wl_pointer_send_axis_source (resource, source);
/* X axis */ /* X axis */
if (x_discrete != 0 && if (x_discrete != 0 &&
client_version >= WL_POINTER_AXIS_DISCRETE_SINCE_VERSION) client_version >= WL_POINTER_AXIS_DISCRETE_SINCE_VERSION)
wl_pointer_send_axis_discrete (resource, wl_pointer_send_axis_discrete (resource,
WL_POINTER_AXIS_HORIZONTAL_SCROLL, WL_POINTER_AXIS_HORIZONTAL_SCROLL,
x_discrete); x_discrete);
if (x_value) if (x_value)
wl_pointer_send_axis (resource, clutter_event_get_time (event), wl_pointer_send_axis (resource, clutter_event_get_time (event),
WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value); WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value);
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL) && if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL) &&
client_version >= WL_POINTER_AXIS_STOP_SINCE_VERSION) client_version >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
wl_pointer_send_axis_stop (resource, wl_pointer_send_axis_stop (resource,
clutter_event_get_time (event), clutter_event_get_time (event),
WL_POINTER_AXIS_HORIZONTAL_SCROLL); WL_POINTER_AXIS_HORIZONTAL_SCROLL);
/* Y axis */ /* Y axis */
if (y_discrete != 0 && if (y_discrete != 0 &&
client_version >= WL_POINTER_AXIS_DISCRETE_SINCE_VERSION) client_version >= WL_POINTER_AXIS_DISCRETE_SINCE_VERSION)
wl_pointer_send_axis_discrete (resource, wl_pointer_send_axis_discrete (resource,
WL_POINTER_AXIS_VERTICAL_SCROLL, WL_POINTER_AXIS_VERTICAL_SCROLL,
y_discrete); y_discrete);
if (y_value) if (y_value)
wl_pointer_send_axis (resource, clutter_event_get_time (event), wl_pointer_send_axis (resource, clutter_event_get_time (event),
WL_POINTER_AXIS_VERTICAL_SCROLL, y_value); WL_POINTER_AXIS_VERTICAL_SCROLL, y_value);
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL) && if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL) &&
client_version >= WL_POINTER_AXIS_STOP_SINCE_VERSION) client_version >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
wl_pointer_send_axis_stop (resource, wl_pointer_send_axis_stop (resource,
clutter_event_get_time (event), clutter_event_get_time (event),
WL_POINTER_AXIS_VERTICAL_SCROLL); WL_POINTER_AXIS_VERTICAL_SCROLL);
}
meta_wayland_pointer_broadcast_frame (pointer);
} }
meta_wayland_pointer_broadcast_frame (pointer);
} }
gboolean gboolean