Hello community, here is the log from the commit of package enlightenment for openSUSE:Factory checked in at 2016-04-12 19:35:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/enlightenment (Old) and /work/SRC/openSUSE:Factory/.enlightenment.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "enlightenment" Changes: -------- --- /work/SRC/openSUSE:Factory/enlightenment/enlightenment.changes 2016-03-04 19:30:23.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.enlightenment.new/enlightenment.changes 2016-04-12 19:35:34.000000000 +0200 @@ -1,0 +2,79 @@ +Fri Apr 8 05:35:30 UTC 2016 - [email protected] + +- Recommend Pulse X11 Intergration for audio out of the box + boo#972912 +- Make services localonly + +------------------------------------------------------------------- +Fri Apr 8 03:02:37 UTC 2016 - [email protected] + +- Fix crashes + * fix-upstream-dont-add-deleted-clients-to-tasks.patch + * fix-upstream-remove-deleted-clients-on-repop-tasks.patch +- Fix systray issues particuarlly with KDE5 apps + * fix-upstream-systray-handle-kde5-apps.patch + * fix-upstream-systray-use-canvas-coords.patch +- Reduce Memory usage by sharing icons. + * enhance-upstream-share-icons.patch + +------------------------------------------------------------------- +Wed Mar 9 19:46:44 UTC 2016 - [email protected] + +- Enlightenment 0.20.6 + Tickets Addressed: + T3152 + T3208 + T3210 + Multiple wayland issues fixed + Other issues listed below + e – efm: fix op registry listener add and dont use eina_error + e xkbswitch: don’t free layouts that are just pointed to in instances + don’t have to hook the ecore_evas resize callback here as that should be handled by elm now + Move pixmap free to client free from client destroy + Render deleted objects as long as they still have a pixmap + Track whether objects are on the post_updates list or not + Track whether a render is in progress or not + clamp minimum shelf size to 20px in shelf config + do not perform special case position adjustment for re_manage clients + do not clamp comp object input regions to 0,0 + improve enforcement of shelf autohide-related window adjustment + reshuffle x11 comp init to cleanup on failure cases + pre-remove pixmap from x11 clients during del hook + enable comp object image data refresh if a dirty call is made with no damages + remove some unused variables + make bgpreview create vdesk config dialog on mouse up instead of mouse down + do not decrement e_comp->new_clients for non-new clients during _e_client_eval + update winlist ui when using directional window selection + force changed when adding or removing keyboard layouts in config + disable emotion_shutdown during shutdown procedure + use strbufs instead of strcat in fwin navbars + do not set XCURSOR_PATH variable if re-setting existing value + remove security hole in e_start_main + remove DISPLAY usage from E_IPC_SOCKET value + remove multihead env var setting in e_exec + strcpy -> strncpy in evry files plugin + use strbuf instead of strcat in keybinding string synthesis + use strbuf instead of strcat in edgebinding string synthesis + use dblequal for double comparisons in edgebindings config + replace static buffer usage with binbuf in e_fm_ipc + prevent potential null deref during pager (plain) window drag + remove unused value in config profile saving + remove useless client_add handler in e_ipc + use uint instead of int for eina_list_count() return in cpufreq (trivial) + simplify static grab case statements + remove ipc command allowing arbitrary command execution by the compositor + simplify ipc socket creation + remove impossible null check in color dialog + do not add render updates during damage of deleted clients + don’t directly use image data when creating a comp object mirror + Revert “send mouse out+in on desk flip end” + reject x11 client mouse-in events on comp object based on frame geometry + reverse ordering for x11 client mouse in NotifyVirtual and NotifyInferior details + only use x11 mouse out event if client has received mouse in previously + apply x11 mouse in event for clients using a job + apply x11 focus/unfocus using jobs + block re-unsetting of native surface for comp objects + always run client res changes in e_comp_canvas_update() + + +------------------------------------------------------------------- Old: ---- enlightenment-0.20.5.tar.xz New: ---- _service enhance-upstream-share-icons.patch enlightenment-0.20.6.tar.xz fix-upstream-dont-add-deleted-clients-to-tasks.patch fix-upstream-remove-deleted-clients-on-repop-tasks.patch fix-upstream-systray-handle-kde5-apps.patch fix-upstream-systray-use-canvas-coords.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ enlightenment.spec ++++++ --- /var/tmp/diff_new_pack.RPKPoL/_old 2016-04-12 19:35:36.000000000 +0200 +++ /var/tmp/diff_new_pack.RPKPoL/_new 2016-04-12 19:35:36.000000000 +0200 @@ -24,13 +24,13 @@ %define generate_manpages 0 Name: enlightenment -Version: 0.20.5 +Version: 0.20.6 Release: 0 Summary: The window manager License: BSD-2-Clause Group: System/X11/Displaymanagers Url: http://enlightenment.org/ -Source: %{name}-%{version}.tar.xz +Source: http://download.enlightenment.org/rel/apps/enlightenment/%{name}-%{version}.tar.xz Source2: enlightenment.pam Source3: sysactions.conf-oS12.2 Source4: sysactions.conf-systemd @@ -41,6 +41,12 @@ Patch0: enlightenment-0.16.999.65256-dont_require_suidbit.patch # PATCH-FEATURE-OPENSUSE dont_offer_updates.patch -- don't offer updates, that's up to package manager -- [email protected] Patch1: dont_offer_updates.patch +Patch2: fix-upstream-dont-add-deleted-clients-to-tasks.patch +Patch3: fix-upstream-remove-deleted-clients-on-repop-tasks.patch +Patch4: fix-upstream-systray-handle-kde5-apps.patch +Patch5: fix-upstream-systray-use-canvas-coords.patch +Patch6: enhance-upstream-share-icons.patch + BuildRequires: alsa-devel BuildRequires: autoconf BuildRequires: automake @@ -112,6 +118,16 @@ # Recommended to make NetworkManager Intergration work Recommends: gnome-keyring Recommends: NetworkManager-appindicator + +# Recommended to make audio work out of the box boo#972912 +Recommends: pulseaudio +Recommends: pulseaudio-module-bluetooth +Recommends: pulseaudio-module-jack +Recommends: pulseaudio-module-lirc +Recommends: pulseaudio-module-x11 +Recommends: pulseaudio-module-zeroconf +Recommends: pulseaudio-utils +Recommends: alsa-plugins-pulse %endif Requires: enlightenment-branding = 0.1 @@ -188,6 +204,11 @@ %setup -q -n enlightenment-%{version} %patch0 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 # Copy In new Network Wizard rm src/modules/wizard/page_110.c ++++++ _service ++++++ <services> <service name="download_url" mode="localonly"> <param name="protocol">http</param> <param name="host">download.enlightenment.org</param> <param name="path">/rel/apps/enlightenment/enlightenment-0.20.6.tar.xz</param> </service> <service name="verify_file" mode="localonly"> <param name="file">enlightenment-0.20.6.tar.xz</param> <param name="verifier">sha256</param> <param name="checksum">f21fbace15b8ea0e47c7aeb16a3f4d1e8a41cb85bc0035491091518b0ca55085</param> </service> </services>++++++ enhance-upstream-share-icons.patch ++++++ commit 57ce6419e5c257e6fee6809cdb9c63d39c0b0a98 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Fri Apr 1 20:29:04 2016 +0900 e icons: reduce mem usage (in x11) by a fair bit by de-duplicating so i was profiling today .. leak hunting .. and i noticed. if you have enough appss open - eg terminology, e uses a huge amount of memory... for icons. terminology is 128x128 ... thats 64k per icon. open up a lot of terminology windows and we duplicate that 64k per every window on the wm sside because we get the data. it would apply for any app that sets a netwm icon. this can be come rather silly if you have like 100 terminals. it's worse with larger icons (eg 256x256 - 256k per icon). this puts in a simply list for shared icons and a lookup on fetch to de-duplicate and share icon data. this should drop memory usage nicely. @improvement diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 1d24366..e2a2bf6 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -534,10 +534,9 @@ _e_client_free(E_Client *ec) ec->stick_desks = eina_list_free(ec->stick_desks); if (ec->netwm.icons) { - int i; - for (i = 0; i < ec->netwm.num_icons; i++) - free(ec->netwm.icons[i].data); - E_FREE(ec->netwm.icons); + e_client_icon_free(ec->netwm.icons, ec->netwm.num_icons); + ec->netwm.icons = NULL; + ec->netwm.num_icons = 0; } E_FREE(ec->netwm.extra_types); eina_stringshare_replace(&ec->border.name, NULL); @@ -5023,3 +5022,99 @@ e_client_layout_cb_set(E_Client_Layout_Cb cb) CRI("ATTEMPTING TO OVERWRITE EXISTING CLIENT LAYOUT HOOK!!!"); _e_client_layout_cb = cb; } + +//////////////////////////////////////////// +static Eina_List *iconshare = NULL; + +typedef struct _E_Client_Icon_Entry E_Client_Icon_Entry; + +struct _E_Client_Icon_Entry +{ + Ecore_X_Icon *icons; + int num_icons; + int ref; +}; + +E_API Ecore_X_Icon * +e_client_icon_deduplicate(Ecore_X_Icon *icons, int num_icons) +{ + int i; + Eina_List *l; + E_Client_Icon_Entry *ie; + + // unless the rest of e uses border icons OTHER than icon #0 + // then free the rest that we don't need anymore. + for (i = 1; i < num_icons; i++) + { + free(icons[i].data); + icons[i].data = NULL; + } + // lookup icon data in icons cache/share + EINA_LIST_FOREACH(iconshare, l, ie) + { + if ((ie->num_icons == num_icons) && + (num_icons > 0) && + (ie->icons[0].width == icons[0].width) && + (ie->icons[0].height == icons[0].height) && + (!memcmp(ie->icons[0].data, icons[0].data, + icons[0].width * icons[0].height * 4))) + { + // found so free the input icons + for (i = 0; i < num_icons; i++) + free(icons[i].data); + free(icons); + // ref the shared/cached one + ie->ref++; + iconshare = eina_list_promote_list(iconshare, l); + // and return that + return ie->icons; + } + } + // no hit - new entry to cache. add it + ie = calloc(1, sizeof(E_Client_Icon_Entry)); + if (ie) + { + ie->icons = icons; + ie->num_icons = num_icons; + ie->ref = 1; + iconshare = eina_list_prepend(iconshare, ie); + } + return icons; +} + +E_API void +e_client_icon_free(Ecore_X_Icon *icons, int num_icons) +{ + int i; + Eina_List *l; + E_Client_Icon_Entry *ie; + + // lookup in icon share cache + EINA_LIST_FOREACH(iconshare, l, ie) + { + if ((ie->num_icons == num_icons) && + (num_icons > 0) && + (ie->icons[0].width == icons[0].width) && + (ie->icons[0].height == icons[0].height) && + (!memcmp(ie->icons[0].data, icons[0].data, + icons[0].width * icons[0].height * 4))) + { + // found so deref + ie->ref--; + if (ie->ref <= 0) + { + // no refs left - free the icon from the share/cache + iconshare = eina_list_remove_list(iconshare, l); + for (i = 0; i < ie->num_icons; i++) + free(ie->icons[i].data); + free(ie->icons); + free(ie); + } + return; + } + } + // not found - so just free it ... odd - we should never be here + for (i = 0; i < num_icons; i++) + free(icons[i].data); + free(icons); +} diff --git a/src/bin/e_client.h b/src/bin/e_client.h index 13d24fd..94ef059 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -827,6 +827,8 @@ E_API Eina_Bool e_client_has_xwindow(const E_Client *ec); E_API Eina_Bool e_client_desk_window_profile_available_check(E_Client *ec, const char *profile); E_API void e_client_desk_window_profile_wait_desk_set(E_Client *ec, E_Desk *desk); E_API void e_client_layout_cb_set(E_Client_Layout_Cb cb); +E_API Ecore_X_Icon *e_client_icon_deduplicate(Ecore_X_Icon *icons, int num_icons); +E_API void e_client_icon_free(Ecore_X_Icon *icons, int num_icons); YOLO E_API void e_client_focus_stack_set(Eina_List *l); diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 35831a8..2bff110 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -3795,30 +3795,16 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec) } if (ec->netwm.fetch.icon) { - int i; - if (ec->netwm.icons) - { - for (i = 0; i < ec->netwm.num_icons; i++) - { - free(ec->netwm.icons[i].data); - ec->netwm.icons[i].data = NULL; - } - free(ec->netwm.icons); - } + e_client_icon_free(ec->netwm.icons, ec->netwm.num_icons); ec->netwm.icons = NULL; ec->netwm.num_icons = 0; if (ecore_x_netwm_icons_get(win, &ec->netwm.icons, &ec->netwm.num_icons)) { - // unless the rest of e uses border icons OTHER than icon #0 - // then free the rest that we don't need anymore. - for (i = 1; i < ec->netwm.num_icons; i++) - { - free(ec->netwm.icons[i].data); - ec->netwm.icons[i].data = NULL; - } - ec->netwm.num_icons = 1; + if (ec->netwm.icons) + ec->netwm.icons = e_client_icon_deduplicate + (ec->netwm.icons, ec->netwm.num_icons); ec->changes.icon = 1; } ec->netwm.fetch.icon = 0; ++++++ enlightenment-0.20.5.tar.xz -> enlightenment-0.20.6.tar.xz ++++++ /work/SRC/openSUSE:Factory/enlightenment/enlightenment-0.20.5.tar.xz /work/SRC/openSUSE:Factory/.enlightenment.new/enlightenment-0.20.6.tar.xz differ: char 26, line 1 ++++++ fix-upstream-dont-add-deleted-clients-to-tasks.patch ++++++ commit 488ece76a65349a0751a8dfb600a8a9ca0eedc98 Author: Mike Blumenkrantz <[email protected]> Date: Mon Mar 28 12:59:34 2016 -0400 do not add deleted clients to tasks gadgets diff --git a/src/modules/tasks/e_mod_main.c b/src/modules/tasks/e_mod_main.c index cbe69a9..d0d2ece 100644 --- a/src/modules/tasks/e_mod_main.c +++ b/src/modules/tasks/e_mod_main.c @@ -369,7 +369,7 @@ _tasks_new(Evas *e, E_Zone *zone, const char *id) tasks->horizontal = 1; EINA_LIST_FOREACH(e_comp->clients, l, ec) { - if (!e_client_util_ignored_get(ec)) + if ((!e_client_util_ignored_get(ec)) && (!e_object_is_del(E_OBJECT(ec)))) tasks->clients = eina_list_append(tasks->clients, ec); } @@ -889,7 +889,7 @@ _tasks_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *e Tasks *tasks; Eina_List *l; - if (e_client_util_ignored_get(ev->ec)) return ECORE_CALLBACK_RENEW; + if (e_client_util_ignored_get(ev->ec) || e_object_is_del(E_OBJECT(ev->ec))) return ECORE_CALLBACK_RENEW; EINA_LIST_FOREACH(tasks_config->tasks, l, tasks) { if ((!tasks->clients) || (!eina_list_data_find(tasks->clients, ev->ec))) ++++++ fix-upstream-remove-deleted-clients-on-repop-tasks.patch ++++++ commit 9f52dfa50ccc5cbb6b46521a233193413e7b6069 Author: Mike Blumenkrantz <[email protected]> Date: Mon Mar 28 12:59:45 2016 -0400 remove deleted clients from tasks client list during repop fix T3369 diff --git a/src/modules/tasks/e_mod_main.c b/src/modules/tasks/e_mod_main.c index d0d2ece..fa78b69 100644 --- a/src/modules/tasks/e_mod_main.c +++ b/src/modules/tasks/e_mod_main.c @@ -616,6 +616,8 @@ static void _tasks_item_free(Tasks_Item *item) { if (item->o_icon) evas_object_del(item->o_icon); + if (e_object_is_del(E_OBJECT(item->client))) + item->tasks->clients = eina_list_remove(item->tasks->clients, item->client); e_object_unref(E_OBJECT(item->client)); evas_object_del(item->o_item); free(item); ++++++ fix-upstream-systray-handle-kde5-apps.patch ++++++ commit 286fb404288f2f96f7e5963d310a9e8d261ddaaf Author: Mike Blumenkrantz <[email protected]> Date: Mon Mar 28 15:33:38 2016 -0400 add even more systray/dbusmenu hacks mrw Qt systray devs take working (4.X) and then break it in 5.X to be worse than steam: http://gfycat.com/CloudyPinkEmperorshrimp fix T3139 diff --git a/src/bin/e_dbusmenu.c b/src/bin/e_dbusmenu.c index 76cce57..bc87097 100644 --- a/src/bin/e_dbusmenu.c +++ b/src/bin/e_dbusmenu.c @@ -9,6 +9,7 @@ struct _E_DBusMenu_Ctx void *data; E_DBusMenu_Pop_Request_Cb pop_request_cb; E_DBusMenu_Update_Cb update_cb; + Eina_Bool hacks : 1; }; static const char *Menu_Item_Type_Names[] = @@ -31,6 +32,8 @@ static const char *Menu_Item_Event_Names[] = "clicked", "hovered", "opened", "closed" }; +static void proxy_init(E_DBusMenu_Ctx *ctx); + static int id_find(const char *text, const char *array_of_names[], unsigned max) { @@ -197,6 +200,46 @@ dbus_menu_free(E_DBusMenu_Item *m) free(m); } +static Eina_Bool +attempt_hacks(E_DBusMenu_Ctx *ctx) +{ + /* https://phab.enlightenment.org/T3139 */ + Eldbus_Object *obj; + Eldbus_Connection *conn; + const char *bus, *p; + int n; + char buf[1024] = {0}, buf2[1024] = {0}; + + if (ctx->hacks) return EINA_FALSE; + obj = eldbus_proxy_object_get(ctx->proxy); + conn = eldbus_object_connection_get(obj); + bus = eldbus_object_bus_name_get(obj); + if (bus[0] != ':') return EINA_FALSE; + /* if this is a qt5 app, menu bus is $bus + 2 + * ...probably + */ + + p = strchr(bus + 1, '.'); + if (!p) return EINA_FALSE; + p++; + if (!p[0]) return EINA_FALSE; + n = strtol(p, NULL, 10); + if (n == -1) return EINA_FALSE; + n += 2; + if ((unsigned int)(p - bus) > sizeof(buf) - 1) return EINA_FALSE; + strncpy(buf, bus, p - bus); + snprintf(buf2, sizeof(buf2), "%s%d", buf, n); + E_FREE_FUNC(ctx->root_menu, dbus_menu_free); + eldbus_proxy_unref(ctx->proxy); + eldbus_object_unref(obj); + + obj = eldbus_object_get(conn, buf2, "/MenuBar"); + ctx->proxy = eldbus_proxy_get(obj, DBUS_MENU_IFACE); + proxy_init(ctx); + ctx->hacks = 1; + return EINA_TRUE; +} + static void layout_get_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { @@ -220,6 +263,15 @@ layout_get_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EIN m = parse_layout(layout, NULL, ctx); m->revision = revision; + if (m->is_submenu && (!m->parent) && (!m->sub_items)) + { + if (attempt_hacks(ctx)) + { + dbus_menu_free(m); + return; + } + } + if (ctx->update_cb) ctx->update_cb(ctx->data, m); if (ctx->root_menu) @@ -271,32 +323,6 @@ menu_pop_request(void *data, const Eldbus_Message *msg) } static void -icon_theme_path_get_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *error, *error_msg; - Eldbus_Message_Iter *var, *array; - const char *path; - - if (eldbus_message_error_get(msg, &error, &error_msg)) - { - ERR("%s %s", error, error_msg); - return; - } - - if (!eldbus_message_arguments_get(msg, "v", &var) || - !eldbus_message_iter_arguments_get(var, "as", &array)) - { - ERR("Error reading message."); - return; - } - - while (eldbus_message_iter_get_and_next(array, 's', &path)) - { - //TODO - } -} - -static void prop_changed_cb(void *data EINA_UNUSED, const Eldbus_Message *msg) { const char *interface, *propname; @@ -337,6 +363,23 @@ layout_updated_cb(void *data, const Eldbus_Message *msg EINA_UNUSED) layout_update(ctx); } +static void +proxy_init(E_DBusMenu_Ctx *ctx) +{ + layout_update(ctx); + eldbus_proxy_signal_handler_add(ctx->proxy, + "ItemActivationRequested", + menu_pop_request, ctx); + + eldbus_proxy_properties_changed_callback_add(ctx->proxy, + prop_changed_cb, ctx); + + eldbus_proxy_signal_handler_add(ctx->proxy, "ItemsPropertiesUpdated", + layout_updated_cb, ctx); + eldbus_proxy_signal_handler_add(ctx->proxy, "LayoutUpdated", + layout_updated_cb, ctx); +} + E_API E_DBusMenu_Ctx * e_dbusmenu_load(Eldbus_Connection *conn, const char *bus, const char *path, const void *data) { @@ -353,21 +396,7 @@ e_dbusmenu_load(Eldbus_Connection *conn, const char *bus, const char *path, cons eldbus_connection_ref(conn); obj = eldbus_object_get(conn, bus, path); ctx->proxy = eldbus_proxy_get(obj, DBUS_MENU_IFACE); - - layout_update(ctx); - eldbus_proxy_signal_handler_add(ctx->proxy, - "ItemActivationRequested", - menu_pop_request, ctx); - - eldbus_proxy_property_get(ctx->proxy, "IconThemePath", - icon_theme_path_get_cb, ctx); - eldbus_proxy_properties_changed_callback_add(ctx->proxy, - prop_changed_cb, ctx); - - eldbus_proxy_signal_handler_add(ctx->proxy, "ItemsPropertiesUpdated", - layout_updated_cb, ctx); - eldbus_proxy_signal_handler_add(ctx->proxy, "LayoutUpdated", - layout_updated_cb, ctx); + proxy_init(ctx); return ctx; } ++++++ fix-upstream-systray-use-canvas-coords.patch ++++++ commit 19eb5d264477d8979b2e623cac279e3a06d1943f Author: Mike Blumenkrantz <[email protected]> Date: Mon Mar 28 13:37:21 2016 -0400 use canvas pointer coords in systray mouse cb diff --git a/src/modules/systray/e_mod_notifier_host.c b/src/modules/systray/e_mod_notifier_host.c index a15d4bc..81c4e59 100644 --- a/src/modules/systray/e_mod_notifier_host.c +++ b/src/modules/systray/e_mod_notifier_host.c @@ -197,7 +197,7 @@ _clicked_item_cb(void *data, Evas *evas, Evas_Object *obj EINA_UNUSED, void *eve e_menu_post_deactivate_callback_set(m, _menu_post_deactivate, gadcon); zone = e_gadcon_zone_get(gadcon); - ecore_evas_pointer_xy_get(e_comp->ee, &x, &y); + evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); e_menu_activate_mouse(m, zone, x, y, 1, 1, E_MENU_POP_DIRECTION_DOWN, ev->timestamp); evas_event_feed_mouse_up(evas, ev->button, EVAS_BUTTON_NONE, ev->timestamp, NULL);
