}
static void
-_e_comp_wl_evas_cb_delete_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
- E_Client *ec;
-
- if (!(ec = data)) return;
-
- e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
-
- e_object_del(E_OBJECT(ec));
-
- _e_comp_wl_focus_check();
-
- /* TODO: Delete request send ??
- * NB: No such animal wrt wayland */
-}
-
-static void
-_e_comp_wl_evas_cb_kill_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
- E_Client *ec;
-
- if (!(ec = data)) return;
-
- e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
- if (ec->comp_data)
- {
- if (ec->comp_data->reparented)
- e_client_comp_hidden_set(ec, EINA_TRUE);
- }
-
- evas_object_pass_events_set(ec->frame, EINA_TRUE);
- if (ec->visible) evas_object_hide(ec->frame);
- if (!ec->internal) e_object_del(E_OBJECT(ec));
-
- _e_comp_wl_focus_check();
-}
-
-static void
-_e_comp_wl_evas_cb_ping(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
- E_Client *ec;
-
- if (!(ec = data)) return;
-
- e_client_shell_ping(ec);
-}
-
-static void
-_e_comp_wl_evas_cb_color_set(void *data, Evas_Object *obj, void *event EINA_UNUSED)
-{
- E_Client *ec;
- int a = 0;
-
- if (!(ec = data)) return;
- evas_object_color_get(obj, NULL, NULL, NULL, &a);
- if (ec->netwm.opacity == a) return;
- ec->netwm.opacity = a;
- ec->netwm.opacity_changed = EINA_TRUE;
-}
-
-static void
_e_comp_wl_buffer_damage_set(E_Comp_Wl_Buffer *buffer, Eina_List *buffer_damages)
{
Eina_Rectangle *damage_rect = NULL;
evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_FOCUS_IN, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_in, ec);
evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_FOCUS_OUT, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_out, ec);
- /* setup delete/kill callbacks */
- evas_object_smart_callback_add(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request, ec);
- evas_object_smart_callback_add(ec->frame, "kill_request", _e_comp_wl_evas_cb_kill_request, ec);
-
- /* setup ping callback */
- evas_object_smart_callback_add(ec->frame, "ping", _e_comp_wl_evas_cb_ping, ec);
- evas_object_smart_callback_add(ec->frame, "color_set", _e_comp_wl_evas_cb_color_set, ec);
-
ec->comp_data->evas_init = EINA_TRUE;
}
evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_IN, _e_comp_wl_evas_cb_focus_in);
evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_OUT, _e_comp_wl_evas_cb_focus_out);
- evas_object_smart_callback_del(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request);
- evas_object_smart_callback_del(ec->frame, "kill_request", _e_comp_wl_evas_cb_kill_request);
-
- evas_object_smart_callback_del(ec->frame, "ping", _e_comp_wl_evas_cb_ping);
- evas_object_smart_callback_del(ec->frame, "color_set", _e_comp_wl_evas_cb_color_set);
-
ec->comp_data->evas_init = EINA_FALSE;
}
static Eina_Bool
_e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev)
{
- int ec_x, ec_y;
-
e_comp_wl->ptr.x = wl_fixed_from_int(ev->x);
e_comp_wl->ptr.y = wl_fixed_from_int(ev->y);
- if (e_comp_wl->selection.target &&
- e_comp_wl->drag)
- {
- struct wl_resource *res;
- int x, y;
- E_Client *ec = NULL;
- E_Client *legacy_target = e_comp_wl->selection.target;
- int device_id = e_comp_wl_data_current_device_id_get();
-
- if (device_id < 0)
- {
- e_comp_wl_data_current_device_id_set(ev->multi.device);
- }
- else if (device_id != ev->multi.device)
- {
- return ECORE_CALLBACK_RENEW;
- }
-
- ec = e_client_under_position_input_get(legacy_target->desk, ev->x, ev->y);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, ECORE_CALLBACK_RENEW);
-
- struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
- EINA_SAFETY_ON_NULL_RETURN_VAL(surface, ECORE_CALLBACK_RENEW);
-
- res = e_comp_wl_data_find_for_client(wl_resource_get_client(surface));
- EINA_SAFETY_ON_NULL_RETURN_VAL(res, ECORE_CALLBACK_RENEW);
-
- if ((e_comp_wl->drag_offer != wl_resource_get_user_data(res)) &&
- (ec != legacy_target))
- {
- e_comp_wl_data_device_send_leave(legacy_target);
- e_comp_wl_data_device_send_enter(ec);
- }
-
- if (e_comp_wl->drag)
- e_drag_move(e_comp_wl->drag, ev->x, ev->y);
-
- if (e_client_transform_core_enable_get(ec))
- {
- int trans_x, trans_y;
- e_client_transform_core_input_transform(ec, ev->x, ev->y, &trans_x, &trans_y);
- x = trans_x - ec->client.x;
- y = trans_y - ec->client.y;
- }
- else
- {
- e_client_geometry_get(ec, &ec_x, &ec_y, NULL, NULL);
- x = ev->x - ec_x;
- y = ev->y - ec_y;
- }
-
- wl_data_device_send_motion(res, ev->timestamp, wl_fixed_from_int(x), wl_fixed_from_int(y));
- }
-
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_comp_wl_gl_idle(void *data)
{
- if (!e_comp->gl)
- {
- /* show warning window to notify failure of gl init */
- // TODO: yigl
-#if 0
- Evas_Object *win, *bg, *popup, *btn;
-
- win = elm_win_add(NULL, "compositor warning", ELM_WIN_BASIC);
- elm_win_title_set(win, "Compositor Warning");
- elm_win_autodel_set(win, EINA_TRUE);
- elm_win_borderless_set(win, EINA_TRUE);
- elm_win_role_set(win, "notification-low");
- elm_win_alpha_set(win, EINA_TRUE);
-
- bg = evas_object_rectangle_add(evas_object_evas_get(win));
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(win, bg);
- evas_object_color_set(bg, 125, 125, 125, 125);
- evas_object_show(bg);
-
- popup = elm_popup_add(win);
- elm_object_text_set(popup,
- _( "Your screen does not support OpenGL.<br>"
- "Falling back to software engine."));
- elm_object_part_text_set(popup, "title,text", "Compositor Warning");
-
- btn = elm_button_add(popup);
- elm_object_text_set(btn, "Close");
- elm_object_part_content_set(popup, "button1", btn);
- evas_object_show(btn);
-
- evas_object_smart_callback_add(win, "focus,in", _e_comp_wl_gl_popup_cb_focus, popup);
- evas_object_smart_callback_add(btn, "unpressed", _e_comp_wl_gl_popup_cb_close, win);
-
- evas_object_show(popup);
- evas_object_show(win);
-#endif
- }
-
return ECORE_CALLBACK_CANCEL;
}