ecore_evas/wayland: Remove hack for changed state.

Since we don't have a changed state callback on Wayland, just call the
changed_state callback of Ecore_Evas from the configure callback.
There's no need to add the Ecore_Job that will send the event later.

This makes the code cleaner, simpler, and will call the callback when
the configure event is received, which is a good place to check for the
changes.
This commit is contained in:
Rafael Antognolli 2013-04-30 16:29:00 -03:00
parent a9b500370a
commit 1f58a59a61
6 changed files with 17 additions and 71 deletions

View File

@ -225,9 +225,6 @@ struct _Ecore_Wl_Window
/* FIXME: Shouldn't these attributes be private to the Ecore_Wl_Window? */
Eina_Bool frame_pending;
struct wl_callback *frame_callback;
void (*state_changed_cb)(void *);
void *state_changed_cb_data;
Ecore_Job *state_changed_job;
/* FIXME: Ideally we should record the cursor name for this window
* so we can compare and avoid unnecessary cursor set calls to wayland */
@ -634,7 +631,6 @@ EAPI void ecore_wl_window_pointer_set(Ecore_Wl_Window *win, struct wl_surface *s
EAPI void ecore_wl_window_cursor_from_name_set(Ecore_Wl_Window *win, const char *cursor_name);
EAPI void ecore_wl_window_cursor_default_restore(Ecore_Wl_Window *win);
EAPI void ecore_wl_window_parent_set(Ecore_Wl_Window *win, Ecore_Wl_Window *parent);
EAPI void ecore_wl_window_state_changed_cb_set(Ecore_Wl_Window *win, void (*cb)(void *), void *cb_data);
/** @since 1.7 */
EAPI Eina_Bool ecore_wl_dnd_set_selection(Ecore_Wl_Dnd *dnd, const char **types_offered);

View File

@ -12,7 +12,6 @@ static void _ecore_wl_window_cb_surface_enter(void *data, struct wl_surface *sur
static void _ecore_wl_window_cb_surface_leave(void *data, struct wl_surface *surface, struct wl_output *output EINA_UNUSED);
static void _ecore_wl_window_configure_send(Ecore_Wl_Window *win, int w, int h);
static char *_ecore_wl_window_id_str_get(unsigned int win_id);
static void _ecore_wl_window_state_changed(Ecore_Wl_Window *win);
/* local variables */
static Eina_Hash *_windows = NULL;
@ -110,12 +109,6 @@ ecore_wl_window_free(Ecore_Wl_Window *win)
if (win->surface) wl_surface_destroy(win->surface);
win->surface = NULL;
if (win->state_changed_job)
{
ecore_job_del(win->state_changed_job);
win->state_changed_job = NULL;
}
/* HMMM, why was this disabled ? */
free(win);
}
@ -323,8 +316,6 @@ ecore_wl_window_show(Ecore_Wl_Window *win)
break;
}
_ecore_wl_window_state_changed(win);
/* if (win->type != ECORE_WL_WINDOW_TYPE_FULLSCREEN) */
/* { */
/* win->region.input = */
@ -352,7 +343,6 @@ ecore_wl_window_hide(Ecore_Wl_Window *win)
win->shell_surface = NULL;
if (win->surface) wl_surface_destroy(win->surface);
win->surface = NULL;
_ecore_wl_window_state_changed(win);
}
EAPI void
@ -363,7 +353,6 @@ ecore_wl_window_raise(Ecore_Wl_Window *win)
if (!win) return;
if (win->shell_surface)
wl_shell_surface_set_toplevel(win->shell_surface);
_ecore_wl_window_state_changed(win);
}
EAPI void
@ -390,7 +379,6 @@ ecore_wl_window_maximized_set(Ecore_Wl_Window *win, Eina_Bool maximized)
win->saved_allocation.h);
}
win->edges = 0;
_ecore_wl_window_state_changed(win);
}
EAPI Eina_Bool
@ -431,7 +419,6 @@ ecore_wl_window_fullscreen_set(Ecore_Wl_Window *win, Eina_Bool fullscreen)
win->saved_allocation.h);
}
win->edges = 0;
_ecore_wl_window_state_changed(win);
}
EAPI Eina_Bool
@ -463,7 +450,6 @@ ecore_wl_window_transparent_set(Ecore_Wl_Window *win, Eina_Bool transparent)
wl_region_add(win->region.opaque, win->allocation.x, win->allocation.y,
win->allocation.w, win->allocation.h);
}
_ecore_wl_window_state_changed(win);
}
EAPI Eina_Bool
@ -590,21 +576,6 @@ ecore_wl_window_parent_set(Ecore_Wl_Window *win, Ecore_Wl_Window *parent)
win->parent = parent;
}
/* @since 1.8 */
EAPI void
ecore_wl_window_state_changed_cb_set(Ecore_Wl_Window *win, void (*cb)(void *), void *cb_data)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (!win) return;
win->state_changed_cb = cb;
if (cb)
win->state_changed_cb_data = cb_data;
else
win->state_changed_cb_data = NULL;
}
/* local functions */
static void
_ecore_wl_window_cb_ping(void *data EINA_UNUSED, struct wl_shell_surface *shell_surface, unsigned int serial)
@ -709,26 +680,3 @@ _ecore_wl_window_id_str_get(unsigned int win_id)
return id;
}
static void
_ecore_wl_window_state_changed_job(void *data)
{
Ecore_Wl_Window *win = data;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (win->state_changed_cb)
win->state_changed_cb(win->state_changed_cb_data);
win->state_changed_job = NULL;
}
static void
_ecore_wl_window_state_changed(Ecore_Wl_Window *win)
{
if (win->state_changed_job)
return;
win->state_changed_job =
ecore_job_add(_ecore_wl_window_state_changed_job, win);
}

View File

@ -162,8 +162,10 @@ static Eina_Bool
_ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Ecore_Evas *ee;
Ecore_Evas_Engine_Wl_Data *wdata;
Ecore_Wl_Event_Window_Configure *ev;
int nw = 0, nh = 0;
Eina_Bool prev_max, prev_full;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
@ -172,6 +174,21 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
if (!ee) return ECORE_CALLBACK_PASS_ON;
if (ev->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
wdata = ee->engine.data;
if (!wdata) return ECORE_CALLBACK_PASS_ON;
prev_max = ee->prop.maximized;
prev_full = ee->prop.fullscreen;
ee->prop.maximized = ecore_wl_window_maximized_get(wdata->win);
ee->prop.fullscreen = ecore_wl_window_fullscreen_get(wdata->win);
if ((prev_max != ee->prop.maximized) ||
(prev_full != ee->prop.fullscreen))
{
if (ee->func.fn_state_change)
ee->func.fn_state_change(ee);
}
if (ee->prop.fullscreen)
{
_ecore_evas_wl_common_move(ee, ev->x, ev->y);
@ -957,7 +974,6 @@ _ecore_evas_wl_common_maximized_set(Ecore_Evas *ee, int max)
if (!ee) return;
wdata = ee->engine.data;
if (ee->prop.maximized == max) return;
ee->prop.maximized = max;
ecore_wl_window_maximized_set(wdata->win, max);
}
@ -971,7 +987,6 @@ _ecore_evas_wl_common_fullscreen_set(Ecore_Evas *ee, int full)
if (!ee) return;
if (ee->prop.fullscreen == full) return;
wdata = ee->engine.data;
ee->prop.fullscreen = full;
ecore_wl_window_fullscreen_set(wdata->win, full);
}
@ -1225,12 +1240,3 @@ _ecore_evas_wl_interface_new(void)
return iface;
}
void
_ecore_evas_wl_common_state_change(void *data)
{
Ecore_Evas *ee = data;
if (ee->func.fn_state_change)
ee->func.fn_state_change(ee);
}

View File

@ -183,7 +183,6 @@ ecore_evas_wayland_egl_new_internal(const char *disp_name, unsigned int parent,
wdata->win =
ecore_wl_window_new(p, x, y, w, h, ECORE_WL_WINDOW_BUFFER_TYPE_EGL_WINDOW);
ee->prop.window = wdata->win->id;
ecore_wl_window_state_changed_cb_set(wdata->win, _ecore_evas_wl_common_state_change, ee);
if ((einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas)))
{

View File

@ -66,7 +66,6 @@ void _ecore_evas_wl_common_post_render(Ecore_Evas *ee);
int _ecore_evas_wl_common_render(Ecore_Evas *ee);
void _ecore_evas_wl_common_screen_geometry_get(const Ecore_Evas *ee, int *x, int *y, int *w, int *h);
void _ecore_evas_wl_common_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi);
void _ecore_evas_wl_common_state_change(void *data);
void _ecore_evas_wl_common_render_updates(void *data, Evas *evas, void *event);
void _ecore_evas_wl_common_rotation_set(Ecore_Evas *ee, int rotation, int resize);

View File

@ -189,8 +189,6 @@ ecore_evas_wayland_shm_new_internal(const char *disp_name, unsigned int parent,
wdata->win =
ecore_wl_window_new(p, x, y, w, h, ECORE_WL_WINDOW_BUFFER_TYPE_SHM);
ee->prop.window = wdata->win->id;
ecore_wl_window_state_changed_cb_set(wdata->win,
_ecore_evas_wl_common_state_change, ee);
if ((einfo = (Evas_Engine_Info_Wayland_Shm *)evas_engine_info_get(ee->evas)))
{