summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-08-23 14:24:11 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-08-25 14:48:11 -0400
commit2510afe821495df6b3e7864da15be26ab5748642 (patch)
treedd134a670dce421d55787a0f167ec47671933efc
parent91f513f77d6c2083fff7e39ae56b3eb70929d28b (diff)
downloadefl-2510afe821495df6b3e7864da15be26ab5748642.tar.gz
efl-wl: match nested wl seats based on display ordering
a nested compositor will have a mismatch between canvas seat id and compositor seat id, so this attempts to perform matching based on the order that they are listed, which should be identical @fix
-rw-r--r--src/lib/efl_wl/efl_wl.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/lib/efl_wl/efl_wl.c b/src/lib/efl_wl/efl_wl.c
index d65ce85f15..5c317141af 100644
--- a/src/lib/efl_wl/efl_wl.c
+++ b/src/lib/efl_wl/efl_wl.c
@@ -4149,14 +4149,27 @@ comp_seat_proxy_update(Comp_Seat *s)
{
Eina_Iterator *it;
Ecore_Wl2_Input *input;
- Eina_Bool drm;
+ Ecore_Wl2_Window *win;
+ int n = 0, i = 0;
if (s->seat) return;
- drm = !ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(s->c->evas));
+ win = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(s->c->evas));
+ if (win)
+ {
+ Ecore_Wl2_Display *ewd = ecore_wl2_window_display_get(win);
+ it = ecore_wl2_display_inputs_get(ewd);
+ EINA_ITERATOR_FOREACH(it, input)
+ {
+ if (ecore_wl2_input_seat_id_get(input) == evas_device_seat_id_get(s->dev))
+ break;
+ n++;
+ }
+ eina_iterator_free(it);
+ }
it = ecore_wl2_display_inputs_get(s->c->parent_disp);
EINA_ITERATOR_FOREACH(it, input)
{
- if (drm)
+ if (!win)
{
if (eina_streq(ecore_wl2_input_name_get(input), evas_device_name_get(s->dev)))
{
@@ -4164,14 +4177,12 @@ comp_seat_proxy_update(Comp_Seat *s)
break;
}
}
- else
+ else if (i == n)
{
- if (ecore_wl2_input_seat_id_get(input) == evas_device_seat_id_get(s->dev))
- {
- s->seat = input;
- break;
- }
+ s->seat = input;
+ break;
}
+ i++;
}
eina_iterator_free(it);
}