huge wl fixup (wayland clients actually working again)

* try to clear up build system for separating out ecore-x

* add #ifdefs for lots of ecore-x stuff

* break out some internal e wl functions for reuse in api

* store wl surface buffers as an inlist

* add protocol-specific client compositor data

** move lots of X client attributes here

* add pixmap type checks to a number of X-specific things, such as grabinput, to block them for non-X clients

* rearrange startup order to work with wayland

* move X screensaver code to e_comp_x

* flag modules still requiring X with -DNEED_X
devs/discomfitor/eo
Mike Blumenkrantz 10 years ago
parent a9627e84f5
commit 12d7405a0f
  1. 19
      src/bin/Makefile.mk
  2. 3
      src/bin/e.h
  3. 3
      src/bin/e_actions.c
  4. 37
      src/bin/e_canvas.c
  5. 2
      src/bin/e_canvas.h
  6. 74
      src/bin/e_client.h
  7. 3
      src/bin/e_comp.c
  8. 3
      src/bin/e_comp.h
  9. 2
      src/bin/e_comp_cfdata.c
  10. 1
      src/bin/e_comp_cfdata.h
  11. 195
      src/bin/e_comp_wl.c
  12. 31
      src/bin/e_comp_wl.h
  13. 240
      src/bin/e_comp_x.c
  14. 106
      src/bin/e_comp_x.h
  15. 6
      src/bin/e_dnd.c
  16. 10
      src/bin/e_dnd.h
  17. 2
      src/bin/e_gadcon.c
  18. 3
      src/bin/e_grabinput.c
  19. 33
      src/bin/e_hints.c
  20. 6
      src/bin/e_includes.h
  21. 2
      src/bin/e_int_client_menu.c
  22. 2
      src/bin/e_int_client_menu.h
  23. 6
      src/bin/e_int_client_prop.c
  24. 34
      src/bin/e_int_config_comp_match.c
  25. 32
      src/bin/e_main.c
  26. 6
      src/bin/e_manager.c
  27. 14
      src/bin/e_menu.c
  28. 4
      src/bin/e_menu.h
  29. 71
      src/bin/e_pixmap.c
  30. 2
      src/bin/e_pixmap.h
  31. 2
      src/bin/e_pointer.c
  32. 118
      src/bin/e_screensaver.c
  33. 3
      src/bin/e_screensaver.h
  34. 36
      src/bin/e_win.c
  35. 2
      src/bin/e_win.h
  36. 2
      src/modules/Makefile_conf_bindings.mk
  37. 2
      src/modules/Makefile_conf_display.mk
  38. 2
      src/modules/Makefile_conf_randr.mk
  39. 2
      src/modules/Makefile_conf_theme.mk
  40. 2
      src/modules/Makefile_everything.mk
  41. 2
      src/modules/Makefile_fileman.mk
  42. 2
      src/modules/Makefile_pager.mk
  43. 2
      src/modules/Makefile_shot.mk
  44. 7
      src/modules/Makefile_systray.mk
  45. 2
      src/modules/Makefile_tiling.mk
  46. 2
      src/modules/Makefile_winlist.mk
  47. 2
      src/modules/Makefile_wizard.mk
  48. 2
      src/modules/Makefile_xkbswitch.mk
  49. 3
      src/modules/contact/e_policy.c
  50. 205
      src/modules/wl_desktop_shell/e_mod_main.c

@ -210,7 +210,6 @@ endif
enlightenment_src = \
src/bin/e_about.c \
src/bin/e_acpi.c \
src/bin/e_alert.c \
src/bin/e_actions.c \
src/bin/e_atoms.c \
src/bin/e_backlight.c \
@ -226,7 +225,6 @@ src/bin/e_comp.c \
src/bin/e_comp_canvas.c \
src/bin/e_comp_cfdata.c \
src/bin/e_comp_object.c \
src/bin/e_comp_x.c \
src/bin/e_config.c \
src/bin/e_config_data.c \
src/bin/e_config_dialog.c \
@ -307,7 +305,6 @@ src/bin/e_place.c \
src/bin/e_pointer.c \
src/bin/e_powersave.c \
src/bin/e_prefix.c \
src/bin/e_randr.c \
src/bin/e_remember.c \
src/bin/e_resist.c \
src/bin/e_scale.c \
@ -362,25 +359,31 @@ src/bin/e_widget_toolbar.c \
src/bin/e_widget_toolbook.c \
src/bin/e_win.c \
src/bin/e_xinerama.c \
src/bin/e_xkb.c \
src/bin/e_xsettings.c \
src/bin/e_zoomap.c \
src/bin/e_zone.c \
$(ENLIGHTENMENTHEADERS)
if ! HAVE_WAYLAND_ONLY
enlightenment_src += \
src/bin/e_alert.c \
src/bin/e_comp_x.c \
src/bin/e_randr.c \
src/bin/e_xkb.c \
src/bin/e_xsettings.c
endif
if HAVE_WAYLAND_CLIENTS
enlightenment_src += \
src/bin/e_comp_wl.c
endif
src_bin_enlightenment_CFLAGS = $(AM_CPPFLAGS) @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DE_LOGGING=1
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DE_LOGGING=1 @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@ @ECORE_X_CFLAGS@ -DNEED_X=1
src_bin_enlightenment_SOURCES = \
src/bin/e_main.c \
$(enlightenment_src)
src_bin_enlightenment_LDFLAGS = -export-dynamic
src_bin_enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm
src_bin_enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm @ECORE_X_LIBS@
src_bin_enlightenment_imc_SOURCES = \
src/bin/e.h \

@ -105,7 +105,6 @@ void *alloca (size_t);
# include <Evas_Engine_Buffer.h>
# include <Ecore.h>
# include <Ecore_Getopt.h>
# include <Ecore_X.h>
# include <Ecore_Evas.h>
# include <Ecore_Input.h>
# include <Ecore_Input_Evas.h>
@ -311,8 +310,6 @@ extern EAPI Eina_Bool x_fatal;
extern EINTERN const char *e_first_frame;
extern EINTERN double e_first_frame_start_time;
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
//#define SMARTERR(args...) abort()
#define SMARTERRNR() return
#define SMARTERR(x) return x

@ -1854,8 +1854,7 @@ ACT_FN_GO(menu_show, )
ecore_evas_pointer_xy_get(zone->comp->ee, &x, &y);
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
e_menu_activate_mouse(m, zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN,
ecore_x_current_time_get());
E_MENU_POP_DIRECTION_DOWN, 0);
}
}
}

@ -143,19 +143,44 @@ e_canvas_rehint(void)
}
EAPI Ecore_Evas *
e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_X_Window *win_ret)
e_canvas_new(Ecore_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_Window *win_ret)
{
Ecore_Evas *ee = NULL;
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
#ifdef WAYLAND_ONLY
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
if (win_ret) *win_ret = ecore_evas_wayland_window_get(ee);
}
else
#else
switch (e_comp_get(NULL)->comp_type)
{
case E_PIXMAP_TYPE_X:
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
if (ee)
{
ecore_evas_override_set(ee, override);
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
}
break;
# ifdef HAVE_WAYLAND_CLIENTS
case E_PIXMAP_TYPE_WL:
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (win_ret) *win_ret = (Ecore_Window)ecore_evas_wayland_window_get(ee);
}
break;
# endif
default: break;
}
#endif
if (!ee)
EINA_LOG_ERR("Impossible to build any Ecore_Evas window !!");
return ee;
}

@ -10,7 +10,7 @@ EAPI void e_canvas_cache_flush(void);
EAPI void e_canvas_cache_reload(void);
EAPI void e_canvas_idle_flush(void);
EAPI void e_canvas_rehint(void);
EAPI Ecore_Evas *e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret);
EAPI Ecore_Evas *e_canvas_new(Ecore_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_Window *win_ret);
EAPI const Eina_List *e_canvas_list(void);
#endif

@ -244,7 +244,7 @@ struct E_Client
E_Direction shade_dir;
E_Comp_Client_Data *comp_data; //private for the compositor engine (X, Wayland) ONLY
E_Comp_Client_Data *comp_data; //private for the compositor engine (X, Wayland) ONLY
Evas_Object *input_object; //for running wayland clients in X
@ -322,15 +322,17 @@ struct E_Client
int step_w, step_h;
int start_x, start_y;
double min_aspect, max_aspect;
Ecore_Window icon_window;
Ecore_Window window_group;
Ecore_Window transient_for;
Ecore_Window client_leader;
#ifdef E_COMP_X_H
Ecore_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Window icon_window;
Ecore_X_Window window_group;
Ecore_X_Window transient_for;
Ecore_X_Window client_leader;
Ecore_X_Gravity gravity;
#endif
Eina_Stringshare *window_role;
unsigned char take_focus : 1;
unsigned char accepts_focus : 1;
@ -362,9 +364,11 @@ struct E_Client
/* MWM */
struct
{
#ifdef E_COMP_X_H
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
#endif
unsigned char exists : 1;
unsigned char borderless : 1;
struct
@ -380,7 +384,9 @@ struct E_Client
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
#ifdef E_COMP_X_H
Ecore_X_Icon *icons;
#endif
int num_icons;
unsigned int user_time;
unsigned char opacity;
@ -404,9 +410,8 @@ struct E_Client
struct
{
unsigned char request : 1;
unsigned char alarm : 1;
unsigned int wait;
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter counter;
unsigned int serial;
double send_time;
} sync;
@ -440,7 +445,6 @@ struct E_Client
unsigned char change_desktop : 1;
unsigned char close : 1;
} action;
E_Window_Type type;
E_Window_Type *extra_types;
int extra_types_num;
@ -525,63 +529,13 @@ struct E_Client
unsigned char state : 1;
unsigned char vkbd : 1;
} fetch;
#ifdef E_COMP_X_H
Ecore_X_Virtual_Keyboard_State state;
#endif
unsigned char have_property : 1;
unsigned char vkbd : 1;
} vkbd;
struct
{
struct
{
struct
{
unsigned char conformant : 1;
} fetch;
unsigned char conformant : 1;
} conformant;
struct
{
struct
{
unsigned char state : 1;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
unsigned char zone : 1;
} fetch;
Ecore_X_Illume_Quickpanel_State state;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
int zone;
} quickpanel;
struct
{
struct
{
unsigned char drag : 1;
unsigned char locked : 1;
} fetch;
unsigned char drag : 1;
unsigned char locked : 1;
} drag;
struct
{
struct
{
unsigned char state : 1;
} fetch;
Ecore_X_Illume_Window_State state;
} win_state;
} illume;
struct
{
unsigned char visible : 1;

@ -3,8 +3,6 @@
#include "e_comp_wl.h"
#endif
#include "e_comp_x.h"
#define ACTION_TIMEOUT 30.0
#define OVER_FLOW 1
//#define SHAPE_DEBUG
@ -1369,6 +1367,7 @@ e_comp_shape_queue(E_Comp *c)
{
EINA_SAFETY_ON_NULL_RETURN(c);
if (c->comp_type != E_PIXMAP_TYPE_X) return;
if (!c->shape_job)
c->shape_job = ecore_job_add((Ecore_Cb)_e_comp_shapes_update_job, c);
}

@ -1,7 +1,7 @@
#ifdef E_TYPEDEFS
typedef struct _E_Comp E_Comp;
typedef struct _E_Comp_Data E_Comp_Data;
typedef struct E_Comp_Client_Data E_Comp_Client_Data;
typedef struct _E_Comp_Client_Data E_Comp_Client_Data;
typedef struct _E_Comp_Demo_Style_Item E_Comp_Demo_Style_Item;
#define E_COMP_TYPE (int) 0xE0b01003
@ -55,6 +55,7 @@ struct _E_Comp
unsigned int new_clients;
E_Comp_Data *comp_data;
E_Pixmap_Type comp_type; //for determining X/Wayland/
unsigned int num;
Eina_Stringshare *name;

@ -17,8 +17,6 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd)
E_CONFIG_VAL(D, T, borderless, CHAR);
E_CONFIG_VAL(D, T, dialog, CHAR);
E_CONFIG_VAL(D, T, accepts_focus, CHAR);
E_CONFIG_VAL(D, T, vkbd, CHAR);
E_CONFIG_VAL(D, T, quickpanel, CHAR);
E_CONFIG_VAL(D, T, argb, CHAR);
E_CONFIG_VAL(D, T, fullscreen, CHAR);
E_CONFIG_VAL(D, T, modal, CHAR);

@ -67,7 +67,6 @@ struct _E_Comp_Match
char dialog; // used for borders, 0 == don't use, 1 == dialog, -1 == not dialog
char accepts_focus; // used for borders, 0 == don't use, 1 == accepts focus, -1 == does not accept focus
char vkbd; // used for borders, 0 == don't use, 1 == is vkbd, -1 == not vkbd
char quickpanel; // used for borders, 0 == don't use, 1 == is quickpanel, -1 == not quickpanel
char argb; // used for borders, overrides, popups, menus, 0 == don't use, 1 == is argb, -1 == not argb
char fullscreen; // used for borders, 0 == don't use, 1 == is fullscreen, -1 == not fullscreen
char modal; // used for borders, 0 == don't use, 1 == is modal, -1 == not modal

@ -2,6 +2,8 @@
#include "e_comp_wl.h"
#include <sys/mman.h>
#define e_pixmap_parent_window_set(X, Y) e_pixmap_parent_window_set(X, (Ecore_Window)(uintptr_t)Y)
/* compositor function prototypes */
static void _seat_send_updated_caps(struct wl_seat *seat);
static void _move_resources(struct wl_list *dest, struct wl_list *src);
@ -58,7 +60,6 @@ static void _e_comp_wl_cb_bind(struct wl_client *client, void *data, unsigned in
static Eina_Bool _e_comp_wl_cb_read(void *data EINA_UNUSED, Ecore_Fd_Handler *hdl EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_module_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
/* compositor interface prototypes */
static void _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resource, unsigned int id);
@ -228,7 +229,7 @@ static Ecore_Idler *_module_idler = NULL;
EAPI E_Wayland_Compositor *_e_wl_comp;
/* external functions */
EINTERN Eina_Bool
EAPI Eina_Bool
e_comp_wl_init(void)
{
int fd = 0;
@ -271,7 +272,7 @@ e_comp_wl_init(void)
* NB: This is interesting....if we try to eglGetDisplay and pass in the
* wayland display, then EGL fails due to XCB not owning the event queue.
* If we pass it a NULL, it inits just fine */
_e_wl_comp->egl.display = eglGetDisplay((EGLNativeDisplayType)ecore_x_display_get());
_e_wl_comp->egl.display = eglGetDisplay(NULL);
if (_e_wl_comp->egl.display == EGL_NO_DISPLAY)
ERR("Could not get EGL display: %m");
else
@ -302,44 +303,6 @@ e_comp_wl_init(void)
ERR("Could not choose EGL config: %m");
eglTerminate(_e_wl_comp->egl.display);
}
/* if (!eglBindAPI(EGL_OPENGL_ES_API)) */
/* { */
/* ERR("Could not bind EGL API: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* exts = (const char *)eglQueryString(_e_wl_comp->egl.display, EGL_EXTENSIONS); */
/* if (!exts) */
/* { */
/* ERR("Could not get EGL Extensions: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* else */
/* { */
/* if (strstr(exts, "EGL_WL_bind_wayland_display")) */
/* { */
/* _e_wl_comp->egl.bind_display = */
/* (void *)eglGetProcAddress("eglBindWaylandDisplayWL"); */
/* _e_wl_comp->egl.unbind_display = */
/* (void *)eglGetProcAddress("eglUnbindWaylandDisplayWL"); */
/* } */
/* } */
/* if (_e_wl_comp->egl.bind_display) */
/* { */
/* EGLBoolean ret; */
/* ret = _e_wl_comp->egl.bind_display(_e_wl_comp->egl.display, */
/* _e_wl_comp->wl.display); */
/* if (!ret) */
/* { */
/* ERR("Could not bind EGL Wayland Display: %m"); */
/* _e_wl_comp->egl.bound = EINA_FALSE; */
/* } */
/* else */
/* _e_wl_comp->egl.bound = EINA_TRUE; */
/* } */
}
}
#endif
@ -351,11 +314,12 @@ e_comp_wl_init(void)
goto err;
}
#ifndef WAYLAND_ONLY
/* setup keymap_change event handler */
_e_wl_comp->kbd_handler =
ecore_event_handler_add(ECORE_X_EVENT_XKB_STATE_NOTIFY,
_e_comp_wl_cb_keymap_changed, NULL);
e_comp_wl_cb_keymap_changed, NULL);
#endif
/* get the displays event loop */
_e_wl_comp->wl.loop = wl_display_get_event_loop(_e_wl_comp->wl.display);
@ -379,9 +343,11 @@ e_comp_wl_init(void)
goto err;
}
wl_event_loop_dispatch(_e_wl_comp->wl.loop, 0);
#ifndef WAYLAND_ONLY
/* add an idler for deferred shell module loading */
_module_idler = ecore_idler_add(_e_comp_wl_cb_module_idle, NULL);
#endif
/* return success */
return EINA_TRUE;
@ -389,9 +355,10 @@ err:
/* remove kbd handler */
if (_e_wl_comp->kbd_handler)
ecore_event_handler_del(_e_wl_comp->kbd_handler);
#ifndef WAYLAND_ONLY
/* remove the module idler */
if (_module_idler) ecore_idler_del(_module_idler);
#endif
#ifdef HAVE_WAYLAND_EGL
/* unbind wayland display */
@ -456,6 +423,17 @@ e_comp_wl_shutdown(void)
e_module_disable(mod);
}
#ifdef WAYLAND_ONLY
EAPI int
e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data)
{
E_Wayland_Compositor *wl_comp = data;
wl_event_loop_dispatch(wl_comp->wl.input_loop, 0);
return 1;
}
#endif
EAPI void
wl_seat_init(struct wl_seat *seat)
{
@ -845,6 +823,44 @@ e_comp_wl_time_get(void)
return (tm.tv_sec * 1000 + tm.tv_usec / 1000);
}
EAPI void
e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(resource, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
}
}
EAPI void
e_comp_wl_input_modifiers_update(unsigned int serial)
{
@ -976,47 +992,8 @@ _default_grab_button(struct wl_pointer_grab *grab, uint32_t timestamp, uint32_t
serial = wl_display_next_serial(_e_wl_comp->wl.display);
wl_resource_for_each(res, lst)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(res, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
}
}
e_comp_wl_mouse_button(res, serial, timestamp, button, state_w);
}
if (pointer->button_count == 0 &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
wl_pointer_set_focus(pointer, pointer->current,
pointer->current_x, pointer->current_y);
}
static void
@ -1573,8 +1550,8 @@ _e_comp_wl_cb_module_idle(void *data EINA_UNUSED)
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
EAPI Eina_Bool
e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
struct xkb_keymap *keymap;
@ -1645,6 +1622,8 @@ static void
_e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resource, unsigned int id)
{
E_Wayland_Surface *ews = NULL;
uint64_t wid;
pid_t pid;
/* try to allocate space for a new surface */
if (!(ews = E_NEW(E_Wayland_Surface, 1)))
@ -1654,7 +1633,11 @@ _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resou
}
ews->wl.client = client;
ews->pixmap = e_pixmap_new(E_PIXMAP_TYPE_WL, ews);
wl_client_get_credentials(client, &pid, NULL, NULL);
wid = e_comp_wl_id_get(pid, id);
ews->pixmap = e_pixmap_find(E_PIXMAP_TYPE_WL, wid);
if (!ews->pixmap)
ews->pixmap = e_pixmap_new(E_PIXMAP_TYPE_WL, wid);
e_pixmap_parent_window_set(ews->pixmap, ews);
e_pixmap_usable_set(ews->pixmap, 1);
/* initialize the destroy signal */
@ -1702,6 +1685,8 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
E_Wayland_Surface *ews = NULL;
E_Wayland_Surface_Frame_Callback *cb = NULL, *ncb = NULL;
struct wl_pointer *pointer;
Eina_Inlist *l;
E_Wayland_Buffer *buffer;
/* try to get the surface from this resource */
if (!(ews = wl_resource_get_user_data(resource)))
@ -1752,6 +1737,11 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
wl_list_for_each_safe(cb, ncb, &ews->wl.frames, wl.link)
wl_resource_destroy(cb->wl.resource);
EINA_INLIST_FOREACH_SAFE(ews->buffers, l, buffer)
{
buffer->ews = NULL;
ews->buffers = eina_inlist_remove(ews->buffers, EINA_INLIST_GET(buffer));
}
e_pixmap_parent_window_set(ews->pixmap, NULL);
e_pixmap_free(ews->pixmap);
@ -1982,6 +1972,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup(kbd_layout->name);
}
#ifndef WAYLAND_ONLY
/* if we are running under X11, try to get the xkb rule names atom */
if (getenv("DISPLAY"))
{
@ -2006,7 +1997,7 @@ _e_comp_wl_input_keymap_get(void)
if ((data) && (len > 0))
{
names.rules = strdup((const char *)data);
names.rules = (char*)data;
data += strlen((const char *)data) + 1;
if (!names.model)
names.model = strdup((const char *)data);
@ -2015,6 +2006,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup((const char *)data);
}
}
#endif
printf("Keymap\n");
printf("\tRules: %s\n", names.rules);
@ -2552,7 +2544,7 @@ _e_comp_wl_surface_buffer_reference(E_Wayland_Buffer_Reference *ref, E_Wayland_B
wl_signal_add(&buffer->wl.destroy_signal, &ref->destroy_listener);
}
//INF("CURRENT BUFFER SWAP");
//INF("CURRENT BUFFER SWAP: %p->%p", ref->buffer, buffer);
ref->buffer = buffer;
ref->destroy_listener.notify =
_e_comp_wl_surface_buffer_reference_cb_destroy;
@ -2603,12 +2595,14 @@ _e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data)
E_Wayland_Buffer *buffer;
buffer = container_of(listener, E_Wayland_Buffer, wl.destroy_listener);
wl_signal_emit(&buffer->wl.destroy_signal, buffer);
if (buffer->ews && buffer->ews->pixmap && (e_pixmap_resource_get(buffer->ews->pixmap) == data))
if (buffer->ews)
{
if (buffer->ews->ec)
if (buffer->ews->ec && buffer->ews->pixmap && (e_pixmap_resource_get(buffer->ews->pixmap) == data) &&
evas_object_visible_get(buffer->ews->ec->frame))
{
INF("DESTROYED CURRENT BUFFER: %s", e_pixmap_dirty_get(buffer->ews->pixmap) ? "DIRTY" : "CLEAN");
//INF("DESTROYED CURRENT BUFFER: %s", e_pixmap_dirty_get(buffer->ews->pixmap) ? "DIRTY" : "CLEAN");
e_pixmap_usable_set(buffer->ews->pixmap, 0);
if (!e_pixmap_image_exists(buffer->ews->pixmap))
{
@ -2620,6 +2614,7 @@ _e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data)
e_comp_object_render(buffer->ews->ec->frame);
e_comp_object_render_update_del(buffer->ews->ec->frame);
}
buffer->ews->buffers = eina_inlist_remove(buffer->ews->buffers, EINA_INLIST_GET(buffer));
}
E_FREE(buffer);
}
@ -2651,6 +2646,12 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_res
/* reference any existing buffers */
_e_comp_wl_surface_buffer_reference(&ews->buffer_reference, buffer);
if (buffer)
{
if (!buffer->ews)
ews->buffers = eina_inlist_append(ews->buffers, EINA_INLIST_GET(buffer));
buffer->ews = ews;
}
//INF("ATTACHED NEW BUFFER");
e_pixmap_dirty(ews->pixmap);
//if (ews->ec)
@ -2658,9 +2659,7 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_res
/* if we are setting a null buffer, then unmap the surface */
if (buffer)
buffer->ews = ews;
else
if (!buffer)
{
if (ews->mapped)
{
@ -2798,9 +2797,7 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
ews->pending.buffer);
/* if the pending buffer is NULL, unmap the surface */
if (ews->pending.buffer)
ews->pending.buffer->ews = ews;
else
if (!ews->pending.buffer)
{
if (ews->mapped)
{

@ -5,7 +5,6 @@
# define E_COMP_WL_H
# define WL_HIDE_DEPRECATED
# include <pixman.h>
# include <wayland-server.h>
# include <xkbcommon/xkbcommon.h>
@ -253,6 +252,7 @@ struct _E_Wayland_Surface_Frame_Callback
struct _E_Wayland_Buffer
{
EINA_INLIST;
struct
{
struct wl_resource *resource;
@ -315,6 +315,7 @@ struct _E_Wayland_Surface
E_Client *ec;
E_Pixmap *pixmap;
Eina_Inlist *buffers;
E_Wayland_Shell_Surface *shell_surface;
Eina_Bool mapped : 1;
@ -472,6 +473,15 @@ struct _E_Wayland_Compositor
E_Wayland_Shell_Interface shell_interface;
#ifdef WAYLAND_ONLY
Eina_Bool focus : 1;
unsigned int output_pool;
struct xkb_rule_names xkb_names;
struct xkb_context *xkb_context;
#endif
Ecore_Event_Handler *kbd_handler;
Ecore_Fd_Handler *fd_handler;
Ecore_Idler *idler;
@ -480,9 +490,7 @@ struct _E_Wayland_Compositor
Eina_Inlist *surfaces;
Eina_List *seats;
struct wl_list outputs;
void (*ping_cb) (E_Wayland_Surface *ews, unsigned int serial);
};
@ -581,9 +589,13 @@ struct _E_Wayland_Plane
/* external variables */
extern EAPI E_Wayland_Compositor *_e_wl_comp;
EINTERN Eina_Bool e_comp_wl_init(void);
EAPI Eina_Bool e_comp_wl_init(void);
EINTERN void e_comp_wl_shutdown(void);
#ifdef WAYLAND_ONLY
EAPI int e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data);
#endif
EAPI void wl_seat_init(struct wl_seat *seat);
EAPI void wl_seat_release(struct wl_seat *seat);
@ -613,5 +625,14 @@ EAPI void wl_seat_set_selection(struct wl_seat *seat, struct wl_data_source *sou
EAPI unsigned int e_comp_wl_time_get(void);
EAPI void e_comp_wl_input_modifiers_update(unsigned int serial);
EAPI void e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w);
EAPI Eina_Bool e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
static inline uint64_t
e_comp_wl_id_get(uint32_t client, uint32_t surface)
{
return ((uint64_t)surface << 32) + (uint64_t)client;
}
# endif
#endif

@ -27,42 +27,7 @@ struct _E_Comp_Data
Eina_Bool restack : 1;
};
struct E_Comp_Client_Data
{
Ecore_X_Window lock_win;
Ecore_X_Damage damage; // damage region
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
#if 0 //NOT USED
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
int cache_w, cache_h; // cached pixmap size
#endif
Ecore_X_Image *xim; // x image - software fallback
unsigned char misses; // number of sync misses
Ecore_X_Window_Attributes initial_attributes;
unsigned int move_counter; //reduce X calls when moving a window
unsigned int internal_props_set; //don't need to refetch our own internal props
Eina_Bool moving : 1;
Eina_Bool first_map : 1;
Eina_Bool change_icon : 1;
Eina_Bool need_reparent : 1;
Eina_Bool reparented : 1;
Eina_Bool deleted : 1;
Eina_Bool button_grabbed : 1;
Eina_Bool fetch_exe : 1;
Eina_Bool set_win_type : 1;
Eina_Bool frame_update : 1;
Eina_Bool evas_init : 1;
};
static Ecore_X_Time focus_time = 0;
static unsigned int focus_time = 0;
static Eina_List *handlers = NULL;
static Eina_Hash *clients_win_hash = NULL;
static Eina_Hash *damages_hash = NULL;
@ -77,6 +42,10 @@ static int _e_comp_x_mapping_change_disabled = 0;
static Ecore_X_Randr_Screen_Size screen_size = { -1, -1 };
static int screen_size_index = -1;
static Ecore_Timer *screensaver_idle_timer = NULL;
static Eina_Bool screensaver_dimmed = EINA_FALSE;
static inline Ecore_X_Window
_e_comp_x_client_window_get(const E_Client *ec)
{
@ -334,23 +303,23 @@ _e_comp_x_client_new_helper(E_Client *ec)
ec->vkbd.fetch.vkbd = 1;
/* loop to check for illume atoms */
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_CONFORMANT)
ec->illume.conformant.fetch.conformant = 1;
ec->comp_data->illume.conformant.fetch.conformant = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE)
ec->illume.quickpanel.fetch.state = 1;
ec->comp_data->illume.quickpanel.fetch.state = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL)
ec->illume.quickpanel.fetch.quickpanel = 1;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR)
ec->illume.quickpanel.fetch.priority.major = 1;
ec->comp_data->illume.quickpanel.fetch.priority.major = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR)
ec->illume.quickpanel.fetch.priority.minor = 1;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE)
ec->illume.quickpanel.fetch.zone = 1;
ec->comp_data->illume.quickpanel.fetch.zone = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED)
ec->illume.drag.fetch.locked = 1;
ec->comp_data->illume.drag.fetch.locked = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_DRAG)
ec->illume.drag.fetch.drag = 1;
ec->comp_data->illume.drag.fetch.drag = 1;
else if (atoms[i] == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE)
ec->illume.win_state.fetch.state = 1;
ec->comp_data->illume.win_state.fetch.state = 1;
else if (atoms[i] == ECORE_X_ATOM_E_VIDEO_PARENT)
video_parent = EINA_TRUE;
else if (atoms[i] == ECORE_X_ATOM_E_VIDEO_POSITION)
@ -1649,47 +1618,47 @@ _e_comp_x_property(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_W
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_CONFORMANT)
{
ec->illume.conformant.fetch.conformant = 1;
ec->comp_data->illume.conformant.fetch.conformant = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE)
{
ec->illume.quickpanel.fetch.state = 1;
ec->comp_data->illume.quickpanel.fetch.state = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL)
{
ec->illume.quickpanel.fetch.quickpanel = 1;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR)
{
ec->illume.quickpanel.fetch.priority.major = 1;
ec->comp_data->illume.quickpanel.fetch.priority.major = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR)
{
ec->illume.quickpanel.fetch.priority.minor = 1;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE)
{
ec->illume.quickpanel.fetch.zone = 1;
ec->comp_data->illume.quickpanel.fetch.zone = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED)
{
ec->illume.drag.fetch.locked = 1;
ec->comp_data->illume.drag.fetch.locked = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_DRAG)
{
ec->illume.drag.fetch.drag = 1;
ec->comp_data->illume.drag.fetch.drag = 1;
EC_CHANGED(ec);
}
else if (ev->atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE)
{
ec->illume.win_state.fetch.state = 1;
ec->comp_data->illume.win_state.fetch.state = 1;
EC_CHANGED(ec);
}
/*
@ -1981,13 +1950,13 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_M
{
E_Client *ec;
if (!e_client_comp_grabbed_get()) return ECORE_CALLBACK_RENEW;
ec = e_client_action_get();
if (!ec) return ECORE_CALLBACK_RENEW;
E_COMP_X_PIXMAP_CHECK ECORE_CALLBACK_RENEW;
if (ec->comp_data->deleted) return ECORE_CALLBACK_RENEW;
if (e_client_resizing_get(ec) &&
ec->netwm.sync.request &&
ec->netwm.sync.alarm
ec->comp_data->alarm
)
{
if ((ecore_loop_time_get() - ec->netwm.sync.send_time) > 0.5)
@ -2008,8 +1977,8 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_M
* when no new resize-request was added by sync-alarm cb.
*/
}
e_client_mouse_move(ec, (Evas_Point*)&ev->root);
}
e_client_mouse_move(ec, (Evas_Point*)&ev->root);
return ECORE_CALLBACK_RENEW;
}
@ -2110,7 +2079,7 @@ _e_comp_x_sync_alarm(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event
if (ec->netwm.sync.wait)
ec->netwm.sync.wait--;
if (ecore_x_sync_counter_query(ec->netwm.sync.counter, &serial))
if (ecore_x_sync_counter_query(ec->comp_data->sync_counter, &serial))
{
E_Client_Pending_Resize *pnd = NULL;
@ -2611,7 +2580,6 @@ _e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
}
ec->comp_data->set_win_type = 0;
ecore_evas_show(ec->internal_ecore_evas);
}
}
if (ec->re_manage || ec->visible)
@ -2968,8 +2936,8 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
&ec->icccm.initial_state,
&ec->icccm.icon_pixmap,
&ec->icccm.icon_mask,
&ec->icccm.icon_window,
&ec->icccm.window_group,
(Ecore_X_Window*)&ec->icccm.icon_window,
(Ecore_X_Window*)&ec->icccm.window_group,
&is_urgent))
{
ec->icccm.accepts_focus = accepts_focus;
@ -3178,7 +3146,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
{
ec->netwm.sync.request = 1;
if (!ecore_x_netwm_sync_counter_get(win,
&ec->netwm.sync.counter))
&ec->comp_data->sync_counter))
ec->netwm.sync.request = 0;
}
}
@ -3376,59 +3344,59 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
ec->vkbd.fetch.vkbd = 0;
rem_change = 1;
}
if (ec->illume.conformant.fetch.conformant)
if (ec->comp_data->illume.conformant.fetch.conformant)
{
ec->illume.conformant.conformant =
ec->comp_data->illume.conformant.conformant =
ecore_x_e_illume_conformant_get(win);
ec->illume.conformant.fetch.conformant = 0;
ec->comp_data->illume.conformant.fetch.conformant = 0;
}
if (ec->illume.quickpanel.fetch.state)
if (ec->comp_data->illume.quickpanel.fetch.state)
{
ec->illume.quickpanel.state =
ec->comp_data->illume.quickpanel.state =
ecore_x_e_illume_quickpanel_state_get(win);
ec->illume.quickpanel.fetch.state = 0;
ec->comp_data->illume.quickpanel.fetch.state = 0;
}
if (ec->illume.quickpanel.fetch.quickpanel)
if (ec->comp_data->illume.quickpanel.fetch.quickpanel)
{
ec->illume.quickpanel.quickpanel =
ec->comp_data->illume.quickpanel.quickpanel =
ecore_x_e_illume_quickpanel_get(win);
ec->illume.quickpanel.fetch.quickpanel = 0;
ec->comp_data->illume.quickpanel.fetch.quickpanel = 0;
}
if (ec->illume.quickpanel.fetch.priority.major)
if (ec->comp_data->illume.quickpanel.fetch.priority.major)
{
ec->illume.quickpanel.priority.major =
ec->comp_data->illume.quickpanel.priority.major =
ecore_x_e_illume_quickpanel_priority_major_get(win);
ec->illume.quickpanel.fetch.priority.major = 0;
ec->comp_data->illume.quickpanel.fetch.priority.major = 0;
}
if (ec->illume.quickpanel.fetch.priority.minor)
if (ec->comp_data->illume.quickpanel.fetch.priority.minor)
{
ec->illume.quickpanel.priority.minor =
ec->comp_data->illume.quickpanel.priority.minor =
ecore_x_e_illume_quickpanel_priority_minor_get(win);
ec->illume.quickpanel.fetch.priority.minor = 0;
ec->comp_data->illume.quickpanel.fetch.priority.minor = 0;
}
if (ec->illume.quickpanel.fetch.zone)
if (ec->comp_data->illume.quickpanel.fetch.zone)
{
ec->illume.quickpanel.zone =
ec->comp_data->illume.quickpanel.zone =
ecore_x_e_illume_quickpanel_zone_get(win);
ec->illume.quickpanel.fetch.zone = 0;
ec->comp_data->illume.quickpanel.fetch.zone = 0;
}
if (ec->illume.drag.fetch.drag)
if (ec->comp_data->illume.drag.fetch.drag)
{
ec->illume.drag.drag =
ec->comp_data->illume.drag.drag =
ecore_x_e_illume_drag_get(win);
ec->illume.drag.fetch.drag = 0;
ec->comp_data->illume.drag.fetch.drag = 0;
}
if (ec->illume.drag.fetch.locked)
if (ec->comp_data->illume.drag.fetch.locked)
{
ec->illume.drag.locked =
ec->comp_data->illume.drag.locked =
ecore_x_e_illume_drag_locked_get(win);
ec->illume.drag.fetch.locked = 0;
ec->comp_data->illume.drag.fetch.locked = 0;
}
if (ec->illume.win_state.fetch.state)
if (ec->comp_data->illume.win_state.fetch.state)
{
ec->illume.win_state.state =
ec->comp_data->illume.win_state.state =
ecore_x_e_illume_window_state_get(win);
ec->illume.win_state.fetch.state = 0;
ec->comp_data->illume.win_state.fetch.state = 0;
}
if (ec->changes.shape)
{
@ -3922,8 +3890,12 @@ _e_comp_x_hook_client_focus_unset(void *d EINA_UNUSED, E_Client *ec)
static void
_e_comp_x_hook_client_focus_set(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
focus_time = ecore_x_current_time_get();
if ((e_pixmap_type_get(ec->pixmap) != E_PIXMAP_TYPE_X))
{
e_grabinput_focus(ec->comp->ee_win, E_FOCUS_METHOD_PASSIVE);
return;
}
if ((ec->icccm.take_focus) && (ec->icccm.accepts_focus))
{
@ -4062,9 +4034,10 @@ static void
_e_comp_x_hook_client_resize_end(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
if (!ec->netwm.sync.alarm) return;
eina_hash_del_by_key(alarm_hash, &ec->netwm.sync.alarm);
ecore_x_sync_alarm_free(ec->netwm.sync.alarm);
if (!ec->comp_data->alarm) return;
eina_hash_del_by_key(alarm_hash, &ec->comp_data->alarm);
ecore_x_sync_alarm_free(ec->comp_data->alarm);
ec->comp_data->alarm = 0;
ec->netwm.sync.alarm = 0;
/* resize to last geometry if sync alarm for it was not yet handled */
if (ec->pending_resize)
@ -4082,9 +4055,9 @@ _e_comp_x_hook_client_resize_begin(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
if (!ec->netwm.sync.request) return;
eina_hash_add(alarm_hash, &ec->netwm.sync.alarm, ec);
ec->netwm.sync.alarm = ecore_x_sync_alarm_new(ec->netwm.sync.counter);
ec->netwm.sync.serial = 1;
ec->netwm.sync.alarm = ecore_x_sync_alarm_new(ec->comp_data->sync_counter);
eina_hash_add(alarm_hash, &ec->comp_data->alarm, ec);
ec->netwm.sync.alarm = ec->netwm.sync.serial = 1;
ec->netwm.sync.wait = 0;
ec->netwm.sync.send_time = ecore_loop_time_get();
}
@ -4111,6 +4084,70 @@ _e_comp_x_cb_ping(void *data EINA_UNUSED, int ev_type EINA_UNUSED, Ecore_X_Event
return ECORE_CALLBACK_PASS_ON;