Add an input object to e_border structure.
Only setup input object callbacks once. Use input object for mouse_in/out detection. NB: This is needed for wayland clients to properly function with regard to E's border pointer focus. Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
5624cee73f
commit
9842c268c3
|
@ -6385,6 +6385,7 @@ _e_border_cb_mouse_x_in(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event
|
||||||
if (grabbed) return ECORE_CALLBACK_RENEW;
|
if (grabbed) return ECORE_CALLBACK_RENEW;
|
||||||
bd = e_border_find_by_window(ev->event_win);
|
bd = e_border_find_by_window(ev->event_win);
|
||||||
if (!bd) return ECORE_CALLBACK_RENEW;
|
if (!bd) return ECORE_CALLBACK_RENEW;
|
||||||
|
if (bd->input_object) return ECORE_CALLBACK_RENEW;
|
||||||
if ((bd == focused) || (bd == focusing)) return ECORE_CALLBACK_RENEW;
|
if ((bd == focused) || (bd == focusing)) return ECORE_CALLBACK_RENEW;
|
||||||
if (focus_locked && (bd != warp_timer_border)) return ECORE_CALLBACK_RENEW;
|
if (focus_locked && (bd != warp_timer_border)) return ECORE_CALLBACK_RENEW;
|
||||||
if (e_object_is_del(E_OBJECT(bd))) return ECORE_CALLBACK_RENEW;
|
if (e_object_is_del(E_OBJECT(bd))) return ECORE_CALLBACK_RENEW;
|
||||||
|
@ -6405,7 +6406,8 @@ _e_border_cb_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
|
||||||
if (bd->fullscreen) return;
|
if (bd->fullscreen) return;
|
||||||
if ((bd != focused) && (bd == focusing)) return;
|
if ((bd != focused) && (bd == focusing)) return;
|
||||||
if (e_object_is_del(E_OBJECT(bd))) return;
|
if (e_object_is_del(E_OBJECT(bd))) return;
|
||||||
if (E_INSIDE(ev->output.x, ev->output.y, bd->x, bd->y, bd->w, bd->h)) return;
|
if (!bd->input_object)
|
||||||
|
if (E_INSIDE(ev->output.x, ev->output.y, bd->x, bd->y, bd->w, bd->h)) return;
|
||||||
if (!bd->iconic)
|
if (!bd->iconic)
|
||||||
e_focus_event_mouse_out(bd);
|
e_focus_event_mouse_out(bd);
|
||||||
bd->mouse.current.mx = ev->output.x;
|
bd->mouse.current.mx = ev->output.x;
|
||||||
|
@ -6420,6 +6422,7 @@ _e_border_cb_mouse_x_out(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even
|
||||||
if (grabbed) return ECORE_CALLBACK_RENEW;
|
if (grabbed) return ECORE_CALLBACK_RENEW;
|
||||||
bd = e_border_find_by_window(ev->event_win);
|
bd = e_border_find_by_window(ev->event_win);
|
||||||
if (!bd) return ECORE_CALLBACK_RENEW;
|
if (!bd) return ECORE_CALLBACK_RENEW;
|
||||||
|
if (bd->input_object) return ECORE_CALLBACK_RENEW;
|
||||||
if (bd->fullscreen) return ECORE_CALLBACK_RENEW;
|
if (bd->fullscreen) return ECORE_CALLBACK_RENEW;
|
||||||
if ((bd != focused) && (bd == focusing)) return ECORE_CALLBACK_RENEW;
|
if ((bd != focused) && (bd == focusing)) return ECORE_CALLBACK_RENEW;
|
||||||
if (e_object_is_del(E_OBJECT(bd))) return ECORE_CALLBACK_RENEW;
|
if (e_object_is_del(E_OBJECT(bd))) return ECORE_CALLBACK_RENEW;
|
||||||
|
@ -8116,6 +8119,14 @@ _e_border_eval0(E_Border *bd)
|
||||||
bd->client.icccm.title);
|
bd->client.icccm.title);
|
||||||
bd->theme_shadow = !!edje_object_data_get(o, "shadow");
|
bd->theme_shadow = !!edje_object_data_get(o, "shadow");
|
||||||
_e_border_shadow(bd);
|
_e_border_shadow(bd);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _e_border_cb_mouse_in, bd);
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_border_cb_mouse_move, bd);
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, _e_border_cb_mouse_out, bd);
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_border_cb_mouse_down, bd);
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _e_border_cb_mouse_up, bd);
|
||||||
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL, _e_border_cb_mouse_wheel, bd);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -185,9 +185,12 @@ struct _E_Border
|
||||||
Ecore_X_Window win;
|
Ecore_X_Window win;
|
||||||
Evas_Object *bg_object;
|
Evas_Object *bg_object;
|
||||||
Evas_Object *icon_object;
|
Evas_Object *icon_object;
|
||||||
|
Evas_Object *input_object;
|
||||||
Eina_Stringshare *internal_icon;
|
Eina_Stringshare *internal_icon;
|
||||||
Eina_Stringshare *internal_icon_key;
|
Eina_Stringshare *internal_icon_key;
|
||||||
|
|
||||||
|
Eina_Bool callbacks_set : 1;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Ecore_X_Window lock_win;
|
Ecore_X_Window lock_win;
|
||||||
|
|
Loading…
Reference in New Issue