From: Enlightenment S. <no-...@en...> - 2013-02-06 09:35:00
|
Log: added e_widget_on_disable_hook_set Author: discomfitor Date: 2013-02-06 01:34:53 -0800 (Wed, 06 Feb 2013) New Revision: 83670 Trac: http://trac.enlightenment.org/e/changeset/83670 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_widget.c trunk/e/src/bin/e_widget.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-06 09:28:17 UTC (rev 83669) +++ trunk/e/ChangeLog 2013-02-06 09:34:53 UTC (rev 83670) @@ -1,6 +1,7 @@ 2013-02-06 Mike Blumenkrantz * added api to automatically disable widgets when checkboxes are checked or unchecked + * added e_widget_on_disable_hook_set 2013-02-05 Mike Blumenkrantz Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-06 09:28:17 UTC (rev 83669) +++ trunk/e/NEWS 2013-02-06 09:34:53 UTC (rev 83670) @@ -24,6 +24,7 @@ * E_Config_DD structs are now tracked and retrievable through e_config_descriptor_find * add e_border_pointer_warp_to_center_now() * e_widget_check_widget_disable_on_* + * e_widget_on_disable_hook_set Config: * Added option for disabling icons in menus * Added option for disabling pointer warping when performing directional focus changes using winlist Modified: trunk/e/src/bin/e_widget.c =================================================================== --- trunk/e/src/bin/e_widget.c 2013-02-06 09:28:17 UTC (rev 83669) +++ trunk/e/src/bin/e_widget.c 2013-02-06 09:34:53 UTC (rev 83670) @@ -19,6 +19,8 @@ void *on_focus_data; void (*on_change_func)(void *data, Evas_Object *obj); void *on_change_data; + void (*on_disable_func)(void *data, Evas_Object *obj); + void *on_disable_data; void *data; unsigned char can_focus : 1; unsigned char child_can_focus : 1; @@ -95,6 +97,14 @@ } EAPI void +e_widget_on_disable_hook_set(Evas_Object *obj, void (*func)(void *data, Evas_Object *obj), void *data) +{ + API_ENTRY return; + sd->on_disable_func = func; + sd->on_disable_data = data; +} + +EAPI void e_widget_data_set(Evas_Object *obj, void *data) { API_ENTRY return; @@ -453,6 +463,7 @@ e_widget_focus_jump(parent, 1); } if (sd->disable_func) sd->disable_func(obj); + if (sd->on_disable_func) sd->on_disable_func(sd->on_disable_data, obj); } EAPI int Modified: trunk/e/src/bin/e_widget.h =================================================================== --- trunk/e/src/bin/e_widget.h 2013-02-06 09:28:17 UTC (rev 83669) +++ trunk/e/src/bin/e_widget.h 2013-02-06 09:34:53 UTC (rev 83670) @@ -8,6 +8,7 @@ EAPI void e_widget_focus_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); EAPI void e_widget_activate_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); EAPI void e_widget_disable_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); +EAPI void e_widget_on_disable_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data); EAPI void e_widget_on_focus_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data); EAPI void e_widget_on_change_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data); EAPI void e_widget_data_set(Evas_Object *obj, void *data); |
From: Enlightenment S. <no-...@en...> - 2013-02-06 14:54:31
|
Log: fix efm cache listener to only activate (once) on icon update instead of desktop update since this is the only one which will matter, also only update the icon image instead of the entire thing Author: discomfitor Date: 2013-02-06 06:54:23 -0800 (Wed, 06 Feb 2013) New Revision: 83684 Trac: http://trac.enlightenment.org/e/changeset/83684 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_fm.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-06 13:55:38 UTC (rev 83683) +++ trunk/e/ChangeLog 2013-02-06 14:54:23 UTC (rev 83684) @@ -4,6 +4,7 @@ * added e_widget_on_disable_hook_set * added option for preventing all keyboard layout changes * moved "allow windows above fullscreen windows" option to geometry settings dialog + * fix filemanager efreet cache listeners and updates 2013-02-05 Mike Blumenkrantz Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-06 13:55:38 UTC (rev 83683) +++ trunk/e/NEWS 2013-02-06 14:54:23 UTC (rev 83684) @@ -155,3 +155,4 @@ * fix button toggling in personal app launchers dialog * fix bug where edge flips would stop functioning after dragging to an invalid edge containing a shelf * moved "allow windows above fullscreen windows" option to geometry settings dialog + * fix filemanager efreet cache listeners and updates Modified: trunk/e/src/bin/e_fm.c =================================================================== --- trunk/e/src/bin/e_fm.c 2013-02-06 13:55:38 UTC (rev 83683) +++ trunk/e/src/bin/e_fm.c 2013-02-06 14:54:23 UTC (rev 83684) @@ -165,7 +165,6 @@ E_Fm2_Icon *iop_icon; Eina_List *handlers; - Ecore_Event_Handler *efreet_cache_update; Efreet_Desktop *desktop; }; @@ -1125,9 +1124,6 @@ if ((m->volume->efm_mode != EFM_MODE_USING_HAL_MOUNT) && (!sd->mount->mounted)) return; } } - if (sd->efreet_cache_update) - ecore_event_handler_del(sd->efreet_cache_update); - sd->efreet_cache_update = NULL; if (!sd->realpath) return; if (!sd->mount || sd->mount->mounted) @@ -1667,8 +1663,8 @@ if (ic->realized) { - _e_fm2_icon_unrealize(ic); - _e_fm2_icon_realize(ic); + E_FN_DEL(evas_object_del, ic->obj_icon); + _e_fm2_icon_icon_set(ic); } } e_fm2_custom_file_flush(); @@ -4560,12 +4556,7 @@ } if (_e_fm2_file_is_desktop(ic->info.file)) - { - _e_fm2_icon_desktop_load(ic); - if (!ic->sd->efreet_cache_update) - ic->sd->efreet_cache_update = - ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, (Ecore_Event_Handler_Cb)_e_fm2_icon_cache_update, ic->sd->obj); - } + _e_fm2_icon_desktop_load(ic); if (cf) { @@ -8392,7 +8383,7 @@ evas_object_resize(obj, 0, 0); E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_CONFIG_ICON_THEME, _e_fm2_cb_theme, sd->obj); - E_LIST_HANDLER_APPEND(sd->handlers, EFREET_EVENT_DESKTOP_CACHE_BUILD, _e_fm2_icon_cache_update, sd->obj); + E_LIST_HANDLER_APPEND(sd->handlers, EFREET_EVENT_ICON_CACHE_UPDATE, _e_fm2_icon_cache_update, sd->obj); _e_fm2_list = eina_list_append(_e_fm2_list, sd->obj); } @@ -8407,9 +8398,6 @@ E_FREE_LIST(sd->handlers, ecore_event_handler_del); - if (sd->efreet_cache_update) - ecore_event_handler_del(sd->efreet_cache_update); - _e_fm2_client_monitor_list_end(obj); if (sd->realpath) _e_fm2_client_monitor_del(sd->id, sd->realpath); _e_fm2_live_process_end(obj); |
From: Enlightenment S. <no-...@en...> - 2013-02-07 11:43:43
|
Log: add "vmware" class to mapping disable keywords ticket #1057 Author: discomfitor Date: 2013-02-07 03:43:36 -0800 (Thu, 07 Feb 2013) New Revision: 83734 Trac: http://trac.enlightenment.org/e/changeset/83734 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_border.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-07 10:51:10 UTC (rev 83733) +++ trunk/e/ChangeLog 2013-02-07 11:43:36 UTC (rev 83734) @@ -4,6 +4,7 @@ 2013-02-07 Mike Blumenkrantz + * keyboard mapping change now also disables for window class "vmware" * added option for remembering filemanager windows globally * added edit functionality to window remembers dialog Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-07 10:51:10 UTC (rev 83733) +++ trunk/e/NEWS 2013-02-07 11:43:36 UTC (rev 83734) @@ -162,3 +162,4 @@ * moved "allow windows above fullscreen windows" option to geometry settings dialog * fix filemanager efreet cache listeners and updates * fix clock timerfd usage to actually detect date changes + * keyboard mapping change now also disables for window class "vmware" Modified: trunk/e/src/bin/e_border.c =================================================================== --- trunk/e/src/bin/e_border.c 2013-02-07 10:51:10 UTC (rev 83733) +++ trunk/e/src/bin/e_border.c 2013-02-07 11:43:36 UTC (rev 83734) @@ -5037,7 +5037,7 @@ eina_stringshare_del(bd->client.icccm.name); if (bd->client.icccm.class) { - if (!strcmp(bd->client.icccm.class, "Vmplayer")) + if ((!strcasecmp(bd->client.icccm.class, "vmplayer")) || (!strcasecmp(bd->client.icccm.class, "vmware"))) e_bindings_mapping_change_enable(EINA_TRUE); eina_stringshare_del(bd->client.icccm.class); } |
From: Enlightenment S. <no-...@en...> - 2013-02-07 13:20:03
|
Log: add function for returning e_layout children Author: discomfitor Date: 2013-02-07 05:19:57 -0800 (Thu, 07 Feb 2013) New Revision: 83749 Trac: http://trac.enlightenment.org/e/changeset/83749 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_layout.c trunk/e/src/bin/e_layout.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-07 13:19:55 UTC (rev 83748) +++ trunk/e/ChangeLog 2013-02-07 13:19:57 UTC (rev 83749) @@ -69,6 +69,7 @@ 2013-01-29 Mike Blumenkrantz * fixed bug where dragging files into sidebar would move them instead of creating links + * added function for getting children of e_layout 2013-01-23 Chris Michael Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-07 13:19:55 UTC (rev 83748) +++ trunk/e/NEWS 2013-02-07 13:19:57 UTC (rev 83749) @@ -26,6 +26,7 @@ * e_widget_check_widget_disable_on_* * e_widget_on_disable_hook_set * e_int_border_remember_edit + * Added function for getting children of e_layout Config: * Added option for disabling icons in menus * Added option for disabling pointer warping when performing directional focus changes using winlist Modified: trunk/e/src/bin/e_layout.c =================================================================== --- trunk/e/src/bin/e_layout.c 2013-02-07 13:19:55 UTC (rev 83748) +++ trunk/e/src/bin/e_layout.c 2013-02-07 13:19:57 UTC (rev 83749) @@ -262,6 +262,16 @@ _e_layout_smart_disown(obj); } +EAPI const Eina_List * +e_layout_children_get(Evas_Object *obj) +{ + E_Smart_Data *sd; + + if (evas_object_smart_smart_get(obj) != _e_smart) SMARTERRNR() NULL; + sd = evas_object_smart_data_get(obj); + return sd->items; +} + /* local subsystem functions */ static E_Layout_Item * _e_layout_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) Modified: trunk/e/src/bin/e_layout.h =================================================================== --- trunk/e/src/bin/e_layout.h 2013-02-07 13:19:55 UTC (rev 83748) +++ trunk/e/src/bin/e_layout.h 2013-02-07 13:19:57 UTC (rev 83749) @@ -22,5 +22,7 @@ EAPI void e_layout_child_geometry_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); EAPI void e_layout_unpack (Evas_Object *obj); +EAPI const Eina_List *e_layout_children_get(Evas_Object *obj); + #endif #endif |
From: Enlightenment S. <no-...@en...> - 2013-02-11 07:55:09
|
Log: fix pointer warping for new client windows to not start from a random location Author: discomfitor Date: 2013-02-10 23:55:02 -0800 (Sun, 10 Feb 2013) New Revision: 83809 Trac: http://trac.enlightenment.org/e/changeset/83809 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_border.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-11 07:44:00 UTC (rev 83808) +++ trunk/e/ChangeLog 2013-02-11 07:55:02 UTC (rev 83809) @@ -1,3 +1,7 @@ +2013-02-11 Mike Blumenkrantz + + * fixed bug where pointer warping to new clients would start at a random location + 2013-02-08 Cedric Bail * remove call to efreet_menu_parse from a thread. Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-11 07:44:00 UTC (rev 83808) +++ trunk/e/NEWS 2013-02-11 07:55:02 UTC (rev 83809) @@ -168,3 +168,4 @@ * fix clock timerfd usage to actually detect date changes * keyboard mapping change now also disables for window class "vmware" * don't call efreet_menu_parse from a thread + * fixed bug where pointer warping to new clients would start at a random location Modified: trunk/e/src/bin/e_border.c =================================================================== --- trunk/e/src/bin/e_border.c 2013-02-11 07:44:00 UTC (rev 83808) +++ trunk/e/src/bin/e_border.c 2013-02-11 07:55:02 UTC (rev 83809) @@ -10422,7 +10422,7 @@ /* XXX ooffice does send this request for config dialogs when the main window gets focus. causing the pointer to jump back and forth. */ - if ((e_config->focus_policy != E_FOCUS_CLICK) && + if ((e_config->focus_policy != E_FOCUS_CLICK) && (!bd->new_client) && !(bd->client.icccm.name && !strcmp(bd->client.icccm.name, "VCLSalFrame"))) ecore_x_pointer_warp(bd->zone->container->win, bd->x + (bd->w / 2), bd->y + (bd->h / 2)); |
From: Enlightenment S. <no-...@en...> - 2013-02-11 08:35:38
|
Log: fix crash when activating menu from start gadget after locking screen from start gadget menu ticket #cedric Author: discomfitor Date: 2013-02-11 00:35:28 -0800 (Mon, 11 Feb 2013) New Revision: 83811 Trac: http://trac.enlightenment.org/e/changeset/83811 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_menu.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-11 07:58:34 UTC (rev 83810) +++ trunk/e/ChangeLog 2013-02-11 08:35:28 UTC (rev 83811) @@ -1,6 +1,7 @@ 2013-02-11 Mike Blumenkrantz * fixed bug where pointer warping to new clients would start at a random location + * fix crash when locking screen from Start gadget and then activating gadget again 2013-02-08 Cedric Bail Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-11 07:58:34 UTC (rev 83810) +++ trunk/e/NEWS 2013-02-11 08:35:28 UTC (rev 83811) @@ -169,3 +169,4 @@ * keyboard mapping change now also disables for window class "vmware" * don't call efreet_menu_parse from a thread * fixed bug where pointer warping to new clients would start at a random location + * fix crash when locking screen from Start gadget and then activating gadget again Modified: trunk/e/src/bin/e_menu.c =================================================================== --- trunk/e/src/bin/e_menu.c 2013-02-11 07:58:34 UTC (rev 83810) +++ trunk/e/src/bin/e_menu.c 2013-02-11 08:35:28 UTC (rev 83811) @@ -1379,7 +1379,10 @@ evas_object_move(mi->event_object, x, y); evas_object_move(o, x, y); if ((mi->submenu) && (mi->submenu->parent_item)) - _e_menu_reposition(mi->submenu); + { + mi->submenu->zone = mi->menu->zone; + _e_menu_reposition(mi->submenu); + } } static void |
From: Enlightenment S. <no-...@en...> - 2013-02-11 14:36:44
|
Log: fix e_layout to not ignore frozen state Author: discomfitor Date: 2013-02-11 06:35:03 -0800 (Mon, 11 Feb 2013) New Revision: 83827 Trac: http://trac.enlightenment.org/e/changeset/83827 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_layout.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-11 13:39:16 UTC (rev 83826) +++ trunk/e/ChangeLog 2013-02-11 14:35:03 UTC (rev 83827) @@ -2,6 +2,7 @@ * fixed bug where pointer warping to new clients would start at a random location * fix crash when locking screen from Start gadget and then activating gadget again + * fixed bug where e_layout would ignore frozen state and crash 2013-02-08 Cedric Bail Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-11 13:39:16 UTC (rev 83826) +++ trunk/e/NEWS 2013-02-11 14:35:03 UTC (rev 83827) @@ -170,3 +170,4 @@ * don't call efreet_menu_parse from a thread * fixed bug where pointer warping to new clients would start at a random location * fix crash when locking screen from Start gadget and then activating gadget again + * fixed bug where e_layout would ignore frozen state and crash Modified: trunk/e/src/bin/e_layout.c =================================================================== --- trunk/e/src/bin/e_layout.c 2013-02-11 13:39:16 UTC (rev 83826) +++ trunk/e/src/bin/e_layout.c 2013-02-11 14:35:03 UTC (rev 83827) @@ -138,7 +138,7 @@ sd = evas_object_smart_data_get(obj); li = _e_layout_smart_adopt(sd, child); sd->items = eina_inlist_append(sd->items, EINA_INLIST_GET(li)); - _e_layout_smart_move_resize_item(li); + if (sd->frozen <= 0) _e_layout_smart_move_resize_item(li); } EAPI void @@ -151,7 +151,7 @@ if ((li->x == x) && (li->y == y)) return; li->x = x; li->y = y; - _e_layout_smart_move_resize_item(li); + if (li->sd->frozen <= 0) _e_layout_smart_move_resize_item(li); } EAPI void @@ -166,7 +166,7 @@ if ((li->w == w) && (li->h == h)) return; li->w = w; li->h = h; - _e_layout_smart_move_resize_item(li); + if (li->sd->frozen <= 0) _e_layout_smart_move_resize_item(li); } EAPI void @@ -464,7 +464,7 @@ sd->w = w; sd->h = h; sd->changed = 1; - _e_layout_smart_reconfigure(sd); + if (sd->frozen <= 0) _e_layout_smart_reconfigure(sd); } static void |
From: Enlightenment S. <no-...@en...> - 2013-02-15 08:16:15
|
Log: patch by Deon Thomas which implements efreet menu caching for e_int_menus Author: discomfitor Date: 2013-02-15 00:16:06 -0800 (Fri, 15 Feb 2013) New Revision: 83939 Trac: http://trac.enlightenment.org/e/changeset/83939 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_config.c trunk/e/src/bin/e_config.h trunk/e/src/bin/e_int_menus.c trunk/e/src/bin/e_int_menus.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/ChangeLog 2013-02-15 08:16:06 UTC (rev 83939) @@ -1,3 +1,6 @@ +2013-02-13 Deon Thomas + * Fixed Menu->Applications now only lists valid .desktop files, if the exec is missing it will not be added to the menu list. + 2013-02-11 Mike Blumenkrantz * fixed bug where pointer warping to new clients would start at a random location Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/NEWS 2013-02-15 08:16:06 UTC (rev 83939) @@ -103,6 +103,7 @@ * enable image preloading for all e_widget_preview using edje * window remember dialog now allows editing of remembers * container now uses compositor window + * Menu->Applications now only list valid .desktop files Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_config.c =================================================================== --- trunk/e/src/bin/e_config.c 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/src/bin/e_config.c 2013-02-15 08:16:06 UTC (rev 83939) @@ -44,6 +44,7 @@ static E_Config_DD *_e_config_desktop_name_edd = NULL; static E_Config_DD *_e_config_desktop_window_profile_edd = NULL; static E_Config_DD *_e_config_remember_edd = NULL; +static E_Config_DD *_e_config_menu_applications_edd = NULL; static E_Config_DD *_e_config_color_class_edd = NULL; static E_Config_DD *_e_config_gadcon_edd = NULL; static E_Config_DD *_e_config_gadcon_client_edd = NULL; @@ -123,6 +124,7 @@ E_CONFIG_DD_FREE(_e_config_desktop_name_edd); E_CONFIG_DD_FREE(_e_config_desktop_window_profile_edd); E_CONFIG_DD_FREE(_e_config_remember_edd); + E_CONFIG_DD_FREE(_e_config_menu_applications_edd); E_CONFIG_DD_FREE(_e_config_gadcon_edd); E_CONFIG_DD_FREE(_e_config_gadcon_client_edd); E_CONFIG_DD_FREE(_e_config_shelf_edd); @@ -284,6 +286,18 @@ #define D _e_config_font_fallback_edd E_CONFIG_VAL(D, T, name, STR); + _e_config_menu_applications_edd = E_CONFIG_DD_NEW("E_Int_Menu_Applications", + E_Int_Menu_Applications); +#undef T +#undef D +#define T E_Int_Menu_Applications +#define D _e_config_menu_applications_edd + E_CONFIG_VAL(D, T, orig_path, STR); + E_CONFIG_VAL(D, T, try_exec, STR); + E_CONFIG_VAL(D, T, exec, STR); + E_CONFIG_VAL(D, T, load_time, LL); + E_CONFIG_VAL(D, T, exec_valid, INT); + _e_config_remember_edd = E_CONFIG_DD_NEW("E_Remember", E_Remember); #undef T #undef D @@ -621,6 +635,7 @@ E_CONFIG_VAL(D, T, transition_desk, STR); /**/ E_CONFIG_VAL(D, T, transition_change, STR); /**/ E_CONFIG_LIST(D, T, remembers, _e_config_remember_edd); + E_CONFIG_LIST(D, T, menu_applications, _e_config_menu_applications_edd); E_CONFIG_VAL(D, T, remember_internal_windows, INT); E_CONFIG_VAL(D, T, remember_internal_fm_windows, UCHAR); E_CONFIG_VAL(D, T, remember_internal_fm_windows_globally, UCHAR); @@ -2124,6 +2139,7 @@ E_Config_Env_Var *evr; E_Config_XKB_Option *op; E_Config_Desktop_Window_Profile *wp; + E_Int_Menu_Applications *ema; if (!ecf) return; @@ -2219,6 +2235,13 @@ if (rem->prop.command) eina_stringshare_del(rem->prop.command); E_FREE(rem); } + EINA_LIST_FREE(ecf->menu_applications, ema) + { + if (ema->orig_path) eina_stringshare_del(ema->orig_path); + if (ema->try_exec) eina_stringshare_del(ema->try_exec); + if (ema->exec) eina_stringshare_del(ema->exec); + E_FREE(ema); + } EINA_LIST_FREE(ecf->color_classes, cc) { if (cc->name) eina_stringshare_del(cc->name); Modified: trunk/e/src/bin/e_config.h =================================================================== --- trunk/e/src/bin/e_config.h 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/src/bin/e_config.h 2013-02-15 08:16:06 UTC (rev 83939) @@ -430,6 +430,7 @@ const char *desklock_layout; } xkb; + Eina_List *menu_applications; unsigned char exe_always_single_instance; // GUI int use_desktop_window_profile; // GUI }; Modified: trunk/e/src/bin/e_int_menus.c =================================================================== --- trunk/e/src/bin/e_int_menus.c 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/src/bin/e_int_menus.c 2013-02-15 08:16:06 UTC (rev 83939) @@ -644,6 +644,117 @@ if ((a) && (a->func.go)) a->func.go(NULL, NULL); } +/* + * This function searches $PATH for try_exec or exec + * return true if try_exec or exec is found! + */ +static Eina_Bool +_e_int_menus_app_finder(const char *exec) +{ + const char *env = getenv("PATH"); + char **split, buf[PATH_MAX]; + Eina_Bool exec_found = EINA_FALSE; + int i = 0; + + if (strchr(exec, '/')) + { + if (ecore_file_exists(exec) && ecore_file_can_exec(exec)) + return EINA_TRUE; + } + + if (!env) + { + ERR("Unable to $PATH, Returning TRUE for every .desktop"); + return EINA_TRUE; + } + + split = eina_str_split(env, ":", 0); + for (i = 0; split[i] != NULL; i++) + { + snprintf(buf, sizeof(buf), "%s/%s", split[i], exec); + + if (ecore_file_exists(buf) && ecore_file_can_exec(buf)) + { + exec_found = EINA_TRUE; + break; + } + } + free(split[0]); + free(split); + + if (!exec_found) + ERR("Unable to find: [%s] I searched $PATH=%s", exec, env); + + return exec_found; +} + +/* + * This function initalises E_Int_Menu_Applications and add + * our data. + */ +static E_Int_Menu_Applications* +_e_int_menus_app_config_set(Efreet_Desktop *desktop) +{ + E_Int_Menu_Applications *ma; + + ma = E_NEW(E_Int_Menu_Applications, 1); + + ma->orig_path = eina_stringshare_add(desktop->orig_path); + ma->try_exec = eina_stringshare_add(desktop->try_exec); + ma->exec = eina_stringshare_add(desktop->exec); + ma->load_time = desktop->load_time; + ma->exec_valid = 1; //ALL .desktop files are VALID unless proven otherwise :) + return ma; +} + +/* + * This function adds/updates our E_Int_Menu_Applications config, + * returns true if the .desktop file is valid. + */ +static Eina_Bool +_e_int_menus_app_config_append(Efreet_Desktop *desktop) +{ + E_Int_Menu_Applications *ma, *cma; + Eina_List *l; + + if (!desktop) return EINA_TRUE; + + cma = _e_int_menus_app_config_set(desktop); + EINA_LIST_FOREACH(e_config->menu_applications, l, ma) + { + if ((!strcmp(ma->orig_path, cma->orig_path)) && (ma->load_time == cma->load_time)) + return ma->exec_valid; + + if ((!strcmp(ma->orig_path, cma->orig_path)) && (ma->load_time != cma->load_time)) + { + ERR("Modified: [%s]", cma->orig_path); + e_config->menu_applications = eina_list_remove(e_config->menu_applications, ma); + } + } + + if (cma->try_exec) + { + ERR("Try_Exec: [%s]", cma->try_exec); + cma->exec_valid = _e_int_menus_app_finder(cma->try_exec); + } + else + { + if (!strchr(cma->exec, '\0')) + cma->exec_valid = _e_int_menus_app_finder(cma->exec); + else + { + char **split; + split = eina_str_split(cma->exec, " ", 0); + cma->exec_valid = _e_int_menus_app_finder(split[0]); + free(split[0]); + free(split); + } + } + + e_config->menu_applications = eina_list_append(e_config->menu_applications, cma); + return cma->exec_valid; +} + static void _e_int_menus_apps_scan(E_Menu *m, Efreet_Menu *menu) { @@ -656,8 +767,11 @@ EINA_LIST_FOREACH(menu->entries, l, entry) { + if ((entry->type == EFREET_MENU_ENTRY_DESKTOP) && + (!_e_int_menus_app_config_append(entry->desktop))) + continue; + mi = e_menu_item_new(m); - _e_int_menus_item_label_set(entry, mi); if (entry->icon) Modified: trunk/e/src/bin/e_int_menus.h =================================================================== --- trunk/e/src/bin/e_int_menus.h 2013-02-15 06:48:07 UTC (rev 83938) +++ trunk/e/src/bin/e_int_menus.h 2013-02-15 08:16:06 UTC (rev 83939) @@ -1,6 +1,7 @@ #ifdef E_TYPEDEFS typedef struct _E_Int_Menu_Augmentation E_Int_Menu_Augmentation; +typedef struct _E_Int_Menu_Applications E_Int_Menu_Applications; #else #ifndef E_INT_MENUS_H @@ -38,6 +39,15 @@ #define E_CLIENTLIST_MAX_CAPTION_LEN 256 +struct _E_Int_Menu_Applications +{ + const char *orig_path; + const char *try_exec; + const char *exec; + long long load_time; + int exec_valid; +}; + struct _E_Int_Menu_Augmentation { const char *sort_key; |
From: Enlightenment S. <no-...@en...> - 2013-02-18 10:13:27
|
Log: fix 2 pointer warp bugs: * warping to a window which is covered by another window containing the current pointer coordinates * focus changes no longer break sometimes when winlist warping very quickly Author: discomfitor Date: 2013-02-18 02:13:20 -0800 (Mon, 18 Feb 2013) New Revision: 84046 Trac: http://trac.enlightenment.org/e/changeset/84046 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_border.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 09:51:49 UTC (rev 84045) +++ trunk/e/ChangeLog 2013-02-18 10:13:20 UTC (rev 84046) @@ -1,6 +1,7 @@ 2013-02-18 Mike Blumenkrantz * fixed disable of input methods in input method config dialog + * fixed pointer warp when pointer was inside warp window but not directly over it 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 09:51:49 UTC (rev 84045) +++ trunk/e/NEWS 2013-02-18 10:13:20 UTC (rev 84046) @@ -173,3 +173,4 @@ * fix crash when locking screen from Start gadget and then activating gadget again * fixed bug where e_layout would ignore frozen state and crash * fixed disable of input methods in input method config dialog + * fixed pointer warp when pointer was inside warp window but not directly over it Modified: trunk/e/src/bin/e_border.c =================================================================== --- trunk/e/src/bin/e_border.c 2013-02-18 09:51:49 UTC (rev 84045) +++ trunk/e/src/bin/e_border.c 2013-02-18 10:13:20 UTC (rev 84046) @@ -10185,24 +10185,12 @@ focus_track_frozen--; } -EAPI E_Border * -e_border_under_pointer_get(E_Desk *desk, - E_Border *exclude) +static E_Border * +_e_border_under_pointer_helper(E_Desk *desk, E_Border *exclude, int x, int y) { E_Border *bd = NULL, *cbd; Eina_List *l; - int x, y; - /* We need to ensure that we can get the container window for the - * zone of either the given desk or the desk of the excluded - * window, so return if neither is given */ - if (desk) - ecore_x_pointer_xy_get(desk->zone->container->win, &x, &y); - else if (exclude) - ecore_x_pointer_xy_get(exclude->desk->zone->container->win, &x, &y); - else - return NULL; - EINA_LIST_FOREACH(e_border_raise_stack_get(), l, cbd) { if (!cbd) continue; @@ -10223,6 +10211,25 @@ return bd; } +EAPI E_Border * +e_border_under_pointer_get(E_Desk *desk, + E_Border *exclude) +{ + int x, y; + + /* We need to ensure that we can get the container window for the + * zone of either the given desk or the desk of the excluded + * window, so return if neither is given */ + if (desk) + ecore_x_pointer_xy_get(desk->zone->container->win, &x, &y); + else if (exclude) + ecore_x_pointer_xy_get(exclude->desk->zone->container->win, &x, &y); + else + return NULL; + + return _e_border_under_pointer_helper(desk, exclude, x, y); +} + static Eina_Bool _e_border_pointer_warp_to_center_timer(void *data __UNUSED__) { @@ -10298,9 +10305,6 @@ if (e_config->disable_all_pointer_warps) return 0; if (warp_timer_border == bd) { - if (warp_timer) ecore_timer_del(warp_timer); - warp_timer = NULL; - warp_timer_border = NULL; ecore_x_pointer_warp(warp_to_win, warp_to_x, warp_to_y); warp_to = 0; } @@ -10316,6 +10320,7 @@ e_border_pointer_warp_to_center(E_Border *bd) { int x, y; + E_Border *cbd = NULL; if (e_config->disable_all_pointer_warps) return 0; /* Only warp the pointer if it is not already in the area of @@ -10323,7 +10328,10 @@ ecore_x_pointer_xy_get(bd->zone->container->win, &x, &y); if ((x >= bd->x) && (x <= (bd->x + bd->w)) && (y >= bd->y) && (y <= (bd->y + bd->h))) - return 0; + { + cbd = _e_border_under_pointer_helper(bd->desk, bd, x, y); + if (cbd == bd) return 0; + } warp_to_x = bd->x + (bd->w / 2); if (warp_to_x < (bd->zone->x + 1)) @@ -10337,6 +10345,15 @@ else if (warp_to_y > (bd->zone->y + bd->zone->h)) warp_to_y = (bd->zone->y + bd->zone->h + bd->y) / 2; + /* TODO: handle case where another border is over the exact center, + * find a place where the requested border is not overlapped? + * + if (!cbd) cbd = _e_border_under_pointer_helper(bd->desk, bd, x, y); + if (cbd != bd) + { + } + */ + warp_to = 1; warp_to_win = bd->zone->container->win; ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x[0], &warp_y[0]); |
From: Enlightenment S. <no-...@en...> - 2013-02-18 13:43:23
|
Log: desklock now uses comp canvas Author: discomfitor Date: 2013-02-18 05:43:14 -0800 (Mon, 18 Feb 2013) New Revision: 84052 Trac: http://trac.enlightenment.org/e/changeset/84052 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_desklock.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 13:43:10 UTC (rev 84051) +++ trunk/e/ChangeLog 2013-02-18 13:43:14 UTC (rev 84052) @@ -2,6 +2,7 @@ * fixed disable of input methods in input method config dialog * fixed pointer warp when pointer was inside warp window but not directly over it + * desklock now uses compositor canvas 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 13:43:10 UTC (rev 84051) +++ trunk/e/NEWS 2013-02-18 13:43:14 UTC (rev 84052) @@ -104,6 +104,7 @@ * window remember dialog now allows editing of remembers * container now uses compositor window * Menu->Applications now only list valid .desktop files + * desklock now uses compositor canvas Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_desklock.c =================================================================== --- trunk/e/src/bin/e_desklock.c 2013-02-18 13:43:10 UTC (rev 84051) +++ trunk/e/src/bin/e_desklock.c 2013-02-18 13:43:14 UTC (rev 84052) @@ -21,7 +21,7 @@ struct _E_Desklock_Popup_Data { - E_Popup *popup_wnd; + E_Zone *zone; Evas_Object *bg_object; Evas_Object *login_box; }; @@ -82,7 +82,6 @@ static Eina_Bool _e_desklock_cb_mouse_move(void *data, int type, void *event); static Eina_Bool _e_desklock_cb_custom_desklock_exit(void *data, int type, void *event); static Eina_Bool _e_desklock_cb_idle_poller(void *data); -static Eina_Bool _e_desklock_cb_window_stack(void *data, int type, void *event); static Eina_Bool _e_desklock_cb_zone_add(void *data, int type, void *event); static Eina_Bool _e_desklock_cb_zone_del(void *data, int type, void *event); static Eina_Bool _e_desklock_cb_zone_move_resize(void *data, int type, void *event); @@ -229,6 +228,7 @@ _e_custom_desklock_exe = ecore_exe_run(e_config->desklock_custom_desklock_cmd, NULL); _e_desklock_state = EINA_TRUE; + /* TODO: ensure layer is correct on external desklocks? */ return 1; } @@ -329,9 +329,6 @@ /* handlers */ E_LIST_HANDLER_APPEND(edd->handlers, ECORE_EVENT_KEY_DOWN, _e_desklock_cb_key_down, NULL); - E_LIST_HANDLER_APPEND(edd->handlers, ECORE_X_EVENT_WINDOW_STACK, _e_desklock_cb_window_stack, NULL); - E_LIST_HANDLER_APPEND(edd->handlers, ECORE_X_EVENT_WINDOW_CONFIGURE, _e_desklock_cb_window_stack, NULL); - E_LIST_HANDLER_APPEND(edd->handlers, ECORE_X_EVENT_WINDOW_CREATE, _e_desklock_cb_window_stack, NULL); E_LIST_HANDLER_APPEND(edd->handlers, E_EVENT_ZONE_ADD, _e_desklock_cb_zone_add, NULL); E_LIST_HANDLER_APPEND(edd->handlers, E_EVENT_ZONE_DEL, _e_desklock_cb_zone_del, NULL); E_LIST_HANDLER_APPEND(edd->handlers, E_EVENT_ZONE_MOVE_RESIZE, _e_desklock_cb_zone_move_resize, NULL); @@ -354,7 +351,6 @@ EAPI void e_desklock_hide(void) { - E_Desklock_Popup_Data *edp; E_Event_Desklock *ev; if ((!edd) && (!_e_custom_desklock_exe)) return; @@ -384,9 +380,7 @@ if (edd->elock_grab_break_wnd) ecore_x_window_show(edd->elock_grab_break_wnd); - EINA_LIST_FREE(edd->elock_wnd_list, edp) - _e_desklock_popup_free(edp); - + E_FREE_LIST(edd->elock_wnd_list, _e_desklock_popup_free); E_FREE_LIST(edd->handlers, ecore_event_handler_del); if (edd->move_handler) ecore_event_handler_del(edd->move_handler); @@ -394,7 +388,6 @@ ecore_x_window_free(edd->elock_wnd); E_FREE(edd); - edd = NULL; if (_e_desklock_autolock_time > 0.0) { @@ -422,28 +415,17 @@ E_Desklock_Popup_Data *edp; E_Config_Desklock_Background *cbg; const char *bg; + Evas *evas; cbg = eina_list_nth(e_config->desklock_backgrounds, zone->num); bg = cbg ? cbg->file : NULL; edp = E_NEW(E_Desklock_Popup_Data, 1); - if (!edp) - { - CRI("DESKLOCK FAILED FOR ZONE %d!", zone->num); - return; - } - edp->popup_wnd = e_popup_new(zone, 0, 0, zone->w, zone->h); - e_popup_name_set(edp->popup_wnd, "_e_popup_desklock"); - ecore_evas_title_set(edp->popup_wnd->ecore_evas, "E Desklock"); - evas_event_feed_mouse_move(edp->popup_wnd->evas, -1000000, -1000000, - ecore_x_current_time_get(), NULL); + edp->zone = zone; + evas = e_comp_get(zone)->evas; + evas_event_freeze(evas); + edp->bg_object = edje_object_add(evas); - e_popup_layer_set(edp->popup_wnd, E_LAYER_PRIO); - ecore_evas_raise(edp->popup_wnd->ecore_evas); - - evas_event_freeze(edp->popup_wnd->evas); - edp->bg_object = edje_object_add(edp->popup_wnd->evas); - if ((!bg) || (!strcmp(bg, "theme_desklock_background"))) { e_theme_edje_object_set(edp->bg_object, @@ -482,16 +464,15 @@ } } - evas_object_move(edp->bg_object, 0, 0); + evas_object_move(edp->bg_object, zone->x, zone->y); evas_object_resize(edp->bg_object, zone->w, zone->h); + E_LAYER_SET_ABOVE(edp->bg_object, E_COMP_CANVAS_LAYER_DESKLOCK); + evas_object_clip_set(edp->bg_object, edp->zone->bg_clip_object); evas_object_show(edp->bg_object); _e_desklock_login_box_add(edp); - e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object); - evas_event_thaw(edp->popup_wnd->evas); + evas_event_thaw(evas); - e_popup_show(edp->popup_wnd); - edd->elock_wnd_list = eina_list_append(edd->elock_wnd_list, edp); } @@ -499,11 +480,12 @@ _e_desklock_login_box_add(E_Desklock_Popup_Data *edp) { int mw, mh; - E_Zone *zone = edp->popup_wnd->zone; - E_Zone *current_zone; + E_Zone *zone, *current_zone; int total_zone_num; + Evas *evas; - last_active_zone = current_zone = e_zone_current_get(e_container_current_get(e_manager_current_get())); + zone = edp->zone; + last_active_zone = current_zone = e_util_zone_current_get(e_manager_current_get()); total_zone_num = _e_desklock_zone_num_get(); if (total_zone_num > 1) { @@ -513,7 +495,8 @@ return; } - edp->login_box = edje_object_add(edp->popup_wnd->evas); + evas = evas_object_evas_get(edp->bg_object); + edp->login_box = edje_object_add(evas); e_theme_edje_object_set(edp->login_box, "base/theme/desklock", "e/desklock/login_box"); @@ -529,9 +512,12 @@ { evas_object_resize(edp->login_box, mw, mh); evas_object_move(edp->login_box, - ((zone->w - mw) / 2), - ((zone->h - mh) / 2)); + zone->x + ((zone->w - mw) / 2), + zone->y + ((zone->h - mh) / 2)); + E_LAYER_SET_ABOVE(edp->login_box, E_COMP_CANVAS_LAYER_DESKLOCK); } + + evas_object_clip_set(edp->login_box, edp->zone->bg_clip_object); evas_object_show(edp->login_box); } @@ -539,60 +525,13 @@ _e_desklock_popup_free(E_Desklock_Popup_Data *edp) { if (!edp) return; - e_popup_hide(edp->popup_wnd); - evas_event_freeze(edp->popup_wnd->evas); evas_object_del(edp->bg_object); evas_object_del(edp->login_box); - evas_event_thaw(edp->popup_wnd->evas); - e_object_del(E_OBJECT(edp->popup_wnd)); free(edp); } -static Eina_Bool -_e_desklock_cb_window_stack(void *data __UNUSED__, - int type, - void *event) -{ - Ecore_X_Window win, win2 = 0; - E_Desklock_Popup_Data *edp; - Eina_List *l; - Eina_Bool raise_win = EINA_TRUE; - - if (!edd) return ECORE_CALLBACK_PASS_ON; - - if (type == ECORE_X_EVENT_WINDOW_STACK) - win = ((Ecore_X_Event_Window_Stack *)event)->event_win; - else if (type == ECORE_X_EVENT_WINDOW_CONFIGURE) - { - win = ((Ecore_X_Event_Window_Configure *)event)->event_win; - win2 = ((Ecore_X_Event_Window_Configure *)event)->win; - } - else if (type == ECORE_X_EVENT_WINDOW_CREATE) - win = ((Ecore_X_Event_Window_Create *)event)->win; - else - return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp) - { - if ((win == edp->popup_wnd->evas_win) || - ((win2) && (win2 == edp->popup_wnd->evas_win))) - { - raise_win = EINA_FALSE; - break; - } - } - - if (raise_win) - { - EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp) - ecore_evas_raise(edp->popup_wnd->ecore_evas); - } - - return ECORE_CALLBACK_PASS_ON; -} - EAPI Eina_Bool e_desklock_state_get(void) { @@ -606,7 +545,7 @@ E_Desklock_Popup_Data *edp; EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp) - if (edp->popup_wnd->zone == zone) return l; + if (edp->zone == zone) return l; return NULL; } @@ -654,10 +593,15 @@ if (!edd) return ECORE_CALLBACK_PASS_ON; EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp) - if (edp->popup_wnd->zone == ev->zone) + if (edp->zone == ev->zone) { - e_popup_move_resize(edp->popup_wnd, 0, 0, ev->zone->w, ev->zone->h); + int w, h; + evas_object_resize(edp->bg_object, ev->zone->w, ev->zone->h); + evas_object_geometry_get(edp->login_box, NULL, NULL, &w, &h); + evas_object_move(edp->login_box, + edp->zone->x + ((edp->zone->w - w) / 2), + edp->zone->y + ((edp->zone->h - h) / 2)); break; } return ECORE_CALLBACK_PASS_ON; @@ -737,7 +681,7 @@ E_Zone *current_zone; Eina_List *l; - current_zone = e_zone_current_get(e_container_current_get(e_manager_current_get())); + current_zone = e_util_zone_current_get(e_manager_current_get()); if (current_zone == last_active_zone) return ECORE_CALLBACK_PASS_ON; @@ -746,7 +690,7 @@ { if (!edp) continue; - if (edp->popup_wnd->zone != current_zone) + if (edp->zone != current_zone) { if (edp->login_box) evas_object_hide(edp->login_box); continue; |
From: Enlightenment S. <no-...@en...> - 2013-02-18 13:43:42
|
Log: e_util_size_debug_set now prints on show/hide events Author: discomfitor Date: 2013-02-18 05:43:34 -0800 (Mon, 18 Feb 2013) New Revision: 84057 Trac: http://trac.enlightenment.org/e/changeset/84057 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_utils.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 13:43:32 UTC (rev 84056) +++ trunk/e/ChangeLog 2013-02-18 13:43:34 UTC (rev 84057) @@ -3,6 +3,8 @@ * fixed disable of input methods in input method config dialog * fixed pointer warp when pointer was inside warp window but not directly over it * desklock now uses compositor canvas + * e_shelf_desk_visible_get now takes const params + * e_util_size_debug_set now also prints for object show/hide events 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 13:43:32 UTC (rev 84056) +++ trunk/e/NEWS 2013-02-18 13:43:34 UTC (rev 84057) @@ -49,6 +49,8 @@ * e_menu_category_callback create callback parameter order has been changed * e_manager_comp_set() is no longer accessible by modules * e_xkb_layout API now deals directly with E_Config_XKB_Layout structs + * e_shelf_desk_visible_get now takes const params + * e_util_size_debug_set now also prints for object show/hide events Config: * move winlist_warp_speed option to pointer_warp_speed * bindings now use new E_Binding_Event structs for mouse events Modified: trunk/e/src/bin/e_utils.c =================================================================== --- trunk/e/src/bin/e_utils.c 2013-02-18 13:43:32 UTC (rev 84056) +++ trunk/e/src/bin/e_utils.c 2013-02-18 13:43:34 UTC (rev 84057) @@ -1328,7 +1328,7 @@ int x, y, w, h; evas_object_geometry_get(obj, &x, &y, &w, &h); - fprintf(stderr, "OBJ[%p]: (%d,%d) - %dx%d\n", obj, x, y, w, h); + fprintf(stderr, "%s OBJ[%p]: (%d,%d) - %dx%d\n", evas_object_visible_get(obj) ? "VIS" : "HID", obj, x, y, w, h); } EAPI void @@ -1340,6 +1340,10 @@ _e_util_size_debug, NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _e_util_size_debug, NULL); + evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, + _e_util_size_debug, NULL); + evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, + _e_util_size_debug, NULL); } else { @@ -1347,6 +1351,10 @@ _e_util_size_debug, NULL); evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _e_util_size_debug, NULL); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_SHOW, + _e_util_size_debug, NULL); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_HIDE, + _e_util_size_debug, NULL); } } |
From: Enlightenment S. <no-...@en...> - 2013-02-18 13:43:44
|
Log: gadcon now correctly freezes its container object when unpopulating Author: discomfitor Date: 2013-02-18 05:43:37 -0800 (Mon, 18 Feb 2013) New Revision: 84058 Trac: http://trac.enlightenment.org/e/changeset/84058 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_gadcon.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 13:43:34 UTC (rev 84057) +++ trunk/e/ChangeLog 2013-02-18 13:43:37 UTC (rev 84058) @@ -5,6 +5,7 @@ * desklock now uses compositor canvas * e_shelf_desk_visible_get now takes const params * e_util_size_debug_set now also prints for object show/hide events + * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 13:43:34 UTC (rev 84057) +++ trunk/e/NEWS 2013-02-18 13:43:37 UTC (rev 84058) @@ -107,6 +107,7 @@ * container now uses compositor window * Menu->Applications now only list valid .desktop files * desklock now uses compositor canvas + * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_gadcon.c =================================================================== --- trunk/e/src/bin/e_gadcon.c 2013-02-18 13:43:34 UTC (rev 84057) +++ trunk/e/src/bin/e_gadcon.c 2013-02-18 13:43:37 UTC (rev 84058) @@ -596,6 +596,7 @@ E_OBJECT_CHECK(gc); E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE); /* Be careful, e_object_del does remove gcc from gc->clients */ + if (gc->o_container) e_gadcon_layout_freeze(gc->o_container); while (gc->clients) { gcc = eina_list_data_get(gc->clients); @@ -610,6 +611,7 @@ if (gc->awaiting_classes) eina_hash_free(gc->awaiting_classes); gc->awaiting_classes = NULL; + if (gc->o_container) e_gadcon_layout_thaw(gc->o_container); } EAPI void |
From: Enlightenment S. <no-...@en...> - 2013-02-18 13:43:59
|
Log: add e_layout_top_child_get, e_layout_child_below_get and e_layout_child_above_get Author: discomfitor Date: 2013-02-18 05:43:52 -0800 (Mon, 18 Feb 2013) New Revision: 84061 Trac: http://trac.enlightenment.org/e/changeset/84061 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_layout.c trunk/e/src/bin/e_layout.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 13:43:47 UTC (rev 84060) +++ trunk/e/ChangeLog 2013-02-18 13:43:52 UTC (rev 84061) @@ -7,6 +7,7 @@ * e_util_size_debug_set now also prints for object show/hide events * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets * e_popup is now a wrapper for drawing objects onto the compositor canvas + * added e_layout functions for returning objects above or below a layout child 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 13:43:47 UTC (rev 84060) +++ trunk/e/NEWS 2013-02-18 13:43:52 UTC (rev 84061) @@ -28,6 +28,7 @@ * e_int_border_remember_edit * Added function for getting children of e_layout * added utility function for printing all objects above a given object + * added e_layout functions for returning objects above or below a layout child Config: * Added option for disabling icons in menus * Added option for disabling pointer warping when performing directional focus changes using winlist Modified: trunk/e/src/bin/e_layout.c =================================================================== --- trunk/e/src/bin/e_layout.c 2013-02-18 13:43:47 UTC (rev 84060) +++ trunk/e/src/bin/e_layout.c 2013-02-18 13:43:52 UTC (rev 84061) @@ -154,6 +154,41 @@ if (li->sd->frozen <= 0) _e_layout_smart_move_resize_item(li); } +EAPI Evas_Object * +e_layout_child_above_get(Evas_Object *obj) +{ + E_Layout_Item *li; + + li = evas_object_data_get(obj, "e_layout_data"); + EINA_SAFETY_ON_NULL_RETURN_VAL(li, NULL); + li = (E_Layout_Item*)EINA_INLIST_GET(li)->next; + return li ? li->obj : NULL; +} + +EAPI Evas_Object * +e_layout_child_below_get(Evas_Object *obj) +{ + E_Layout_Item *li; + + li = evas_object_data_get(obj, "e_layout_data"); + EINA_SAFETY_ON_NULL_RETURN_VAL(li, NULL); + li = (E_Layout_Item*)EINA_INLIST_GET(li)->prev; + return li ? li->obj : NULL; +} + +EAPI Evas_Object * +e_layout_top_child_get(Evas_Object *obj) +{ + E_Smart_Data *sd; + E_Layout_Item *li; + + if (evas_object_smart_smart_get(obj) != _e_smart) SMARTERRNR() NULL; + sd = evas_object_smart_data_get(obj); + if (!sd->items) return NULL; + li = (E_Layout_Item*)sd->items->last; + return li->obj; +} + EAPI void e_layout_child_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) { Modified: trunk/e/src/bin/e_layout.h =================================================================== --- trunk/e/src/bin/e_layout.h 2013-02-18 13:43:47 UTC (rev 84060) +++ trunk/e/src/bin/e_layout.h 2013-02-18 13:43:52 UTC (rev 84061) @@ -25,5 +25,8 @@ EAPI Eina_List *e_layout_children_get(Evas_Object *obj); EAPI Evas_Object *e_layout_top_child_at_xy_get(Evas_Object *obj, Evas_Coord x, Evas_Coord y, const Eina_List *ignore); +EAPI Evas_Object *e_layout_child_below_get(Evas_Object *obj); +EAPI Evas_Object *e_layout_child_above_get(Evas_Object *obj); +EAPI Evas_Object *e_layout_top_child_get(Evas_Object *obj); #endif #endif |
From: Enlightenment S. <no-...@en...> - 2013-02-18 13:44:03
|
Log: nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects Author: discomfitor Date: 2013-02-18 05:43:55 -0800 (Mon, 18 Feb 2013) New Revision: 84062 Trac: http://trac.enlightenment.org/e/changeset/84062 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_comp.c trunk/e/src/bin/e_comp.h trunk/e/src/bin/e_desklock.c trunk/e/src/bin/e_popup.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/ChangeLog 2013-02-18 13:43:55 UTC (rev 84062) @@ -8,6 +8,7 @@ * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets * e_popup is now a wrapper for drawing objects onto the compositor canvas * added e_layout functions for returning objects above or below a layout child + * compositor nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects 2013-02-13 Deon Thomas Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/NEWS 2013-02-18 13:43:55 UTC (rev 84062) @@ -110,6 +110,7 @@ * desklock now uses compositor canvas * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets * e_popup is now a wrapper for drawing objects onto the compositor canvas + * compositor nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_comp.c =================================================================== --- trunk/e/src/bin/e_comp.c 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/src/bin/e_comp.c 2013-02-18 13:43:55 UTC (rev 84062) @@ -196,7 +196,7 @@ if (!c->wins) return NULL; EINA_INLIST_REVERSE_FOREACH(c->wins, cw) { - if ((!cw->visible) || (cw->input_only) || (cw->invalid)) + if ((!cw->visible) || (cw->input_only) || (cw->invalid) || (cw->real_obj)) continue; if ((cw->x == 0) && (cw->y == 0) && ((cw->x + cw->w) >= c->man->w) && @@ -1563,10 +1563,12 @@ char buf[4096]; Eina_List *list = NULL, *l; E_Comp_Match *m; - Eina_Bool focus = EINA_FALSE, urgent = EINA_FALSE, skip = EINA_FALSE, fast = EINA_FALSE; + Eina_Stringshare *reshadow_group = NULL; + Eina_Bool focus = EINA_FALSE, urgent = EINA_FALSE, skip = EINA_FALSE, fast = EINA_FALSE, reshadow; const char *title = NULL, *name = NULL, *clas = NULL, *role = NULL; Ecore_X_Window_Type primary_type = ECORE_X_WINDOW_TYPE_UNKNOWN; + edje_object_file_get(cw->shobj, NULL, &reshadow_group); if (!cw->real_obj) evas_object_image_smooth_scale_set(cw->obj, conf->smooth_windows); EINA_LIST_FOREACH(cw->obj_mirror, l, o) @@ -1729,12 +1731,16 @@ if (fast) { snprintf(buf, sizeof(buf), "e/comp/%s/fast", m->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + reshadow = ok = !e_util_strcmp(reshadow_group, buf); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); } if (!ok) { snprintf(buf, sizeof(buf), "e/comp/%s", m->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + reshadow = ok = !e_util_strcmp(reshadow_group, buf); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); } if (ok) break; } @@ -1743,30 +1749,47 @@ while (!ok) { if (skip || (cw->bd && cw->bd->client.e.state.video)) - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/none"); + { + reshadow = ok = !e_util_strcmp(reshadow_group, "e/comp/none"); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/none"); + } if (ok) break; if (conf->shadow_style) { if (fast) { snprintf(buf, sizeof(buf), "e/comp/%s/fast", conf->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + reshadow = ok = !e_util_strcmp(reshadow_group, buf); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); } if (!ok) { snprintf(buf, sizeof(buf), "e/comp/%s", conf->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + reshadow = ok = !e_util_strcmp(reshadow_group, buf); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); } } if (!ok) { if (fast) - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default/fast"); + { + reshadow = ok = !e_util_strcmp(reshadow_group, "e/comp/default/fast"); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default/fast"); + } if (!ok) - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default"); + { + reshadow = ok = !e_util_strcmp(reshadow_group, "e/comp/default"); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default"); + } } break; } + if (reshadow) return; edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->obj); if (cw->bd && cw->bd->client.e.state.video) edje_object_signal_emit(cw->shobj, "e,state,shadow,off", "e"); @@ -1789,17 +1812,22 @@ else edje_object_signal_emit(cw->shobj, "e,state,urgent,off", "e"); } - if (cw->visible) - edje_object_signal_emit(cw->shobj, "e,state,visible,on", "e"); - else - edje_object_signal_emit(cw->shobj, "e,state,visible,off", "e"); + if (!cw->visible) + { + edje_object_signal_emit(cw->shobj, "e,state,visible,off", "e"); + return; + } + edje_object_signal_emit(cw->shobj, "e,state,visible,on", "e"); + if (!cw->animating) { cw->c->animating++; } cw->animating = 1; _e_comp_win_render_queue(cw); + cw->pending_count++; + _e_comp_event_source_visibility(cw); } static void @@ -2212,7 +2240,11 @@ } } if (cw->real_obj && cw->obj) - evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_DEL, _e_comp_injected_win_del_cb, cw); + { + if (evas_object_layer_get(cw->obj) > E_COMP_CANVAS_LAYER_LAYOUT) + e_comp_override_del(cw->c); + evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_DEL, _e_comp_injected_win_del_cb, cw); + } if (cw->obj) { evas_object_del(cw->obj); @@ -3047,27 +3079,7 @@ ecore_timer_add(5.0, _e_comp_override_expire, c); } -/* here for completeness - static void - _e_comp_override_pop(E_Comp *c) - { - c->nocomp_override--; - if (c->nocomp_override <= 0) - { - c->nocomp_override = 0; - if (c->nocomp_want) _e_comp_cb_nocomp_begin(c); - } - } - */ - static void -_e_comp_override_push(E_Comp *c) -{ - c->nocomp_override++; - if ((c->nocomp_override > 0) && (c->nocomp)) _e_comp_cb_nocomp_end(c); -} - -static void _e_comp_fade_handle(E_Comp_Zone *cz, int out, double tim) { if (out == 1) @@ -3109,7 +3121,7 @@ c->saver = EINA_TRUE; EINA_LIST_FOREACH(c->zones, ll, cz) { - _e_comp_override_push(c); + e_comp_override_add(c); _e_comp_fade_handle(cz, 1, 3.0); edje_object_signal_emit(cz->base, "e,state,screensaver,on", "e"); edje_object_signal_emit(cz->over, "e,state,screensaver,on", "e"); @@ -3433,10 +3445,12 @@ } static void -_e_comp_injected_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_injected_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { E_Comp_Win *cw = data; + if (evas_object_layer_get(obj) > E_COMP_CANVAS_LAYER_LAYOUT) + e_comp_override_del(cw->c); cw->obj = NULL; if (cw->animating) cw->delete_me = 1; else _e_comp_win_del(cw); @@ -4070,6 +4084,7 @@ ecore_evas_free(c->ee); ecore_x_composite_unredirect_subwindows (c->man->root, ECORE_X_COMPOSITE_UPDATE_MANUAL); + if (c->block_win) ecore_x_window_free(c->block_win); ecore_x_composite_render_window_disable(c->win); if (c->man->num == 0) e_alert_composite_win(c->man->root, 0); if (c->render_animator) ecore_animator_del(c->render_animator); @@ -4153,7 +4168,7 @@ EINA_LIST_FOREACH(compositors, l, c) { - if (nocomp_push) _e_comp_override_push(c); + if (nocomp_push) e_comp_override_add(c); else _e_comp_override_timed_pop(c); EINA_LIST_FOREACH(c->zones, ll, cz) { @@ -4647,6 +4662,12 @@ return conf; } +EAPI const Eina_List * +e_comp_list(void) +{ + return compositors; +} + EAPI void e_comp_shadows_reset(void) { @@ -4662,24 +4683,8 @@ E_LIST_FOREACH(c->zones, e_comp_zone_update); EINA_INLIST_FOREACH(c->wins, cw) { - if ((cw->shobj) && (cw->obj)) - { - _e_comp_win_shadow_setup(cw); - - if (cw->visible) - { - edje_object_signal_emit(cw->shobj, "e,state,visible,on", "e"); - if (!cw->animating) - { - cw->c->animating++; - } - _e_comp_win_render_queue(cw); - cw->animating = 1; - - cw->pending_count++; - _e_comp_event_source_visibility(cw); - } - } + if ((!cw->shobj) || (!cw->obj)) continue; + _e_comp_win_shadow_setup(cw); } } } @@ -5013,13 +5018,17 @@ e_comp_canvas_layer_set(Evas_Object *obj, E_Comp_Canvas_Layer comp_layer, E_Layer layer, E_Comp_Canvas_Stack stack) { E_Comp_Win *cw; + E_Comp *c; + c = e_comp_util_evas_object_comp_get(obj); if (comp_layer == E_COMP_CANVAS_LAYER_LAYOUT) - cw = e_comp_object_inject(e_comp_util_evas_object_comp_get(obj), obj, evas_object_data_get(obj, "eobj"), layer); + cw = e_comp_object_inject(c, obj, evas_object_data_get(obj, "eobj"), layer); else { - cw = e_comp_object_add(e_comp_util_evas_object_comp_get(obj), obj, evas_object_data_get(obj, "eobj")); + cw = e_comp_object_add(c, obj, evas_object_data_get(obj, "eobj")); evas_object_layer_set(cw->shobj, comp_layer); + if (comp_layer > E_COMP_CANVAS_LAYER_LAYOUT) + e_comp_override_add(c); } if (stack == E_COMP_CANVAS_STACK_ABOVE) _e_comp_win_raise(cw); @@ -5053,3 +5062,59 @@ EINA_SAFETY_ON_TRUE_RETURN(_e_comp_ignore_find(win)); eina_hash_add(ignores, e_util_winid_str_get(win), (void*)1); } + + +EAPI void +e_comp_override_del(E_Comp *c) +{ + c->nocomp_override--; + if (c->nocomp_override <= 0) + { + c->nocomp_override = 0; + if (c->nocomp_want) _e_comp_cb_nocomp_begin(c); + } +} + +EAPI void +e_comp_override_add(E_Comp *c) +{ + c->nocomp_override++; + if ((c->nocomp_override > 0) && (c->nocomp)) _e_comp_cb_nocomp_end(c); +} + +EAPI void +e_comp_block_window_add(void) +{ + E_Comp *c; + Eina_List *l; + + EINA_LIST_FOREACH(compositors, l, c) + { + c->block_count++; + if (c->block_win) continue; + c->block_win = ecore_x_window_new(c->man->root, c->man->x, c->man->y, c->man->w, c->man->h); + INF("BLOCK WIN: %x", c->block_win); + ecore_x_window_background_color_set(c->block_win, 0, 0, 0); + e_comp_ignore_win_add(c->block_win); + ecore_x_window_configure(c->block_win, + ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING | ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE, + 0, 0, 0, 0, 0, ((E_Comp_Win*)c->wins)->win, ECORE_X_WINDOW_STACK_ABOVE); + ecore_x_window_show(c->block_win); + } +} + +EAPI void +e_comp_block_window_del(void) +{ + E_Comp *c; + Eina_List *l; + + EINA_LIST_FOREACH(compositors, l, c) + { + if (!c->block_count) continue; + c->block_count--; + if (c->block_count) continue; + if (c->block_win) ecore_x_window_free(c->block_win); + c->block_win = 0; + } +} Modified: trunk/e/src/bin/e_comp.h =================================================================== --- trunk/e/src/bin/e_comp.h 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/src/bin/e_comp.h 2013-02-18 13:43:55 UTC (rev 84062) @@ -76,7 +76,9 @@ double frametimes[122]; int frameskip; - int nocomp_override; + int nocomp_override; //number of times nocomp override has been requested + Ecore_X_Window block_win; + int block_count; //number of times block window has been requested Ecore_X_Window cm_selection; @@ -204,13 +206,21 @@ EINTERN int e_comp_shutdown(void); EINTERN Eina_Bool e_comp_manager_init(E_Manager *man); +EAPI const Eina_List *e_comp_list(void); + EAPI int e_comp_internal_save(void); EAPI E_Comp_Config *e_comp_config_get(void); EAPI void e_comp_shadows_reset(void); +EAPI void e_comp_block_window_add(void); +EAPI void e_comp_block_window_del(void); + EAPI void e_comp_render_update(E_Comp *c); EAPI void e_comp_zone_update(E_Comp_Zone *cz); +EAPI void e_comp_override_del(E_Comp *c); +EAPI void e_comp_override_add(E_Comp *c); + EAPI E_Comp_Win *e_comp_win_find_border_win(Ecore_X_Window win); EAPI E_Comp_Win *e_comp_win_find(Ecore_X_Window win); EAPI const Eina_List *e_comp_win_list_get(E_Comp *c); Modified: trunk/e/src/bin/e_desklock.c =================================================================== --- trunk/e/src/bin/e_desklock.c 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/src/bin/e_desklock.c 2013-02-18 13:43:55 UTC (rev 84062) @@ -308,6 +308,8 @@ return 0; } works: + //e_comp_block_window_add(); + E_LIST_FOREACH(e_comp_list(), e_comp_override_add); e_comp_ignore_win_add(edd->elock_wnd); if (e_config->desklock_language) e_intl_language_set(e_config->desklock_language); @@ -356,6 +358,8 @@ if ((!edd) && (!_e_custom_desklock_exe)) return; + E_LIST_FOREACH(e_comp_list(), e_comp_override_del); + //e_comp_block_window_del(); if (e_config->desklock_language) e_intl_language_set(e_config->language); Modified: trunk/e/src/bin/e_popup.c =================================================================== --- trunk/e/src/bin/e_popup.c 2013-02-18 13:43:52 UTC (rev 84061) +++ trunk/e/src/bin/e_popup.c 2013-02-18 13:43:55 UTC (rev 84062) @@ -193,7 +193,7 @@ E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE); if (!pop->visible) return; pop->visible = 0; - e_comp_win_hide(pop->cw); + if (pop->cw) e_comp_win_hide(pop->cw); if (!pop->autoclose) return; if (e_object_is_del(E_OBJECT(pop))) return; autoclose_popup = NULL; |
From: Enlightenment S. <no-...@en...> - 2013-02-19 09:14:56
|
Log: e_util_size_debug_set now displays delete events Author: discomfitor Date: 2013-02-19 01:14:46 -0800 (Tue, 19 Feb 2013) New Revision: 84088 Trac: http://trac.enlightenment.org/e/changeset/84088 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_utils.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-19 09:04:45 UTC (rev 84087) +++ trunk/e/ChangeLog 2013-02-19 09:14:46 UTC (rev 84088) @@ -1,3 +1,7 @@ +2013-02-19 Mike Blumenkrantz + + * e_util_size_debug_set now displays delete events + 2013-02-18 Mike Blumenkrantz * fixed disable of input methods in input method config dialog Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-19 09:04:45 UTC (rev 84087) +++ trunk/e/NEWS 2013-02-19 09:14:46 UTC (rev 84088) @@ -111,6 +111,7 @@ * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets * e_popup is now a wrapper for drawing objects onto the compositor canvas * compositor nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects + * e_util_size_debug_set now displays delete events Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_utils.c =================================================================== --- trunk/e/src/bin/e_utils.c 2013-02-19 09:04:45 UTC (rev 84087) +++ trunk/e/src/bin/e_utils.c 2013-02-19 09:14:46 UTC (rev 84088) @@ -1323,6 +1323,15 @@ } static void +_e_util_size_debug_del(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + int x, y, w, h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + fprintf(stderr, "DEL %s OBJ[%p]: (%d,%d) - %dx%d\n", evas_object_visible_get(obj) ? "VIS" : "HID", obj, x, y, w, h); +} + +static void _e_util_size_debug(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { int x, y, w, h; @@ -1344,6 +1353,8 @@ _e_util_size_debug, NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _e_util_size_debug, NULL); + evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, + _e_util_size_debug_del, NULL); } else { @@ -1355,6 +1366,8 @@ _e_util_size_debug, NULL); evas_object_event_callback_del_full(obj, EVAS_CALLBACK_HIDE, _e_util_size_debug, NULL); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, + _e_util_size_debug_del, NULL); } } |
From: Enlightenment S. <no-...@en...> - 2013-02-19 09:55:05
|
Log: add e_popup_object_remove Author: discomfitor Date: 2013-02-19 01:54:54 -0800 (Tue, 19 Feb 2013) New Revision: 84097 Trac: http://trac.enlightenment.org/e/changeset/84097 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_popup.c trunk/e/src/bin/e_popup.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-19 09:53:30 UTC (rev 84096) +++ trunk/e/ChangeLog 2013-02-19 09:54:54 UTC (rev 84097) @@ -11,6 +11,7 @@ * e_util_size_debug_set now also prints for object show/hide events * e_gadcon_unpopulate now correctly freezes the container while deleting gadgets * e_popup is now a wrapper for drawing objects onto the compositor canvas + * added functions for noting objects which are part of a popup * added e_layout functions for returning objects above or below a layout child * compositor nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-19 09:53:30 UTC (rev 84096) +++ trunk/e/NEWS 2013-02-19 09:54:54 UTC (rev 84097) @@ -29,6 +29,7 @@ * Added function for getting children of e_layout * added utility function for printing all objects above a given object * added e_layout functions for returning objects above or below a layout child + * added functions for noting objects which are part of a popup Config: * Added option for disabling icons in menus * Added option for disabling pointer warping when performing directional focus changes using winlist Modified: trunk/e/src/bin/e_popup.c =================================================================== --- trunk/e/src/bin/e_popup.c 2013-02-19 09:53:30 UTC (rev 84096) +++ trunk/e/src/bin/e_popup.c 2013-02-19 09:54:54 UTC (rev 84097) @@ -294,6 +294,15 @@ } EAPI void +e_popup_object_remove(E_Popup *pop, Evas_Object *obj) +{ + E_OBJECT_CHECK(pop); + E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE); + + pop->objects = eina_list_remove(pop->objects, obj); +} + +EAPI void e_popup_autoclose(E_Popup *pop, E_Popup_Key_Cb cb, const void *data) { E_OBJECT_CHECK(pop); Modified: trunk/e/src/bin/e_popup.h =================================================================== --- trunk/e/src/bin/e_popup.h 2013-02-19 09:53:30 UTC (rev 84096) +++ trunk/e/src/bin/e_popup.h 2013-02-19 09:54:54 UTC (rev 84097) @@ -47,6 +47,7 @@ EAPI void e_popup_layer_set(E_Popup *pop, E_Comp_Canvas_Layer comp_layer, E_Layer layer); EAPI void e_popup_name_set(E_Popup *pop, const char *name); EAPI void e_popup_object_add(E_Popup *pop, Evas_Object *obj); +EAPI void e_popup_object_remove(E_Popup *pop, Evas_Object *obj); EAPI void e_popup_autoclose(E_Popup *pop, E_Popup_Key_Cb cb, const void *data); #endif #endif |
From: Enlightenment S. <no-...@en...> - 2013-02-20 09:13:12
|
Log: e toolbar gadgets no longer crash when trying to display a popup Author: discomfitor Date: 2013-02-20 01:13:03 -0800 (Wed, 20 Feb 2013) New Revision: 84258 Trac: http://trac.enlightenment.org/e/changeset/84258 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_gadcon.c trunk/e/src/bin/e_toolbar.c Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-20 08:17:17 UTC (rev 84257) +++ trunk/e/ChangeLog 2013-02-20 09:13:03 UTC (rev 84258) @@ -1,3 +1,7 @@ +2013-02-20 Mike Blumenkrantz + + * toolbar gadgets no longer crash when trying to display a popup + 2013-02-19 Mike Blumenkrantz * e_util_size_debug_set now displays delete events Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-20 08:17:17 UTC (rev 84257) +++ trunk/e/NEWS 2013-02-20 09:13:03 UTC (rev 84258) @@ -183,3 +183,4 @@ * fixed bug where e_layout would ignore frozen state and crash * fixed disable of input methods in input method config dialog * fixed pointer warp when pointer was inside warp window but not directly over it + * toolbar gadgets no longer crash when trying to display a popup Modified: trunk/e/src/bin/e_gadcon.c =================================================================== --- trunk/e/src/bin/e_gadcon.c 2013-02-20 08:17:17 UTC (rev 84257) +++ trunk/e/src/bin/e_gadcon.c 2013-02-20 09:13:03 UTC (rev 84258) @@ -748,7 +748,9 @@ { E_OBJECT_CHECK_RETURN(gc, NULL); E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL); - return gc->zone; + if (gc->zone) return gc->zone; + if (!gc->toolbar) return NULL; + return gc->toolbar->fwin->border->zone; } EAPI void Modified: trunk/e/src/bin/e_toolbar.c =================================================================== --- trunk/e/src/bin/e_toolbar.c 2013-02-20 08:17:17 UTC (rev 84257) +++ trunk/e/src/bin/e_toolbar.c 2013-02-20 09:13:03 UTC (rev 84258) @@ -103,6 +103,7 @@ e_gadcon_toolbar_set(tbar->gadcon, tbar); e_gadcon_xdnd_window_set(tbar->gadcon, tbar->fwin->evas_win); e_gadcon_dnd_window_set(tbar->gadcon, tbar->fwin->evas_win); + e_gadcon_ecore_evas_set(tbar->gadcon, tbar->fwin->ecore_evas); e_gadcon_util_menu_attach_func_set(tbar->gadcon, _e_toolbar_menu_items_append, tbar); e_gadcon_populate(tbar->gadcon); |
From: Enlightenment S. <no-...@en...> - 2013-02-22 09:33:22
|
Log: e's compositor now obeys _NET_WM_WINDOW_OPACITY as a normal atom in e_border additionally: * actions are now available for setting/changing window opacity * window remembers can now remember window opacity Author: discomfitor Date: 2013-02-22 01:33:13 -0800 (Fri, 22 Feb 2013) New Revision: 84303 Trac: http://trac.enlightenment.org/e/changeset/84303 Modified: trunk/e/ChangeLog trunk/e/NEWS trunk/e/src/bin/e_border.c trunk/e/src/bin/e_border.h trunk/e/src/bin/e_comp.c trunk/e/src/bin/e_comp.h trunk/e/src/bin/e_int_border_remember.c trunk/e/src/bin/e_main.c trunk/e/src/bin/e_remember.c trunk/e/src/bin/e_remember.h Modified: trunk/e/ChangeLog =================================================================== --- trunk/e/ChangeLog 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/ChangeLog 2013-02-22 09:33:13 UTC (rev 84303) @@ -1,3 +1,7 @@ +2013-02-22 Mike Blumenkrantz + + * compositor now allows user changing/remembering of object opacity + 2013-02-20 Mike Blumenkrantz * toolbar gadgets no longer crash when trying to display a popup Modified: trunk/e/NEWS =================================================================== --- trunk/e/NEWS 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/NEWS 2013-02-22 09:33:13 UTC (rev 84303) @@ -113,6 +113,7 @@ * e_popup is now a wrapper for drawing objects onto the compositor canvas * compositor nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects * e_util_size_debug_set now displays delete events + * compositor now allows user changing/remembering of object opacity Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. Modified: trunk/e/src/bin/e_border.c =================================================================== --- trunk/e/src/bin/e_border.c 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_border.c 2013-02-22 09:33:13 UTC (rev 84303) @@ -71,11 +71,7 @@ static Eina_Bool _e_border_cb_window_focus_out(void *data, int ev_type, void *ev); -#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) -static Eina_Bool _e_border_cb_client_message(void *data, - int ev_type, - void *ev); -#endif +static Eina_Bool _e_border_cb_client_message(void *data, int ev_type, void *ev); static Eina_Bool _e_border_cb_window_state_request(void *data, int ev_type, void *ev); @@ -322,10 +318,8 @@ _e_border_cb_window_focus_in, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_FOCUS_OUT, _e_border_cb_window_focus_out, NULL); -#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_CLIENT_MESSAGE, _e_border_cb_client_message, NULL); -#endif E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_STATE_REQUEST, _e_border_cb_window_state_request, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST, @@ -634,6 +628,8 @@ { bd->client.netwm.fetch.state = 1; } + else if (atoms[i] == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY) + bd->client.netwm.fetch.opacity = 1; } /* other misc atoms */ for (i = 0; i < at_num; i++) @@ -5951,6 +5947,16 @@ bd->client.netwm.fetch.state = 1; bd->changed = 1; } + else if (e->atom == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY) + { + if (bd->client.netwm.opacity_changed) + bd->client.netwm.opacity_changed = 0; + else + { + bd->client.netwm.fetch.opacity = 1; + bd->changed = 1; + } + } #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) else if (e->atom == ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED) { @@ -6186,28 +6192,31 @@ return ECORE_CALLBACK_PASS_ON; } -#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) static Eina_Bool -_e_border_cb_client_message(void *data __UNUSED__, - int ev_type __UNUSED__, - void *ev) +_e_border_cb_client_message(void *data __UNUSED__, int ev_type __UNUSED__, void *ev) { E_Border *bd; - Ecore_X_Event_Client_Message *e; - char *profile = NULL; - - e = (Ecore_X_Event_Client_Message *)ev; + Ecore_X_Event_Client_Message *e = ev; + bd = e_border_find_by_client_window(e->win); if (!bd) return ECORE_CALLBACK_PASS_ON; - if (e->message_type == ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE) + if (e->message_type == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY) { + bd->client.netwm.fetch.opacity = 1; + bd->changed = 1; + } +#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) + else if (e->message_type == ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE) + { if (bd->client.e.state.profile.use) { + char *profile; profile = ecore_x_atom_name_get(e->data.l[1]); ecore_x_e_window_profile_change_request_send(bd->client.win, profile); bd->client.e.state.profile.wait_for_done = 1; + free(profile); } } else if (e->message_type == ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE_DONE) @@ -6217,29 +6226,25 @@ { E_Container *con = bd->zone->container; E_Desk *desk = NULL; + char *profile; profile = ecore_x_atom_name_get(e->data.l[1]); if (profile) - { - if (bd->client.e.state.profile.name) - eina_stringshare_del(bd->client.e.state.profile.name); - bd->client.e.state.profile.name = eina_stringshare_add(profile); - } + eina_stringshare_replace(&bd->client.e.state.profile.name, profile); bd->client.e.state.profile.wait_for_done = 0; desk = e_container_desk_window_profile_get(con, profile); if ((desk) && (bd->desk != desk)) e_border_desk_set(bd, desk); + free(profile); } } +#endif - free(profile); - return ECORE_CALLBACK_PASS_ON; } -#endif static Eina_Bool _e_border_cb_window_state_request(void *data __UNUSED__, int ev_type __UNUSED__, @@ -7726,6 +7731,13 @@ bd->client.netwm.fetch.icon_name = 0; rem_change = 1; } + if (bd->client.netwm.fetch.opacity) + { + unsigned int val; + + if (ecore_x_window_prop_card32_get(bd->client.win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY, &val, 1) > 0) + bd->client.netwm.opacity = (val >> 24); + } if (bd->client.netwm.fetch.icon) { int i; @@ -8460,6 +8472,11 @@ bd->changes.prop = 0; if (rem_change) e_remember_update(bd); + /* the below function updates the border's remember + * and relevant netwm atom + * ...eventually + */ + e_comp_win_opacity_set(bd->cw, bd->client.netwm.opacity); if (change_urgent) { Modified: trunk/e/src/bin/e_border.h =================================================================== --- trunk/e/src/bin/e_border.h 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_border.h 2013-02-22 09:33:13 UTC (rev 84303) @@ -192,6 +192,7 @@ int l, r, t, b; } client_inset; + E_Comp_Win *cw; Ecore_Evas *bg_ecore_evas; Evas *bg_evas; Ecore_X_Window bg_win; @@ -295,6 +296,8 @@ Ecore_X_Icon *icons; int num_icons; unsigned int user_time; + unsigned char opacity; + Eina_Bool opacity_changed : 1; // prevent fetching opacity next prop change struct { int left; @@ -365,6 +368,7 @@ unsigned char strut : 1; unsigned char type : 1; unsigned char state : 1; + unsigned char opacity : 1; /* No, fetch on new_client, shouldn't be changed after map. unsigned char pid : 1; */ Modified: trunk/e/src/bin/e_comp.c =================================================================== --- trunk/e/src/bin/e_comp.c 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_comp.c 2013-02-22 09:33:13 UTC (rev 84303) @@ -17,7 +17,6 @@ // 3. for unmapped windows - when window goes out of unmapped comp cache // make a miniature copy (1/4 width+height?) and set property on window // with pixmap id -// 8. obey transparent property // 9. shortcut lots of stuff to draw inside the compositor - shelf, // wallpaper, efm - hell even menus and anything else in e (this is what // e18 was mostly about) @@ -31,6 +30,7 @@ static Eina_Hash *borders = NULL; static Eina_Hash *damages = NULL; static Eina_Hash *ignores = NULL; +static Eina_List *actions = NULL; static E_Comp_Config *conf = NULL; static E_Config_DD *conf_edd = NULL; @@ -1484,6 +1484,7 @@ ecore_x_sync_counter_inc(cw->counter, 1); } if (cw->bd) eina_hash_del(borders, e_util_winid_str_get(cw->bd->client.win), cw); + cw->bd->cw = NULL; cw->bd = NULL; evas_object_data_del(cw->shobj, "border"); // hmm - lockup? @@ -2023,6 +2024,7 @@ eina_hash_add(borders, e_util_winid_str_get(cw->bd->client.win), cw); cw->dfn = e_object_delfn_add(E_OBJECT(cw->bd), _e_comp_object_del, cw); cw->shape = cw->bd->shape; + cw->bd->cw = cw; // setup on show // _e_comp_win_sync_setup(cw, cw->bd->client.win); } @@ -2194,6 +2196,7 @@ e_object_unref(E_OBJECT(cw->eobj)); cw->eobj = NULL; } + E_FN_DEL(ecore_timer_del, cw->opacity_set_timer); if (cw->animating) { cw->c->animating--; @@ -2219,6 +2222,7 @@ { eina_hash_del(borders, e_util_winid_str_get(cw->bd->client.win), cw); e_object_delfn_del(E_OBJECT(cw->bd), cw->dfn); + cw->bd->cw = NULL; cw->bd = NULL; } else if (cw->pop) @@ -2886,33 +2890,7 @@ return ECORE_CALLBACK_PASS_ON; } -static void -_e_comp_win_opacity_set(E_Comp_Win *cw) -{ - unsigned int val; - - if (ecore_x_window_prop_card32_get(cw->win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY, &val, 1) > 0) - { - cw->opacity = (val >> 24); - evas_object_color_set(cw->shobj, cw->opacity, cw->opacity, cw->opacity, cw->opacity); - } -} - static Eina_Bool -_e_comp_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Ecore_X_Event_Window_Property *ev = event; - - if (ev->atom == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY) - { - E_Comp_Win *cw = _e_comp_win_find(ev->win); - if (!cw) return ECORE_CALLBACK_PASS_ON; - _e_comp_win_opacity_set(cw); - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool _e_comp_message(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) { Ecore_X_Event_Client_Message *ev = event; @@ -2920,14 +2898,6 @@ int version, w = 0, h = 0; Eina_Bool force = 0; - if (ev->message_type == ECORE_X_ATOM_NET_WM_WINDOW_OPACITY) - { - cw = _e_comp_win_find(ev->win); - if (!cw) return ECORE_CALLBACK_PASS_ON; - _e_comp_win_opacity_set(cw); - return ECORE_CALLBACK_PASS_ON; - } - if ((ev->message_type != ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE) || (ev->format != 32)) return ECORE_CALLBACK_PASS_ON; version = ev->data.l[1]; @@ -4515,6 +4485,77 @@ e_configure_option_category_icon_set(_("composite"), "preferences-composite"); } +static Eina_Bool +_e_comp_opacity_set_timer_cb(E_Comp_Win *cw) +{ + unsigned int opacity; + + cw->bd->client.netwm.opacity = cw->opacity; + e_remember_update(cw->bd); + opacity = (cw->opacity << 24); + ecore_x_window_prop_card32_set(cw->bd->client.win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY, &opacity, 1); + cw->bd->client.netwm.opacity_changed = 1; + cw->opacity_set_timer = NULL; + return EINA_FALSE; +} + +static E_Comp_Win * +_e_comp_act_opacity_win_finder(E_Object *obj) +{ + E_Border *bd; + + switch (obj->type) + { + case E_WIN_TYPE: + bd = ((E_Win*)obj)->border; + if (!bd) return NULL; + return _e_comp_border_client_find(bd->client.win); + case E_BORDER_TYPE: + bd = (E_Border*)obj; + return _e_comp_border_client_find(bd->client.win); + case E_POPUP_TYPE: + return evas_object_data_get(((E_Popup*)obj)->content, "comp_win"); + default: + case E_ZONE_TYPE: + case E_CONTAINER_TYPE: + case E_MANAGER_TYPE: + case E_MENU_TYPE: + bd = e_border_focused_get(); + if (bd) return _e_comp_border_client_find(bd->client.win); + } + return NULL; +} + +static void +_e_comp_act_opacity_change_go(E_Object *obj, const char *params) +{ + int opacity; + E_Comp_Win *cw; + + if ((!params) || (!params[0])) return; + cw = _e_comp_act_opacity_win_finder(obj); + if (!cw) return; + opacity = atoi(params); + opacity = E_CLAMP(opacity, -255, 255); + opacity += cw->opacity; + opacity = MAX(0, opacity); + e_comp_win_opacity_set(cw, opacity); +} + +static void +_e_comp_act_opacity_set_go(E_Object * obj __UNUSED__, const char *params) +{ + int opacity; + E_Comp_Win *cw; + + if ((!params) || (!params[0])) return; + cw = _e_comp_act_opacity_win_finder(obj); + if (!cw) return; + opacity = atoi(params); + opacity = E_CLAMP(opacity, 0, 255); + e_comp_win_opacity_set(cw, opacity); +} + ////////////////////////////////////////////////////////////////////////// EINTERN Eina_Bool @@ -4555,7 +4596,6 @@ E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_REPARENT, _e_comp_reparent, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_CONFIGURE, _e_comp_configure, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_STACK, _e_comp_stack, NULL); - E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_PROPERTY, _e_comp_property, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_CLIENT_MESSAGE, _e_comp_message, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_WINDOW_SHAPE, _e_comp_shape, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_DAMAGE_NOTIFY, _e_comp_damage, NULL); @@ -4609,6 +4649,23 @@ gl_avail = EINA_TRUE; } + { + E_Action *act; + + act = e_action_add("opacity_change"); + act->func.go = _e_comp_act_opacity_change_go; + e_action_predef_name_set(N_("Compositor"), + N_("Change current window opacity"), "opacity_change", + NULL, "syntax: +/- the amount to change opacity by (>0 for more opaque)", 1); + actions = eina_list_append(actions, act); + act = e_action_add("opacity_set"); + act->func.go = _e_comp_act_opacity_set_go; + e_action_predef_name_set(N_("Compositor"), + N_("Set current window opacity"), "opacity_set", + "255", "syntax: number between 0-255 to set for transparent-opaque", 1); + actions = eina_list_append(actions, act); + } + #ifdef HAVE_WAYLAND_CLIENTS if (!e_comp_wl_init()) EINA_LOG_ERR("Failed to initialize Wayland Client Support !!"); @@ -4642,6 +4699,7 @@ E_FN_DEL(ecore_timer_del, action_timeout); E_FREE_LIST(compositors, _e_comp_del); E_FREE_LIST(handlers, ecore_event_handler_del); + E_FREE_LIST(actions, e_object_del); #ifdef HAVE_WAYLAND_CLIENTS e_comp_wl_shutdown(); @@ -5079,6 +5137,20 @@ eina_hash_add(ignores, e_util_winid_str_get(win), (void*)1); } +EAPI void +e_comp_win_opacity_set(E_Comp_Win *cw, unsigned int opacity) +{ + EINA_SAFETY_ON_NULL_RETURN(cw); + if (opacity == cw->opacity) return; + opacity = MIN(opacity, 255); + cw->opacity = opacity; + if (cw->bd) + { + if (cw->opacity_set_timer) ecore_timer_reset(cw->opacity_set_timer); + else cw->opacity_set_timer = ecore_timer_add(5.0, (Ecore_Task_Cb)_e_comp_opacity_set_timer_cb, cw); + } + evas_object_color_set(cw->shobj, cw->opacity, cw->opacity, cw->opacity, cw->opacity); +} EAPI void e_comp_override_del(E_Comp *c) Modified: trunk/e/src/bin/e_comp.h =================================================================== --- trunk/e/src/bin/e_comp.h 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_comp.h 2013-02-22 09:33:13 UTC (rev 84303) @@ -145,6 +145,7 @@ int pending_count; // pending event count unsigned int opacity; // opacity set with _NET_WM_WINDOW_OPACITY + Ecore_Timer *opacity_set_timer; // timer for setting opacity in ecore-x to avoid roundtrips char *title, *name, *clas, *role; // fetched for override-redirect windowa Ecore_X_Window_Type primary_type; // fetched for override-redirect windowa @@ -227,8 +228,8 @@ EAPI const Eina_List *e_comp_win_list_get(E_Comp *c); EAPI Evas_Object *e_comp_win_image_mirror_add(E_Comp_Win *cw); EAPI void e_comp_win_hidden_set(E_Comp_Win *cw, Eina_Bool hidden); +EAPI void e_comp_win_opacity_set(E_Comp_Win *cw, unsigned int opacity); - EAPI E_Comp *e_comp_get(void *o); EAPI Ecore_X_Window e_comp_top_window_at_xy_get(E_Comp *c, Evas_Coord x, Evas_Coord y, Ecore_X_Window *ignore, unsigned int ignore_num); Modified: trunk/e/src/bin/e_int_border_remember.c =================================================================== --- trunk/e/src/bin/e_int_border_remember.c 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_int_border_remember.c 2013-02-22 09:33:13 UTC (rev 84303) @@ -18,7 +18,7 @@ E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | \ E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | \ E_REMEMBER_APPLY_SKIP_TASKBAR | E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF | \ - E_REMEMBER_APPLY_OFFER_RESISTANCE + E_REMEMBER_APPLY_OFFER_RESISTANCE | E_REMEMBER_APPLY_OPACITY struct _E_Config_Dialog_Data { E_Border *border; @@ -61,6 +61,7 @@ int set_focus_on_start; int keep_settings; int offer_resistance; + int apply_opacity; } remember; int applied; @@ -275,6 +276,8 @@ cfdata->remember.set_focus_on_start = 1; if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE) cfdata->remember.offer_resistance = 1; + if (rem->apply & E_REMEMBER_APPLY_OPACITY) + cfdata->remember.apply_opacity = 1; } if (!rem) cfdata->mode = MODE_NOTHING; @@ -604,6 +607,8 @@ rem->apply |= E_REMEMBER_SET_FOCUS_ON_START; if (cfdata->remember.offer_resistance) rem->apply |= E_REMEMBER_APPLY_OFFER_RESISTANCE; + if (cfdata->remember.apply_opacity) + rem->apply |= E_REMEMBER_APPLY_OPACITY; if (bd && (!rem->apply && !rem->prop.desktop_file)) { @@ -733,6 +738,7 @@ e_widget_toolbook_page_append(o, NULL, _("Identifiers"), of, 1, 1, 1, 1, 0.5, 0.0); of = e_widget_table_add(evas, 0); + e_widget_table_freeze(of); ob = e_widget_check_add(evas, _("Position"), &(cfdata->remember.apply_pos)); e_widget_table_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0); @@ -778,12 +784,15 @@ ob = e_widget_check_add(evas, _("Offer Resistance"), &(cfdata->remember.offer_resistance)); e_widget_table_object_append(of, ob, 1, 7, 1, 1, 1, 0, 1, 0); + ob = e_widget_check_add(evas, _("Opacity"), + &(cfdata->remember.apply_opacity)); + e_widget_table_object_append(of, ob, 0, 7, 1, 1, 1, 0, 1, 0); oc = e_widget_check_add(evas, _("Application file or name (.desktop)"), &(cfdata->remember.apply_desktop_file)); - e_widget_table_object_append(of, oc, 0, 7, 1, 1, 1, 0, 1, 0); + e_widget_table_object_append(of, oc, 0, 8, 1, 1, 1, 0, 1, 0); ob = e_widget_entry_add(evas, &cfdata->desktop, NULL, NULL, NULL); e_widget_check_widget_disable_on_unchecked_add(oc, ob); - e_widget_table_object_append(of, ob, 0, 8, 2, 1, 1, 0, 1, 0); + e_widget_table_object_append(of, ob, 0, 9, 2, 1, 1, 0, 1, 0); e_widget_toolbook_page_append(o, NULL, _("Properties"), of, 1, 1, 1, 1, 0.5, 0.0); of = e_widget_table_add(evas, 0); @@ -805,6 +814,7 @@ &(cfdata->remember.apply_run)); e_widget_table_object_append(of, ob, 0, 3, 1, 1, 1, 0, 1, 0); } + e_widget_table_thaw(of); e_widget_toolbook_page_append(o, NULL, _("Options"), of, 1, 1, 1, 1, 0.5, 0.0); e_widget_toolbook_page_show(o, 0); Modified: trunk/e/src/bin/e_main.c =================================================================== --- trunk/e/src/bin/e_main.c 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_main.c 2013-02-22 09:33:13 UTC (rev 84303) @@ -674,6 +674,17 @@ e_screensaver_preinit(); if (e_config->show_splash) + e_init_status_set(_("Setup Actions")); + TS("E_Actions Init"); + if (!e_actions_init()) + { + e_error_message_show(_("Enlightenment cannot set up its actions system.\n")); + _e_main_shutdown(-1); + } + TS("E_Actions Init Done"); + _e_main_shutdown_push(e_actions_shutdown); + + if (e_config->show_splash) e_init_status_set(_("Setup Screens")); TS("Screens Init"); if (!_e_main_screens_init()) @@ -788,17 +799,6 @@ _e_main_shutdown_push(e_sys_shutdown); if (e_config->show_splash) - e_init_status_set(_("Setup Actions")); - TS("E_Actions Init"); - if (!e_actions_init()) - { - e_error_message_show(_("Enlightenment cannot set up its actions system.\n")); - _e_main_shutdown(-1); - } - TS("E_Actions Init Done"); - _e_main_shutdown_push(e_actions_shutdown); - - if (e_config->show_splash) e_init_status_set(_("Setup Execution System")); TS("E_Exec Init"); if (!e_exec_init()) Modified: trunk/e/src/bin/e_remember.c =================================================================== --- trunk/e/src/bin/e_remember.c 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_remember.c 2013-02-22 09:33:13 UTC (rev 84303) @@ -117,7 +117,8 @@ E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | E_REMEMBER_APPLY_SKIP_TASKBAR | - E_REMEMBER_APPLY_OFFER_RESISTANCE); + E_REMEMBER_APPLY_OFFER_RESISTANCE | + E_REMEMBER_APPLY_OPACITY); _e_remember_update(bd, rem); remembers->list = eina_list_append(remembers->list, rem); @@ -453,6 +454,8 @@ rem->prop.fullscreen = bd->fullscreen; if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE) rem->prop.offer_resistance = bd->offer_resistance; + if (rem->apply & E_REMEMBER_APPLY_OPACITY) + rem->prop.opacity = bd->client.netwm.opacity; rem->no_reopen = bd->internal_no_reopen; { E_Event_Remember_Update *ev; @@ -899,6 +902,8 @@ bd->offer_resistance = rem->prop.offer_resistance; if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START) bd->want_focus = 1; + if (rem->apply & E_REMEMBER_APPLY_OPACITY) + bd->client.netwm.opacity = rem->prop.opacity; if (temporary) _e_remember_free(rem); @@ -972,6 +977,7 @@ E_CONFIG_VAL(D, T, prop.icon_preference, UCHAR); E_CONFIG_VAL(D, T, prop.desktop_file, STR); E_CONFIG_VAL(D, T, prop.offer_resistance, UCHAR); + E_CONFIG_VAL(D, T, prop.opacity, UCHAR); #undef T #undef D e_remember_list_edd = E_CONFIG_DD_NEW("E_Remember_List", E_Remember_List); Modified: trunk/e/src/bin/e_remember.h =================================================================== --- trunk/e/src/bin/e_remember.h 2013-02-22 09:33:11 UTC (rev 84302) +++ trunk/e/src/bin/e_remember.h 2013-02-22 09:33:13 UTC (rev 84303) @@ -32,6 +32,7 @@ #define E_REMEMBER_SET_FOCUS_ON_START (1 << 14) #define E_REMEMBER_APPLY_FULLSCREEN (1 << 15) #define E_REMEMBER_APPLY_OFFER_RESISTANCE (1 << 16) +#define E_REMEMBER_APPLY_OPACITY (1 << 17) #define E_REMEMBER_INTERNAL_DIALOGS (1 << 0) #define E_REMEMBER_INTERNAL_FM_WINS (1 << 1) @@ -104,6 +105,7 @@ int head; const char *command; const char *desktop_file; + unsigned char opacity; } prop; }; |