add menu item to shelf menu to change orientation on the fly

SVN revision: 76311
This commit is contained in:
Mike Blumenkrantz 2012-09-07 13:44:25 +00:00
parent 97c96f891a
commit 620b6330cf
1 changed files with 89 additions and 6 deletions

View File

@ -59,6 +59,25 @@ static int orientations[] =
[E_GADCON_ORIENT_CORNER_RB] = 2
};
static const char *orient_names[] =
{
[E_GADCON_ORIENT_FLOAT] = "Float",
[E_GADCON_ORIENT_HORIZ] = "Horizontal",
[E_GADCON_ORIENT_VERT] = "Vertical",
[E_GADCON_ORIENT_LEFT] = "Left",
[E_GADCON_ORIENT_RIGHT] = "Right",
[E_GADCON_ORIENT_TOP] = "Top",
[E_GADCON_ORIENT_BOTTOM] = "Bottom",
[E_GADCON_ORIENT_CORNER_TL] = "Top-left Corner",
[E_GADCON_ORIENT_CORNER_TR] = "Top-right Corner",
[E_GADCON_ORIENT_CORNER_BL] = "Bottom-left Corner",
[E_GADCON_ORIENT_CORNER_BR] = "Bottom-right Corner",
[E_GADCON_ORIENT_CORNER_LT] = "Left-top Corner",
[E_GADCON_ORIENT_CORNER_RT] = "Right-top Corner",
[E_GADCON_ORIENT_CORNER_LB] = "Left-bottom Corner",
[E_GADCON_ORIENT_CORNER_RB] = "Right-bottom Corner"
};
EAPI int E_EVENT_SHELF_ADD = -1;
EAPI int E_EVENT_SHELF_DEL = -1;
@ -1484,6 +1503,7 @@ _e_shelf_menu_item_free(void *data)
es = e_object_data_get(data);
e_shelf_locked_set(es, 0);
e_object_unref(E_OBJECT(es));
}
static void
@ -1506,6 +1526,7 @@ _e_shelf_menu_append(E_Shelf *es, E_Menu *mn)
e_menu_item_label_set(mi, buf);
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf");
e_menu_pre_activate_callback_set(subm, _e_shelf_menu_pre_cb, es);
e_object_ref(E_OBJECT(es));
e_object_free_attach_func_set(E_OBJECT(mi), _e_shelf_menu_item_free);
e_object_data_set(E_OBJECT(mi), es);
e_menu_item_submenu_set(mi, subm);
@ -1696,12 +1717,6 @@ _e_shelf_cb_mouse_in(void *data, int type, void *event)
switch (es->gadcon->orient)
{
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
/* noop */
break;
case E_GADCON_ORIENT_LEFT:
case E_GADCON_ORIENT_CORNER_LT:
case E_GADCON_ORIENT_CORNER_LB:
@ -1741,6 +1756,13 @@ _e_shelf_cb_mouse_in(void *data, int type, void *event)
(ev->x >= es->x) && (ev->x <= (es->x + es->w)))
show = 1;
break;
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
default:
/* noop */
break;
}
if (show)
@ -1920,6 +1942,7 @@ _e_shelf_cb_hide_animator(void *data)
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
default:
break;
}
@ -1978,6 +2001,7 @@ _e_shelf_cb_hide_animator(void *data)
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
default:
break;
}
@ -2109,11 +2133,60 @@ _e_shelf_cb_menu_rename(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUS
_e_shelf_cb_menu_rename_cb);
}
static void
_e_shelf_cb_menu_orient(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Shelf *es = data;
E_Menu_Item *mii;
int orient = E_GADCON_ORIENT_LEFT;
Eina_List *l;
EINA_LIST_FOREACH(m->items, l, mii)
{
if (mi == mii)
{
E_Zone *zone;
E_Config_Shelf *cf_es;
if (es->cfg->orient == orient) return;
es->cfg->orient = orient;
zone = es->zone;
cf_es = es->cfg;
e_object_del(E_OBJECT(es));
e_shelf_config_new(zone, cf_es);
return;
}
orient++;
}
}
static void
_e_shelf_menu_orientation_pre_cb(void *data, E_Menu *m)
{
E_Menu_Item *mi;
E_Shelf *es = data;
int orient;
if (m->items) return;
for (orient = E_GADCON_ORIENT_LEFT; orient < E_GADCON_ORIENT_LAST; orient++)
{
mi = e_menu_item_new(m);
e_util_gadcon_orient_menu_item_icon_set(orient, mi);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
e_menu_item_label_set(mi, _(orient_names[orient]));
e_menu_item_callback_set(mi, _e_shelf_cb_menu_orient, es);
if (es->cfg->orient == orient)
e_menu_item_toggle_set(mi, 1);
}
}
static void
_e_shelf_menu_pre_cb(void *data, E_Menu *m)
{
E_Shelf *es;
E_Menu_Item *mi;
E_Menu *subm;
es = data;
e_menu_pre_activate_callback_set(m, NULL, NULL);
@ -2128,6 +2201,15 @@ _e_shelf_menu_pre_cb(void *data, E_Menu *m)
e_util_menu_item_theme_icon_set(mi, "configure");
e_menu_item_callback_set(mi, _e_shelf_cb_menu_config, es);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Orientation"));
e_menu_item_callback_set(mi, _e_shelf_cb_menu_config, es);
subm = e_menu_new();
e_menu_pre_activate_callback_set(subm, _e_shelf_menu_orientation_pre_cb, es);
e_object_data_set(E_OBJECT(subm), es);
e_menu_item_submenu_set(mi, subm);
e_object_unref(E_OBJECT(subm));
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
@ -2251,6 +2333,7 @@ _e_shelf_bindings_add(E_Shelf *es)
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
default:
/* noop */
break;