Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=636b692a0e1938034af8a26d488427666fd8cda9
commit 636b692a0e1938034af8a26d488427666fd8cda9 Author: crazy <[email protected]> Date: Sat Aug 19 07:42:07 2017 +0200 enlightenment-0.21.9-1-x86_64 * Version bump diff --git a/source/enlightenment-extra/enlightenment/FrugalBuild b/source/enlightenment-extra/enlightenment/FrugalBuild index 2ff0b23..a5ccde6 100644 --- a/source/enlightenment-extra/enlightenment/FrugalBuild +++ b/source/enlightenment-extra/enlightenment/FrugalBuild @@ -2,12 +2,12 @@ # Maintainer: crazy <[email protected]> pkgname=enlightenment -pkgver=0.21.8 -pkgrel=2 +pkgver=0.21.9 +pkgrel=1 pkgdesc="Enlightenment Foundation Window Manager" url="https://www.enlightenment.org/" _F_archive_grepv="alpha\|beta\|rc" -source=(https://download.enlightenment.org/rel/apps/$pkgname/$pkgname-$pkgver.tar.xz branch.patch) +source=(https://download.enlightenment.org/rel/apps/$pkgname/$pkgname-$pkgver.tar.xz) up2date="Flasttar https://download.enlightenment.org/rel/apps/$pkgname/" groups=('enlightenment-extra' 'e-apps') archs=('x86_64') @@ -19,8 +19,7 @@ depends=('efl>=1.19.1' 'glibc' 'libsystemd' 'libunwind' 'harfbuzz' 'fribidi' 'fo 'libdrm' 'util-linux' 'libsndfile' 'bullet' 'libxcb' 'libasyncns' 'libffi' 'mtdev' 'libevdev' 'libblkid' 'flac' 'libogg' 'libvorbis' \ 'libxau' 'libxdmcp' 'libuuid' 'pam' 'xcb-util-keysyms' 'bluez') makedepends=('x11-protos' 'xorg-server-xwayland') -sha1sums=('ecf1f64d838fd885ffde19626437cf1bfa8235eb' \ - '0f268107c3249d1079bc39840bcabb0213ef86fd') +sha1sums=('8107662b1fee64254de5b6010d35b9b7b9ed92cb') Fconfopts+=" --enable-wayland \ --enable-wayland-egl \ --enable-xwayland \ diff --git a/source/enlightenment-extra/enlightenment/branch.patch b/source/enlightenment-extra/enlightenment/branch.patch deleted file mode 100644 index 634908f..0000000 --- a/source/enlightenment-extra/enlightenment/branch.patch +++ /dev/null @@ -1,2141 +0,0 @@ -diff --git a/src/bin/e_bryce.c b/src/bin/e_bryce.c -index 2042e7ad6..00af04e3d 100644 ---- a/src/bin/e_bryce.c -+++ b/src/bin/e_bryce.c -@@ -208,6 +208,7 @@ _bryce_autosize(Bryce *b) - if (b->size_changed) - elm_object_content_unset(b->scroller); - _bryce_position(b, w, h, &x, &y); -+ evas_object_move(b->bryce, x, y); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - e_efx_resize(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), w, b->size * e_scale, 0.1, NULL, NULL); - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) -@@ -261,6 +262,7 @@ _bryce_autosize(Bryce *b) - w = MIN(MAX(lw + sw, b->size * e_scale), maxw), h = b->size * e_scale; - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - w = b->size * e_scale, h = MIN(MAX(lh + sh, b->size * e_scale), maxh); -+ evas_object_move(b->bryce, x, y); - e_efx_resize(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), w, h, 0.1, NULL, NULL); - b->size_changed = 0; - } -diff --git a/src/bin/e_client.c b/src/bin/e_client.c -index b4d2c2576..5fdccebf3 100644 ---- a/src/bin/e_client.c -+++ b/src/bin/e_client.c -@@ -445,8 +445,11 @@ _e_client_free(E_Client *ec) - ec->pixmap = NULL; - } - -- e_comp_object_redirected_set(ec->frame, 0); -- e_comp_object_render_update_del(ec->frame); -+ if (ec->frame) -+ { -+ e_comp_object_redirected_set(ec->frame, 0); -+ e_comp_object_render_update_del(ec->frame); -+ } - - E_OBJECT(ec)->references++; - if (ec->fullscreen) -@@ -778,6 +781,12 @@ _e_client_move_begin(E_Client *ec) - if (!_e_client_action_input_win_new()) return 0; - ec->moving = 1; - ecmove = ec; -+ if (!ec->lock_user_stacking) -+ { -+ if (e_config->border_raise_on_mouse_action) -+ evas_object_raise(ec->frame); -+ } -+ - _e_client_hook_call(E_CLIENT_HOOK_MOVE_BEGIN, ec); - if (!ec->moving) - { -@@ -785,11 +794,7 @@ _e_client_move_begin(E_Client *ec) - _e_client_action_input_win_del(); - return 0; - } -- if (!ec->lock_user_stacking) -- { -- if (e_config->border_raise_on_mouse_action) -- evas_object_raise(ec->frame); -- } -+ E_FREE_FUNC(ec->raise_timer, ecore_timer_del); - return 1; - } - -@@ -916,6 +921,7 @@ _e_client_resize_handle(E_Client *ec) - int tw, th; - Eina_List *skiplist = NULL; - -+ if (e_comp->updating) return; - x = ec->x; - y = ec->y; - w = ec->w; -@@ -1415,7 +1421,7 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN - - _e_client_event_simple(ec, E_EVENT_CLIENT_MOVE); - -- _e_client_zone_update(ec); -+ if (!e_client_util_ignored_get(ec)) _e_client_zone_update(ec); - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); - if ((e_config->transient.move) && (ec->transients)) - { -@@ -1447,7 +1453,7 @@ _e_client_cb_evas_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ - - _e_client_event_simple(ec, E_EVENT_CLIENT_RESIZE); - -- _e_client_zone_update(ec); -+ if (!e_client_util_ignored_get(ec)) _e_client_zone_update(ec); - evas_object_geometry_get(ec->frame, &x, &y, &w, &h); - if ((e_config->transient.resize) && (ec->transients)) - { -@@ -2804,6 +2810,7 @@ e_client_mouse_move(E_Client *ec, Evas_Point *output) - { - EINA_SAFETY_ON_NULL_RETURN(ec); - if (ec->iconic || e_client_util_ignored_get(ec)) return; -+ if ((ec->mouse.current.mx == output->x) && (ec->mouse.current.my == output->y)) return; - ec->mouse.current.mx = output->x; - ec->mouse.current.my = output->y; - if (ec->moving) -@@ -3969,9 +3976,11 @@ e_client_unmaximize(E_Client *ec, E_Maximize max) - vert = EINA_TRUE; - if ((unmax & E_MAXIMIZE_VERTICAL) == E_MAXIMIZE_VERTICAL) - { -+ if ((ec->maximized & E_MAXIMIZE_LEFT) == E_MAXIMIZE_LEFT) -+ ec->maximized &= ~E_MAXIMIZE_LEFT; -+ if ((ec->maximized & E_MAXIMIZE_RIGHT) == E_MAXIMIZE_RIGHT) -+ ec->maximized &= ~E_MAXIMIZE_RIGHT; - ec->maximized &= ~E_MAXIMIZE_VERTICAL; -- ec->maximized &= ~E_MAXIMIZE_LEFT; -- ec->maximized &= ~E_MAXIMIZE_RIGHT; - } - if ((unmax & E_MAXIMIZE_LEFT) == E_MAXIMIZE_LEFT) - ec->maximized &= ~E_MAXIMIZE_LEFT; -@@ -4776,6 +4785,11 @@ e_client_resize_begin(E_Client *ec) - (ec->fullscreen) || (ec->lock_user_size)) - goto error; - if (!_e_client_action_input_win_new()) goto error; -+ if (!ec->lock_user_stacking) -+ { -+ if (e_config->border_raise_on_mouse_action) -+ evas_object_raise(ec->frame); -+ } - ecresize = ec; - _e_client_hook_call(E_CLIENT_HOOK_RESIZE_BEGIN, ec); - if (!e_client_util_resizing_get(ec)) -@@ -4784,11 +4798,7 @@ e_client_resize_begin(E_Client *ec) - _e_client_action_input_win_del(); - return EINA_FALSE; - } -- if (!ec->lock_user_stacking) -- { -- if (e_config->border_raise_on_mouse_action) -- evas_object_raise(ec->frame); -- } -+ E_FREE_FUNC(ec->raise_timer, ecore_timer_del); - return EINA_TRUE; - error: - ec->resize_mode = E_POINTER_RESIZE_NONE; -diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c -index a94858f1a..85dd68782 100644 ---- a/src/bin/e_comp.c -+++ b/src/bin/e_comp.c -@@ -311,16 +311,19 @@ _e_comp_client_update(E_Client *ec) - { - e_pixmap_image_clear(ec->pixmap, 0); - e_comp_object_render_update_del(ec->frame); //clear update -+ if (ec->changes.visible && (!evas_object_visible_get(ec->frame))) -+ evas_object_show(ec->frame); - } - else if (!e_pixmap_size_get(ec->pixmap, NULL, NULL)) - { - WRN("FAIL %p", ec); - e_comp_object_redirected_set(ec->frame, 0); -- if (e_pixmap_failures_get(ec->pixmap) < 3) -+ if (e_pixmap_failures_get(ec->pixmap) > 3) - e_comp_object_render_update_add(ec->frame); - } - } -- if ((!e_comp->saver) && e_pixmap_size_get(ec->pixmap, &pw, &ph)) -+ if (!(e_comp->saver && ecore_evas_manual_render_get(e_comp->ee)) && -+ e_pixmap_size_get(ec->pixmap, &pw, &ph)) - { - //INF("PX DIRTY: PX(%dx%d) CLI(%dx%d)", pw, ph, ec->client.w, ec->client.h); - e_pixmap_image_refresh(ec->pixmap); -@@ -375,6 +378,7 @@ _e_comp_cb_update(void) - if (e_comp->grab_cb) e_comp->grab_cb(); - e_comp->grabbed = 1; - } -+ e_comp->updating = 1; - l = e_comp->updates; - e_comp->updates = NULL; - EINA_LIST_FREE(l, ec) -@@ -383,6 +387,7 @@ _e_comp_cb_update(void) - e_comp_object_render_update_del(ec->frame); - _e_comp_client_update(ec); - } -+ e_comp->updating = 0; - _e_comp_fps_update(); - if (conf->fps_show) - { -@@ -549,7 +554,7 @@ _e_comp_shape_debug_rect(Eina_Rectangle *rect, E_Color *color) - evas_object_color_set(o, 0, (color->g += COLOR_INCREMENT), 0, 255); - else - evas_object_color_set(o, 0, 0, (color->b += COLOR_INCREMENT), 255); -- evas_object_repeat_events_set(o, 1); -+ evas_object_pass_events_set(o, 1); - evas_object_layer_set(o, E_LAYER_MENU - 1); - evas_object_move(o, rect->x, rect->y); - evas_object_resize(o, rect->w, rect->h); -@@ -1007,7 +1012,6 @@ EINTERN Eina_Bool - e_comp_init(void) - { - _e_comp_log_dom = eina_log_domain_register("e_comp", EINA_COLOR_YELLOW); -- eina_log_domain_level_set("e_comp", EINA_LOG_LEVEL_INFO); - - ecore_frametime = ecore_animator_frametime_get(); - shape_debug = !!getenv("E_SHAPE_DEBUG"); -diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h -index 04865820c..6859a9cd2 100644 ---- a/src/bin/e_comp.h -+++ b/src/bin/e_comp.h -@@ -161,6 +161,7 @@ struct _E_Comp - Eina_Bool shape_queue_blocked : 1; //x11 input shape updates are blocked - - Eina_Bool rendering : 1; // we've received a pre-render callback but no post-render yet. -+ Eina_Bool updating : 1; // running client updates - }; - - -diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c -index 0289b4295..9bdd57f71 100644 ---- a/src/bin/e_comp_canvas.c -+++ b/src/bin/e_comp_canvas.c -@@ -244,6 +244,7 @@ _e_comp_cb_screensaver_on() - (e_config->desklock_post_screensaver_time, - _e_comp_cb_timer_post_screensaver_lock, NULL); - } -+ e_pointers_freeze_set(1); - return ECORE_CALLBACK_PASS_ON; - } - -@@ -252,6 +253,7 @@ _e_comp_cb_screensaver_off() - { - E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del); - E_FREE_FUNC(timer_post_screensaver_on, ecore_timer_del); -+ e_pointers_freeze_set(0); - return ECORE_CALLBACK_PASS_ON; - } - //////////////////////////////////// -@@ -634,6 +636,7 @@ e_comp_canvas_update(void) - } - e_comp_canvas_zone_update(zone); - } -+ evas_object_resize(e_comp->bg_blank_object, e_comp->w, e_comp->h); - } - - E_API void -diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c -index df2a87839..299943772 100644 ---- a/src/bin/e_comp_object.c -+++ b/src/bin/e_comp_object.c -@@ -48,8 +48,8 @@ - /* enable along with display-specific damage INF calls to enable render tracing - * SLOW! - */ --static Eina_Bool render_debug_enabled; --#define RENDER_DEBUG(...) do { if (render_debug_enabled) INF(__VA_ARGS__); } while (0) -+static int render_debug_enabled; -+#define RENDER_DEBUG(...) do { if ((render_debug_enabled == 1) || ((render_debug_enabled == -1) && cw->ec->focused)) INF(__VA_ARGS__); } while (0) - - typedef struct _E_Comp_Object - { -@@ -925,6 +925,19 @@ _e_comp_object_mirror_pixels_get(void *data, Evas_Object *obj) - return; - } - -+ /* This is a big fat hack - ideally we're already on this list -+ * if the parent is visible, but there are some circumstances -+ * where a client receives damage while visible but its own pixels_get -+ * callback doesn't fire (new damage during the start frame of a desk -+ * switch animation). -+ * Thus we can't make this addition conditional on visibility or we can -+ * (under wayland at least) lose a frame callback and stop updating. -+ * -+ * e_comp_client_post_update_add() prevents clients from being -+ * on the list twice, so this is theoretically not harmful. -+ */ -+ e_comp_client_post_update_add(ec); -+ - if (cw->native) return; - - evas_object_image_data_set(obj, e_pixmap_image_data_get(cw->ec->pixmap)); -@@ -1133,6 +1146,8 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h) - E_Comp_Object *cw = data; - int pw = 0, ph = 0, fw, fh, iw, ih, prev_w, prev_h, x, y; - -+ -+ if ((w < 1) || (h < 1)) return; - /* if frame_object does not exist, client_inset indicates CSD. - * this means that ec->client matches cw->w/h, the opposite - * of SSD. -@@ -1232,13 +1247,23 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h) - { - /* client can't be resized if its pixmap isn't usable, try again */ - e_pixmap_dirty(cw->ec->pixmap); -- e_comp_object_render_update_add(obj); -- e_comp_render_queue(); -+ if (e_comp->nocomp) -+ e_pixmap_refresh(cw->ec->pixmap); -+ else -+ { -+ e_comp_object_render_update_add(obj); -+ e_comp_render_queue(); -+ } - } - cw->ec->changes.size = 1; - EC_CHANGED(cw->ec); - return; - } -+ if (e_pixmap_failures_get(cw->ec->pixmap) && (!cw->redirected)) -+ { -+ e_comp_object_redirected_set(obj, 1); -+ return; -+ } - prev_w = cw->w, prev_h = cw->h; - e_comp_object_frame_wh_adjust(obj, 0, 0, &fw, &fh); - /* check shading and clamp to pixmap size for regular clients */ -@@ -1307,7 +1332,6 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h) - e_win_centered_get(cw->ec->internal_elm_win)) - { - e_comp_object_util_center(obj); -- elm_win_center(cw->ec->internal_elm_win, 0, 0); - } - cw->force_move = 0; - } -@@ -1692,9 +1716,6 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) - evas_object_show(cw->smart_obj); - return; - } -- /* re-set geometry */ -- if (cw->ec->placed) -- evas_object_move(cw->smart_obj, cw->ec->x, cw->ec->y); - /* ensure that some kind of frame calc has occurred if there's a frame */ - if (e_pixmap_is_x(cw->ec->pixmap) && cw->frame_object && - (cw->ec->h == cw->ec->client.h) && (cw->ec->w == cw->ec->client.w)) -@@ -1708,6 +1729,10 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) - EC_CHANGED(cw->ec); - return; - } -+ /* re-set geometry */ -+ if (cw->ec->placed) -+ evas_object_move(cw->smart_obj, cw->ec->x, cw->ec->y); -+ - /* if pixmap not available, clear pixmap since we're going to fetch it again */ - if (!e_pixmap_size_get(cw->ec->pixmap, &w, &h)) - e_pixmap_clear(cw->ec->pixmap); -@@ -2309,9 +2334,7 @@ _e_comp_smart_hide(Evas_Object *obj) - { - INTERNAL_ENTRY; - cw->visible = 0; -- cw->deleted = e_object_is_del(E_OBJECT(cw->ec)); -- if (cw->deleted) -- _e_comp_object_layers_remove(cw); -+ cw->deleted |= cw->ec->delete_requested || e_object_is_del(E_OBJECT(cw->ec)); - evas_object_hide(cw->clip); - if (cw->input_obj) evas_object_hide(cw->input_obj); - evas_object_hide(cw->effect_obj); -@@ -2386,6 +2409,15 @@ _e_comp_smart_show(Evas_Object *obj) - } - } - -+static void -+_e_comp_object_client_del(void *d, void *obj EINA_UNUSED) -+{ -+ E_Comp_Object *cw = d; -+ cw->deleted = 1; -+ e_comp_object_render_update_del(cw->smart_obj); -+ _e_comp_object_layers_remove(cw); -+} -+ - static void - _e_comp_smart_del(Evas_Object *obj) - { -@@ -2394,8 +2426,6 @@ _e_comp_smart_del(Evas_Object *obj) - - INTERNAL_ENTRY; - -- if (!cw->deleted) -- e_comp_object_render_update_del(cw->smart_obj); - E_FREE_FUNC(cw->updates, eina_tiler_free); - E_FREE_FUNC(cw->pending_updates, eina_tiler_free); - free(cw->ns); -@@ -2549,9 +2579,14 @@ _e_comp_smart_resize(Evas_Object *obj, int w, int h) - static void - _e_comp_smart_init(void) - { -+ const char *env; - if (_e_comp_smart) return; - -- render_debug_enabled = !!getenv("E_RENDER_DEBUG"); -+ env = getenv("E_RENDER_DEBUG"); -+ if (eina_streq(env, "focus")) -+ render_debug_enabled = -1; -+ else if (env) -+ render_debug_enabled = 1; - { - static const Evas_Smart_Class sc = - { -@@ -2951,6 +2986,7 @@ e_comp_object_client_add(E_Client *ec) - cw->ec = ec; - ec->frame = o; - evas_object_data_set(o, "comp_object", (void*)1); -+ e_object_delfn_add(E_OBJECT(ec), _e_comp_object_client_del, cw); - - _e_comp_object_event_add(o); - -@@ -3252,7 +3288,8 @@ E_API Eina_Bool - e_comp_object_frame_allowed(Evas_Object *obj) - { - API_ENTRY EINA_FALSE; -- return (!cw->ec->mwm.borderless) && (cw->frame_object || (!cw->client_inset.calc)); -+ return (!e_client_util_ignored_get(cw->ec)) && (!cw->ec->mwm.borderless) && -+ (cw->frame_object || (!cw->client_inset.calc)); - } - - E_API void -@@ -3580,7 +3617,7 @@ E_API Eina_Bool - e_comp_object_damage_exists(Evas_Object *obj) - { - API_ENTRY EINA_FALSE; -- return cw->updates_exist; -+ return cw->updates_exist || cw->updates_full; - } - - E_API void -@@ -3880,17 +3917,32 @@ e_comp_object_dirty(Evas_Object *obj) - return; - } - e_comp_object_native_surface_set(obj, 1); -- it = eina_tiler_iterator_new(cw->updates); -- EINA_ITERATOR_FOREACH(it, rect) -+ if (cw->updates_full) - { -- RENDER_DEBUG("UPDATE ADD [%p]: %d %d %dx%d", cw->ec, rect->x, rect->y, rect->w, rect->h); -- evas_object_image_data_update_add(cw->obj, rect->x, rect->y, rect->w, rect->h); -+ Eina_Rectangle r = {0}; -+ -+ eina_tiler_area_size_get(cw->updates, &r.w, &r.h); -+ RENDER_DEBUG("UPDATE ADD [%p]: %d %d %dx%d", cw->ec, r.x, r.y, r.w, r.h); -+ evas_object_image_data_update_add(cw->obj, r.x, r.y, r.w, r.h); - EINA_LIST_FOREACH(cw->obj_mirror, ll, o) -- evas_object_image_data_update_add(o, rect->x, rect->y, rect->w, rect->h); -+ evas_object_image_data_update_add(o, r.x, r.y, r.w, r.h); - if (cw->pending_updates) -- eina_tiler_rect_add(cw->pending_updates, rect); -+ eina_tiler_rect_add(cw->pending_updates, &r); -+ } -+ else -+ { -+ it = eina_tiler_iterator_new(cw->updates); -+ EINA_ITERATOR_FOREACH(it, rect) -+ { -+ RENDER_DEBUG("UPDATE ADD [%p]: %d %d %dx%d", cw->ec, rect->x, rect->y, rect->w, rect->h); -+ evas_object_image_data_update_add(cw->obj, rect->x, rect->y, rect->w, rect->h); -+ EINA_LIST_FOREACH(cw->obj_mirror, ll, o) -+ evas_object_image_data_update_add(o, rect->x, rect->y, rect->w, rect->h); -+ if (cw->pending_updates) -+ eina_tiler_rect_add(cw->pending_updates, rect); -+ } -+ eina_iterator_free(it); - } -- eina_iterator_free(it); - if (cw->pending_updates) - eina_tiler_clear(cw->updates); - else -diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c -index 8d6cc9463..e82884769 100644 ---- a/src/bin/e_comp_wl.c -+++ b/src/bin/e_comp_wl.c -@@ -439,9 +439,9 @@ _e_comp_wl_evas_cb_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object * - axis = WL_POINTER_AXIS_HORIZONTAL_SCROLL; - - if (ev->z < 0) -- dir = -wl_fixed_from_int(abs(ev->z)); -+ dir = -wl_fixed_from_int(abs(10 * ev->z)); - else -- dir = wl_fixed_from_int(ev->z); -+ dir = wl_fixed_from_int(10 * ev->z); - - if (!ec->comp_data->surface) return; - -@@ -941,7 +941,7 @@ _e_comp_wl_evas_cb_delete_request(void *data, Evas_Object *obj EINA_UNUSED, void - if (!e_client_has_xwindow(ec)) - { - if (ec->internal_elm_win) -- E_FREE_FUNC(ec->internal_elm_win, evas_object_del); -+ evas_object_del(ec->internal_elm_win); - else - e_object_del(E_OBJECT(ec)); - } -@@ -1101,12 +1101,23 @@ _e_comp_wl_client_evas_init(E_Client *ec) - static Eina_Bool - _e_comp_wl_cb_randr_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) - { -- Eina_List *l; -+ const Eina_List *l; - E_Randr2_Screen *screen; - unsigned int transform = WL_OUTPUT_TRANSFORM_NORMAL; - - if (!e_randr2) return ECORE_CALLBACK_RENEW; - -+ if (e_xinerama_fake_screens_exist()) -+ { -+ E_Screen *scr; -+ EINA_LIST_FOREACH(e_xinerama_screens_get(), l, scr) -+ { -+ e_comp_wl_output_init(NULL, NULL, NULL, -+ scr->x, scr->y, scr->w, scr->h, -+ 0, 0, 0, 0, 0, scr->escreen); -+ } -+ return ECORE_CALLBACK_RENEW; -+ } - EINA_LIST_FOREACH(e_randr2->screens, l, screen) - { - if (!screen->config.enabled) -@@ -1137,7 +1148,7 @@ _e_comp_wl_cb_randr_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *e - screen->config.geom.x, screen->config.geom.y, - screen->config.geom.w, screen->config.geom.h, - screen->info.size.w, screen->info.size.h, -- screen->config.mode.refresh, 0, transform)) -+ screen->config.mode.refresh, 0, transform, 0)) - ERR("Could not initialize screen %s", screen->info.name); - } - -@@ -1171,8 +1182,8 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou - { - _last_event_time = ecore_loop_time_get(); - -- e_comp_wl->ptr.x = wl_fixed_from_int(ev->x); -- e_comp_wl->ptr.y = wl_fixed_from_int(ev->y); -+ e_comp_wl->ptr.x = ev->x; -+ e_comp_wl->ptr.y = ev->y; - e_screensaver_notidle(); - if (e_comp_wl->selection.target && - (!e_client_has_xwindow(e_comp_wl->selection.target)) && -@@ -2442,6 +2453,7 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec) - ec->parent->lock_close = EINA_FALSE; - ec->parent->modal = NULL; - } -+ if (e_comp_wl->selection.target == ec) e_comp_wl->selection.target = NULL; - - if ((ec == e_client_focused_get()) && ec->visible) _e_comp_wl_keyboard_leave(ec); - -@@ -2525,11 +2537,17 @@ _e_comp_wl_client_cb_focus_unset(void *data EINA_UNUSED, E_Client *ec) - e_comp_wl->kbd.focus = NULL; - } - -+static void -+_e_comp_wl_client_cb_move_begin(void *data EINA_UNUSED, E_Client *ec EINA_UNUSED) -+{ -+ e_comp_wl->ptr.button_mask = 0; -+} -+ - static void - _e_comp_wl_client_cb_resize_begin(void *data EINA_UNUSED, E_Client *ec) - { -+ e_comp_wl->ptr.button_mask = 0; - if (e_client_has_xwindow(ec)) return; -- - e_comp_wl->resize.edges = 0; - if (ec->keyboard_resizing) return; - switch (ec->resize_mode) -@@ -2862,6 +2880,8 @@ e_comp_wl_init(void) - e_client_hook_add(E_CLIENT_HOOK_FOCUS_UNSET, - _e_comp_wl_client_cb_focus_unset, NULL); - -+ e_client_hook_add(E_CLIENT_HOOK_MOVE_BEGIN, -+ _e_comp_wl_client_cb_move_begin, NULL); - e_client_hook_add(E_CLIENT_HOOK_RESIZE_BEGIN, - _e_comp_wl_client_cb_resize_begin, NULL); - e_client_hook_add(E_CLIENT_HOOK_RESIZE_END, -@@ -3092,7 +3112,7 @@ E_API Eina_Bool - e_comp_wl_output_init(const char *id, const char *make, const char *model, - int x, int y, int w, int h, int pw, int ph, - unsigned int refresh, unsigned int subpixel, -- unsigned int transform) -+ unsigned int transform, unsigned int num) - { - E_Comp_Wl_Output *output; - Eina_List *l2; -@@ -3103,7 +3123,10 @@ e_comp_wl_output_init(const char *id, const char *make, const char *model, - output = _e_comp_wl_output_get(e_comp_wl->outputs, id); - if (!output) - { -- zone = e_zone_for_id_get(id); -+ if (e_xinerama_fake_screens_exist()) -+ zone = e_comp_zone_number_get(num); -+ else -+ zone = e_zone_for_id_get(id); - if (!zone) return EINA_FALSE; - if (!(output = E_NEW(E_Comp_Wl_Output, 1))) return EINA_FALSE; - -diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h -index 52165d684..b81b4f3c7 100644 ---- a/src/bin/e_comp_wl.h -+++ b/src/bin/e_comp_wl.h -@@ -220,7 +220,7 @@ struct _E_Comp_Wl_Data - { - void *source; - struct wl_listener listener; -- E_Client *xwl_owner; -+ Ecore_Window xwl_owner; - } clipboard; - - struct -@@ -359,7 +359,7 @@ E_API E_Comp_Wl_Buffer *e_comp_wl_buffer_get(struct wl_resource *resource); - - E_API struct wl_signal e_comp_wl_surface_create_signal_get(void); - E_API double e_comp_wl_idle_time_get(void); --E_API Eina_Bool e_comp_wl_output_init(const char *id, const char *make, const char *model, int x, int y, int w, int h, int pw, int ph, unsigned int refresh, unsigned int subpixel, unsigned int transform); -+E_API Eina_Bool e_comp_wl_output_init(const char *id, const char *make, const char *model, int x, int y, int w, int h, int pw, int ph, unsigned int refresh, unsigned int subpixel, unsigned int transform, unsigned int num); - E_API void e_comp_wl_output_remove(const char *id); - - EINTERN Eina_Bool e_comp_wl_key_down(Ecore_Event_Key *ev); -diff --git a/src/bin/e_comp_wl_data.c b/src/bin/e_comp_wl_data.c -index fb160f7ad..48cab4ab1 100644 ---- a/src/bin/e_comp_wl_data.c -+++ b/src/bin/e_comp_wl_data.c -@@ -501,7 +501,7 @@ _e_comp_wl_data_device_selection_set(void *data EINA_UNUSED, E_Comp_Wl_Data_Sour - } - - e_comp_wl->selection.data_source = sel_source = source; -- e_comp_wl->clipboard.xwl_owner = NULL; -+ e_comp_wl->clipboard.xwl_owner = 0; - source->serial = e_comp_wl->selection.serial = serial; - - if (e_comp_wl->kbd.enabled) -@@ -765,16 +765,19 @@ static void - _e_comp_wl_data_cb_bind_manager(struct wl_client *client, void *data EINA_UNUSED, uint32_t version EINA_UNUSED, uint32_t id) - { - struct wl_resource *res; -+ pid_t pid; - - /* try to create data manager resource */ -- e_comp_wl->mgr.resource = res = -- wl_resource_create(client, &wl_data_device_manager_interface, 3, id); -+ res = wl_resource_create(client, &wl_data_device_manager_interface, 3, id); - if (!res) - { - ERR("Could not create data device manager"); - wl_client_post_no_memory(client); - return; - } -+ wl_client_get_credentials(client, &pid, NULL, NULL); -+ if (pid == getpid()) -+ e_comp_wl->mgr.resource = res; - - wl_resource_set_implementation(res, &_e_manager_interface, - e_comp->wl_comp_data, NULL); -@@ -940,15 +943,6 @@ _e_comp_wl_clipboard_create(void) - wl_signal_add(&e_comp_wl->selection.signal, &e_comp_wl->clipboard.listener); - } - --static void --_e_comp_wl_data_device_target_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) --{ -- E_Client *ec = data; -- -- if (e_comp_wl->selection.target == ec) -- e_comp_wl->selection.target = NULL; --} -- - E_API void - e_comp_wl_data_device_send_enter(E_Client *ec) - { -@@ -968,6 +962,11 @@ e_comp_wl_data_device_send_enter(E_Client *ec) - if (!data_device_res) return; - offer_res = e_comp_wl_data_device_send_offer(ec); - if (e_comp_wl->drag_source && (!offer_res)) return; -+ if (e_client_has_xwindow(e_comp_wl->drag_client)) -+ { -+ drag_source->offer->dnd_actions = drag_source->dnd_actions; -+ drag_source->offer->preferred_dnd_action = drag_source->current_dnd_action; -+ } - data_offer_update_action(drag_source->offer); - if (offer_res) - { -@@ -976,8 +975,6 @@ e_comp_wl_data_device_send_enter(E_Client *ec) - } - } - e_comp_wl->selection.target = ec; -- evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_DEL, -- _e_comp_wl_data_device_target_del, ec); - - #ifndef HAVE_WAYLAND_ONLY - if (e_client_has_xwindow(ec)) -@@ -1036,8 +1033,6 @@ e_comp_wl_data_device_send_leave(E_Client *ec) - e_client_has_xwindow(e_comp_wl->drag_client)) - return; - if (e_comp_wl->drag && (e_comp_wl->drag->object == ec->frame)) return; -- evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, -- _e_comp_wl_data_device_target_del, ec); - if (e_comp_wl->selection.target == ec) - e_comp_wl->selection.target = NULL; - #ifndef HAVE_WAYLAND_ONLY -@@ -1093,6 +1088,7 @@ e_comp_wl_data_device_keyboard_focus_set(void) - { - struct wl_resource *data_device_res, *offer_res = NULL, *focus; - E_Comp_Wl_Data_Source *source; -+ E_Client *focused; - - if (!e_comp_wl->kbd.enabled) - { -@@ -1105,6 +1101,7 @@ e_comp_wl_data_device_keyboard_focus_set(void) - ERR("No focused resource"); - return; - } -+ focused = wl_resource_get_user_data(focus); - source = (E_Comp_Wl_Data_Source *)e_comp_wl->selection.data_source; - - #ifndef HAVE_WAYLAND_ONLY -@@ -1113,10 +1110,10 @@ e_comp_wl_data_device_keyboard_focus_set(void) - if (!e_comp_util_has_xwayland()) break; - if (e_comp_wl->clipboard.xwl_owner) - { -- if (e_client_has_xwindow(e_client_focused_get())) return; -+ if (e_client_has_xwindow(focused)) return; - break; - } -- else if (source && e_client_has_xwindow(e_client_focused_get())) -+ else if (source && e_client_has_xwindow(focused)) - { - /* wl -> x11 */ - ecore_x_selection_owner_set(e_comp->cm_selection, -diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c -index d8281c0dd..3cbb605c7 100644 ---- a/src/bin/e_comp_wl_input.c -+++ b/src/bin/e_comp_wl_input.c -@@ -450,7 +450,7 @@ e_comp_wl_input_init(void) - { - /* set default seat name */ - if (!e_comp_wl->seat.name) -- e_comp_wl->seat.name = "default"; -+ e_comp_wl->seat.name = "seat0"; - - e_comp_wl->xkb.fd = -1; - -@@ -661,8 +661,13 @@ _e_comp_wl_input_context_keymap_set(struct xkb_keymap *keymap, struct xkb_contex - dev = ecore_evas_data_get(e_comp->ee, "device"); - if (dev) - { -- ecore_drm2_device_keyboard_cached_context_set(dev, context); -- ecore_drm2_device_keyboard_cached_keymap_set(dev, keymap); -+#ifndef EFL_VERSION_1_20 -+ if (!E_EFL_VERSION_MINIMUM(1, 19, 99)) -+ { -+ ecore_drm2_device_keyboard_cached_context_set(dev, context); -+ ecore_drm2_device_keyboard_cached_keymap_set(dev, keymap); -+ } -+#endif - } - } - # else -diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c -index 3b67fe260..7f1f2afa8 100644 ---- a/src/bin/e_comp_x.c -+++ b/src/bin/e_comp_x.c -@@ -120,7 +120,7 @@ _e_comp_x_focus_check(void) - focused = e_client_focused_get(); - /* if there is no new focused or it is a non-X client, - * focus comp canvas on focus-out */ -- if ((!focused) || (e_pixmap_type_get(focused->pixmap) != E_PIXMAP_TYPE_X)) -+ if ((!focused) || (!e_client_has_xwindow(focused))) - { - focus_canvas_time = ecore_x_current_time_get(); - focus_time = 0; -@@ -3920,15 +3920,19 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec) - { - unsigned int val; - -- if (ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY, &val, 1) > 0) -+ if (ecore_x_netwm_opacity_get(win, &val)) - { -- val = (val >> 24); - if (ec->netwm.opacity != val) - { - ec->netwm.opacity = val; -+ evas_object_color_set(ec->frame, -+ ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity); - rem_change = 1; - } -+ ec->netwm.fetch.opacity = !ec->netwm.opacity; - } -+ else -+ ec->netwm.fetch.opacity = 0; - } - if (ec->netwm.fetch.icon) - { -@@ -4633,6 +4637,7 @@ _e_comp_x_hook_client_focus_unset(void *d EINA_UNUSED, E_Client *ec) - focus_job_client = NULL; - E_FREE_FUNC(focus_job, ecore_job_del); - } -+ if (ec->override) return; - unfocus_job_client = ec; - if (!unfocus_job) - unfocus_job = ecore_job_add(_e_comp_x_hook_client_focus_unset_job, NULL); -@@ -4677,6 +4682,7 @@ _e_comp_x_hook_client_focus_set(void *d EINA_UNUSED, E_Client *ec) - unfocus_job_client = NULL; - E_FREE_FUNC(unfocus_job, ecore_job_del); - } -+ if (ec->override) return; - focus_job_client = ec; - if (!focus_job) - focus_job = ecore_job_add(_e_comp_x_hook_client_focus_set_job, NULL); -@@ -5485,7 +5491,10 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h) - if (!e_comp_canvas_init(w, h)) return EINA_FALSE; - } - -- e_grabinput_focus(e_comp->ee_win, E_FOCUS_METHOD_PASSIVE); -+ if (e_comp->comp_type == E_PIXMAP_TYPE_X) -+ e_grabinput_focus(e_comp->ee_win, E_FOCUS_METHOD_PASSIVE); -+ else -+ e_grabinput_focus(e_comp->root, E_FOCUS_METHOD_PASSIVE); - - /* init layers */ - for (i = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); i <= e_comp_canvas_layer_map(E_LAYER_CLIENT_PRIO); i++) -diff --git a/src/bin/e_comp_x_randr.c b/src/bin/e_comp_x_randr.c -index 20ab4e54b..a539a6e3f 100644 ---- a/src/bin/e_comp_x_randr.c -+++ b/src/bin/e_comp_x_randr.c -@@ -104,6 +104,8 @@ _is_lid_name(const char *name) - else if (strstr(name, "eDP")) return EINA_TRUE; - else if (strstr(name, "edp")) return EINA_TRUE; - else if (strstr(name, "EDP")) return EINA_TRUE; -+ else if (strstr(name, "DSI")) return EINA_TRUE; -+ else if (strstr(name, "dsi")) return EINA_TRUE; - return EINA_FALSE; - } - -diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c -index 43ac2cdf3..03d0cee56 100644 ---- a/src/bin/e_fm.c -+++ b/src/bin/e_fm.c -@@ -7061,7 +7061,7 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event) - } - } - } -- else -+ else if (sd->realpath) - { - if (_e_fm2_view_mode_get(sd) == E_FM2_VIEW_MODE_LIST && sd->order_file) /* list */ - { -diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c -index 7935b5fc1..2aa1e410c 100644 ---- a/src/bin/e_gadget.c -+++ b/src/bin/e_gadget.c -@@ -275,6 +275,15 @@ _gadget_object_free(E_Object *eobj) - if (zgc->id == -1) _gadget_free(zgc); - } - -+static void -+_gadget_remove(E_Gadget_Config *zgc) -+{ -+ evas_object_smart_callback_call(zgc->site->layout, "gadget_removed", zgc->gadget); -+ zgc->site->gadget_list = eina_inlist_remove(zgc->site->gadget_list, EINA_INLIST_GET(zgc)); -+ zgc->site->gadgets = eina_list_remove(zgc->site->gadgets, zgc); -+ _gadget_free(zgc); -+} -+ - static void - _gadget_wizard_end(void *data, int id) - { -@@ -282,7 +291,10 @@ _gadget_wizard_end(void *data, int id) - - zgc->id = id; - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_unlocked", NULL); -- _gadget_object_finalize(zgc); -+ if (id) -+ _gadget_object_finalize(zgc); -+ else -+ _gadget_remove(zgc); - } - - static Eina_Bool -@@ -322,7 +334,7 @@ _gadget_object_create(E_Gadget_Config *zgc) - - if (!zgc->site->orient) - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); -- evas_object_event_callback_priority_add(g, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_BEFORE, _gadget_del, zgc); -+ evas_object_event_callback_priority_add(g, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_AFTER, _gadget_del, zgc); - _gadget_reparent(zgc->site, zgc); - elm_object_tree_focus_allow_set(zgc->gadget, 0); - evas_object_raise(zgc->site->events); -@@ -386,16 +398,16 @@ _site_gadget_resize(Evas_Object *g, int w, int h, Evas_Coord *ww, Evas_Coord *hh - switch (aspect) - { - case EVAS_ASPECT_CONTROL_HORIZONTAL: -- *hh = (*ww * ay / ax); -+ *hh = (*ww * (double)ay / ax); - break; - case EVAS_ASPECT_CONTROL_VERTICAL: -- *ww = (*hh * ax / ay); -+ *ww = (*hh * (double)ax / ay); - break; - default: - if (IS_HORIZ(zgc->site->orient)) -- *ww = (*hh * ax / ay); -+ *ww = (*hh * (double)ax / ay); - else if (IS_VERT(zgc->site->orient)) -- *hh = (*ww * ay / ax); -+ *hh = (*ww * (double)ay / ax); - else if (aspect) - { - double ar = ax / (double) ay; -@@ -408,9 +420,9 @@ _site_gadget_resize(Evas_Object *g, int w, int h, Evas_Coord *ww, Evas_Coord *hh - *ww = *hh; - } - else if (ar > 1.0) -- *hh = (*ww * ay / ax); -+ *hh = (*ww * (double)ay / ax); - else -- *ww = (*hh * ax / ay); -+ *ww = (*hh * (double)ax / ay); - } - } - } -@@ -540,6 +552,7 @@ _site_layout(Evas_Object *o, Evas_Object_Box_Data *priv EINA_UNUSED, void *data) - E_Gadget_Config *zgc; - - evas_object_geometry_get(o, &x, &y, &w, &h); -+ if ((!w) || (!h)) return; - evas_object_geometry_set(zgs->events, x, y, w, h); - - evas_object_box_align_get(o, &ax, &ay); -@@ -631,11 +644,17 @@ _gadget_mouse_resize(E_Gadget_Config *zgc, int t EINA_UNUSED, Ecore_Event_Mouse_ - gw = zgc->w * w; - gh = zgc->h * h; - if (zgc->resizing & E_GADGET_SITE_ANCHOR_LEFT) -- gw -= (ev->x - zgc->down.x); -+ { -+ gw -= (ev->x - zgc->down.x); -+ zgc->x = ev->x / (double)w; -+ } - else - gw += (ev->x - zgc->down.x); - if (zgc->resizing & E_GADGET_SITE_ANCHOR_TOP) -- gh -= (ev->y - zgc->down.y); -+ { -+ gh -= (ev->y - zgc->down.y); -+ zgc->y = ev->y / (double)h; -+ } - else - gh += (ev->y - zgc->down.y); - zgc->w = gw / w; -@@ -777,15 +796,6 @@ _gadget_act_configure(E_Object *obj, const char *params EINA_UNUSED, E_Binding_E - return EINA_TRUE; - } - --static void --_gadget_remove(E_Gadget_Config *zgc) --{ -- evas_object_smart_callback_call(zgc->site->layout, "gadget_removed", zgc->gadget); -- zgc->site->gadget_list = eina_inlist_remove(zgc->site->gadget_list, EINA_INLIST_GET(zgc)); -- zgc->site->gadgets = eina_list_remove(zgc->site->gadgets, zgc); -- _gadget_free(zgc); --} -- - static void - _gadget_menu_remove(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) - { -@@ -1141,17 +1151,17 @@ _site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e - { - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; -- Eina_List *l; -+ Eina_List *l, *ll; - - E_FREE_FUNC(zgs->events, evas_object_del); -+ E_FREE_FUNC(zgs->move_handler, ecore_event_handler_del); -+ E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del); -+ EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc) -+ evas_object_del(zgc->display); - zgs->layout = NULL; - zgs->cur_size = 0; - zgs->action = NULL; - zgs->style_cb = NULL; -- E_FREE_FUNC(zgs->move_handler, ecore_event_handler_del); -- E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del); -- EINA_LIST_FOREACH(zgs->gadgets, l, zgc) -- evas_object_del(zgc->display); - if (zgs->name) return; - eina_stringshare_del(zgs->name); - free(zgs); -@@ -1223,13 +1233,26 @@ _site_create(E_Gadget_Site *zgs) - evas_object_raise(zgs->events); - } - -+static void -+_site_auto_add_comp_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -+{ -+ E_Gadget_Site *zgs = data; -+ Eina_List *l, *ll; -+ E_Gadget_Config *zgc; -+ -+ /* prune unconfigured gadgets */ -+ EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc) -+ if (zgc->id <= 0) _gadget_remove(zgc); -+ evas_object_del(zgs->layout); -+} -+ - static void - _site_auto_add(E_Gadget_Site *zgs, Evas_Object *comp_object) - { - int x, y, w, h; - - _site_create(zgs); -- e_comp_object_util_del_list_append(comp_object, zgs->layout); -+ evas_object_event_callback_add(comp_object, EVAS_CALLBACK_DEL, _site_auto_add_comp_object_del, zgs); - evas_object_layer_set(zgs->layout, evas_object_layer_get(comp_object)); - evas_object_stack_above(zgs->layout, comp_object); - evas_object_geometry_get(comp_object, &x, &y, &w, &h); -@@ -1508,12 +1531,13 @@ e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style) - EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL); - - prev = zgc->style.obj; -+ if ((!prev) && (!style)) return NULL; - zgc->style.obj = style; - if (style) - { - elm_layout_file_get(style, NULL, &grp); - eina_stringshare_replace(&zgc->style.name, strrchr(grp, '/') + 1); -- evas_object_event_callback_priority_add(style, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_BEFORE, _gadget_del, zgc); -+ evas_object_event_callback_priority_add(style, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_AFTER, _gadget_del, zgc); - } - else - eina_stringshare_replace(&zgc->style.name, NULL); -diff --git a/src/bin/e_main.c b/src/bin/e_main.c -index ceab4bd8e..25acd837d 100644 ---- a/src/bin/e_main.c -+++ b/src/bin/e_main.c -@@ -327,22 +327,6 @@ main(int argc, char **argv) - e_util_env_set("DESKTOP", "Enlightenment"); - TS("Environment Variables Done"); - -- /* KDE5 applications don't understand anything other then gnome or kde */ -- /* They expect everyone else to set QT_QPA_PLATFORMTHEME to tell them how */ -- /* to theme there apps otherwise they use a fallback mode which results in */ -- /* missing icons and a inability to change the appearance of applications */ -- /* see https://bugzilla.suse.com/show_bug.cgi?id=920792 for more info. */ -- /* There are two sensible defaults for this variable, "kde" which will */ -- /* make apps appear the same as they do if they are run in kde. and gtk2 */ -- /* which will make kde applications follow the gtk/gnome theme, we have */ -- /* decided on choosing gtk2 as it means that kde/qt apps will follow the */ -- /* app and icon theme set in the enlightenment settings dialog. Some users */ -- /* who wish to use Qt apps without any gnome or gtk usage may choose to */ -- /* install qt5ct and overwrite this variable with qt5ct and use that to */ -- /* configure there Qt5 applications. */ -- e_util_env_set("QT_QPA_PLATFORMTHEME", "gtk2"); -- e_util_env_set("QT_STYLE_OVERRIDE", "gtk2"); -- - TS("Parse Arguments"); - _e_main_parse_arguments(argc, argv); - TS("Parse Arguments Done"); -@@ -566,6 +550,26 @@ main(int argc, char **argv) - TS("E_Config Init Done"); - _e_main_shutdown_push(e_config_shutdown); - -+ if (e_config->xsettings.match_e17_theme) -+ { -+ -+ /* KDE5 applications don't understand anything other then gnome or kde */ -+ /* They expect everyone else to set QT_QPA_PLATFORMTHEME to tell them how */ -+ /* to theme there apps otherwise they use a fallback mode which results in */ -+ /* missing icons and a inability to change the appearance of applications */ -+ /* see https://bugzilla.suse.com/show_bug.cgi?id=920792 for more info. */ -+ /* There are two sensible defaults for this variable, "kde" which will */ -+ /* make apps appear the same as they do if they are run in kde. and gtk2 */ -+ /* which will make kde applications follow the gtk/gnome theme, we have */ -+ /* decided on choosing gtk2 as it means that kde/qt apps will follow the */ -+ /* app and icon theme set in the enlightenment settings dialog. Some users */ -+ /* who wish to use Qt apps without any gnome or gtk usage may choose to */ -+ /* install qt5ct and overwrite this variable with qt5ct and use that to */ -+ /* configure there Qt5 applications. */ -+ e_util_env_set("QT_QPA_PLATFORMTHEME", "gtk2"); -+ e_util_env_set("QT_STYLE_OVERRIDE", "gtk2"); -+ } -+ - TS("E_Env Init"); - if (!e_env_init()) - { -@@ -1521,6 +1525,14 @@ _e_main_test_formats(void) - Evas_Object *im, *txt; - Evas_Coord tw, th; - char buff[PATH_MAX]; -+ char *types[] = -+ { -+ "svg", -+ "jpg", -+ "png", -+ "edj" -+ }; -+ unsigned int i, t_edj = 3; - - if (e_config->show_splash) - e_init_status_set(_("Testing Format Support")); -@@ -1534,45 +1546,32 @@ _e_main_test_formats(void) - evas = ecore_evas_get(ee); - im = evas_object_image_add(evas); - -- e_prefix_data_concat_static(buff, "data/images/test.svg"); -- evas_object_image_file_set(im, buff, NULL); -- if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE) -+ for (i = 0; i < EINA_C_ARRAY_LENGTH(types); i++) - { -- e_error_message_show(_("Enlightenment found Evas can't load SVG files. " -- "Check Evas has SVG loader support.\n")); -- } -- else -- efreet_icon_extension_add(".svg"); -+ char b[128], *t = types[i]; - -- e_prefix_data_concat_static(buff, "data/images/test.jpg"); -- evas_object_image_file_set(im, buff, NULL); -- if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE) -- { -- e_error_message_show(_("Enlightenment found Evas can't load JPEG files. " -- "Check Evas has JPEG loader support.\n")); -- _e_main_shutdown(-1); -- } -- efreet_icon_extension_add(".jpg"); -- -- e_prefix_data_concat_static(buff, "data/images/test.png"); -- evas_object_image_file_set(im, buff, NULL); -- if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE) -- { -- e_error_message_show(_("Enlightenment found Evas can't load PNG files. " -- "Check Evas has PNG loader support.\n")); -- _e_main_shutdown(-1); -- } -- efreet_icon_extension_add(".png"); -- -- e_prefix_data_concat_static(buff, "data/images/test.edj"); -- evas_object_image_file_set(im, buff, "images/0"); -- if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE) -- { -- e_error_message_show(_("Enlightenment found Evas can't load EET files. " -- "Check Evas has EET loader support.\n")); -- _e_main_shutdown(-1); -+ snprintf(b, sizeof(b), "data/images/test.%s", types[i]); -+ e_prefix_data_concat_static(buff, b); -+ evas_object_image_file_set(im, buff, NULL); -+ if (i == t_edj) t = "eet"; -+ switch (evas_object_image_load_error_get(im)) -+ { -+ default: -+ e_error_message_show(_("Enlightenment found Evas can't load '%s' files. " -+ "Check Evas has '%s' loader support.\n"), t, t); -+ if (i) _e_main_shutdown(-1); -+ break; -+ case EVAS_LOAD_ERROR_CORRUPT_FILE: -+ case EVAS_LOAD_ERROR_DOES_NOT_EXIST: -+ case EVAS_LOAD_ERROR_PERMISSION_DENIED: -+ e_error_message_show(_("Enlightenment cannot access test image for '%s' filetype. " -+ "Check your install for setup issues.\n"), t); -+ case EVAS_LOAD_ERROR_NONE: -+ snprintf(b, sizeof(b), ".%s", types[i]); -+ efreet_icon_extension_add(b); -+ break; -+ } - } -- efreet_icon_extension_add(".edj"); - - evas_object_del(im); - -diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c -index 2849e598d..e22ec6221 100644 ---- a/src/bin/e_pixmap.c -+++ b/src/bin/e_pixmap.c -@@ -46,7 +46,6 @@ struct _E_Pixmap - - #ifdef HAVE_WAYLAND - E_Comp_Wl_Buffer *buffer; -- E_Comp_Wl_Buffer *native_buffer; - E_Comp_Wl_Buffer *held_buffer; - struct wl_listener buffer_destroy_listener; - struct wl_listener held_buffer_destroy_listener; -@@ -704,6 +703,17 @@ e_pixmap_native_surface_init(E_Pixmap *cp, Evas_Native_Surface *ns) - EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(ns, EINA_FALSE); - -+ /* This structure is stack automatic in the caller, so it's all -+ * uninitialized. Clear it to 0 so we don't have uninit data for -+ * variables only present in a newer version of native surface -+ * than this code was written for. -+ * -+ * The other option would be to set ns->version to whatever version -+ * this code was actually written against, but I've been told all -+ * native surface users are expected to set ns->version to the -+ * version provided in the headers (EVAS_NATIVE_SURFACE_VERSION) -+ */ -+ memset(ns, 0, sizeof(*ns)); - ns->version = EVAS_NATIVE_SURFACE_VERSION; - switch (cp->type) - { -@@ -721,17 +731,14 @@ e_pixmap_native_surface_init(E_Pixmap *cp, Evas_Native_Surface *ns) - if (cp->buffer->dmabuf_buffer) - { - ns->type = EVAS_NATIVE_SURFACE_WL_DMABUF; -- ns->version = EVAS_NATIVE_SURFACE_VERSION; - - ns->data.wl_dmabuf.attr = &cp->buffer->dmabuf_buffer->attributes; - ns->data.wl_dmabuf.resource = cp->buffer->resource; -- cp->native_buffer = cp->buffer; - ret = EINA_TRUE; - } - else if (!cp->buffer->shm_buffer) - { - ns->type = EVAS_NATIVE_SURFACE_WL; -- ns->version = EVAS_NATIVE_SURFACE_VERSION; - ns->data.wl.legacy_buffer = cp->buffer->resource; - ret = EINA_TRUE; - } -@@ -1059,23 +1066,24 @@ e_pixmap_dmabuf_test(struct linux_dmabuf_buffer *dmabuf) - { - Evas_Native_Surface ns; - Evas_Object *test; -+ Eina_Bool ret; - int size; - void *data; - -- if (e_comp->gl) -- { -- Eina_Bool ret; -- ns.type = EVAS_NATIVE_SURFACE_WL_DMABUF; -- ns.version = EVAS_NATIVE_SURFACE_VERSION; -- ns.data.wl_dmabuf.attr = &dmabuf->attributes; -- ns.data.wl_dmabuf.resource = NULL; -- test = evas_object_image_add(e_comp->evas); -- evas_object_image_native_surface_set(test, &ns); -- ret = evas_object_image_load_error_get(test) == EVAS_LOAD_ERROR_NONE; -- evas_object_del(test); -- if (!ns.data.wl_dmabuf.attr) return EINA_FALSE; -- return ret; -- } -+ memset(&ns, 0, sizeof(ns)); -+ -+ ns.type = EVAS_NATIVE_SURFACE_WL_DMABUF; -+ ns.version = EVAS_NATIVE_SURFACE_VERSION; -+ ns.data.wl_dmabuf.attr = &dmabuf->attributes; -+ ns.data.wl_dmabuf.resource = NULL; -+ test = evas_object_image_add(e_comp->evas); -+ evas_object_image_native_surface_set(test, &ns); -+ ret = evas_object_image_load_error_get(test) == EVAS_LOAD_ERROR_NONE; -+ evas_object_del(test); -+ if (!ns.data.wl_dmabuf.attr) return EINA_FALSE; -+ -+ if (e_comp->gl || !ret) -+ return ret; - - /* TODO: Software rendering for multi-plane formats */ - if (dmabuf->attributes.n_planes != 1) return EINA_FALSE; -@@ -1084,7 +1092,7 @@ e_pixmap_dmabuf_test(struct linux_dmabuf_buffer *dmabuf) - - /* This is only legit for ARGB8888 */ - size = dmabuf->attributes.height * dmabuf->attributes.stride[0]; -- data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, dmabuf->attributes.fd[0], 0); -+ data = mmap(NULL, size, PROT_READ, MAP_SHARED, dmabuf->attributes.fd[0], 0); - if (data == MAP_FAILED) return EINA_FALSE; - munmap(data, size); - -diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c -index 07b1761fa..dbf9b1123 100644 ---- a/src/bin/e_pointer.c -+++ b/src/bin/e_pointer.c -@@ -780,7 +780,10 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) - } - ec = e_comp_object_client_get(o); - if (ec) -- ec->hidden = 1; -+ { -+ ec->hidden = 1; -+ evas_object_hide(ec->frame); -+ } - } - - if (obj) -@@ -807,3 +810,18 @@ e_pointer_window_add(E_Pointer *ptr, Ecore_Window win) - _e_pointer_theme_buf(ptr, buf); - _e_pointer_x11_setup(ptr, buf); - } -+ -+EINTERN void -+e_pointers_freeze_set(Eina_Bool set) -+{ -+ Eina_List *l; -+ E_Pointer *ptr; -+ -+ EINA_LIST_FOREACH(_ptrs, l, ptr) -+ { -+ if (isedje(ptr->o_ptr)) -+ edje_object_play_set(ptr->o_ptr, !set); -+ if (isedje(ptr->buffer_o_ptr)) -+ edje_object_play_set(ptr->buffer_o_ptr, !set); -+ } -+} -diff --git a/src/bin/e_pointer.h b/src/bin/e_pointer.h -index 91185a6c4..df74d882d 100644 ---- a/src/bin/e_pointer.h -+++ b/src/bin/e_pointer.h -@@ -60,6 +60,7 @@ struct _E_Pointer - - EINTERN int e_pointer_init(void); - EINTERN int e_pointer_shutdown(void); -+EINTERN void e_pointers_freeze_set(Eina_Bool set); - - E_API E_Pointer *e_pointer_window_new(Ecore_Window win, Eina_Bool filled); - E_API E_Pointer *e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled); -diff --git a/src/bin/e_sys.c b/src/bin/e_sys.c -index 72e926087..cbc24f345 100644 ---- a/src/bin/e_sys.c -+++ b/src/bin/e_sys.c -@@ -762,7 +762,7 @@ _e_sys_logout_after(void) - static void - _e_sys_logout_begin(E_Sys_Action a_after, Eina_Bool raw) - { -- const Eina_List *l; -+ const Eina_List *l, *ll; - E_Client *ec; - E_Obj_Dialog *od; - -@@ -783,7 +783,7 @@ _e_sys_logout_begin(E_Sys_Action a_after, Eina_Bool raw) - } - _e_sys_action_after = a_after; - _e_sys_action_after_raw = raw; -- EINA_LIST_FOREACH(e_comp->clients, l, ec) -+ EINA_LIST_FOREACH_SAFE(e_comp->clients, l, ll, ec) - { - e_client_act_close_begin(ec); - } -diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c -index a48622464..ae46aa068 100644 ---- a/src/bin/e_utils.c -+++ b/src/bin/e_utils.c -@@ -1056,7 +1056,7 @@ _e_util_size_debug(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj - - evas_object_geometry_get(obj, &x, &y, &w, &h); - name = evas_object_name_get(obj); -- fprintf(stderr, "%s %d OBJ[%s%s%p]: (%d,%d) - %dx%d\n", evas_object_visible_get(obj) ? "VIS" : "HID", evas_object_layer_get(obj), name ?: "", name ? "|" : "", obj, x, y, w, h); -+ fprintf(stderr, "%s %d OBJ[%s%s%p]: (%d,%d) - %dx%d\n", evas_object_visible_get(obj) ? "VIS" : "HID", evas_object_layer_get(obj), name ?: evas_object_type_get(obj), "|", obj, x, y, w, h); - } - - E_API void -diff --git a/src/bin/e_widget_entry.c b/src/bin/e_widget_entry.c -index 9426830be..46cd4c7c9 100644 ---- a/src/bin/e_widget_entry.c -+++ b/src/bin/e_widget_entry.c -@@ -6,6 +6,7 @@ struct _E_Widget_Data - Evas_Object *o_entry, *o_inout; - char **text_location; - void (*func)(void *data, void *data2); -+ char *text; - void *data; - void *data2; - }; -@@ -81,7 +82,16 @@ e_widget_entry_add(Evas_Object *parent, char **text_location, void (*func)(void - - o = wd->o_entry; - if ((text_location) && (*text_location)) -- elm_object_text_set(o, *text_location); -+ { -+ char *tmp = elm_entry_utf8_to_markup(*text_location); -+ -+ if (tmp) -+ { -+ elm_object_text_set(o, tmp); -+ free(tmp); -+ } -+ else elm_object_text_set(wd->o_entry, NULL); -+ } - - wd->func = func; - wd->data = data; -@@ -101,10 +111,17 @@ E_API void - e_widget_entry_text_set(Evas_Object *entry, const char *text) - { - E_Widget_Data *wd; -+ char *tmp; - - if (!(entry) || (!(wd = e_widget_data_get(entry)))) - return; -- elm_object_text_set(wd->o_entry, text); -+ tmp = elm_entry_utf8_to_markup(text); -+ if (tmp) -+ { -+ elm_object_text_set(wd->o_entry, tmp); -+ free(tmp); -+ } -+ else elm_object_text_set(wd->o_entry, NULL); - } - - /** -@@ -117,10 +134,20 @@ E_API const char * - e_widget_entry_text_get(Evas_Object *entry) - { - E_Widget_Data *wd; -+ char *tmp; - - if (!(entry) || (!(wd = e_widget_data_get(entry)))) - return NULL; -- return elm_object_text_get(wd->o_entry); -+ tmp = elm_entry_markup_to_utf8(elm_object_text_get(wd->o_entry)); -+ if (tmp) -+ { -+ if (wd->text) free(wd->text); -+ wd->text = tmp; -+ return wd->text; -+ } -+ if (wd->text) free(wd->text); -+ wd->text = NULL; -+ return NULL; - } - - /** -@@ -197,10 +224,12 @@ _e_wid_del_hook(Evas_Object *obj) - - if (!(obj) || (!(wd = e_widget_data_get(obj)))) - return; -+ if (wd->text) free(wd->text); - evas_object_del(wd->o_entry); - evas_object_del(wd->o_inout); - wd->o_entry = NULL; - wd->o_inout = NULL; -+ wd->text = NULL; - free(wd); - } - -@@ -237,16 +266,26 @@ _e_wid_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EIN - { - Evas_Object *entry; - E_Widget_Data *wd; -- const char *text; -+ char *tmp; - - if (!(entry = data) || (!(wd = e_widget_data_get(entry)))) - return; - -+ tmp = elm_entry_markup_to_utf8(elm_object_text_get(wd->o_entry)); -+ if (tmp) -+ { -+ if (wd->text) free(wd->text); -+ wd->text = tmp; -+ } -+ else -+ { -+ if (wd->text) free(wd->text); -+ wd->text = NULL; -+ } - if (wd->text_location) - { -- text = elm_object_text_get(wd->o_entry); - free(*wd->text_location); -- *wd->text_location = text ? strdup(text) : NULL; -+ *wd->text_location = wd->text ? strdup(wd->text) : NULL; - } - e_widget_change(data); - -diff --git a/src/bin/e_win.c b/src/bin/e_win.c -index 5ae728353..de8093e6c 100644 ---- a/src/bin/e_win.c -+++ b/src/bin/e_win.c -@@ -166,13 +166,13 @@ _e_elm_win_trap_show(void *data, Evas_Object *o) - ctx->client->borderless |= borderless; - e_comp_object_frame_xy_adjust(ctx->client->frame, ctx->client->client.x, ctx->client->client.y, &ctx->client->x, &ctx->client->y); - e_comp_object_frame_wh_adjust(ctx->client->frame, ctx->client->client.w, ctx->client->client.h, &ctx->client->w, &ctx->client->h); -+ if (ctx->sized) evas_object_resize(o, ctx->w, ctx->h); -+ if (ctx->placed) evas_object_move(o, ctx->x, ctx->y); - if (ctx->centered) - { -- e_comp_object_util_center(ctx->client->frame); -- ctx->centered =0; -+ e_comp_object_util_center(o); -+ ctx->centered = 0; - } -- else if (ctx->placed) evas_object_move(o, ctx->x, ctx->y); -- if (ctx->sized) evas_object_resize(o, ctx->w, ctx->h); - return EINA_TRUE; - } - -diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c -index 4397ad0a7..f6c70864f 100644 ---- a/src/bin/e_zone.c -+++ b/src/bin/e_zone.c -@@ -78,6 +78,7 @@ _e_zone_cb_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *eve - E_Zone_Edge edge; - E_Zone *zone = data; - -+ if (!ev->timestamp) return; - edge = _e_zone_detect_edge(zone, obj); - if (edge == E_ZONE_EDGE_NONE) return; - -@@ -101,6 +102,7 @@ _e_zone_cb_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *ev - E_Zone_Edge edge; - E_Zone *zone = data; - -+ if (!ev->timestamp) return; - edge = _e_zone_detect_edge(zone, obj); - if (edge == E_ZONE_EDGE_NONE) return; - -@@ -124,6 +126,7 @@ _e_zone_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *e - E_Zone_Edge edge; - E_Zone *zone = data; - -+ if (!ev->timestamp) return; - edge = _e_zone_detect_edge(zone, obj); - if (edge == E_ZONE_EDGE_NONE) return; - -@@ -146,6 +149,7 @@ _e_zone_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *eve - E_Zone_Edge edge; - E_Zone *zone = data; - -+ if (!ev->timestamp) return; - edge = _e_zone_detect_edge(zone, obj); - if (edge == E_ZONE_EDGE_NONE) return; - -diff --git a/src/modules/clock/e_mod_main.c b/src/modules/clock/e_mod_main.c -index b2356a671..9011238a0 100644 ---- a/src/modules/clock/e_mod_main.c -+++ b/src/modules/clock/e_mod_main.c -@@ -38,7 +38,7 @@ static void _clock_popup_free(Instance *inst); - static Eio_Monitor *clock_tz_monitor = NULL; - static Eio_Monitor *clock_tz2_monitor = NULL; - static Eio_Monitor *clock_tzetc_monitor = NULL; --static Eina_List *clock_eio_handlers = NULL; -+static Eina_List *handlers = NULL; - Config *clock_config = NULL; - - static E_Config_DD *conf_edd = NULL; -@@ -839,6 +839,20 @@ _clock_time_update(void *d EINA_UNUSED, int type EINA_UNUSED, void *event EINA_U - return ECORE_CALLBACK_PASS_ON; - } - -+static Eina_Bool -+_clock_screensaver_on() -+{ -+ E_FREE_FUNC(update_today, ecore_timer_del); -+ return ECORE_CALLBACK_RENEW; -+} -+ -+static Eina_Bool -+_clock_screensaver_off() -+{ -+ if (clock_instances) _update_today_timer(NULL); -+ return ECORE_CALLBACK_RENEW; -+} -+ - /* module setup */ - E_API E_Module_Api e_modapi = - { -@@ -893,14 +907,16 @@ e_modapi_init(E_Module *m) - clock_tz2_monitor = eio_monitor_add("/etc/timezone"); - if (ecore_file_is_dir("/etc")) - clock_tzetc_monitor = eio_monitor_add("/etc"); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, _clock_screensaver_on, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _clock_screensaver_off, NULL); - - e_gadcon_provider_register(&_gadcon_class); - -diff --git a/src/modules/conf_randr/e_int_config_randr2.c b/src/modules/conf_randr/e_int_config_randr2.c -index 50512bd69..adb9c3e89 100644 ---- a/src/modules/conf_randr/e_int_config_randr2.c -+++ b/src/modules/conf_randr/e_int_config_randr2.c -@@ -443,7 +443,7 @@ _basic_screen_info_fill(E_Config_Dialog_Data *cfdata, E_Config_Randr2_Screen *cs - else if (cs->rel_mode == E_RANDR2_RELATIVE_TO_BELOW) - elm_object_text_set(cfdata->rel_mode_obj, _("Below")); - else -- elm_object_text_set(cfdata->rel_mode_obj, "???"); -+ elm_object_text_set(cfdata->rel_mode_obj, _("Unconfigured")); - - elm_slider_value_set(cfdata->rel_align_obj, cs->rel_align); - -@@ -864,6 +864,7 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data - - /////////////////////////////////////////////////////////////////////// - o = elm_list_add(win); -+ elm_scroller_content_min_limit(o, 1, 0); - evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(tb, o, 1, 0, 1, 14); -diff --git a/src/modules/conf_randr/e_mod_main.c b/src/modules/conf_randr/e_mod_main.c -index 8aa8e20e3..7667be912 100644 ---- a/src/modules/conf_randr/e_mod_main.c -+++ b/src/modules/conf_randr/e_mod_main.c -@@ -15,6 +15,7 @@ _cb_randr(void *data EINA_UNUSED, int type EINA_UNUSED, void *info EINA_UNUSED) - Eina_List *l; - E_Randr2_Screen *s; - -+ if (!e_randr2) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(e_randr2->screens, l, s) - { - if (!s->config.configured) -diff --git a/src/modules/lokker/lokker.c b/src/modules/lokker/lokker.c -index db9fb8211..e462d7605 100644 ---- a/src/modules/lokker/lokker.c -+++ b/src/modules/lokker/lokker.c -@@ -518,14 +518,14 @@ _lokker_cb_exit(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) - - _auth_child_pid = -1; - /* ok */ -- if (ev->exit_code == 0) -+ if (ev->exited && (ev->exit_code == 0)) - { - /* security - null out passwd string once we are done with it */ - _lokker_null(); - e_desklock_hide(); - } - /* error */ -- else if (ev->exit_code < 128) -+ else if ((!ev->exited) || (ev->exit_code < 128)) - { - /* security - null out passwd string once we are done with it */ - _lokker_null(); -@@ -534,7 +534,7 @@ _lokker_cb_exit(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) - _("Authentication via PAM had errors setting up the<br>" - "authentication session. The error code was <hilight>%i</hilight>.<br>" - "This is bad and should not be happening. Please report this bug.") -- , ev->exit_code); -+ , ev->exited ? ev->exit_code : ev->exit_signal); - } - /* failed auth */ - else -diff --git a/src/modules/mixer/lib/backends/pulseaudio/pulse.c b/src/modules/mixer/lib/backends/pulseaudio/pulse.c -index 99d697270..3c9c96338 100644 ---- a/src/modules/mixer/lib/backends/pulseaudio/pulse.c -+++ b/src/modules/mixer/lib/backends/pulseaudio/pulse.c -@@ -329,7 +329,15 @@ _sink_input_cb(pa_context *c EINA_UNUSED, const pa_sink_input_info *info, - info->name); - - input->idx = info->index; -- input->base.name = eina_stringshare_add(info->name); -+ -+ Eina_Strbuf *input_name; -+ -+ input_name = eina_strbuf_new(); -+ eina_strbuf_append(input_name, pa_proplist_gets(info->proplist, PA_PROP_APPLICATION_NAME)); -+ eina_strbuf_append(input_name, ":"); -+ eina_strbuf_append(input_name, info->name); -+ input->base.name = eina_stringshare_add(eina_strbuf_string_get(input_name)); -+ eina_strbuf_free(input_name); - input->base.volume = _pa_cvolume_convert(&info->volume); - input->base.mute = !!info->mute; - EINA_LIST_FOREACH(ctx->sinks, l, s) -@@ -799,17 +807,11 @@ _pulse_connect(void *data) - } - #endif - c->context = pa_context_new_with_proplist(&(c->api), NULL, proplist); -- if (!c->context) -+ if (c->context) - { -- WRN("Could not create the pulseaudio context"); -- goto err; -- } -- -- pa_context_set_state_callback(c->context, _pulse_pa_state_cb, c); -- if (pa_context_connect(c->context, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0) -- { -- WRN("Could not connect to pulse"); -- goto err; -+ pa_context_set_state_callback(c->context, _pulse_pa_state_cb, c); -+ if (pa_context_connect(c->context, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0) -+ ERR("Could not connect to pulse"); - } - #if !defined(EMIXER_BUILD) && defined(HAVE_WAYLAND) && !defined(HAVE_WAYLAND_ONLY) - if (e_comp->comp_type != E_PIXMAP_TYPE_X) -@@ -824,10 +826,6 @@ _pulse_connect(void *data) - - pa_proplist_free(proplist); - return ECORE_CALLBACK_DONE; -- -- err: -- pa_proplist_free(proplist); -- return ECORE_CALLBACK_RENEW; - } - - static void -diff --git a/src/modules/mixer/lib/backends/pulseaudio/pulse_ml.c b/src/modules/mixer/lib/backends/pulseaudio/pulse_ml.c -index 469aaca29..e4776fdc7 100644 ---- a/src/modules/mixer/lib/backends/pulseaudio/pulse_ml.c -+++ b/src/modules/mixer/lib/backends/pulseaudio/pulse_ml.c -@@ -18,6 +18,18 @@ - #define DBG(...) EINA_LOG_DBG(__VA_ARGS__) - #define WRN(...) EINA_LOG_WARN(__VA_ARGS__) - -+#define PULSEAUDIO_START \ -+ char *disp = NULL; \ -+ if (getenv("WAYLAND_DISPLAY")) \ -+ { \ -+ disp = eina_strdup(getenv("DISPLAY")); \ -+ unsetenv("DISPLAY"); \ -+ } -+ -+#define PULSEAUDIO_END \ -+ if (disp) setenv("DISPLAY", disp, 1); \ -+ free(disp) -+ - /* Ecore mainloop integration start */ - struct pa_io_event - { -@@ -71,9 +83,9 @@ _ecore_io_wrapper(void *data, Ecore_Fd_Handler *handler) - flags |= PA_IO_EVENT_OUTPUT; - if (ecore_main_fd_handler_active_get(handler, ECORE_FD_ERROR)) - flags |= PA_IO_EVENT_ERROR; -- -+PULSEAUDIO_START; - event->callback(event->mainloop, event, fd, flags, event->userdata); -- -+PULSEAUDIO_END; - return ECORE_CALLBACK_RENEW; - } - -@@ -133,8 +145,9 @@ _ecore_time_wrapper(void *data) - { - pa_time_event *event = (pa_time_event *)data; - -+PULSEAUDIO_START; - event->callback(event->mainloop, event, &event->tv, event->userdata); -- -+PULSEAUDIO_END; - return ECORE_CALLBACK_CANCEL; - } - -@@ -231,10 +244,10 @@ Eina_Bool - _ecore_defer_wrapper(void *data) - { - pa_defer_event *event = (pa_defer_event *)data; -- -+PULSEAUDIO_START; - event->idler = NULL; - event->callback(event->mainloop, event, event->userdata); -- -+PULSEAUDIO_END; - return ECORE_CALLBACK_CANCEL; - } - -diff --git a/src/modules/time/clock.c b/src/modules/time/clock.c -index c52d2b6a7..99f3618ce 100644 ---- a/src/modules/time/clock.c -+++ b/src/modules/time/clock.c -@@ -199,6 +199,8 @@ _clock_timer(void *d EINA_UNUSED) - seconds |= inst->cfg->show_seconds; - sec = time_string_format(inst, buf, sizeof(buf)); - elm_object_part_text_set(inst->o_clock, "e.text", buf); -+ time_datestring_format(inst, buf, sizeof(buf) - 1); -+ elm_object_part_text_set(inst->o_clock, "e.text.sub", buf); - _eval_instance_size(inst); - } - sec = seconds ? 1 : (61 - sec); -@@ -520,3 +522,14 @@ time_config_update(Config_Item *ci) - E_FREE_FUNC(clock_timer, ecore_timer_del); - e_config_save_queue(); - } -+ -+EINTERN void -+clock_timer_set(Eina_Bool set) -+{ -+ if (set) -+ { -+ if (clock_instances) _clock_timer(NULL); -+ } -+ else -+ E_FREE_FUNC(clock_timer, ecore_timer_del); -+} -diff --git a/src/modules/time/clock.h b/src/modules/time/clock.h -index 912aa730a..0058eaf8e 100644 ---- a/src/modules/time/clock.h -+++ b/src/modules/time/clock.h -@@ -86,6 +86,7 @@ EINTERN void digital_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data); - EINTERN void analog_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data); - EINTERN void clock_popup_new(Instance *inst); - EINTERN void time_config_update(Config_Item *ci); -+EINTERN void clock_timer_set(Eina_Bool set); - - extern Config *time_config; - extern Eina_List *clock_instances; -diff --git a/src/modules/time/time.c b/src/modules/time/time.c -index b3f93d628..224416e48 100644 ---- a/src/modules/time/time.c -+++ b/src/modules/time/time.c -@@ -6,7 +6,7 @@ - static Eio_Monitor *clock_te_monitor = NULL; - static Eio_Monitor *clock_tz2_monitor = NULL; - static Eio_Monitor *clock_tzetc_monitor = NULL; --static Eina_List *clock_eio_handlers = NULL; -+static Eina_List *handlers = NULL; - - static Ecore_Timer *update_today = NULL; - -@@ -22,14 +22,14 @@ static Ecore_Timer *update_today = NULL; - if (tzenv) \ - strncpy(prevtz, tzenv, sizeof(prevtz) - 1); \ - if (inst->cfg->timezone) \ -- setenv("TZ", inst->cfg->timezone, 1); \ -+ e_util_env_set("TZ", inst->cfg->timezone); \ - tzset() - - #define TZUNSET() \ - if (prevtz[0]) \ -- setenv("TZ", prevtz, 1); \ -+ e_util_env_set("TZ", prevtz); \ - else \ -- unsetenv("TZ"); \ -+ e_util_env_set("TZ", NULL); \ - tzset() - - static void -@@ -323,6 +323,20 @@ _clock_eio_error(void *d EINA_UNUSED, int type EINA_UNUSED, void *event) - return ECORE_CALLBACK_PASS_ON; - } - -+static Eina_Bool -+_clock_screensaver_on() -+{ -+ clock_timer_set(0); -+ return ECORE_CALLBACK_RENEW; -+} -+ -+static Eina_Bool -+_clock_screensaver_off() -+{ -+ clock_timer_set(1); -+ return ECORE_CALLBACK_RENEW; -+} -+ - EINTERN void - time_init(void) - { -@@ -333,14 +347,16 @@ time_init(void) - if (ecore_file_is_dir("/etc")) - clock_tzetc_monitor = eio_monitor_add("/etc"); - -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL); -- E_LIST_HANDLER_APPEND(clock_eio_handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, _clock_screensaver_on, NULL); -+ E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _clock_screensaver_off, NULL); - _update_today_timer(NULL); - } - -diff --git a/src/modules/wl_drm/e_mod_main.c b/src/modules/wl_drm/e_mod_main.c -index 0c80e8d40..602e10f9c 100644 ---- a/src/modules/wl_drm/e_mod_main.c -+++ b/src/modules/wl_drm/e_mod_main.c -@@ -56,19 +56,11 @@ _e_mod_drm_cb_activate(void *data EINA_UNUSED, int type EINA_UNUSED, void *event - - if (ev->active) - { -- E_Client *ec; -- - if (session_state) goto end; - session_state = EINA_TRUE; - - ecore_evas_show(e_comp->ee); -- E_CLIENT_FOREACH(ec) -- { -- if (ec->visible && (!ec->input_only)) -- e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); -- } -- e_comp_render_queue(); -- e_comp_shape_queue_block(0); -+ evas_damage_rectangle_add(e_comp->evas, 0, 0, e_comp->w, e_comp->h); - ecore_event_add(E_EVENT_COMPOSITOR_ENABLE, NULL, NULL, NULL); - } - else -@@ -81,8 +73,6 @@ _e_mod_drm_cb_activate(void *data EINA_UNUSED, int type EINA_UNUSED, void *event - evas_font_cache_flush(e_comp->evas); - evas_render_dump(e_comp->evas); - -- e_comp_render_queue(); -- e_comp_shape_queue_block(1); - ecore_event_add(E_EVENT_COMPOSITOR_DISABLE, NULL, NULL, NULL); - } - -@@ -91,56 +81,10 @@ end: - } - - static Eina_Bool --_e_mod_drm_cb_output(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -+_e_mod_drm_cb_output(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) - { -- const Eina_List *l; -- E_Randr2_Screen *screen; -- Eina_Bool connected = EINA_FALSE; -- int subpixel = 0; --#ifdef HAVE_DRM2 -- Ecore_Drm2_Event_Output_Changed *e; --#else -- Ecore_Drm_Event_Output *e; --#endif -- -- if (!(e = event)) goto end; -- -- DBG("WL_DRM OUTPUT CHANGE"); -- -- EINA_LIST_FOREACH(e_randr2->screens, l, screen) -- { -- if ((!strcmp(screen->info.name, e->name)) && -- (!strcmp(screen->info.screen, e->model))) -- { --#ifdef HAVE_DRM2 -- connected = e->enabled; -- subpixel = e->subpixel; --#else -- connected = e->plug; -- subpixel = e->subpixel_order; --#endif -- -- if (connected) -- { -- if (!e_comp_wl_output_init(screen->id, e->make, e->model, -- e->x, e->y, e->w, e->h, -- e->phys_width, e->phys_height, -- e->refresh, subpixel, -- e->transform)) -- { -- ERR("Could not setup new output: %s", screen->id); -- } -- } -- else -- e_comp_wl_output_remove(screen->id); -- -- break; -- } -- } -- --end: - if (!e_randr2_cfg->ignore_hotplug_events) -- e_randr2_screen_refresh_queue(EINA_TRUE); -+ e_randr2_screen_refresh_queue(1); - - return ECORE_CALLBACK_PASS_ON; - } -@@ -678,8 +622,7 @@ _drm2_randr_apply(void) - if (s->config.priority > top_priority) - top_priority = s->config.priority; - -- ecore_drm2_output_mode_set(output, mode, -- s->config.geom.x, s->config.geom.y); -+ ecore_drm2_output_mode_set(output, mode, 0, 0); - - /* TODO: cannot support rotations until we support planes - * and we cannot support planes until Atomic support is in */ -diff --git a/src/modules/xwayland/dnd.c b/src/modules/xwayland/dnd.c -index 47c5d9569..2c0594d82 100644 ---- a/src/modules/xwayland/dnd.c -+++ b/src/modules/xwayland/dnd.c -@@ -143,6 +143,12 @@ _xwayland_send_send(E_Comp_Wl_Data_Source *source EINA_UNUSED, const char* mime_ - xconvertselection(ecore_x_display_get(), sel, type, xwl_dnd_atom, e_comp->cm_selection, 0); - } - -+static void -+_xwayland_send_cancelled(E_Comp_Wl_Data_Source *source) -+{ -+ e_comp_wl_clipboard_source_unref((void*)source); -+} -+ - static void - _xwayland_cancelled_send(E_Comp_Wl_Data_Source *source EINA_UNUSED) - { -@@ -155,16 +161,16 @@ _xwl_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even - { - if (ev->owner == e_comp->cm_selection) - { -- e_comp_wl->clipboard.xwl_owner = NULL; -+ e_comp_wl->clipboard.xwl_owner = 0; - return ECORE_CALLBACK_RENEW; - } - if (ev->atom == ECORE_X_ATOM_SELECTION_XDND) - { - if (ev->owner) - { -- int x, y, num; -+ int x, y, num, i; - unsigned char *data; -- const char **names = NULL; -+ char **names = NULL; - Eina_Array *namelist = NULL; - E_Comp_Wl_Data_Source *source; - -@@ -175,22 +181,22 @@ _xwl_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even - &data, - &num)) - { -- int i; - Ecore_X_Atom *types = (void*)data; - - names = malloc(num * sizeof(void*)); - namelist = eina_array_new(num); - for (i = 0; i < num; i++) - { -- const char *name; -+ char *name; - - if (types[i] == string_atom) - { -- name = names[i] = "UTF8_STRING"; -+ name = names[i] = strdup("UTF8_STRING"); - eina_array_push(namelist, eina_stringshare_add(WL_TEXT_STR)); - } - else - names[i] = name = ecore_x_atom_name_get(types[i]); -+ DBG("XWL TARGET: %s", name); - eina_array_push(namelist, eina_stringshare_add(name)); - } - if (num > 3) -@@ -203,7 +209,7 @@ _xwl_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even - } - evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); - e_comp_wl->drag_client = e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->owner); -- e_comp_wl->drag = e_drag_new(x, y, names, num, NULL, 0, NULL, _xwayland_drop); -+ e_comp_wl->drag = e_drag_new(x, y, (const char**)names, num, NULL, 0, NULL, _xwayland_drop); - e_comp_wl->drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - ecore_x_window_move_resize(e_comp->cm_selection, 0, 0, e_comp->w, e_comp->h); - ecore_x_window_show(e_comp->cm_selection); -@@ -212,12 +218,16 @@ _xwl_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even - e_comp_wl_data_device_send_enter(e_comp_wl->ptr.ec); - e_comp_canvas_feed_mouse_up(0); - source = e_comp_wl_data_manager_source_create(e_comp_wl->xwl_client, -- e_comp_wl->mgr.resource, 1); -+ e_comp_wl->mgr.resource, 0); -+ source->current_dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY; -+ source->dnd_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY; - e_comp_wl->drag_source = source; - source->target = _xwayland_target_send; - source->send = _xwayland_send_send; - source->cancelled = _xwayland_cancelled_send; - source->mime_types = namelist; -+ for (i = 0; i < num; i++) -+ free(names[i]); - free(names); - } - else -@@ -234,15 +244,20 @@ _xwl_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Even - { - if (ev->owner) - { -- if (e_comp_wl->clipboard.source) -- e_comp_wl_clipboard_source_unref(e_comp_wl->clipboard.source); -+ if (e_comp_wl->selection.data_source) -+ { -+ E_Comp_Wl_Data_Source *psource = e_comp_wl->selection.data_source; -+ if (psource->cancelled) -+ psource->cancelled(psource); -+ } - e_comp_wl->clipboard.source = NULL; -- e_comp_wl->clipboard.xwl_owner = ev->owner ? e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->owner) : NULL; -+ e_comp_wl->selection.data_source = NULL; -+ e_comp_wl->clipboard.xwl_owner = ev->owner; - xconvertselection(ecore_x_display_get(), ECORE_X_ATOM_SELECTION_CLIPBOARD, - ECORE_X_ATOM_SELECTION_TARGETS, xwl_dnd_atom, e_comp->cm_selection, 0); - } - else -- e_comp_wl->clipboard.xwl_owner = NULL; -+ e_comp_wl->clipboard.xwl_owner = 0; - } - return ECORE_CALLBACK_RENEW; - } -@@ -270,16 +285,22 @@ _xwl_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event_Sele - - source = e_comp_wl_clipboard_source_create(NULL, 0, -1); - dsource = e_comp_wl_data_manager_source_create(e_comp_wl->xwl_client, -- e_comp_wl->mgr.resource, 1); -+ e_comp_wl->mgr.resource, 0); - source->data_source.mime_types = eina_array_new(tgs->num_targets); - for (i = 0; i < tgs->num_targets; i++) - if (tgs->targets[i]) -- eina_array_push(source->data_source.mime_types, eina_stringshare_add(tgs->targets[i])); -+ { -+ DBG("XWL TARGET: %s", tgs->targets[i]); -+ if (eina_streq(tgs->targets[i], "UTF8_STRING")) -+ eina_array_push(source->data_source.mime_types, eina_stringshare_add(WL_TEXT_STR)); -+ eina_array_push(source->data_source.mime_types, eina_stringshare_add(tgs->targets[i])); -+ } -+ - e_comp_wl->clipboard.source = source; - e_comp_wl->selection.data_source = &source->data_source; - source->data_source.resource = dsource->resource; - source->data_source.send = _xwayland_send_send; -- free(dsource); -+ source->data_source.cancelled = _xwayland_send_cancelled; - if (e_client_has_xwindow(e_client_focused_get())) - e_comp_wl_data_device_keyboard_focus_set(); - return ECORE_CALLBACK_RENEW; -@@ -380,7 +401,7 @@ _xwl_selection_request(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event_Sel - ecore_x_window_prop_property_set(ev->requestor, ev->property, int_atom, 32, (void*)×tamp, 1); - ecore_x_selection_notify_send(ev->requestor, ev->selection, ev->target, ev->property, 0); - } -- else -+ else if (ev->requestor != e_comp->cm_selection) - { - const char *name; - Pipe *p; -@@ -399,7 +420,7 @@ _xwl_selection_request(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event_Sel - p->fdh = ecore_main_fd_handler_add(fds[0], ECORE_FD_READ, _xwl_pipe_read, p, NULL, NULL); - p->win = ev->requestor; - p->source = source; -- wl_data_source_send_send(source->resource, type, dup(fds[1])); -+ wl_data_source_send_send(source->resource, type, fds[1]); - close(fds[1]); - p->atom = ev->target; - p->selection = ev->selection; -diff --git a/src/modules/xwayland/e_mod_main.c b/src/modules/xwayland/e_mod_main.c -index 793f2e151..89309c01e 100644 ---- a/src/modules/xwayland/e_mod_main.c -+++ b/src/modules/xwayland/e_mod_main.c -@@ -225,7 +225,7 @@ _cb_xserver_event(void *data EINA_UNUSED, Ecore_Fd_Handler *hdlr EINA_UNUSED) - snprintf(xserver, sizeof(xserver), "%s", XWAYLAND_BIN); - DBG("\tLaunching %s: %s", xserver, disp); - if (execl(xserver, xserver, disp, "-rootless", "-listen", abs_fd, -- "-listen", unx_fd, "-terminate", "-shm", -+ "-listen", unx_fd, "-terminate", - NULL) < 0) - { - ERR("Failed to exec %s: %m", XWAYLAND_BIN); -@@ -289,8 +289,10 @@ xinit(void *d, Ecore_Thread *eth) - - init_threads = dlsym(NULL, "XInitThreads"); - if (init_threads) init_threads(); -+ else ERR("Could not resolve XInitThreads"); - open_display = dlsym(NULL, "XOpenDisplay"); - if (open_display) disp = open_display(d); -+ else ERR("Could not resolve XOpenDisplay"); - free(d); - ecore_thread_feedback(eth, disp); - } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
