2004-11-24 19:37:45 -08:00
|
|
|
#include "e.h"
|
|
|
|
|
2004-12-23 07:31:47 -08:00
|
|
|
typedef struct _Main_Data Main_Data;
|
2004-11-24 19:37:45 -08:00
|
|
|
|
2004-12-23 07:31:47 -08:00
|
|
|
struct _Main_Data
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
|
|
|
E_Menu *menu;
|
2004-12-23 07:31:47 -08:00
|
|
|
E_Menu *apps;
|
2006-08-20 21:35:52 -07:00
|
|
|
E_Menu *all_apps;
|
2005-01-12 00:45:28 -08:00
|
|
|
E_Menu *desktops;
|
|
|
|
E_Menu *clients;
|
2008-01-10 23:33:57 -08:00
|
|
|
E_Menu *enlightenment;
|
2005-06-09 15:24:36 -07:00
|
|
|
E_Menu *config;
|
2005-06-19 05:35:05 -07:00
|
|
|
E_Menu *lost_clients;
|
2004-11-24 19:37:45 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
2012-10-11 06:23:14 -07:00
|
|
|
static void _e_int_menus_main_del_hook(void *obj);
|
|
|
|
static void _e_int_menus_main_about(void *data, E_Menu *m, E_Menu_Item *mi);
|
2007-08-12 02:57:24 -07:00
|
|
|
//static void _e_int_menus_fwin_favorites_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
2012-10-11 06:23:14 -07:00
|
|
|
static void _e_int_menus_apps_scan(E_Menu *m, Efreet_Menu *menu);
|
|
|
|
static void _e_int_menus_apps_start(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_apps_free_hook2(void *obj);
|
|
|
|
static void _e_int_menus_apps_run(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_apps_drag(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_config_pre_cb(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_config_free_hook(void *obj);
|
|
|
|
static void _e_int_menus_clients_pre_cb(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_clients_item_create(E_Border *bd, E_Menu *m);
|
|
|
|
static void _e_int_menus_clients_free_hook(void *obj);
|
|
|
|
static void _e_int_menus_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_clients_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_clients_cleanup_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static int _e_int_menus_clients_group_desk_cb(const void *d1, const void *d2);
|
|
|
|
static int _e_int_menus_clients_group_class_cb(const void *d1, const void *d2);
|
|
|
|
static int _e_int_menus_clients_sort_alpha_cb(const void *d1, const void *d2);
|
|
|
|
static int _e_int_menus_clients_sort_z_order_cb(const void *d1, const void *d2);
|
|
|
|
static void _e_int_menus_clients_add_by_class(Eina_List *borders, E_Menu *m);
|
|
|
|
static void _e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Eina_List *borders, E_Menu *m);
|
|
|
|
static void _e_int_menus_clients_add_by_none(Eina_List *borders, E_Menu *m);
|
|
|
|
static void _e_int_menus_clients_menu_add_iconified(Eina_List *borders, E_Menu *m);
|
|
|
|
static const char *_e_int_menus_clients_title_abbrv(const char *title);
|
|
|
|
static void _e_int_menus_virtuals_pre_cb(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_virtuals_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_virtuals_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_themes_about(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_lost_clients_pre_cb(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_lost_clients_free_hook(void *obj);
|
|
|
|
static void _e_int_menus_lost_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_augmentation_add(E_Menu *m, Eina_List *augmentation);
|
|
|
|
static void _e_int_menus_augmentation_del(E_Menu *m, Eina_List *augmentation);
|
|
|
|
static void _e_int_menus_shelves_pre_cb(void *data, E_Menu *m);
|
|
|
|
static void _e_int_menus_shelves_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_shelves_add_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_shelves_del_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_config_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_main_showhide(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_desktops_free_hook(void *obj);
|
|
|
|
static void _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void _e_int_menus_item_label_set(Efreet_Menu *entry, E_Menu_Item *mi);
|
2012-09-20 01:57:36 -07:00
|
|
|
static Efreet_Menu *_e_int_menus_apps_thread_new(E_Menu *m, const char *dir);
|
2012-11-30 03:50:21 -08:00
|
|
|
static Eina_Bool _e_int_menus_efreet_desktop_cache_update(void *d, int type, void *e);
|
2010-08-18 11:15:31 -07:00
|
|
|
//static void _e_int_menus_apps_drag_finished(E_Drag *drag, int dropped __UNUSED__);
|
|
|
|
|
2005-08-22 07:51:36 -07:00
|
|
|
/* local subsystem globals */
|
2008-12-17 07:33:43 -08:00
|
|
|
static Eina_Hash *_e_int_menus_augmentation = NULL;
|
2010-02-27 09:04:55 -08:00
|
|
|
static Eina_List *_e_int_menus_augmentation_disabled = NULL;
|
2012-09-19 03:15:03 -07:00
|
|
|
static Eina_List *_e_int_menus_app_threads = NULL;
|
|
|
|
static Eina_Hash *_e_int_menus_app_menus = NULL;
|
|
|
|
static Eina_Hash *_e_int_menus_app_menus_waiting = NULL;
|
|
|
|
static Efreet_Menu *_e_int_menus_app_menu_default = NULL;
|
|
|
|
static E_Menu *_e_int_menus_app_menu_default_waiting = NULL;
|
|
|
|
static Ecore_Timer *_e_int_menus_app_cleaner = NULL;
|
2012-11-30 03:50:21 -08:00
|
|
|
static Eina_List *handlers = NULL;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
static Eina_List *
|
|
|
|
_e_int_menus_augmentation_find(const char *key)
|
|
|
|
{
|
2010-02-27 09:04:55 -08:00
|
|
|
Eina_List *l;
|
|
|
|
char *data;
|
|
|
|
|
2010-02-27 14:51:19 -08:00
|
|
|
if ((!_e_int_menus_augmentation) || (!key)) return NULL;
|
2010-02-27 09:04:55 -08:00
|
|
|
|
|
|
|
EINA_LIST_FOREACH(_e_int_menus_augmentation_disabled, l, data)
|
|
|
|
if (!strcmp(data, key)) return NULL;
|
2009-04-18 22:18:01 -07:00
|
|
|
return eina_hash_find(_e_int_menus_augmentation, key);
|
|
|
|
}
|
|
|
|
|
2012-10-26 01:33:02 -07:00
|
|
|
#ifdef ISCOMFITOR
|
|
|
|
static void
|
|
|
|
_TEST_ADD(void *data, E_Dialog *dia __UNUSED__)
|
|
|
|
{
|
|
|
|
char buf[4096];
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf), "ITEM %d", e_widget_ilist_count(data) + 1);
|
|
|
|
e_widget_ilist_append(data, NULL, buf, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_TEST_DEL(void *data, E_Dialog *dia __UNUSED__)
|
|
|
|
{
|
|
|
|
e_widget_ilist_remove_num(data, e_widget_ilist_selected_get(data));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_TEST(void *d __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
|
|
|
{
|
|
|
|
E_Dialog *dia;
|
|
|
|
Evas_Object *o_list;
|
|
|
|
Evas *e;
|
|
|
|
|
|
|
|
dia = e_dialog_normal_win_new(m->zone->container, "E", "_widget_playground_dialog");
|
|
|
|
e = e_win_evas_get(dia->win);
|
|
|
|
o_list = e_widget_ilist_add(e, 32, 32, NULL);
|
|
|
|
e_dialog_button_add(dia, "Add", NULL, _TEST_ADD, o_list);
|
|
|
|
e_dialog_button_add(dia, "Del", NULL, _TEST_DEL, o_list);
|
|
|
|
e_dialog_content_set(dia, o_list, 100, 300);
|
|
|
|
e_dialog_show(dia);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
/* externally accessible functions */
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2004-12-23 07:31:47 -08:00
|
|
|
e_int_menus_main_new(void)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
|
|
|
E_Menu *m, *subm;
|
|
|
|
E_Menu_Item *mi;
|
2004-12-23 07:31:47 -08:00
|
|
|
Main_Data *dat;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL;
|
2008-11-29 10:47:29 -08:00
|
|
|
int separator = 0;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2004-12-23 07:31:47 -08:00
|
|
|
dat = calloc(1, sizeof(Main_Data));
|
2004-11-24 19:37:45 -08:00
|
|
|
m = e_menu_new();
|
2006-08-09 08:24:34 -07:00
|
|
|
e_menu_title_set(m, _("Main"));
|
2004-11-24 19:37:45 -08:00
|
|
|
dat->menu = m;
|
2008-12-17 07:33:43 -08:00
|
|
|
e_object_data_set(E_OBJECT(m), dat);
|
2005-01-12 01:22:44 -08:00
|
|
|
e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_main_del_hook);
|
2007-04-22 08:58:58 -07:00
|
|
|
|
2006-08-30 06:37:35 -07:00
|
|
|
e_menu_category_set(m, "main");
|
2006-11-07 14:46:24 -08:00
|
|
|
|
2012-10-26 01:33:02 -07:00
|
|
|
#ifdef ISCOMFITOR
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, "TEST");
|
|
|
|
e_menu_item_callback_set(mi, _TEST, NULL);
|
|
|
|
#endif
|
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/0");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2008-12-17 07:33:43 -08:00
|
|
|
if (e_config->menu_favorites_show)
|
2007-04-22 08:58:58 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
subm = e_int_menus_favorite_apps_new();
|
|
|
|
if (subm)
|
|
|
|
{
|
|
|
|
dat->apps = subm;
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Favorite Applications"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "user-bookmarks");
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
|
|
|
}
|
2007-05-12 15:40:03 -07:00
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
if (e_config->menu_apps_show)
|
2007-05-12 15:40:03 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
subm = e_int_menus_all_apps_new();
|
|
|
|
dat->all_apps = subm;
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Applications"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-applications");
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2007-04-22 08:58:58 -07:00
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/1");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2006-01-10 20:23:40 -08:00
|
|
|
|
2004-12-23 07:31:47 -08:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2005-12-27 09:16:58 -08:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/2");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2005-01-03 01:34:24 -08:00
|
|
|
subm = e_int_menus_desktops_new();
|
2005-01-12 00:45:28 -08:00
|
|
|
dat->desktops = subm;
|
2005-01-03 01:34:24 -08:00
|
|
|
mi = e_menu_item_new(m);
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_item_label_set(mi, _("Desktop"));
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
2005-01-03 01:34:24 -08:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2004-12-22 02:41:03 -08:00
|
|
|
subm = e_int_menus_clients_new();
|
2005-01-12 00:45:28 -08:00
|
|
|
dat->clients = subm;
|
2004-12-22 02:41:03 -08:00
|
|
|
mi = e_menu_item_new(m);
|
2005-04-11 13:25:52 -07:00
|
|
|
e_menu_item_label_set(mi, _("Windows"));
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-system-windows");
|
2004-12-22 02:41:03 -08:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2010-05-25 11:00:36 -07:00
|
|
|
e_object_data_set(E_OBJECT(subm), dat);
|
2009-03-23 06:04:02 -07:00
|
|
|
|
2010-05-25 11:22:48 -07:00
|
|
|
#if 0 // lost windows already handled inside "Windows" from main menu.
|
2005-06-19 05:35:05 -07:00
|
|
|
subm = e_int_menus_lost_clients_new();
|
2012-06-20 23:19:43 -07:00
|
|
|
e_object_data_set(E_OBJECT(subm), dat);
|
2005-06-19 05:35:05 -07:00
|
|
|
dat->lost_clients = subm;
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Lost Windows"));
|
2009-03-15 10:41:46 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-windows-lost");
|
2005-06-19 05:35:05 -07:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2010-05-25 11:22:48 -07:00
|
|
|
#endif
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/3");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2006-02-01 22:06:21 -08:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/4");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2006-10-19 07:35:13 -07:00
|
|
|
subm = e_menu_new();
|
2008-01-10 23:33:57 -08:00
|
|
|
dat->enlightenment = subm;
|
2012-06-20 23:19:43 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("enlightenment/0");
|
|
|
|
if (l) _e_int_menus_augmentation_add(subm, l);
|
2012-06-20 23:19:43 -07:00
|
|
|
|
2004-12-23 07:31:47 -08:00
|
|
|
mi = e_menu_item_new(m);
|
2006-10-19 07:35:13 -07:00
|
|
|
e_menu_item_label_set(mi, _("Enlightenment"));
|
2009-03-15 10:41:46 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "enlightenment");
|
2006-10-19 07:35:13 -07:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(subm);
|
|
|
|
e_menu_item_label_set(mi, _("About"));
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "help-about");
|
2004-12-23 07:31:47 -08:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_main_about, NULL);
|
2005-06-05 08:02:43 -07:00
|
|
|
|
2006-10-19 07:35:13 -07:00
|
|
|
mi = e_menu_item_new(subm);
|
2012-11-19 17:41:33 -08:00
|
|
|
e_menu_item_label_set(mi, _("About Theme"));
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-theme");
|
2006-02-01 22:06:21 -08:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_themes_about, NULL);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("enlightenment/1");
|
|
|
|
if (l) _e_int_menus_augmentation_add(subm, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2006-10-19 07:35:13 -07:00
|
|
|
mi = e_menu_item_new(subm);
|
2004-12-23 07:31:47 -08:00
|
|
|
e_menu_item_separator_set(mi, 1);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("enlightenment/2");
|
|
|
|
if (l) _e_int_menus_augmentation_add(subm, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2006-10-18 05:17:29 -07:00
|
|
|
mi = e_menu_item_new(subm);
|
2006-10-19 07:35:13 -07:00
|
|
|
e_menu_item_label_set(mi, _("Restart"));
|
2009-03-06 14:18:15 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "system-restart");
|
2006-10-18 05:17:29 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_main_restart, NULL);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(subm);
|
2006-10-19 07:35:13 -07:00
|
|
|
e_menu_item_label_set(mi, _("Exit"));
|
2009-03-06 14:18:15 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "application-exit");
|
2006-10-18 05:17:29 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_main_exit, NULL);
|
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("enlightenment/3");
|
|
|
|
if (l) _e_int_menus_augmentation_add(subm, l);
|
2012-06-20 23:19:43 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/5");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2006-10-18 05:17:29 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/6");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2006-10-19 07:35:13 -07:00
|
|
|
subm = e_int_menus_config_new();
|
|
|
|
dat->config = subm;
|
|
|
|
mi = e_menu_item_new(m);
|
2008-11-22 00:42:54 -08:00
|
|
|
e_menu_item_label_set(mi, _("Settings"));
|
2012-08-03 11:17:20 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_config_cb, NULL);
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-system");
|
2006-10-19 07:35:13 -07:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = _e_int_menus_augmentation_find("main/7");
|
2007-08-02 22:29:40 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = eina_hash_find(_e_int_menus_augmentation, "main/8");
|
2012-06-20 23:19:43 -07:00
|
|
|
if (l)
|
2008-11-29 10:47:29 -08:00
|
|
|
{
|
|
|
|
separator = 1;
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
_e_int_menus_augmentation_add(m, l);
|
|
|
|
}
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2011-08-01 21:53:44 -07:00
|
|
|
l = eina_hash_find(_e_int_menus_augmentation, "main/9");
|
2012-06-20 23:19:43 -07:00
|
|
|
if (l)
|
2008-11-29 10:47:29 -08:00
|
|
|
{
|
2012-06-20 23:19:43 -07:00
|
|
|
if (!separator)
|
2008-11-29 10:47:29 -08:00
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
|
|
|
_e_int_menus_augmentation_add(m, l);
|
|
|
|
}
|
2007-08-01 05:37:01 -07:00
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2006-03-02 04:03:48 -08:00
|
|
|
e_int_menus_apps_new(const char *dir)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
|
|
|
E_Menu *m;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
m = e_menu_new();
|
2012-10-11 06:23:14 -07:00
|
|
|
if (dir) e_object_data_set(E_OBJECT(m), (void *)eina_stringshare_add(dir));
|
2004-11-24 19:37:45 -08:00
|
|
|
e_menu_pre_activate_callback_set(m, _e_int_menus_apps_start, NULL);
|
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2005-01-03 01:34:24 -08:00
|
|
|
e_int_menus_desktops_new(void)
|
|
|
|
{
|
2006-10-15 18:58:06 -07:00
|
|
|
E_Menu *m, *subm;
|
|
|
|
E_Menu_Item *mi;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-01-03 01:34:24 -08:00
|
|
|
m = e_menu_new();
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
subm = e_menu_new();
|
2012-10-05 02:01:45 -07:00
|
|
|
e_menu_category_set(m, "desktop");
|
2006-10-15 18:58:06 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Virtual"));
|
2009-03-06 11:17:12 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_pre_activate_callback_set(subm, _e_int_menus_virtuals_pre_cb, NULL);
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
|
|
|
|
2006-10-16 20:10:27 -07:00
|
|
|
subm = e_menu_new();
|
2006-10-15 18:58:06 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Shelves"));
|
2009-03-08 16:09:48 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf");
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_pre_activate_callback_set(subm, _e_int_menus_shelves_pre_cb, NULL);
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Show/Hide All Windows"));
|
2009-03-08 16:09:48 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-system-windows");
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_main_showhide, NULL);
|
2006-10-16 20:10:27 -07:00
|
|
|
|
2009-03-23 03:19:13 -07:00
|
|
|
e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_desktops_free_hook);
|
2005-01-03 01:34:24 -08:00
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2005-01-12 01:22:44 -08:00
|
|
|
e_int_menus_favorite_apps_new(void)
|
2004-12-23 07:31:47 -08:00
|
|
|
{
|
2007-04-22 08:58:58 -07:00
|
|
|
E_Menu *m = NULL;
|
2008-03-25 09:48:14 -07:00
|
|
|
char buf[PATH_MAX];
|
2007-04-22 08:58:58 -07:00
|
|
|
|
2009-04-13 07:56:38 -07:00
|
|
|
e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
|
2008-03-25 09:48:14 -07:00
|
|
|
if (ecore_file_exists(buf)) m = e_int_menus_apps_new(buf);
|
2012-11-15 07:01:19 -08:00
|
|
|
if (m) _e_int_menus_apps_start(NULL, m);
|
2006-09-22 12:55:11 -07:00
|
|
|
return m;
|
2006-08-20 21:35:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI E_Menu *
|
|
|
|
e_int_menus_all_apps_new(void)
|
|
|
|
{
|
|
|
|
E_Menu *m;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-03-24 11:45:36 -07:00
|
|
|
m = e_int_menus_apps_new(NULL);
|
2006-09-22 12:55:11 -07:00
|
|
|
return m;
|
2004-12-23 07:31:47 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2005-08-23 03:26:44 -07:00
|
|
|
e_int_menus_config_new(void)
|
2005-06-09 15:24:36 -07:00
|
|
|
{
|
|
|
|
E_Menu *m;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-08-23 03:26:44 -07:00
|
|
|
m = e_menu_new();
|
|
|
|
e_menu_pre_activate_callback_set(m, _e_int_menus_config_pre_cb, NULL);
|
2005-06-09 15:24:36 -07:00
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2004-12-22 20:58:57 -08:00
|
|
|
e_int_menus_clients_new(void)
|
2004-12-20 19:01:19 -08:00
|
|
|
{
|
|
|
|
E_Menu *m;
|
|
|
|
|
|
|
|
m = e_menu_new();
|
2004-12-21 07:17:01 -08:00
|
|
|
e_menu_pre_activate_callback_set(m, _e_int_menus_clients_pre_cb, NULL);
|
|
|
|
return m;
|
2004-12-20 19:01:19 -08:00
|
|
|
}
|
2006-09-09 00:00:14 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Menu *
|
2006-09-09 00:00:14 -07:00
|
|
|
e_int_menus_lost_clients_new(void)
|
2005-01-17 00:54:37 -08:00
|
|
|
{
|
|
|
|
E_Menu *m;
|
|
|
|
|
|
|
|
m = e_menu_new();
|
2006-09-09 00:00:14 -07:00
|
|
|
e_menu_pre_activate_callback_set(m, _e_int_menus_lost_clients_pre_cb, NULL);
|
2005-01-17 00:54:37 -08:00
|
|
|
return m;
|
|
|
|
}
|
2006-09-09 00:00:14 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Int_Menu_Augmentation *
|
2009-04-18 23:21:35 -07:00
|
|
|
e_int_menus_menu_augmentation_add_sorted(const char *menu,
|
2012-07-30 03:50:50 -07:00
|
|
|
const char *sort_key,
|
|
|
|
void (*func_add)(void *data, E_Menu *m),
|
|
|
|
void *data_add,
|
|
|
|
void (*func_del)(void *data, E_Menu *m),
|
|
|
|
void *data_del)
|
2005-08-23 03:26:44 -07:00
|
|
|
{
|
|
|
|
E_Int_Menu_Augmentation *maug;
|
2009-04-18 22:18:01 -07:00
|
|
|
Eina_List *l;
|
2010-08-30 08:14:25 -07:00
|
|
|
Eina_Bool old = EINA_FALSE;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
maug = E_NEW(E_Int_Menu_Augmentation, 1);
|
|
|
|
if (!maug) return NULL;
|
|
|
|
|
2009-04-18 23:21:35 -07:00
|
|
|
maug->sort_key = eina_stringshare_add(sort_key);
|
|
|
|
|
2005-08-23 03:26:44 -07:00
|
|
|
maug->add.func = func_add;
|
|
|
|
maug->add.data = data_add;
|
|
|
|
|
|
|
|
maug->del.func = func_del;
|
|
|
|
maug->del.data = data_del;
|
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
if (_e_int_menus_augmentation)
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if ((l = eina_hash_find(_e_int_menus_augmentation, menu)))
|
2010-08-23 13:47:01 -07:00
|
|
|
old = EINA_TRUE;
|
2009-04-18 22:18:01 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
_e_int_menus_augmentation = eina_hash_string_superfast_new(NULL);
|
|
|
|
l = NULL;
|
|
|
|
old = EINA_FALSE;
|
2009-04-18 22:18:01 -07:00
|
|
|
}
|
2007-08-07 04:46:19 -07:00
|
|
|
|
2009-04-18 23:21:35 -07:00
|
|
|
if ((!l) || (!maug->sort_key))
|
|
|
|
l = eina_list_append(l, maug);
|
|
|
|
else
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
E_Int_Menu_Augmentation *m2;
|
|
|
|
Eina_List *l2;
|
|
|
|
|
|
|
|
/* keep list sorted, those missing sort_key at the end. */
|
|
|
|
EINA_LIST_FOREACH(l, l2, m2)
|
|
|
|
{
|
|
|
|
if (!m2->sort_key)
|
|
|
|
break;
|
|
|
|
if (strcasecmp(maug->sort_key, m2->sort_key) < 0)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (l2)
|
|
|
|
l = eina_list_prepend_relative_list(l, maug, l2);
|
|
|
|
else
|
|
|
|
l = eina_list_append(l, maug);
|
2009-04-18 23:21:35 -07:00
|
|
|
}
|
2009-04-18 22:18:01 -07:00
|
|
|
|
|
|
|
if (old)
|
|
|
|
eina_hash_modify(_e_int_menus_augmentation, menu, l);
|
|
|
|
else
|
|
|
|
eina_hash_add(_e_int_menus_augmentation, menu, l);
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
return maug;
|
|
|
|
}
|
|
|
|
|
2009-04-18 23:21:35 -07:00
|
|
|
EAPI E_Int_Menu_Augmentation *
|
|
|
|
e_int_menus_menu_augmentation_add(const char *menu,
|
2012-07-30 03:50:50 -07:00
|
|
|
void (*func_add)(void *data, E_Menu *m),
|
|
|
|
void *data_add,
|
|
|
|
void (*func_del)(void *data, E_Menu *m),
|
|
|
|
void *data_del)
|
2009-04-18 23:21:35 -07:00
|
|
|
{
|
|
|
|
return e_int_menus_menu_augmentation_add_sorted
|
2012-07-30 03:50:50 -07:00
|
|
|
(menu, NULL, func_add, data_add, func_del, data_del);
|
2009-04-18 23:21:35 -07:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-08-23 03:26:44 -07:00
|
|
|
e_int_menus_menu_augmentation_del(const char *menu, E_Int_Menu_Augmentation *maug)
|
|
|
|
{
|
2009-04-18 22:18:01 -07:00
|
|
|
Eina_List *l;
|
|
|
|
|
|
|
|
if (!_e_int_menus_augmentation)
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
eina_stringshare_del(maug->sort_key);
|
|
|
|
free(maug);
|
|
|
|
return;
|
2009-04-18 22:18:01 -07:00
|
|
|
}
|
2005-08-23 03:26:44 -07:00
|
|
|
|
2008-12-17 07:33:43 -08:00
|
|
|
l = eina_hash_find(_e_int_menus_augmentation, menu);
|
2005-08-23 03:26:44 -07:00
|
|
|
if (l)
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
l = eina_list_remove(l, maug);
|
2009-04-18 22:18:01 -07:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
if (l)
|
|
|
|
eina_hash_modify(_e_int_menus_augmentation, menu, l);
|
|
|
|
else
|
|
|
|
eina_hash_del_by_key(_e_int_menus_augmentation, menu);
|
2005-08-23 03:26:44 -07:00
|
|
|
}
|
2009-04-18 23:21:35 -07:00
|
|
|
eina_stringshare_del(maug->sort_key);
|
2005-08-23 03:26:44 -07:00
|
|
|
free(maug);
|
|
|
|
}
|
|
|
|
|
2010-02-27 09:04:55 -08:00
|
|
|
EAPI void
|
|
|
|
e_int_menus_menu_augmentation_point_disabled_set(const char *menu, Eina_Bool disabled)
|
|
|
|
{
|
|
|
|
if (!menu) return;
|
2012-06-20 23:19:43 -07:00
|
|
|
if (disabled)
|
2010-02-27 14:51:19 -08:00
|
|
|
{
|
2012-06-20 23:19:43 -07:00
|
|
|
_e_int_menus_augmentation_disabled =
|
2010-02-27 14:51:19 -08:00
|
|
|
eina_list_append(_e_int_menus_augmentation_disabled, menu);
|
|
|
|
}
|
2012-06-20 23:19:43 -07:00
|
|
|
else
|
2010-02-27 14:51:19 -08:00
|
|
|
{
|
2012-06-20 23:19:43 -07:00
|
|
|
_e_int_menus_augmentation_disabled =
|
2010-02-27 14:51:19 -08:00
|
|
|
eina_list_remove(_e_int_menus_augmentation_disabled, menu);
|
|
|
|
}
|
2010-02-27 09:04:55 -08:00
|
|
|
}
|
|
|
|
|
2012-09-20 01:57:36 -07:00
|
|
|
EINTERN void
|
|
|
|
e_int_menus_init(void)
|
|
|
|
{
|
|
|
|
if (e_config->menu_apps_show)
|
|
|
|
_e_int_menus_apps_thread_new(NULL, NULL);
|
2012-11-15 05:20:34 -08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
char buf[PATH_MAX];
|
|
|
|
|
|
|
|
e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
|
|
|
|
_e_int_menus_apps_thread_new(NULL, eina_stringshare_add(buf));
|
|
|
|
}
|
2012-11-30 03:50:21 -08:00
|
|
|
E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_DESKTOP_CACHE_UPDATE, _e_int_menus_efreet_desktop_cache_update, NULL);
|
|
|
|
E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_DESKTOP_CACHE_BUILD, _e_int_menus_efreet_desktop_cache_update, NULL);
|
2012-09-20 01:57:36 -07:00
|
|
|
}
|
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
EINTERN void
|
|
|
|
e_int_menus_shutdown(void)
|
|
|
|
{
|
|
|
|
E_FREE_LIST(_e_int_menus_app_threads, ecore_thread_cancel);
|
|
|
|
if (_e_int_menus_app_cleaner) ecore_timer_del(_e_int_menus_app_cleaner);
|
|
|
|
_e_int_menus_app_cleaner = NULL;
|
|
|
|
eina_hash_free(_e_int_menus_app_menus_waiting);
|
|
|
|
_e_int_menus_app_menus_waiting = NULL;
|
|
|
|
_e_int_menus_app_menu_default_waiting = NULL;
|
2012-11-30 03:50:21 -08:00
|
|
|
E_FREE_LIST(handlers, ecore_event_handler_del);
|
2012-09-19 03:15:03 -07:00
|
|
|
}
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
/* local subsystem functions */
|
2012-11-30 03:50:21 -08:00
|
|
|
static Eina_Bool
|
|
|
|
_e_int_menus_efreet_desktop_cache_update(void *d __UNUSED__, int type __UNUSED__, void *e __UNUSED__)
|
|
|
|
{
|
|
|
|
e_int_menus_shutdown();
|
|
|
|
e_int_menus_init();
|
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
static void
|
2005-01-12 01:22:44 -08:00
|
|
|
_e_int_menus_main_del_hook(void *obj)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2004-12-23 07:31:47 -08:00
|
|
|
Main_Data *dat;
|
2005-01-12 01:22:44 -08:00
|
|
|
E_Menu *m;
|
2009-03-15 12:12:50 -07:00
|
|
|
|
2005-01-12 01:22:44 -08:00
|
|
|
m = obj;
|
|
|
|
dat = e_object_data_get(E_OBJECT(obj));
|
2009-03-15 12:12:50 -07:00
|
|
|
if (dat->apps) e_object_del(E_OBJECT(dat->apps));
|
|
|
|
if (dat->all_apps) e_object_del(E_OBJECT(dat->all_apps));
|
|
|
|
if (dat->desktops) e_object_del(E_OBJECT(dat->desktops));
|
|
|
|
if (dat->clients) e_object_del(E_OBJECT(dat->clients));
|
2009-04-15 21:48:46 -07:00
|
|
|
if (dat->lost_clients) e_object_del(E_OBJECT(dat->lost_clients));
|
2009-03-15 12:12:50 -07:00
|
|
|
if (dat->enlightenment) e_object_del(E_OBJECT(dat->enlightenment));
|
|
|
|
if (dat->config) e_object_del(E_OBJECT(dat->config));
|
2009-01-09 23:02:32 -08:00
|
|
|
free(dat);
|
2009-03-15 12:12:50 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/0"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/1"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/2"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/3"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/4"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/5"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/6"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/7"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/8"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/9"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/10"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/11"));
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_main_about(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2005-09-20 01:34:23 -07:00
|
|
|
E_About *about;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-09-20 01:34:23 -07:00
|
|
|
about = e_about_new(e_container_current_get(e_manager_current_get()));
|
|
|
|
if (about) e_about_show(about);
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
2005-09-21 22:52:37 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_themes_about(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2005-09-21 22:52:37 -07:00
|
|
|
{
|
|
|
|
E_Theme_About *about;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-09-21 22:52:37 -07:00
|
|
|
about = e_theme_about_new(e_container_current_get(e_manager_current_get()));
|
|
|
|
if (about) e_theme_about_show(about);
|
|
|
|
}
|
|
|
|
|
2007-08-12 02:57:24 -07:00
|
|
|
/*
|
2012-07-30 03:50:50 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_fwin_favorites_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
2006-10-18 05:17:29 -07:00
|
|
|
e_fwin_new(m->zone->container, "favorites", "/");
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
|
|
|
*/
|
2007-08-12 02:57:24 -07:00
|
|
|
|
2012-08-03 11:17:20 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_config_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
|
|
|
{
|
|
|
|
E_Action *act;
|
|
|
|
|
|
|
|
act = e_action_find("configuration");
|
|
|
|
if (act) act->func.go(E_OBJECT(m->zone), NULL);
|
|
|
|
}
|
|
|
|
|
2006-06-07 16:30:15 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_main_showhide(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2006-06-07 16:30:15 -07:00
|
|
|
{
|
|
|
|
E_Action *act;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-07-20 17:46:40 -07:00
|
|
|
act = e_action_find("desk_deskshow_toggle");
|
2006-06-08 12:04:16 -07:00
|
|
|
if (act) act->func.go(E_OBJECT(m->zone), NULL);
|
2006-06-07 16:30:15 -07:00
|
|
|
}
|
|
|
|
|
2004-11-24 20:07:48 -08:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_main_restart(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2004-11-24 20:07:48 -08:00
|
|
|
{
|
2005-09-19 03:52:45 -07:00
|
|
|
E_Action *a;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-09-19 03:52:45 -07:00
|
|
|
a = e_action_find("restart");
|
|
|
|
if ((a) && (a->func.go)) a->func.go(NULL, NULL);
|
2004-11-24 20:07:48 -08:00
|
|
|
}
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_main_exit(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2006-09-03 01:51:32 -07:00
|
|
|
E_Action *a;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-09-03 01:51:32 -07:00
|
|
|
a = e_action_find("exit");
|
|
|
|
if ((a) && (a->func.go)) a->func.go(NULL, NULL);
|
|
|
|
}
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
static void
|
2007-03-24 11:45:36 -07:00
|
|
|
_e_int_menus_apps_scan(E_Menu *m, Efreet_Menu *menu)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *l;
|
2007-03-24 11:45:36 -07:00
|
|
|
|
|
|
|
if (menu->entries)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
Efreet_Menu *entry;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(menu->entries, l, entry)
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
|
|
|
|
_e_int_menus_item_label_set(entry, mi);
|
|
|
|
|
|
|
|
if (entry->icon)
|
|
|
|
{
|
|
|
|
if (entry->icon[0] == '/')
|
|
|
|
e_menu_item_icon_file_set(mi, entry->icon);
|
|
|
|
else
|
|
|
|
e_util_menu_item_theme_icon_set(mi, entry->icon);
|
|
|
|
}
|
|
|
|
if (entry->type == EFREET_MENU_ENTRY_SEPARATOR)
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
else if (entry->type == EFREET_MENU_ENTRY_DESKTOP)
|
|
|
|
{
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_apps_run,
|
2008-03-25 09:48:14 -07:00
|
|
|
entry->desktop);
|
2012-07-30 03:50:50 -07:00
|
|
|
e_menu_item_drag_callback_set(mi, _e_int_menus_apps_drag,
|
2008-03-25 09:48:14 -07:00
|
|
|
entry->desktop);
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
|
|
|
else if (entry->type == EFREET_MENU_ENTRY_MENU)
|
|
|
|
{
|
|
|
|
E_Menu *subm;
|
2007-03-24 11:45:36 -07:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
subm = e_menu_new();
|
|
|
|
e_menu_pre_activate_callback_set(subm,
|
2012-06-20 23:19:43 -07:00
|
|
|
_e_int_menus_apps_start,
|
2008-03-25 09:48:14 -07:00
|
|
|
entry);
|
2012-07-30 03:50:50 -07:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2012-06-20 23:19:43 -07:00
|
|
|
e_object_free_attach_func_set(E_OBJECT(subm),
|
2009-03-23 02:36:11 -07:00
|
|
|
_e_int_menus_apps_free_hook2);
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
|
|
|
/* TODO: Highlight header
|
|
|
|
else if (entry->type == EFREET_MENU_ENTRY_HEADER)
|
|
|
|
*/
|
|
|
|
}
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
2007-03-24 11:45:36 -07:00
|
|
|
else
|
2004-12-26 23:50:03 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("(No Applications)"));
|
2004-12-26 23:50:03 -08:00
|
|
|
}
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_e_int_menus_app_cleaner_cb(void *d __UNUSED__)
|
|
|
|
{
|
|
|
|
if (_e_int_menus_app_threads) return EINA_TRUE;
|
|
|
|
eina_hash_free_buckets(_e_int_menus_app_menus);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
static void
|
2012-09-19 03:15:03 -07:00
|
|
|
_e_int_menus_app_thread_notify_cb(void *data, Ecore_Thread *eth __UNUSED__, void *msg)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2012-09-19 03:15:03 -07:00
|
|
|
Efreet_Menu *menu = msg;
|
|
|
|
E_Menu *m;
|
|
|
|
const char *dir = data;
|
|
|
|
|
|
|
|
if (!msg) return;
|
|
|
|
if (dir)
|
|
|
|
{
|
|
|
|
eina_hash_add(_e_int_menus_app_menus, dir, menu);
|
|
|
|
m = eina_hash_set(_e_int_menus_app_menus_waiting, dir, NULL);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_e_int_menus_app_menu_default = menu;
|
|
|
|
m = _e_int_menus_app_menu_default_waiting;
|
|
|
|
_e_int_menus_app_menu_default_waiting = NULL;
|
|
|
|
}
|
|
|
|
if (!m) return;
|
2012-10-10 05:09:35 -07:00
|
|
|
e_object_del_attach_func_set(E_OBJECT(m), NULL);
|
2012-09-19 03:15:03 -07:00
|
|
|
|
|
|
|
if (_e_int_menus_app_cleaner)
|
|
|
|
ecore_timer_reset(_e_int_menus_app_cleaner);
|
|
|
|
else
|
|
|
|
_e_int_menus_app_cleaner = ecore_timer_add(300, _e_int_menus_app_cleaner_cb, NULL);
|
|
|
|
eina_stringshare_del(dir);
|
|
|
|
_e_int_menus_apps_scan(m, menu);
|
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
|
|
|
e_object_data_set(E_OBJECT(m), menu);
|
|
|
|
e_object_free_attach_func_set(E_OBJECT(m),
|
|
|
|
_e_int_menus_apps_free_hook2);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-11-15 05:20:34 -08:00
|
|
|
_e_int_menus_app_thread_end_cb(void *data, Ecore_Thread *eth)
|
2012-09-19 03:15:03 -07:00
|
|
|
{
|
2012-11-15 05:20:34 -08:00
|
|
|
char buf[PATH_MAX];
|
|
|
|
const char *dir;
|
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
_e_int_menus_app_threads = eina_list_remove(_e_int_menus_app_threads, eth);
|
2012-11-15 05:20:34 -08:00
|
|
|
if (data || (!e_config->menu_apps_show)) return;
|
|
|
|
|
|
|
|
e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
|
|
|
|
dir = eina_stringshare_add(buf);
|
|
|
|
|
|
|
|
if (eina_hash_find(_e_int_menus_app_menus, dir))
|
|
|
|
eina_stringshare_del(dir);
|
|
|
|
else
|
|
|
|
_e_int_menus_apps_thread_new(NULL, dir);
|
2012-09-19 03:15:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_int_menus_app_thread_cb(void *data, Ecore_Thread *eth)
|
|
|
|
{
|
|
|
|
const char *dir = data;
|
2007-03-24 11:45:36 -07:00
|
|
|
Efreet_Menu *menu;
|
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
if (dir)
|
|
|
|
menu = efreet_menu_parse(dir);
|
|
|
|
else
|
|
|
|
menu = efreet_menu_get();
|
|
|
|
ecore_thread_feedback(eth, menu);
|
|
|
|
}
|
|
|
|
|
2012-10-10 05:09:35 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_apps_menu_del(void *data)
|
|
|
|
{
|
|
|
|
const char *dir;
|
|
|
|
|
|
|
|
dir = e_object_data_get(data);
|
|
|
|
eina_hash_del_by_key(_e_int_menus_app_menus_waiting, dir);
|
|
|
|
}
|
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
static Efreet_Menu *
|
|
|
|
_e_int_menus_apps_thread_new(E_Menu *m, const char *dir)
|
|
|
|
{
|
|
|
|
Efreet_Menu *menu = NULL;
|
|
|
|
E_Menu *mn = NULL;
|
|
|
|
Ecore_Thread *eth;
|
|
|
|
|
|
|
|
if (dir)
|
2007-03-24 11:45:36 -07:00
|
|
|
{
|
2012-09-19 03:15:03 -07:00
|
|
|
if (_e_int_menus_app_menus)
|
|
|
|
menu = eina_hash_find(_e_int_menus_app_menus, dir);
|
|
|
|
else
|
2012-10-11 06:23:14 -07:00
|
|
|
_e_int_menus_app_menus = eina_hash_string_superfast_new((void *)efreet_menu_free);
|
2012-09-19 03:15:03 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
menu = _e_int_menus_app_menu_default;
|
2012-07-30 03:50:50 -07:00
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
if (menu) return menu;
|
|
|
|
if (dir)
|
|
|
|
{
|
|
|
|
if (_e_int_menus_app_menus_waiting)
|
|
|
|
mn = eina_hash_find(_e_int_menus_app_menus_waiting, dir);
|
|
|
|
else
|
|
|
|
_e_int_menus_app_menus_waiting = eina_hash_string_superfast_new(NULL);
|
2007-03-24 11:45:36 -07:00
|
|
|
}
|
2012-09-19 03:15:03 -07:00
|
|
|
else
|
|
|
|
mn = _e_int_menus_app_menu_default_waiting;
|
|
|
|
|
|
|
|
if (mn) return NULL;
|
2012-09-20 01:57:36 -07:00
|
|
|
if (dir && m)
|
2012-09-19 03:15:03 -07:00
|
|
|
eina_hash_add(_e_int_menus_app_menus_waiting, dir, m);
|
2012-11-15 01:36:21 -08:00
|
|
|
else if (!dir)
|
2012-09-19 03:15:03 -07:00
|
|
|
_e_int_menus_app_menu_default_waiting = m;
|
|
|
|
|
|
|
|
eth = ecore_thread_feedback_run(_e_int_menus_app_thread_cb, _e_int_menus_app_thread_notify_cb,
|
|
|
|
_e_int_menus_app_thread_end_cb, _e_int_menus_app_thread_end_cb, dir, EINA_FALSE);
|
|
|
|
_e_int_menus_app_threads = eina_list_append(_e_int_menus_app_threads, eth);
|
2012-10-10 05:09:35 -07:00
|
|
|
if (m) e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_apps_menu_del);
|
2012-09-19 03:15:03 -07:00
|
|
|
return NULL;
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-09-19 03:15:03 -07:00
|
|
|
_e_int_menus_apps_start(void *data, E_Menu *m)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2012-09-19 03:15:03 -07:00
|
|
|
Efreet_Menu *menu;
|
|
|
|
const char *dir = NULL;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-09-19 03:15:03 -07:00
|
|
|
if (m->items) return;
|
|
|
|
|
|
|
|
menu = data;
|
|
|
|
if (!menu)
|
|
|
|
{
|
|
|
|
dir = e_object_data_get(E_OBJECT(m));
|
|
|
|
menu = _e_int_menus_apps_thread_new(m, dir);
|
|
|
|
}
|
|
|
|
if (!menu) return;
|
2012-09-19 03:22:33 -07:00
|
|
|
if (_e_int_menus_app_cleaner)
|
|
|
|
ecore_timer_reset(_e_int_menus_app_cleaner);
|
2012-09-19 03:15:03 -07:00
|
|
|
eina_stringshare_del(dir);
|
|
|
|
_e_int_menus_apps_scan(m, menu);
|
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
|
|
|
e_object_data_set(E_OBJECT(m), menu);
|
|
|
|
e_object_free_attach_func_set(E_OBJECT(m),
|
|
|
|
_e_int_menus_apps_free_hook2);
|
2007-03-24 11:45:36 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_int_menus_apps_free_hook2(void *obj)
|
|
|
|
{
|
|
|
|
E_Menu *m;
|
2009-03-23 04:46:14 -07:00
|
|
|
Eina_List *l, *l_next;
|
2009-03-23 02:36:11 -07:00
|
|
|
E_Menu_Item *mi;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
m = obj;
|
2009-03-23 04:46:14 -07:00
|
|
|
// XXX TODO: this should be automatic in e_menu, just get references right!
|
|
|
|
// XXX TODO: fix references and remove me!!!
|
2012-10-11 06:23:14 -07:00
|
|
|
EINA_LIST_FOREACH_SAFE (m->items, l, l_next, mi)
|
2009-03-23 02:36:11 -07:00
|
|
|
{
|
|
|
|
if (mi->submenu)
|
|
|
|
e_object_del(E_OBJECT(mi->submenu));
|
|
|
|
}
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_apps_run(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2004-11-24 19:37:45 -08:00
|
|
|
{
|
2007-03-24 15:58:40 -07:00
|
|
|
Efreet_Desktop *desktop;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-03-24 15:58:40 -07:00
|
|
|
desktop = data;
|
|
|
|
e_exec(m->zone, desktop, NULL, NULL, "menu/apps");
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
2004-12-20 19:01:19 -08:00
|
|
|
|
2010-08-18 11:15:31 -07:00
|
|
|
/*
|
2012-07-30 03:50:50 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_apps_drag_finished(E_Drag *drag, int dropped __UNUSED__)
|
|
|
|
{
|
2010-05-29 07:55:47 -07:00
|
|
|
Efreet_Desktop *desktop;
|
2010-08-18 11:15:31 -07:00
|
|
|
|
2010-05-29 07:55:47 -07:00
|
|
|
desktop = drag->data;
|
|
|
|
efreet_desktop_free(desktop);
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
|
|
|
*/
|
2010-05-29 07:55:47 -07:00
|
|
|
|
2006-08-22 01:38:24 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_apps_drag(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
2007-03-24 15:58:40 -07:00
|
|
|
Efreet_Desktop *desktop;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-03-24 15:58:40 -07:00
|
|
|
desktop = data;
|
2006-08-22 01:38:24 -07:00
|
|
|
|
|
|
|
/* start drag! */
|
|
|
|
if (mi->icon_object)
|
2012-07-30 03:50:50 -07:00
|
|
|
{
|
|
|
|
E_Drag *drag;
|
|
|
|
Evas_Object *o = NULL;
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
unsigned int size;
|
|
|
|
const char *drag_types[] = { "enlightenment/desktop" };
|
|
|
|
|
|
|
|
evas_object_geometry_get(mi->icon_object, &x, &y, &w, &h);
|
|
|
|
efreet_desktop_ref(desktop);
|
|
|
|
drag = e_drag_new(m->zone->container, x, y, drag_types, 1, desktop, -1,
|
|
|
|
NULL, NULL);
|
|
|
|
|
|
|
|
size = MIN(w, h);
|
|
|
|
o = e_util_desktop_icon_add(desktop, size, e_drag_evas_get(drag));
|
|
|
|
e_drag_object_set(drag, o);
|
|
|
|
e_drag_resize(drag, w, h);
|
|
|
|
e_drag_start(drag, mi->drag.x + w, mi->drag.y + h);
|
|
|
|
}
|
2006-08-22 01:38:24 -07:00
|
|
|
}
|
|
|
|
|
2005-01-03 01:34:24 -08:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_virtuals_pre_cb(void *data __UNUSED__, E_Menu *m)
|
2005-01-03 01:34:24 -08:00
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
E_Menu *root;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-01-03 01:34:24 -08:00
|
|
|
root = e_menu_root_get(m);
|
2005-01-12 00:45:28 -08:00
|
|
|
if ((root) && (root->zone))
|
2005-01-03 01:34:24 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
E_Zone *zone;
|
|
|
|
int i;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
zone = root->zone;
|
|
|
|
for (i = 0; i < (zone->desk_x_count * zone->desk_y_count); i++)
|
|
|
|
{
|
|
|
|
E_Desk *desk;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
|
|
|
desk = zone->desks[i];
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_radio_group_set(mi, 1);
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_label_set(mi, desk->name);
|
|
|
|
if (desk == e_desk_current_get(zone))
|
|
|
|
e_menu_item_toggle_set(mi, 1);
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_virtuals_item_cb, desk);
|
|
|
|
e_menu_item_realize_callback_set(mi, _e_int_menus_virtuals_icon_cb, desk);
|
|
|
|
}
|
2005-01-03 01:34:24 -08:00
|
|
|
}
|
2006-10-15 18:58:06 -07:00
|
|
|
|
2007-07-28 13:51:30 -07:00
|
|
|
if (e_configure_registry_exists("screen/virtual_desktops"))
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2007-07-28 13:51:30 -07:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Set Virtual Desktops"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_desk_item_cb, NULL);
|
2007-07-28 13:51:30 -07:00
|
|
|
}
|
2005-01-08 06:41:21 -08:00
|
|
|
}
|
|
|
|
|
2009-03-23 03:19:13 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_desktops_free_hook(void *obj)
|
|
|
|
{
|
|
|
|
E_Menu *m;
|
2009-03-23 04:46:14 -07:00
|
|
|
Eina_List *l, *l_next;
|
2009-03-23 03:19:13 -07:00
|
|
|
E_Menu_Item *mi;
|
|
|
|
|
|
|
|
m = obj;
|
2009-03-23 04:46:14 -07:00
|
|
|
// XXX TODO: this should be automatic in e_menu, just get references right!
|
|
|
|
// XXX TODO: fix references and remove me!!!
|
2012-07-30 03:50:50 -07:00
|
|
|
EINA_LIST_FOREACH_SAFE (m->items, l, l_next, mi)
|
2009-03-23 03:19:13 -07:00
|
|
|
{
|
|
|
|
if (mi->submenu)
|
|
|
|
e_object_del(E_OBJECT(mi->submenu));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-01-03 01:34:24 -08:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_desk_item_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
2007-07-04 04:11:03 -07:00
|
|
|
e_configure_registry_call("screen/virtual_desktops", m->zone->container, NULL);
|
2006-10-15 18:58:06 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_virtuals_item_cb(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2005-01-03 01:34:24 -08:00
|
|
|
{
|
2009-03-15 12:12:50 -07:00
|
|
|
E_Desk *desk;
|
2005-01-03 01:34:24 -08:00
|
|
|
|
2009-03-15 12:12:50 -07:00
|
|
|
if (!(desk = data)) return;
|
2005-01-03 01:34:24 -08:00
|
|
|
e_desk_show(desk);
|
|
|
|
}
|
|
|
|
|
2008-10-18 11:43:09 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_virtuals_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
|
|
|
E_Desk *desk;
|
|
|
|
Evas_Object *o;
|
|
|
|
const char *bgfile;
|
|
|
|
int tw, th;
|
|
|
|
|
|
|
|
desk = data;
|
|
|
|
E_OBJECT_CHECK(desk);
|
|
|
|
|
|
|
|
tw = 50;
|
|
|
|
th = (tw * desk->zone->h) / desk->zone->w;
|
|
|
|
|
|
|
|
bgfile = e_bg_file_get(desk->zone->container->num, desk->zone->num, desk->x, desk->y);
|
|
|
|
o = e_thumb_icon_add(m->evas);
|
|
|
|
e_thumb_icon_file_set(o, bgfile, "e/desktop/background");
|
|
|
|
e_thumb_icon_size_set(o, tw, th);
|
|
|
|
e_thumb_icon_begin(o);
|
|
|
|
mi->icon_object = o;
|
|
|
|
}
|
|
|
|
|
2005-08-23 03:26:44 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_config_pre_cb(void *data __UNUSED__, E_Menu *m)
|
2005-08-23 03:26:44 -07:00
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("config/0");
|
2007-08-05 01:07:39 -07:00
|
|
|
if (l)
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
_e_int_menus_augmentation_add(m, l);
|
|
|
|
if (_e_int_menus_augmentation_find("config/1"))
|
|
|
|
{
|
2010-02-27 14:51:19 -08:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
2007-08-05 01:07:39 -07:00
|
|
|
}
|
2008-12-17 07:33:43 -08:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("config/1");
|
2008-03-25 09:48:14 -07:00
|
|
|
if (l) _e_int_menus_augmentation_add(m, l);
|
2007-08-03 08:57:27 -07:00
|
|
|
|
2009-04-18 22:18:01 -07:00
|
|
|
l = _e_int_menus_augmentation_find("config/2");
|
2005-08-25 10:14:00 -07:00
|
|
|
if (l)
|
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
_e_int_menus_augmentation_add(m, l);
|
2005-08-25 10:14:00 -07:00
|
|
|
}
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_config_free_hook);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_int_menus_config_free_hook(void *obj)
|
|
|
|
{
|
2005-09-19 08:25:23 -07:00
|
|
|
E_Menu *m;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
m = obj;
|
2009-04-18 22:18:01 -07:00
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("config/0"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("config/1"));
|
|
|
|
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("config/2"));
|
2005-08-23 03:26:44 -07:00
|
|
|
}
|
|
|
|
|
2007-02-11 22:01:39 -08:00
|
|
|
static int
|
2008-10-27 00:33:21 -07:00
|
|
|
_e_int_menus_clients_group_desk_cb(const void *d1, const void *d2)
|
2007-02-11 22:01:39 -08:00
|
|
|
{
|
2008-10-27 00:33:21 -07:00
|
|
|
const E_Border *bd1;
|
|
|
|
const E_Border *bd2;
|
|
|
|
int j, k;
|
2007-02-11 22:01:39 -08:00
|
|
|
|
|
|
|
if (!d1) return 1;
|
|
|
|
if (!d2) return -1;
|
|
|
|
|
|
|
|
bd1 = d1;
|
|
|
|
bd2 = d2;
|
|
|
|
|
|
|
|
j = bd1->desk->y * 12 + bd1->desk->x;
|
|
|
|
k = bd2->desk->y * 12 + bd2->desk->x;
|
|
|
|
|
|
|
|
if (j > k) return 1;
|
|
|
|
if (j < k) return -1;
|
2007-02-20 16:05:27 -08:00
|
|
|
return -1; /* Returning '-1' on equal is intentional */
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2008-10-27 00:33:21 -07:00
|
|
|
_e_int_menus_clients_group_class_cb(const void *d1, const void *d2)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
2009-03-15 12:12:50 -07:00
|
|
|
const E_Border *bd1, *bd2;
|
2007-02-20 16:05:27 -08:00
|
|
|
|
|
|
|
if (!d1) return 1;
|
|
|
|
if (!d2) return -1;
|
|
|
|
|
|
|
|
bd1 = d1;
|
|
|
|
bd2 = d2;
|
2009-03-15 12:12:50 -07:00
|
|
|
|
2011-03-15 09:33:46 -07:00
|
|
|
if (!bd1->client.icccm.class)
|
2007-02-20 17:03:37 -08:00
|
|
|
return -1;
|
2011-03-15 09:33:46 -07:00
|
|
|
if (!bd2->client.icccm.class)
|
|
|
|
return 1;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
return strcmp(bd1->client.icccm.class, bd2->client.icccm.class) > 0 ? 1 : -1;
|
2007-02-20 16:05:27 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2008-10-27 00:33:21 -07:00
|
|
|
_e_int_menus_clients_sort_alpha_cb(const void *d1, const void *d2)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
2009-03-15 12:12:50 -07:00
|
|
|
const E_Border *bd1, *bd2;
|
|
|
|
const char *name1, *name2;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-02-20 16:05:27 -08:00
|
|
|
if (!d1) return 1;
|
|
|
|
if (!d2) return -1;
|
|
|
|
|
|
|
|
bd1 = d1;
|
|
|
|
bd2 = d2;
|
2007-02-20 17:03:37 -08:00
|
|
|
name1 = e_border_name_get(bd1);
|
|
|
|
name2 = e_border_name_get(bd2);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-02-20 17:03:37 -08:00
|
|
|
if (strcasecmp(name1, name2) > 0) return 1;
|
|
|
|
if (strcasecmp(name1, name2) < 0) return -1;
|
2007-02-12 18:04:09 -08:00
|
|
|
return 0;
|
2007-02-11 22:01:39 -08:00
|
|
|
}
|
|
|
|
|
2007-03-01 13:39:06 -08:00
|
|
|
static int
|
2008-10-27 00:33:21 -07:00
|
|
|
_e_int_menus_clients_sort_z_order_cb(const void *d1, const void *d2)
|
2007-03-01 13:39:06 -08:00
|
|
|
{
|
2008-10-27 00:33:21 -07:00
|
|
|
const E_Border *bd1, *bd2;
|
2007-03-01 13:39:06 -08:00
|
|
|
|
|
|
|
if (!d1) return 1;
|
|
|
|
if (!d2) return -1;
|
|
|
|
|
|
|
|
bd1 = d1;
|
|
|
|
bd2 = d2;
|
|
|
|
|
|
|
|
if (bd1->layer < bd2->layer) return 1;
|
|
|
|
if (bd1->layer > bd2->layer) return -1;
|
2012-06-20 23:19:43 -07:00
|
|
|
return 0;
|
2007-03-01 13:39:06 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_clients_menu_add_iconified(Eina_List *borders, E_Menu *m)
|
2007-03-01 13:39:06 -08:00
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
if (eina_list_count(borders) > 0)
|
2012-06-20 23:19:43 -07:00
|
|
|
{
|
2011-04-07 22:31:47 -07:00
|
|
|
Eina_List *l = NULL;
|
|
|
|
E_Border *bd = NULL;
|
|
|
|
E_Menu_Item *mi = NULL;
|
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2007-03-01 13:39:06 -08:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
EINA_LIST_FOREACH(borders, l, bd)
|
2011-04-07 22:31:47 -07:00
|
|
|
_e_int_menus_clients_item_create(bd, m);
|
2007-03-01 13:39:06 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-02-20 16:05:27 -08:00
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_clients_add_by_class(Eina_List *borders, E_Menu *m)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL, *ico = NULL;
|
2012-06-20 23:19:43 -07:00
|
|
|
E_Border *bd;
|
2007-02-20 16:05:27 -08:00
|
|
|
E_Menu *subm = NULL;
|
2011-04-07 22:31:47 -07:00
|
|
|
E_Menu_Item *mi = NULL;
|
2007-02-20 16:05:27 -08:00
|
|
|
char *class = NULL;
|
|
|
|
|
|
|
|
class = strdup("");
|
2009-08-21 08:08:49 -07:00
|
|
|
EINA_LIST_FOREACH(borders, l, bd)
|
2008-03-25 09:48:14 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if ((bd->iconic) &&
|
|
|
|
(e_config->clientlist_separate_iconified_apps == E_CLIENTLIST_GROUPICONS_SEP))
|
|
|
|
{
|
|
|
|
ico = eina_list_append(ico, bd);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (((strcmp(class, bd->client.icccm.class) != 0) &&
|
|
|
|
e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE))
|
|
|
|
{
|
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
{
|
|
|
|
if ((subm) && (mi)) e_menu_item_submenu_set(mi, subm);
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, bd->client.icccm.class);
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-system-windows");
|
|
|
|
subm = e_menu_new();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
2012-12-05 03:13:09 -08:00
|
|
|
free(class);
|
2012-07-30 03:50:50 -07:00
|
|
|
class = strdup(bd->client.icccm.class);
|
|
|
|
}
|
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
_e_int_menus_clients_item_create(bd, subm);
|
|
|
|
else
|
|
|
|
_e_int_menus_clients_item_create(bd, m);
|
2007-03-01 13:39:06 -08:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
if ((e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
&& (subm) && (mi))
|
2007-02-20 16:05:27 -08:00
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2007-03-01 13:39:06 -08:00
|
|
|
|
|
|
|
_e_int_menus_clients_menu_add_iconified(ico, m);
|
2007-02-20 16:05:27 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Eina_List *borders, E_Menu *m)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
|
|
|
E_Desk *desk = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL, *alt = NULL, *ico = NULL;
|
2009-08-21 08:08:49 -07:00
|
|
|
E_Border *bd;
|
2007-02-20 16:05:27 -08:00
|
|
|
E_Menu *subm;
|
2011-04-07 22:31:47 -07:00
|
|
|
E_Menu_Item *mi = NULL;
|
2007-02-20 16:05:27 -08:00
|
|
|
|
|
|
|
/* Deal with present desk first */
|
2009-08-21 08:08:49 -07:00
|
|
|
EINA_LIST_FOREACH(borders, l, bd)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if (bd->iconic && e_config->clientlist_separate_iconified_apps && E_CLIENTLIST_GROUPICONS_SEP)
|
|
|
|
{
|
|
|
|
ico = eina_list_append(ico, bd);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bd->desk != curr_desk)
|
|
|
|
{
|
|
|
|
if ((!bd->iconic) ||
|
|
|
|
(bd->iconic && e_config->clientlist_separate_iconified_apps ==
|
|
|
|
E_CLIENTLIST_GROUPICONS_OWNER))
|
|
|
|
{
|
|
|
|
alt = eina_list_append(alt, bd);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_int_menus_clients_item_create(bd, m);
|
2007-02-20 16:05:27 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
desk = NULL;
|
|
|
|
subm = NULL;
|
2012-06-20 23:19:43 -07:00
|
|
|
if (eina_list_count(alt) > 0)
|
2007-02-20 16:05:27 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(alt, l, bd)
|
|
|
|
{
|
|
|
|
if ((bd->desk != desk) &&
|
|
|
|
(e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE))
|
|
|
|
{
|
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
{
|
|
|
|
if (subm && mi) e_menu_item_submenu_set(mi, subm);
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, bd->desk->name);
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
|
|
|
subm = e_menu_new();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
|
|
|
desk = bd->desk;
|
|
|
|
}
|
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
|
|
|
_e_int_menus_clients_item_create(bd, subm);
|
|
|
|
else
|
|
|
|
_e_int_menus_clients_item_create(bd, m);
|
|
|
|
}
|
|
|
|
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU
|
|
|
|
&& (subm) && (mi))
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2007-02-20 16:05:27 -08:00
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-03-01 13:39:06 -08:00
|
|
|
_e_int_menus_clients_menu_add_iconified(ico, m);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_clients_add_by_none(Eina_List *borders, E_Menu *m)
|
2007-03-01 13:39:06 -08:00
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL, *ico = NULL;
|
2009-08-21 08:08:49 -07:00
|
|
|
E_Border *bd;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2009-08-21 08:08:49 -07:00
|
|
|
EINA_LIST_FOREACH(borders, l, bd)
|
2007-03-01 13:39:06 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if ((bd->iconic) && (e_config->clientlist_separate_iconified_apps) &&
|
2012-06-20 23:19:43 -07:00
|
|
|
(E_CLIENTLIST_GROUPICONS_SEP))
|
2012-07-30 03:50:50 -07:00
|
|
|
{
|
|
|
|
ico = eina_list_append(ico, bd);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
_e_int_menus_clients_item_create(bd, m);
|
2007-03-01 13:39:06 -08:00
|
|
|
}
|
|
|
|
_e_int_menus_clients_menu_add_iconified(ico, m);
|
2007-02-20 16:05:27 -08:00
|
|
|
}
|
|
|
|
|
2004-12-20 19:01:19 -08:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_clients_pre_cb(void *data __UNUSED__, E_Menu *m)
|
2004-12-20 19:01:19 -08:00
|
|
|
{
|
2006-10-18 05:17:29 -07:00
|
|
|
E_Menu *subm;
|
2011-04-07 22:31:47 -07:00
|
|
|
E_Menu_Item *mi = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l = NULL, *borders = NULL;
|
2009-08-21 08:08:49 -07:00
|
|
|
E_Border *border;
|
2005-04-24 12:56:42 -07:00
|
|
|
E_Zone *zone = NULL;
|
2006-08-21 13:03:09 -07:00
|
|
|
E_Desk *desk = NULL;
|
2006-10-18 05:17:29 -07:00
|
|
|
Main_Data *dat;
|
2004-12-20 19:01:19 -08:00
|
|
|
|
2005-01-12 00:45:28 -08:00
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
2005-03-15 02:26:05 -08:00
|
|
|
/* get the current clients */
|
2007-02-20 16:05:27 -08:00
|
|
|
zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
|
2009-03-15 12:12:50 -07:00
|
|
|
desk = e_desk_current_get(zone);
|
2007-03-01 13:39:06 -08:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_MOST_RECENT)
|
|
|
|
l = e_border_focus_stack_get();
|
2007-03-01 13:39:06 -08:00
|
|
|
else
|
|
|
|
l = e_border_client_list();
|
2009-08-21 08:08:49 -07:00
|
|
|
EINA_LIST_FOREACH(l, l, border)
|
2004-12-20 19:01:19 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if (border->user_skip_winlist) continue;
|
|
|
|
if ((border->zone == zone) || (border->iconic) ||
|
|
|
|
(border->zone != zone && e_config->clientlist_include_all_zones))
|
|
|
|
borders = eina_list_append(borders, border);
|
2004-12-20 19:01:19 -08:00
|
|
|
}
|
2005-03-15 02:26:05 -08:00
|
|
|
|
2006-12-03 13:25:47 -08:00
|
|
|
dat = (Main_Data *)e_object_data_get(E_OBJECT(m));
|
|
|
|
if (!dat) e_menu_title_set(m, _("Windows"));
|
|
|
|
|
2004-12-21 07:17:01 -08:00
|
|
|
if (!borders)
|
2009-03-15 12:12:50 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
/* FIXME here we want nothing, but that crashes!!! */
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("(No Windows)"));
|
2004-12-21 07:17:01 -08:00
|
|
|
}
|
2007-02-20 16:05:27 -08:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
if (borders)
|
2004-12-20 19:01:19 -08:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
/* Sort the borders */
|
|
|
|
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ALPHA)
|
2012-06-20 23:19:43 -07:00
|
|
|
borders = eina_list_sort(borders, eina_list_count(borders),
|
2008-03-25 09:48:14 -07:00
|
|
|
_e_int_menus_clients_sort_alpha_cb);
|
2007-02-20 16:05:27 -08:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ZORDER)
|
|
|
|
borders = eina_list_sort(borders, eina_list_count(borders),
|
2008-03-25 09:48:14 -07:00
|
|
|
_e_int_menus_clients_sort_z_order_cb);
|
2007-03-01 13:39:06 -08:00
|
|
|
|
2012-07-30 03:50:50 -07:00
|
|
|
/* Group the borders */
|
2007-02-20 16:05:27 -08:00
|
|
|
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_DESK)
|
2012-07-30 03:50:50 -07:00
|
|
|
{
|
2012-06-20 23:19:43 -07:00
|
|
|
borders = eina_list_sort(borders, eina_list_count(borders),
|
2008-03-25 09:48:14 -07:00
|
|
|
_e_int_menus_clients_group_desk_cb);
|
2007-03-01 13:39:06 -08:00
|
|
|
_e_int_menus_clients_add_by_desk(desk, borders, m);
|
2012-07-30 03:50:50 -07:00
|
|
|
}
|
2012-06-20 23:19:43 -07:00
|
|
|
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_CLASS)
|
2012-07-30 03:50:50 -07:00
|
|
|
{
|
|
|
|
borders = eina_list_sort(borders, eina_list_count(borders),
|
2012-06-20 23:19:43 -07:00
|
|
|
_e_int_menus_clients_group_class_cb);
|
2012-07-30 03:50:50 -07:00
|
|
|
_e_int_menus_clients_add_by_class(borders, m);
|
|
|
|
}
|
|
|
|
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_NONE)
|
2008-03-25 09:48:14 -07:00
|
|
|
_e_int_menus_clients_add_by_none(borders, m);
|
2004-12-20 19:01:19 -08:00
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-02-11 22:09:58 -08:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-05-12 21:05:43 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Cleanup Windows"));
|
2009-03-04 18:39:50 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-system-windows");
|
2005-05-12 21:05:43 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_clients_cleanup_cb, zone);
|
2006-10-18 05:17:29 -07:00
|
|
|
|
2012-10-31 01:44:50 -07:00
|
|
|
if ((dat) && (e_config->screen_limits == E_SCREEN_LIMITS_COMPLETELY))
|
2006-10-18 07:56:22 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
|
|
|
|
subm = e_int_menus_lost_clients_new();
|
|
|
|
e_object_data_set(E_OBJECT(subm), e_object_data_get(E_OBJECT(m)));
|
|
|
|
dat->lost_clients = subm;
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Lost Windows"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-windows-lost");
|
|
|
|
e_menu_item_submenu_set(mi, subm);
|
2006-10-18 07:56:22 -07:00
|
|
|
}
|
2009-03-15 12:12:50 -07:00
|
|
|
|
2005-01-12 00:45:28 -08:00
|
|
|
e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_clients_free_hook);
|
|
|
|
e_object_data_set(E_OBJECT(m), borders);
|
2004-12-20 19:01:19 -08:00
|
|
|
}
|
|
|
|
|
2007-04-04 06:25:55 -07:00
|
|
|
static const char *
|
|
|
|
_e_int_menus_clients_title_abbrv(const char *title)
|
|
|
|
{
|
2012-11-01 02:18:50 -07:00
|
|
|
static char abbv[E_CLIENTLIST_MAX_CAPTION_LEN + 4];
|
2012-11-12 10:35:34 -08:00
|
|
|
char *abbvptr = abbv;
|
|
|
|
int str_len, len, len2, max_len;
|
2007-04-04 06:25:55 -07:00
|
|
|
|
2012-11-01 02:18:50 -07:00
|
|
|
if (!e_config->clientlist_limit_caption_len) return title;
|
2007-04-04 06:25:55 -07:00
|
|
|
|
2012-11-01 02:18:50 -07:00
|
|
|
max_len = e_config->clientlist_max_caption_len;
|
2012-11-12 10:35:34 -08:00
|
|
|
if (eina_unicode_utf8_get_len(title) <= max_len) return title;
|
|
|
|
|
2012-11-14 01:25:13 -08:00
|
|
|
memset(&abbv, 0, sizeof(abbv));
|
2012-11-12 10:35:34 -08:00
|
|
|
/* Advance to the end of the first half of the string. */
|
|
|
|
len = 0;
|
|
|
|
for (len2 = (max_len / 2) ; len2 ; len2--)
|
|
|
|
eina_unicode_utf8_get_next(title, &len);
|
|
|
|
|
|
|
|
strncat(abbvptr, title, len);
|
|
|
|
abbvptr += len;
|
|
|
|
|
|
|
|
/* Append the ellipsis char. */
|
|
|
|
strcpy(abbvptr, "\xE2\x80\xA6");
|
|
|
|
abbvptr += 3;
|
|
|
|
|
|
|
|
/* Advance to the start of the second half of the string */
|
|
|
|
len = str_len = strlen(title);
|
|
|
|
for (len2 = (max_len / 2) ; len2 ; len2--)
|
|
|
|
eina_unicode_utf8_get_prev(title, &len);
|
|
|
|
|
|
|
|
strncpy(abbvptr, title + len, str_len);
|
|
|
|
abbvptr[str_len] = '\0';
|
2012-11-01 02:18:50 -07:00
|
|
|
|
|
|
|
return abbv;
|
2007-04-04 06:25:55 -07:00
|
|
|
}
|
|
|
|
|
2006-08-21 13:03:09 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_clients_item_create(E_Border *bd, E_Menu *m)
|
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
const char *title;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-04-04 06:25:55 -07:00
|
|
|
title = _e_int_menus_clients_title_abbrv(e_border_name_get(bd));
|
2006-08-21 13:03:09 -07:00
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_check_set(mi, 1);
|
|
|
|
if ((title) && (title[0]))
|
|
|
|
e_menu_item_label_set(mi, title);
|
|
|
|
else
|
|
|
|
e_menu_item_label_set(mi, _("No name!!"));
|
|
|
|
/* ref the border as we implicitly unref it in the callback */
|
|
|
|
e_object_ref(E_OBJECT(bd));
|
|
|
|
/* e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");*/
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd);
|
|
|
|
e_menu_item_realize_callback_set(mi, _e_int_menus_clients_icon_cb, bd);
|
|
|
|
if (!bd->iconic) e_menu_item_toggle_set(mi, 1);
|
|
|
|
}
|
|
|
|
|
2005-01-12 00:45:28 -08:00
|
|
|
static void
|
|
|
|
_e_int_menus_clients_free_hook(void *obj)
|
|
|
|
{
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *borders;
|
|
|
|
E_Border *bd;
|
2005-01-12 00:45:28 -08:00
|
|
|
E_Menu *m;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-01-12 00:45:28 -08:00
|
|
|
m = obj;
|
|
|
|
borders = e_object_data_get(E_OBJECT(m));
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
EINA_LIST_FREE(borders, bd)
|
2009-03-15 10:06:18 -07:00
|
|
|
e_object_unref(E_OBJECT(bd));
|
2005-01-12 00:45:28 -08:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_clients_item_cb(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2004-12-20 19:01:19 -08:00
|
|
|
{
|
2005-06-29 01:06:54 -07:00
|
|
|
E_Border *bd;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-06-29 01:06:54 -07:00
|
|
|
bd = data;
|
2005-01-05 02:39:31 -08:00
|
|
|
E_OBJECT_CHECK(bd);
|
2007-02-20 16:05:27 -08:00
|
|
|
|
2005-07-04 03:24:22 -07:00
|
|
|
if (bd->iconic)
|
|
|
|
{
|
2007-02-20 16:05:27 -08:00
|
|
|
if (e_config->clientlist_warp_to_iconified_desktop == 1)
|
|
|
|
e_desk_show(bd->desk);
|
2012-07-30 03:50:50 -07:00
|
|
|
if (!bd->lock_user_iconify)
|
|
|
|
e_border_uniconify(bd);
|
2005-07-04 03:24:22 -07:00
|
|
|
}
|
2007-02-20 16:05:27 -08:00
|
|
|
|
|
|
|
if (!bd->iconic) e_desk_show(bd->desk);
|
2008-03-25 09:48:14 -07:00
|
|
|
if (!bd->lock_user_stacking) e_border_raise(bd);
|
2005-07-04 03:24:22 -07:00
|
|
|
if (!bd->lock_focus_out)
|
2005-09-24 02:04:39 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if (e_config->focus_policy != E_FOCUS_CLICK)
|
|
|
|
ecore_x_pointer_warp(bd->zone->container->win,
|
|
|
|
bd->x + (bd->w / 2), bd->y + (bd->h / 2));
|
|
|
|
e_border_focus_set(bd, 1, 1);
|
2005-09-24 02:04:39 -07:00
|
|
|
}
|
2004-12-20 19:01:19 -08:00
|
|
|
}
|
2005-01-17 00:54:37 -08:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
2006-08-21 13:03:09 -07:00
|
|
|
_e_int_menus_clients_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
|
|
|
E_Border *bd;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-08-21 13:03:09 -07:00
|
|
|
bd = data;
|
|
|
|
E_OBJECT_CHECK(bd);
|
2012-06-13 02:08:54 -07:00
|
|
|
mi->icon_object = e_border_icon_add(bd, m->evas);
|
2006-08-21 13:03:09 -07:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_clients_cleanup_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2005-05-12 21:05:43 -07:00
|
|
|
{
|
2006-10-11 16:53:39 -07:00
|
|
|
E_Action *act;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-11 16:53:39 -07:00
|
|
|
act = e_action_find("cleanup_windows");
|
|
|
|
if (act) act->func.go(E_OBJECT(m->zone), NULL);
|
2005-05-12 21:05:43 -07:00
|
|
|
}
|
2005-01-17 00:54:37 -08:00
|
|
|
|
2005-06-19 05:35:05 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_lost_clients_pre_cb(void *data __UNUSED__, E_Menu *m)
|
2005-06-19 05:35:05 -07:00
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *borders = NULL;
|
2012-06-20 23:19:43 -07:00
|
|
|
E_Border *bd;
|
2005-06-19 05:35:05 -07:00
|
|
|
E_Menu *root;
|
|
|
|
E_Zone *zone = NULL;
|
|
|
|
|
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
|
|
|
root = e_menu_root_get(m);
|
|
|
|
/* get the current clients */
|
2008-03-25 09:48:14 -07:00
|
|
|
if (root) zone = root->zone;
|
2005-06-19 05:35:05 -07:00
|
|
|
borders = e_border_lost_windows_get(zone);
|
|
|
|
|
|
|
|
if (!borders)
|
2009-03-15 12:12:50 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
/* FIXME here we want nothing, but that crashes!!! */
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("(No Windows)"));
|
|
|
|
return;
|
2005-06-19 05:35:05 -07:00
|
|
|
}
|
2009-08-21 08:08:49 -07:00
|
|
|
EINA_LIST_FOREACH(borders, l, bd)
|
2005-06-19 05:35:05 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
const char *title = "";
|
|
|
|
|
|
|
|
title = e_border_name_get(bd);
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
if ((title) && (title[0]))
|
|
|
|
e_menu_item_label_set(mi, title);
|
|
|
|
else
|
|
|
|
e_menu_item_label_set(mi, _("No name!!"));
|
|
|
|
/* ref the border as we implicitly unref it in the callback */
|
|
|
|
e_object_ref(E_OBJECT(bd));
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_lost_clients_item_cb, bd);
|
|
|
|
if (bd->desktop)
|
2008-08-14 13:49:37 -07:00
|
|
|
e_util_desktop_menu_item_icon_add(bd->desktop, 24, mi);
|
2005-06-19 05:35:05 -07:00
|
|
|
}
|
2012-06-20 23:19:43 -07:00
|
|
|
e_object_free_attach_func_set(E_OBJECT(m),
|
2012-07-30 03:50:50 -07:00
|
|
|
_e_int_menus_lost_clients_free_hook);
|
2005-06-19 05:35:05 -07:00
|
|
|
e_object_data_set(E_OBJECT(m), borders);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_int_menus_lost_clients_free_hook(void *obj)
|
|
|
|
{
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *borders;
|
|
|
|
E_Border *bd;
|
2005-06-19 05:35:05 -07:00
|
|
|
E_Menu *m;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2005-06-19 05:35:05 -07:00
|
|
|
m = obj;
|
|
|
|
borders = e_object_data_get(E_OBJECT(m));
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
EINA_LIST_FREE(borders, bd)
|
2009-03-15 10:06:18 -07:00
|
|
|
e_object_unref(E_OBJECT(bd));
|
2005-06-19 05:35:05 -07:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
2010-08-18 11:15:31 -07:00
|
|
|
_e_int_menus_lost_clients_item_cb(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2005-06-19 05:35:05 -07:00
|
|
|
{
|
|
|
|
E_Border *bd = data;
|
|
|
|
|
|
|
|
E_OBJECT_CHECK(bd);
|
|
|
|
if (bd->iconic) e_border_uniconify(bd);
|
|
|
|
if (bd->desk) e_desk_show(bd->desk);
|
2009-04-22 19:24:59 -07:00
|
|
|
e_border_center(bd);
|
2005-06-19 05:35:05 -07:00
|
|
|
e_border_raise(bd);
|
2008-08-10 18:22:33 -07:00
|
|
|
if (!bd->lock_focus_out)
|
|
|
|
e_border_focus_set(bd, 1, 1);
|
2005-06-19 05:35:05 -07:00
|
|
|
}
|
2005-08-23 03:26:44 -07:00
|
|
|
|
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_augmentation_add(E_Menu *m, Eina_List *augmentation)
|
2005-08-23 03:26:44 -07:00
|
|
|
{
|
2009-03-15 10:06:18 -07:00
|
|
|
E_Int_Menu_Augmentation *aug;
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *l;
|
2010-02-27 09:04:55 -08:00
|
|
|
char *data;
|
2010-02-27 14:51:19 -08:00
|
|
|
|
|
|
|
if ((!augmentation) || (!m)) return;
|
2010-02-27 09:04:55 -08:00
|
|
|
EINA_LIST_FOREACH(_e_int_menus_augmentation_disabled, l, data)
|
|
|
|
if (eina_hash_find(_e_int_menus_augmentation, data) == augmentation)
|
|
|
|
return;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
EINA_LIST_FOREACH(augmentation, l, aug)
|
2009-03-15 10:06:18 -07:00
|
|
|
if (aug->add.func) aug->add.func(aug->add.data, m);
|
2005-08-23 03:26:44 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-10-22 04:49:33 -07:00
|
|
|
_e_int_menus_augmentation_del(E_Menu *m, Eina_List *augmentation)
|
2005-08-23 03:26:44 -07:00
|
|
|
{
|
2009-03-15 10:06:18 -07:00
|
|
|
E_Int_Menu_Augmentation *aug;
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *l;
|
2010-02-27 09:04:55 -08:00
|
|
|
char *data;
|
2010-02-27 14:51:19 -08:00
|
|
|
|
|
|
|
if ((!augmentation) || (!m)) return;
|
2010-02-27 09:04:55 -08:00
|
|
|
EINA_LIST_FOREACH(_e_int_menus_augmentation_disabled, l, data)
|
|
|
|
if (eina_hash_find(_e_int_menus_augmentation, data) == augmentation)
|
|
|
|
return;
|
2005-08-23 03:26:44 -07:00
|
|
|
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
EINA_LIST_FOREACH(augmentation, l, aug)
|
2009-03-15 10:06:18 -07:00
|
|
|
if (aug->del.func) aug->del.func(aug->del.data, m);
|
2005-08-23 03:26:44 -07:00
|
|
|
}
|
2006-10-15 18:58:06 -07:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_shelves_pre_cb(void *data __UNUSED__, E_Menu *m)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
|
|
|
E_Menu_Item *mi;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *shelves = NULL;
|
2012-09-07 05:03:23 -07:00
|
|
|
E_Shelf *es;
|
2006-10-15 18:58:06 -07:00
|
|
|
E_Container *con;
|
|
|
|
E_Zone *zone;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
|
|
|
con = e_container_current_get(e_manager_current_get());
|
|
|
|
zone = e_zone_current_get(con);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
/* get the current clients */
|
|
|
|
shelves = e_shelf_list();
|
2012-09-07 05:03:23 -07:00
|
|
|
EINA_LIST_FOREACH(shelves, l, es)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
const char *name;
|
|
|
|
char buf[4096];
|
|
|
|
|
2012-09-07 05:03:23 -07:00
|
|
|
if (!es) continue;
|
|
|
|
if (es->zone->num != zone->num) continue;
|
|
|
|
if (es->cfg->container != (int)con->num) continue;
|
2012-07-30 03:50:50 -07:00
|
|
|
|
2012-09-07 05:03:23 -07:00
|
|
|
name = e_shelf_orient_string_get(es);
|
2012-07-30 03:50:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "Shelf %s", name);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, buf);
|
2012-09-07 05:03:23 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_shelves_item_cb, es);
|
|
|
|
switch (es->cfg->orient)
|
2012-07-30 03:50:50 -07:00
|
|
|
{
|
|
|
|
case E_GADCON_ORIENT_LEFT:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-left");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_RIGHT:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-right");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_TOP:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-top");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_BOTTOM:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-bottom");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_TL:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-top-left");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_TR:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-top-right");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_BL:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-bottom-left");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_BR:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-bottom-right");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_LT:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-left-top");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_RT:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-right-top");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_LB:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-left-bottom");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_CORNER_RB:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-position-right-bottom");
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf");
|
|
|
|
break;
|
|
|
|
}
|
2006-10-15 18:58:06 -07:00
|
|
|
}
|
2012-09-07 05:03:23 -07:00
|
|
|
if (shelves)
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2006-10-15 18:58:06 -07:00
|
|
|
mi = e_menu_item_new(m);
|
2012-08-07 03:24:36 -07:00
|
|
|
e_menu_item_label_set(mi, _("Add a Shelf"));
|
2009-03-04 12:46:05 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "list-add");
|
2006-10-15 18:58:06 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_shelves_add_cb, NULL);
|
|
|
|
|
2006-12-30 15:42:03 -08:00
|
|
|
if (shelves)
|
2009-03-15 12:12:50 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
mi = e_menu_item_new(m);
|
2012-08-07 03:24:36 -07:00
|
|
|
e_menu_item_label_set(mi, _("Delete a Shelf"));
|
2012-07-30 03:50:50 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "list-remove");
|
|
|
|
e_menu_item_callback_set(mi, _e_int_menus_shelves_del_cb, NULL);
|
2009-03-04 12:46:05 -08:00
|
|
|
}
|
2006-10-15 18:58:06 -07:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_shelves_item_cb(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
|
|
|
E_Shelf *s = data;
|
|
|
|
|
|
|
|
E_OBJECT_CHECK(s);
|
|
|
|
e_int_shelf_config(s);
|
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_shelves_add_cb(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
|
|
|
E_Zone *zone;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-09-07 05:45:40 -07:00
|
|
|
zone = e_util_zone_current_get(e_manager_current_get());
|
|
|
|
e_shelf_new_dialog(zone);
|
2006-10-15 18:58:06 -07:00
|
|
|
}
|
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_shelves_del_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2006-10-15 18:58:06 -07:00
|
|
|
{
|
2007-07-04 04:11:03 -07:00
|
|
|
e_configure_registry_call("extensions/shelves", m->zone->container, NULL);
|
2006-10-15 18:58:06 -07:00
|
|
|
}
|
2007-07-09 11:12:56 -07:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
static void
|
|
|
|
_e_int_menus_item_label_set(Efreet_Menu *entry, E_Menu_Item *mi)
|
2007-07-09 11:12:56 -07:00
|
|
|
{
|
|
|
|
Efreet_Desktop *desktop;
|
|
|
|
char label[4096];
|
|
|
|
int opt = 0;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-07-09 11:12:56 -07:00
|
|
|
if ((!entry) || (!mi)) return;
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-07-09 11:12:56 -07:00
|
|
|
desktop = entry->desktop;
|
|
|
|
if ((e_config->menu_eap_name_show) && (entry->name)) opt |= 0x4;
|
2012-06-20 23:19:43 -07:00
|
|
|
if (desktop)
|
2007-07-09 11:12:56 -07:00
|
|
|
{
|
2012-07-30 03:50:50 -07:00
|
|
|
if ((e_config->menu_eap_generic_show) && (desktop->generic_name) &&
|
|
|
|
(desktop->generic_name[0] != 0))
|
|
|
|
opt |= 0x2;
|
|
|
|
if ((e_config->menu_eap_comment_show) && (desktop->comment) &&
|
|
|
|
(desktop->comment[0] != 0))
|
|
|
|
opt |= 0x1;
|
2007-07-09 11:12:56 -07:00
|
|
|
}
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2012-06-20 23:19:43 -07:00
|
|
|
if (opt == 0x7)
|
|
|
|
snprintf(label, sizeof(label), "%s (%s) [%s]", entry->name,
|
2008-03-25 09:48:14 -07:00
|
|
|
desktop->generic_name, desktop->comment);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x6)
|
|
|
|
snprintf(label, sizeof(label), "%s (%s)", entry->name,
|
2008-03-25 09:48:14 -07:00
|
|
|
desktop->generic_name);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x5)
|
2007-07-09 11:12:56 -07:00
|
|
|
snprintf(label, sizeof(label), "%s [%s]", entry->name, desktop->comment);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x4)
|
2007-07-09 11:12:56 -07:00
|
|
|
snprintf(label, sizeof(label), "%s", entry->name);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x3)
|
|
|
|
snprintf(label, sizeof(label), "%s [%s]", desktop->generic_name,
|
2008-03-25 09:48:14 -07:00
|
|
|
desktop->comment);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x2)
|
2007-07-09 11:12:56 -07:00
|
|
|
snprintf(label, sizeof(label), "%s", desktop->generic_name);
|
2012-06-20 23:19:43 -07:00
|
|
|
else if (opt == 0x1)
|
2007-07-09 11:12:56 -07:00
|
|
|
snprintf(label, sizeof(label), "%s", desktop->comment);
|
|
|
|
else
|
|
|
|
snprintf(label, sizeof(label), "%s", entry->name);
|
2008-03-25 09:48:14 -07:00
|
|
|
|
2007-07-09 11:12:56 -07:00
|
|
|
e_menu_item_label_set(mi, label);
|
|
|
|
}
|
2012-07-30 03:50:50 -07:00
|
|
|
|