add ctrl+wheel playlist scrolling for scrolling between headers

This commit is contained in:
zmike 2014-12-02 20:46:34 -05:00
parent 12366be5aa
commit 191b1207d9
1 changed files with 58 additions and 0 deletions

View File

@ -2818,6 +2818,63 @@ slider_seek(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUS
empd_empdd_seek_call(empd_proxy, empd_songid, lround(val * empd_song_length));
}
static int
mouse_wheel(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Wheel *ev)
{
if (!queue_list_state) return ECORE_CALLBACK_RENEW;
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)
{
Elm_Object_Item *it, *pit, *pick;
int w;
elm_scroller_region_get(queue_list, NULL, NULL, &w, NULL);
/* FIXME: this should actually calc the height of an item for y */
it = elm_genlist_at_xy_item_get(queue_list, w / 2, 5, NULL);
if (!it) return ECORE_CALLBACK_RENEW;
pit = elm_genlist_item_parent_get(it);
if (!pit) pit = it; //already parent
if (!ev->z) return ECORE_CALLBACK_RENEW;
if (ev->z < 0) //up
{
if (pit != it) pick = pit;
else
{
pick = elm_genlist_item_prev_get(pit);
do
{
if (elm_genlist_item_parent_get(pick) != pit) break;
pick = elm_genlist_item_prev_get(pick);
} while (pick);
if (!pick)
pick = elm_genlist_first_item_get(queue_list);
}
}
else if (ev->z > 0)
{
if (pit != it)
{
pick = elm_genlist_item_next_get(pit);
if (pick)
pick = elm_genlist_item_parent_get(pick);
}
else
{
pick = elm_genlist_item_next_get(pit);
do
{
if (elm_genlist_item_parent_get(pick) != pit) break;
pick = elm_genlist_item_next_get(pick);
} while (pick);
}
if (!pick)
pick = elm_genlist_last_item_get(queue_list);
}
elm_genlist_item_bring_in(pick, ELM_GENLIST_ITEM_SCROLLTO_TOP);
return ECORE_CALLBACK_CANCEL;
}
return ECORE_CALLBACK_RENEW;
}
static int
mouse_down(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev EINA_UNUSED)
{
@ -3337,6 +3394,7 @@ main(int argc, char *argv[])
ecore_event_init();
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_KEY_DOWN, key_down, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, mouse_down, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_WHEEL, mouse_wheel, NULL);
elm_init(argc, argv);
elm_config_scale_set(1.3);