diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 0c5ef3e96..d6059914a 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -410,6 +410,7 @@ struct _E_Config_Gadcon_Client int seq, flags; } state_info; const char *style; + int orient; unsigned char autoscroll; unsigned char resizable; }; diff --git a/src/modules/gadman/e_mod_gadman.c b/src/modules/gadman/e_mod_gadman.c index 3809d10d8..8ac2d53e0 100644 --- a/src/modules/gadman/e_mod_gadman.c +++ b/src/modules/gadman/e_mod_gadman.c @@ -29,6 +29,9 @@ static void on_hide_stop(void *data __UNUSED__, Evas_Object *o __UNUSED__, static void on_menu_style_plain(void *data, E_Menu *m, E_Menu_Item *mi); static void on_menu_style_inset(void *data, E_Menu *m, E_Menu_Item *mi); +static void on_menu_style_float(void *data, E_Menu *m, E_Menu_Item *mi); +static void on_menu_style_horiz(void *data, E_Menu *m, E_Menu_Item *mi); +static void on_menu_style_vert(void *data, E_Menu *m, E_Menu_Item *mi); static void on_menu_layer_bg(void *data, E_Menu *m, E_Menu_Item *mi); static void on_menu_layer_top(void *data, E_Menu *m, E_Menu_Item *mi); static void on_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi); @@ -179,7 +182,7 @@ gadman_gadget_place(E_Config_Gadcon_Client *cf, int ontop) /* Call the client orientation function */ if (cc->func.orient) - cc->func.orient(gcc, E_GADCON_ORIENT_FLOAT); //TODO make this configurable per instance + cc->func.orient(gcc, gcc->cf->orient); return gcc; } @@ -661,6 +664,34 @@ _attach_menu(void *data, E_Gadcon_Client *gcc, E_Menu *menu) e_menu_item_toggle_set(mi, 1); e_menu_item_callback_set(mi, on_menu_style_inset, gcc); + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + /* orient */ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Free")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (gcc->cf->orient == E_GADCON_ORIENT_FLOAT) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, on_menu_style_float, gcc); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Horizontal")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (gcc->cf->orient == E_GADCON_ORIENT_HORIZ) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, on_menu_style_horiz, gcc); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Vertical")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (gcc->cf->orient == E_GADCON_ORIENT_VERT) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, on_menu_style_vert, gcc); + mi = e_menu_item_new(menu); e_menu_item_label_set(mi, _("Appearance")); e_util_menu_item_edje_icon_set(mi, "enlightenment/appearance"); @@ -828,6 +859,48 @@ on_menu_style_inset(void *data, E_Menu *m, E_Menu_Item *mi) e_config_save_queue(); } +static void +on_menu_style_float(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadcon_Client *gcc; + + gcc = data; + gcc->cf->orient = E_GADCON_ORIENT_FLOAT; + + if (gcc->client_class->func.orient) + gcc->client_class->func.orient(gcc, E_GADCON_ORIENT_FLOAT); + + e_config_save_queue(); +} + +static void +on_menu_style_horiz(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadcon_Client *gcc; + + gcc = data; + gcc->cf->orient = E_GADCON_ORIENT_HORIZ; + + if (gcc->client_class->func.orient) + gcc->client_class->func.orient(gcc, E_GADCON_ORIENT_HORIZ); + + e_config_save_queue(); +} + +static void +on_menu_style_vert(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadcon_Client *gcc; + + gcc = data; + gcc->cf->orient = E_GADCON_ORIENT_VERT; + + if (gcc->client_class->func.orient) + gcc->client_class->func.orient(gcc, E_GADCON_ORIENT_VERT); + + e_config_save_queue(); +} + static void on_menu_layer_bg(void *data, E_Menu *m, E_Menu_Item *mi) { diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index 83922b59e..2cde17d50 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -174,9 +174,13 @@ static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) { Instance *inst; - + static last = E_GADCON_ORIENT_HORIZ; + + if (orient != -1) + last = orient; + inst = gcc->data; - switch (orient) + switch (last) { case E_GADCON_ORIENT_FLOAT: case E_GADCON_ORIENT_HORIZ: @@ -510,7 +514,7 @@ _ibar_config_update(Config_Item *ci) inst->ibar->apps = e_order_new(buf); _ibar_fill(inst->ibar); _ibar_resize_handle(inst->ibar); - _gc_orient(inst->gcc, inst->gcc->gadcon->orient); + _gc_orient(inst->gcc, -1); for (i = inst->ibar->icons; i; i = i->next) { @@ -666,7 +670,7 @@ _ibar_cb_app_change(void *data, E_Order *eo) _ibar_fill(b); _ibar_resize_handle(b); if (b->inst) - _gc_orient(b->inst->gcc, b->inst->gcc->gadcon->orient); + _gc_orient(b->inst->gcc, -1); } static void @@ -719,7 +723,7 @@ _ibar_cb_menu_icon_remove(void *data, E_Menu *m, E_Menu_Item *mi) ic->ibar->icons = eina_list_remove(ic->ibar->icons, ic); _ibar_resize_handle(ic->ibar); gc = ic->ibar->inst->gcc; - _gc_orient(gc, gc->gadcon->orient); + _gc_orient(gc, -1); e_order_remove(ic->ibar->apps, ic->app); _ibar_icon_free(ic); } @@ -933,7 +937,7 @@ _ibar_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info ic->ibar->icons = eina_list_remove(ic->ibar->icons, ic); _ibar_resize_handle(ic->ibar); gc = ic->ibar->inst->gcc; - _gc_orient(gc, gc->gadcon->orient); + _gc_orient(gc, -1); e_order_remove(ic->ibar->apps, ic->app); _ibar_icon_free(ic); } @@ -1062,7 +1066,7 @@ _ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y) -1, -1 /* max */ ); _ibar_resize_handle(inst->ibar); - _gc_orient(inst->gcc, inst->gcc->gadcon->orient); + _gc_orient(inst->gcc, -1); } static void @@ -1121,7 +1125,7 @@ _ibar_inst_cb_leave(void *data, const char *type, void *event_info) inst->ibar->o_drop_over = NULL; _ibar_resize_handle(inst->ibar); e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); - _gc_orient(inst->gcc, inst->gcc->gadcon->orient); + _gc_orient(inst->gcc, -1); } static void @@ -1201,7 +1205,7 @@ _ibar_inst_cb_drop(void *data, const char *type, void *event_info) e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); _ibar_empty_handle(inst->ibar); _ibar_resize_handle(inst->ibar); - _gc_orient(inst->gcc, inst->gcc->gadcon->orient); + _gc_orient(inst->gcc, -1); }