diff --git a/TODO b/TODO index 663e8aa78..d8ac17460 100644 --- a/TODO +++ b/TODO @@ -150,6 +150,8 @@ Some of the things (in very short form) that need to be done to E17... OPTIMISATIONS ------------------------------------------------------------------------------- +* add evas pre/post render callbacks per evas canvas and callbacks per object + for pre/post render too * optimize clock theme (speed/cpu) (rotation in edje??? or evas???) * evas could detect an image is scaled multiple times and keep a scaled copy that it could share in cache, and then punt the original back to cache. diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index 5bcdb9e12..8cf3c7296 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -1842,10 +1842,33 @@ static void _e_menu_reposition(E_Menu *m) { Evas_List *l, *tmp = NULL; + int parent_item_bottom; if (!m->parent_item) return; m->cur.x = m->parent_item->menu->cur.x + m->parent_item->menu->cur.w; - m->cur.y = m->parent_item->menu->cur.y + m->parent_item->y - m->container_y; + + parent_item_bottom = m->parent_item->menu->cur.y + m->parent_item->y; + if(m->cur.h > m->zone->h) + { + /* menu is larger than screen */ + if(parent_item_bottom > (m->zone->h / 2)) + /* more is shown if menu goes up */ + m->cur.y = (parent_item_bottom - (m->container_h + 1)); + else + /* more is shown if menu goes down */ + m->cur.y = parent_item_bottom - m->container_y; + } + else + { + /* menu is smaller than screen */ + if(((parent_item_bottom + m->cur.h - m->container_y) > m->zone->h) && + (parent_item_bottom > (m->zone->h / 2))) + /* menu is partially out of screen and more is shown if menu goes up */ + m->cur.y = (parent_item_bottom - (m->container_h + 1)); + else + m->cur.y = parent_item_bottom - m->container_y; + } + /* FIXME: this will suck for big menus */ for (l = _e_active_menus; l; l = l->next) { diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index 6d4366241..2109f8b4c 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -1240,7 +1240,7 @@ _ibar_inst_cb_drop(void *data, const char *type, void *event_info) e_dialog_button_focus_num(dia, 1); e_win_centered_set(dia->win, 1); e_dialog_show(dia); - return; + goto clean; } } else if (!strcmp(type, "text/uri-list")) @@ -1283,7 +1283,7 @@ _ibar_inst_cb_drop(void *data, const char *type, void *event_info) e_app_files_list_append(l, inst->ibar->apps); } } - + clean: evas_object_del(inst->ibar->o_drop); inst->ibar->o_drop = NULL; evas_object_del(inst->ibar->o_drop_over);