make extra actions work. use them from illume.
SVN revision: 37811
This commit is contained in:
parent
3c66ab8d7a
commit
6cf459572f
|
@ -373,6 +373,36 @@ collections {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group { name: "e/icons/enlightenment/home";
|
||||||
|
images.image: "illume-home.png" COMP;
|
||||||
|
max: 96 96;
|
||||||
|
parts {
|
||||||
|
part { name: "icon";
|
||||||
|
repeat_events: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
aspect: 1.0 1.0;
|
||||||
|
aspect_preference: BOTH;
|
||||||
|
image.normal: "illume-home.png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
group { name: "e/icons/enlightenment/close";
|
||||||
|
images.image: "illume-close.png" COMP;
|
||||||
|
max: 96 96;
|
||||||
|
parts {
|
||||||
|
part { name: "icon";
|
||||||
|
repeat_events: 1;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
aspect: 1.0 1.0;
|
||||||
|
aspect_preference: BOTH;
|
||||||
|
image.normal: "illume-close.png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
group { name: "e/modules/slipshelf/controls/default";
|
group { name: "e/modules/slipshelf/controls/default";
|
||||||
images {
|
images {
|
||||||
image: "bt_base1.png" COMP;
|
image: "bt_base1.png" COMP;
|
||||||
|
|
|
@ -2705,6 +2705,33 @@ e_action_find(const char *name)
|
||||||
return act;
|
return act;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI const char *
|
||||||
|
e_action_predef_label_get(const char *action, const char *params)
|
||||||
|
{
|
||||||
|
E_Action_Group *actg = NULL;
|
||||||
|
E_Action_Description *actd = NULL;
|
||||||
|
Eina_List *l, *l2;
|
||||||
|
|
||||||
|
for (l = action_groups; l; l = l->next)
|
||||||
|
{
|
||||||
|
actg = l->data;
|
||||||
|
for (l2 = actg->acts; l2; l2 = l2->next)
|
||||||
|
{
|
||||||
|
actd = l2->data;
|
||||||
|
if (!strcmp(actd->act_cmd, action))
|
||||||
|
{
|
||||||
|
if ((params) && (actd->act_params) &&
|
||||||
|
(!strcmp(params, actd->act_params)))
|
||||||
|
{
|
||||||
|
return actd->act_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (params) return e_action_predef_label_get(action, NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_action_predef_name_set(const char *act_grp, const char *act_name, const char *act_cmd, const char *act_params, const char *param_example, int editable)
|
e_action_predef_name_set(const char *act_grp, const char *act_name, const char *act_cmd, const char *act_params, const char *param_example, int editable)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,6 +54,7 @@ EAPI E_Action *e_action_add(const char *name);
|
||||||
EAPI void e_action_del(const char *name);
|
EAPI void e_action_del(const char *name);
|
||||||
EAPI E_Action *e_action_find(const char *name);
|
EAPI E_Action *e_action_find(const char *name);
|
||||||
|
|
||||||
|
EAPI const char *e_action_predef_label_get(const char *action, const char *params);
|
||||||
EAPI void e_action_predef_name_set(const char *act_grp, const char *act_name, const char *act_cmd, const char *act_params, const char *param_example, int editable);
|
EAPI void e_action_predef_name_set(const char *act_grp, const char *act_name, const char *act_cmd, const char *act_params, const char *param_example, int editable);
|
||||||
EAPI void e_action_predef_name_del(const char *act_grp, const char *act_name);
|
EAPI void e_action_predef_name_del(const char *act_grp, const char *act_name);
|
||||||
EAPI void e_action_predef_name_all_del(void);
|
EAPI void e_action_predef_name_all_del(void);
|
||||||
|
|
|
@ -118,6 +118,46 @@ e_sys_action_do(E_Sys_Action a, char *param)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_List *extra_actions = NULL;
|
||||||
|
|
||||||
|
EAPI E_Sys_Con_Action *
|
||||||
|
e_sys_con_extra_action_register(const char *label,
|
||||||
|
const char *icon_group,
|
||||||
|
const char *button_name,
|
||||||
|
void (*func) (void *data),
|
||||||
|
const void *data)
|
||||||
|
{
|
||||||
|
E_Sys_Con_Action *sca;
|
||||||
|
|
||||||
|
sca = E_NEW(E_Sys_Con_Action, 1);
|
||||||
|
if (label)
|
||||||
|
sca->label = eina_stringshare_add(label);
|
||||||
|
if (icon_group)
|
||||||
|
sca->icon_group = eina_stringshare_add(icon_group);
|
||||||
|
if (button_name)
|
||||||
|
sca->button_name = eina_stringshare_add(button_name);
|
||||||
|
sca->func = func;
|
||||||
|
sca->data = data;
|
||||||
|
extra_actions = eina_list_append(extra_actions, sca);
|
||||||
|
return sca;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
e_sys_con_extra_action_unregister(E_Sys_Con_Action *sca)
|
||||||
|
{
|
||||||
|
extra_actions = eina_list_remove(extra_actions, sca);
|
||||||
|
if (sca->label) eina_stringshare_del(sca->label);
|
||||||
|
if (sca->icon_group) eina_stringshare_del(sca->icon_group);
|
||||||
|
if (sca->button_name) eina_stringshare_del(sca->button_name);
|
||||||
|
free(sca);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI const Eina_List *
|
||||||
|
e_sys_con_extra_action_list_get(void)
|
||||||
|
{
|
||||||
|
return extra_actions;
|
||||||
|
}
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static int
|
static int
|
||||||
_e_sys_cb_timer(void *data)
|
_e_sys_cb_timer(void *data)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
*/
|
*/
|
||||||
#ifdef E_TYPEDEFS
|
#ifdef E_TYPEDEFS
|
||||||
|
|
||||||
|
typedef struct _E_Sys_Con_Action E_Sys_Con_Action;
|
||||||
typedef enum _E_Sys_Action E_Sys_Action;
|
typedef enum _E_Sys_Action E_Sys_Action;
|
||||||
|
|
||||||
enum _E_Sys_Action
|
enum _E_Sys_Action
|
||||||
|
@ -19,6 +20,15 @@ enum _E_Sys_Action
|
||||||
E_SYS_HIBERNATE
|
E_SYS_HIBERNATE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _E_Sys_Con_Action
|
||||||
|
{
|
||||||
|
const char *label;
|
||||||
|
const char *icon_group;
|
||||||
|
const char *button_name;
|
||||||
|
void (*func) (void *data);
|
||||||
|
const void *data;
|
||||||
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifndef E_SYS_H
|
#ifndef E_SYS_H
|
||||||
#define E_SYS_H
|
#define E_SYS_H
|
||||||
|
@ -28,5 +38,13 @@ EAPI int e_sys_shutdown(void);
|
||||||
EAPI int e_sys_action_possible_get(E_Sys_Action a);
|
EAPI int e_sys_action_possible_get(E_Sys_Action a);
|
||||||
EAPI int e_sys_action_do(E_Sys_Action a, char *param);
|
EAPI int e_sys_action_do(E_Sys_Action a, char *param);
|
||||||
|
|
||||||
|
EAPI E_Sys_Con_Action *e_sys_con_extra_action_register(const char *label,
|
||||||
|
const char *icon_group,
|
||||||
|
const char *button_name,
|
||||||
|
void (*func) (void *data),
|
||||||
|
const void *data);
|
||||||
|
EAPI void e_sys_con_extra_action_unregister(E_Sys_Con_Action *sca);
|
||||||
|
EAPI const Eina_List *e_sys_con_extra_action_list_get(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,6 +39,8 @@ static int _cb_efreet_desktop_change(void *data, int type, void *event);
|
||||||
static void _apps_unpopulate(void);
|
static void _apps_unpopulate(void);
|
||||||
static void _apps_populate(void);
|
static void _apps_populate(void);
|
||||||
static int _cb_update_deferred(void *data);
|
static int _cb_update_deferred(void *data);
|
||||||
|
static void _cb_sys_con_close(void *data);
|
||||||
|
static void _cb_sys_con_home(void *data);
|
||||||
|
|
||||||
static void _e_illume_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
|
static void _e_illume_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
|
||||||
static void _e_illume_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
|
static void _e_illume_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
|
||||||
|
@ -69,6 +71,9 @@ static E_Flaunch *flaunch = NULL;
|
||||||
static E_Appwin *appwin = NULL;
|
static E_Appwin *appwin = NULL;
|
||||||
static E_Syswin *syswin = NULL;
|
static E_Syswin *syswin = NULL;
|
||||||
|
|
||||||
|
static E_Sys_Con_Action *sys_con_act_close = NULL;
|
||||||
|
static E_Sys_Con_Action *sys_con_act_home = NULL;
|
||||||
|
|
||||||
/* called from the module core */
|
/* called from the module core */
|
||||||
void
|
void
|
||||||
_e_mod_win_init(E_Module *m)
|
_e_mod_win_init(E_Module *m)
|
||||||
|
@ -144,11 +149,20 @@ _e_mod_win_init(E_Module *m)
|
||||||
_apps_unpopulate();
|
_apps_unpopulate();
|
||||||
_apps_populate();
|
_apps_populate();
|
||||||
e_configure_registry_custom_desktop_exec_callback_set(_cb_cfg_exec, NULL);
|
e_configure_registry_custom_desktop_exec_callback_set(_cb_cfg_exec, NULL);
|
||||||
|
|
||||||
|
sys_con_act_close = e_sys_con_extra_action_register
|
||||||
|
(_("Close"), "enlightenment/close", "button", _cb_sys_con_close, NULL);
|
||||||
|
sys_con_act_home = e_sys_con_extra_action_register
|
||||||
|
(_("Home"), "enlightenment/home", "button", _cb_sys_con_home, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_e_mod_win_shutdown(void)
|
_e_mod_win_shutdown(void)
|
||||||
{
|
{
|
||||||
|
e_sys_con_extra_action_unregister(sys_con_act_close);
|
||||||
|
sys_con_act_close = NULL;
|
||||||
|
e_sys_con_extra_action_unregister(sys_con_act_home);
|
||||||
|
sys_con_act_home = NULL;
|
||||||
e_object_del(E_OBJECT(flaunch));
|
e_object_del(E_OBJECT(flaunch));
|
||||||
flaunch = NULL;
|
flaunch = NULL;
|
||||||
if (busywin)
|
if (busywin)
|
||||||
|
@ -1107,6 +1121,44 @@ _cb_update_deferred(void *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_sys_con_close(void *data)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
bd = e_border_focused_get();
|
||||||
|
if (bd)
|
||||||
|
{
|
||||||
|
if (e_object_is_del(E_OBJECT(bd))) return;
|
||||||
|
if ((!bd->client.icccm.accepts_focus) &&
|
||||||
|
(!bd->client.icccm.take_focus)) return;
|
||||||
|
if (bd->client.netwm.state.skip_taskbar) return;
|
||||||
|
if (bd->user_skip_winlist) return;
|
||||||
|
_e_mod_layout_border_close(bd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_sys_con_home(void *data)
|
||||||
|
{
|
||||||
|
Eina_List *l, *borders;
|
||||||
|
|
||||||
|
borders = e_border_client_list();
|
||||||
|
for (l = borders; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
bd = l->data;
|
||||||
|
if (e_object_is_del(E_OBJECT(bd))) continue;
|
||||||
|
if ((!bd->client.icccm.accepts_focus) &&
|
||||||
|
(!bd->client.icccm.take_focus)) continue;
|
||||||
|
if (bd->client.netwm.state.skip_taskbar) continue;
|
||||||
|
if (bd->user_skip_winlist) continue;
|
||||||
|
_e_mod_layout_border_hide(bd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_illume_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
_e_illume_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,6 +13,7 @@ static int _cb_mouse_wheel(void *data, int type, void *event);
|
||||||
static void _cb_signal_close(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _cb_signal_close(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
static void _cb_signal_syscon(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _cb_signal_syscon(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
static void _cb_signal_action(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _cb_signal_action(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
|
static void _cb_signal_action_extra(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
static int _cb_timeout_defaction(void *data);
|
static int _cb_timeout_defaction(void *data);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
|
@ -163,7 +164,8 @@ e_syscon_show(E_Zone *zone, const char *defact)
|
||||||
else
|
else
|
||||||
e_theme_edje_object_set(o, "base/theme/widgets",
|
e_theme_edje_object_set(o, "base/theme/widgets",
|
||||||
"e/widgets/syscon/item/button");
|
"e/widgets/syscon/item/button");
|
||||||
// edje_object_part_text_set(o, "e.text.label", sca->action);
|
edje_object_part_text_set(o, "e.text.label",
|
||||||
|
e_action_predef_label_get(sca->action, sca->params));
|
||||||
if (sca->icon)
|
if (sca->icon)
|
||||||
{
|
{
|
||||||
o2 = edje_object_add(popup->evas);
|
o2 = edje_object_add(popup->evas);
|
||||||
|
@ -189,7 +191,37 @@ e_syscon_show(E_Zone *zone, const char *defact)
|
||||||
iw, ih, iw, ih);
|
iw, ih, iw, ih);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
}
|
}
|
||||||
// FIXME: "extra" list needs to be handled
|
for (l = (Eina_List *)e_sys_con_extra_action_list_get(); l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Sys_Con_Action *sca;
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
sca = l->data;
|
||||||
|
o = edje_object_add(popup->evas);
|
||||||
|
edje_object_signal_callback_add(o, "e,action,click", "", _cb_signal_action_extra, sca);
|
||||||
|
if (sca->button_name)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "e/widgets/syscon/item/%s",
|
||||||
|
sca->button_name);
|
||||||
|
e_theme_edje_object_set(o, "base/theme/widgets", buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e_theme_edje_object_set(o, "base/theme/widgets",
|
||||||
|
"e/widgets/syscon/item/button");
|
||||||
|
edje_object_part_text_set(o, "e.text.label", sca->label);
|
||||||
|
if (sca->icon_group)
|
||||||
|
{
|
||||||
|
o2 = edje_object_add(popup->evas);
|
||||||
|
e_util_edje_icon_set(o2, sca->icon_group);
|
||||||
|
edje_object_part_swallow(o, "e.swallow.icon", o2);
|
||||||
|
evas_object_show(o2);
|
||||||
|
}
|
||||||
|
e_flowlayout_pack_end(o_flow_extra, o);
|
||||||
|
iw = ih = e_config->syscon.extra.icon_size * e_scale;
|
||||||
|
e_flowlayout_pack_options_set(o, 1, 1, 0, 0, 0.5, 0.5,
|
||||||
|
iw, ih, iw, ih);
|
||||||
|
evas_object_show(o);
|
||||||
|
}
|
||||||
|
|
||||||
e_flowlayout_fill_set(o_flow_main, 1);
|
e_flowlayout_fill_set(o_flow_main, 1);
|
||||||
edje_object_part_swallow(o_bg, "e.swallow.main", o_flow_main);
|
edje_object_part_swallow(o_bg, "e.swallow.main", o_flow_main);
|
||||||
|
@ -391,6 +423,17 @@ _cb_signal_action(void *data, Evas_Object *obj, const char *emission, const char
|
||||||
if (a) a->func.go(NULL, sca->params);
|
if (a) a->func.go(NULL, sca->params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_signal_action_extra(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||||
|
{
|
||||||
|
E_Sys_Con_Action *sca;
|
||||||
|
|
||||||
|
e_syscon_hide();
|
||||||
|
sca = data;
|
||||||
|
if (!sca) return;
|
||||||
|
if (sca->func) sca->func((void *)sca->data);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_cb_timeout_defaction(void *data)
|
_cb_timeout_defaction(void *data)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue