Add different icons for different layout modes in mode-toggle module.
Add code to handle layout changes & update icon. Implement new Ecore_X Illume Modes. Make mode toggle actually cycle through modes and change accordingly. SVN revision: 44769
This commit is contained in:
parent
a3b7ffe569
commit
67a4f2caa0
|
@ -20,6 +20,7 @@ static void _il_ind_win_menu_append(Il_Ind_Win *iwin, E_Menu *mn);
|
||||||
static void _il_ind_win_cb_menu_pre(void *data, E_Menu *mn);
|
static void _il_ind_win_cb_menu_pre(void *data, E_Menu *mn);
|
||||||
static void _il_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc, E_Menu *mn);
|
static void _il_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc, E_Menu *mn);
|
||||||
static void _il_ind_win_cb_menu_contents(void *data, E_Menu *mn, E_Menu_Item *mi);
|
static void _il_ind_win_cb_menu_contents(void *data, E_Menu *mn, E_Menu_Item *mi);
|
||||||
|
static int _il_ind_win_is_locked(void);
|
||||||
|
|
||||||
static int my = 0;
|
static int my = 0;
|
||||||
|
|
||||||
|
@ -108,12 +109,16 @@ e_mod_ind_win_new(void)
|
||||||
e_gadcon_ecore_evas_set(iwin->gadcon, iwin->win->ecore_evas);
|
e_gadcon_ecore_evas_set(iwin->gadcon, iwin->win->ecore_evas);
|
||||||
e_gadcon_util_menu_attach_func_set(iwin->gadcon,
|
e_gadcon_util_menu_attach_func_set(iwin->gadcon,
|
||||||
_il_ind_win_cb_menu_items_append, iwin);
|
_il_ind_win_cb_menu_items_append, iwin);
|
||||||
|
|
||||||
e_gadcon_populate(iwin->gadcon);
|
e_gadcon_populate(iwin->gadcon);
|
||||||
|
|
||||||
e_win_size_min_set(iwin->win, zone->w, 32);
|
e_win_size_min_set(iwin->win, zone->w, 32);
|
||||||
e_win_show(iwin->win);
|
e_win_show(iwin->win);
|
||||||
|
|
||||||
|
if (_il_ind_win_is_locked())
|
||||||
|
ecore_x_e_illume_drag_locked_set(iwin->win->border->client.win, 1);
|
||||||
|
else
|
||||||
|
ecore_x_e_illume_drag_locked_set(iwin->win->border->client.win, 0);
|
||||||
|
|
||||||
return iwin;
|
return iwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,7 +225,7 @@ _il_ind_win_cb_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event)
|
||||||
|
|
||||||
if (bd->y != ny)
|
if (bd->y != ny)
|
||||||
{
|
{
|
||||||
e_border_move(bd, bd->x, ny);
|
e_border_move(bd, bd->zone->x, ny);
|
||||||
my = py;
|
my = py;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -348,3 +353,16 @@ _il_ind_win_cb_menu_contents(void *data, E_Menu *mn, E_Menu_Item *mi)
|
||||||
if (!iwin->gadcon->config_dialog)
|
if (!iwin->gadcon->config_dialog)
|
||||||
e_int_gadcon_config_shelf(iwin->gadcon);
|
e_int_gadcon_config_shelf(iwin->gadcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_il_ind_win_is_locked(void)
|
||||||
|
{
|
||||||
|
Ecore_X_Window xwin;
|
||||||
|
Ecore_X_Illume_Mode mode;
|
||||||
|
|
||||||
|
xwin = ecore_x_window_root_first_get();
|
||||||
|
mode = ecore_x_e_illume_mode_get(xwin);
|
||||||
|
if (mode == ECORE_X_ILLUME_MODE_DUAL_TOP)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
|
@ -7,6 +7,7 @@ struct _Instance
|
||||||
{
|
{
|
||||||
E_Gadcon_Client *gcc;
|
E_Gadcon_Client *gcc;
|
||||||
Evas_Object *o_btn;
|
Evas_Object *o_btn;
|
||||||
|
Ecore_Event_Handler *hdl;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* local function prototypes */
|
/* local function prototypes */
|
||||||
|
@ -17,6 +18,8 @@ static char *_gc_label(E_Gadcon_Client_Class *cc);
|
||||||
static Evas_Object *_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas);
|
static Evas_Object *_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas);
|
||||||
static const char *_gc_id_new(E_Gadcon_Client_Class *cc);
|
static const char *_gc_id_new(E_Gadcon_Client_Class *cc);
|
||||||
static void _cb_btn_click(void *data, void *data2);
|
static void _cb_btn_click(void *data, void *data2);
|
||||||
|
static int _cb_event_client_message(void *data, int type, void *event);
|
||||||
|
static void _set_icon(Instance *inst);
|
||||||
|
|
||||||
/* local variables */
|
/* local variables */
|
||||||
static Eina_List *instances = NULL;
|
static Eina_List *instances = NULL;
|
||||||
|
@ -61,20 +64,19 @@ static E_Gadcon_Client *
|
||||||
_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
||||||
{
|
{
|
||||||
Instance *inst;
|
Instance *inst;
|
||||||
Evas_Object *icon;
|
|
||||||
char buff[PATH_MAX];
|
|
||||||
|
|
||||||
snprintf(buff, sizeof(buff), "%s/e-module-illume-mode-toggle.edj", mod_dir);
|
|
||||||
inst = E_NEW(Instance, 1);
|
inst = E_NEW(Instance, 1);
|
||||||
|
|
||||||
inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL,
|
inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL,
|
||||||
_cb_btn_click, inst, NULL);
|
_cb_btn_click, inst, NULL);
|
||||||
icon = e_icon_add(evas_object_evas_get(inst->o_btn));
|
_set_icon(inst);
|
||||||
e_icon_file_edje_set(icon, buff, "icon");
|
|
||||||
e_widget_button_icon_set(inst->o_btn, icon);
|
|
||||||
|
|
||||||
inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_btn);
|
inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_btn);
|
||||||
inst->gcc->data = inst;
|
inst->gcc->data = inst;
|
||||||
|
|
||||||
|
inst->hdl = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
|
||||||
|
_cb_event_client_message, inst);
|
||||||
|
|
||||||
instances = eina_list_append(instances, inst);
|
instances = eina_list_append(instances, inst);
|
||||||
return inst->gcc;
|
return inst->gcc;
|
||||||
}
|
}
|
||||||
|
@ -87,6 +89,8 @@ _gc_shutdown(E_Gadcon_Client *gcc)
|
||||||
if (!(inst = gcc->data)) return;
|
if (!(inst = gcc->data)) return;
|
||||||
instances = eina_list_remove(instances, inst);
|
instances = eina_list_remove(instances, inst);
|
||||||
if (inst->o_btn) evas_object_del(inst->o_btn);
|
if (inst->o_btn) evas_object_del(inst->o_btn);
|
||||||
|
if (inst->hdl) ecore_event_handler_del(inst->hdl);
|
||||||
|
inst->hdl = NULL;
|
||||||
E_FREE(inst);
|
E_FREE(inst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,10 +137,45 @@ _cb_btn_click(void *data, void *data2)
|
||||||
|
|
||||||
xwin = ecore_x_window_root_first_get();
|
xwin = ecore_x_window_root_first_get();
|
||||||
mode = ecore_x_e_illume_mode_get(xwin);
|
mode = ecore_x_e_illume_mode_get(xwin);
|
||||||
if (mode <= ECORE_X_ILLUME_MODE_SINGLE)
|
mode += 1;
|
||||||
mode = ECORE_X_ILLUME_MODE_DUAL;
|
if (mode > ECORE_X_ILLUME_MODE_DUAL_LEFT)
|
||||||
else
|
|
||||||
mode = ECORE_X_ILLUME_MODE_SINGLE;
|
mode = ECORE_X_ILLUME_MODE_SINGLE;
|
||||||
ecore_x_e_illume_mode_set(xwin, mode);
|
ecore_x_e_illume_mode_set(xwin, mode);
|
||||||
ecore_x_e_illume_mode_send(xwin, mode);
|
ecore_x_e_illume_mode_send(xwin, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_cb_event_client_message(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
Ecore_X_Event_Client_Message *ev;
|
||||||
|
Instance *inst;
|
||||||
|
|
||||||
|
ev = event;
|
||||||
|
if (ev->message_type != ECORE_X_ATOM_E_ILLUME_MODE) return 1;
|
||||||
|
if (!(inst = data)) return 1;
|
||||||
|
_set_icon(inst);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_set_icon(Instance *inst)
|
||||||
|
{
|
||||||
|
Evas_Object *icon;
|
||||||
|
Ecore_X_Window xwin;
|
||||||
|
Ecore_X_Illume_Mode mode;
|
||||||
|
char buff[PATH_MAX];
|
||||||
|
|
||||||
|
snprintf(buff, sizeof(buff), "%s/e-module-illume-mode-toggle.edj", mod_dir);
|
||||||
|
icon = e_icon_add(evas_object_evas_get(inst->o_btn));
|
||||||
|
|
||||||
|
xwin = ecore_x_window_root_first_get();
|
||||||
|
mode = ecore_x_e_illume_mode_get(xwin);
|
||||||
|
if (mode == ECORE_X_ILLUME_MODE_SINGLE)
|
||||||
|
e_icon_file_edje_set(icon, buff, "single");
|
||||||
|
else if (mode == ECORE_X_ILLUME_MODE_DUAL_TOP)
|
||||||
|
e_icon_file_edje_set(icon, buff, "dual_top");
|
||||||
|
else if (mode == ECORE_X_ILLUME_MODE_DUAL_LEFT)
|
||||||
|
e_icon_file_edje_set(icon, buff, "dual_left");
|
||||||
|
|
||||||
|
e_widget_button_icon_set(inst->o_btn, icon);
|
||||||
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ void
|
||||||
e_mod_layout_init(void)
|
e_mod_layout_init(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
Ecore_X_Illume_Mode mode;
|
||||||
|
Ecore_X_Window xwin;
|
||||||
|
|
||||||
hook1 = e_border_hook_add(E_BORDER_HOOK_EVAL_POST_FETCH,
|
hook1 = e_border_hook_add(E_BORDER_HOOK_EVAL_POST_FETCH,
|
||||||
_e_mod_layout_cb_hook_post_fetch, NULL);
|
_e_mod_layout_cb_hook_post_fetch, NULL);
|
||||||
|
@ -53,6 +55,18 @@ e_mod_layout_init(void)
|
||||||
(handlers, ecore_event_handler_add
|
(handlers, ecore_event_handler_add
|
||||||
(ECORE_X_EVENT_CLIENT_MESSAGE, _cb_event_client_message, NULL));
|
(ECORE_X_EVENT_CLIENT_MESSAGE, _cb_event_client_message, NULL));
|
||||||
|
|
||||||
|
xwin = ecore_x_window_root_first_get();
|
||||||
|
if (il_cfg->policy.mode.dual == 0)
|
||||||
|
mode = ECORE_X_ILLUME_MODE_SINGLE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (il_cfg->policy.mode.side == 0)
|
||||||
|
mode = ECORE_X_ILLUME_MODE_DUAL_TOP;
|
||||||
|
else
|
||||||
|
mode = ECORE_X_ILLUME_MODE_DUAL_LEFT;
|
||||||
|
}
|
||||||
|
ecore_x_e_illume_mode_set(xwin, mode);
|
||||||
|
|
||||||
illume_layout_illume_init();
|
illume_layout_illume_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,17 +307,21 @@ _cb_event_client_message(void *data, int type, void *event)
|
||||||
|
|
||||||
if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
|
if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
|
||||||
il_cfg->policy.mode.dual = 0;
|
il_cfg->policy.mode.dual = 0;
|
||||||
else if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_DUAL)
|
else if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
|
||||||
|
{
|
||||||
il_cfg->policy.mode.dual = 1;
|
il_cfg->policy.mode.dual = 1;
|
||||||
|
il_cfg->policy.mode.side = 0;
|
||||||
|
lock = 0;
|
||||||
|
}
|
||||||
|
else if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
|
||||||
|
{
|
||||||
|
il_cfg->policy.mode.dual = 1;
|
||||||
|
il_cfg->policy.mode.side = 1;
|
||||||
|
}
|
||||||
else /* unknown */
|
else /* unknown */
|
||||||
il_cfg->policy.mode.dual = 0;
|
il_cfg->policy.mode.dual = 0;
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
|
||||||
if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_MODE_DUAL)
|
|
||||||
{
|
|
||||||
if (il_cfg->policy.mode.side == 0) lock = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
|
zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
|
||||||
bd = e_mod_border_top_shelf_get(zone);
|
bd = e_mod_border_top_shelf_get(zone);
|
||||||
if (bd)
|
if (bd)
|
||||||
|
|
|
@ -230,6 +230,7 @@ _drag_end(E_Border *bd)
|
||||||
{
|
{
|
||||||
/* HANDLE A BORDER DRAG BEING ENDED */
|
/* HANDLE A BORDER DRAG BEING ENDED */
|
||||||
ecore_x_e_illume_drag_set(bd->client.win, 0);
|
ecore_x_e_illume_drag_set(bd->client.win, 0);
|
||||||
|
// _zone_layout(bd->zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -19,6 +19,8 @@ EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume2" };
|
||||||
EAPI void *
|
EAPI void *
|
||||||
e_modapi_init(E_Module *m)
|
e_modapi_init(E_Module *m)
|
||||||
{
|
{
|
||||||
|
e_module_priority_set(m, 100);
|
||||||
|
|
||||||
/* init the config subsystem */
|
/* init the config subsystem */
|
||||||
if (!il_config_init(m)) return NULL;
|
if (!il_config_init(m)) return NULL;
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,12 @@ _il_config_policy_settings_change_timeout(void *data)
|
||||||
_ps_change_timer = NULL;
|
_ps_change_timer = NULL;
|
||||||
|
|
||||||
if (il_cfg->policy.mode.dual)
|
if (il_cfg->policy.mode.dual)
|
||||||
mode = ECORE_X_ILLUME_MODE_DUAL;
|
{
|
||||||
|
if (il_cfg->policy.mode.side == 0)
|
||||||
|
mode = ECORE_X_ILLUME_MODE_DUAL_TOP;
|
||||||
|
else
|
||||||
|
mode = ECORE_X_ILLUME_MODE_DUAL_LEFT;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
mode = ECORE_X_ILLUME_MODE_SINGLE;
|
mode = ECORE_X_ILLUME_MODE_SINGLE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue