diff options
Diffstat (limited to 'apps/gui/bitmap/list.c')
-rw-r--r-- | apps/gui/bitmap/list.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/apps/gui/bitmap/list.c b/apps/gui/bitmap/list.c index 3a45a8124c..aad3eda98f 100644 --- a/apps/gui/bitmap/list.c +++ b/apps/gui/bitmap/list.c | |||
@@ -704,7 +704,7 @@ unsigned gui_synclist_do_touchscreen(struct gui_synclist * list) | |||
704 | enum screen_type screen; | 704 | enum screen_type screen; |
705 | struct viewport *parent; | 705 | struct viewport *parent; |
706 | short x, y; | 706 | short x, y; |
707 | int action, adj_y, line, line_height, list_start_item; | 707 | int action, adj_x, adj_y, line, line_height, list_start_item; |
708 | bool recurse; | 708 | bool recurse; |
709 | static int last_y = -1; | 709 | static int last_y = -1; |
710 | 710 | ||
@@ -714,6 +714,7 @@ unsigned gui_synclist_do_touchscreen(struct gui_synclist * list) | |||
714 | list_start_item = list->start_item[screen]; | 714 | list_start_item = list->start_item[screen]; |
715 | /* start with getting the action code and finding the click location */ | 715 | /* start with getting the action code and finding the click location */ |
716 | action = action_get_touchscreen_press(&x, &y); | 716 | action = action_get_touchscreen_press(&x, &y); |
717 | adj_x = x - parent->x; | ||
717 | adj_y = y - parent->y; | 718 | adj_y = y - parent->y; |
718 | 719 | ||
719 | 720 | ||
@@ -736,13 +737,17 @@ unsigned gui_synclist_do_touchscreen(struct gui_synclist * list) | |||
736 | line = 0; /* silence gcc 'used uninitialized' warning */ | 737 | line = 0; /* silence gcc 'used uninitialized' warning */ |
737 | if (click_loc & LIST) | 738 | if (click_loc & LIST) |
738 | { | 739 | { |
739 | /* selection needs to be corrected if items are only partially visible */ | 740 | if(!skinlist_get_item(&screens[screen], list, adj_x, adj_y, &line)) |
740 | line = (adj_y - y_offset) / line_height; | 741 | { |
741 | if (list_display_title(list, screen)) | 742 | /* selection needs to be corrected if items are only partially visible */ |
742 | line -= 1; /* adjust for the list title */ | 743 | line = (adj_y - y_offset) / line_height; |
744 | if (list_display_title(list, screen)) | ||
745 | line -= 1; /* adjust for the list title */ | ||
746 | } | ||
743 | if (line >= list->nb_items) | 747 | if (line >= list->nb_items) |
744 | return ACTION_NONE; | 748 | return ACTION_NONE; |
745 | list->selected_item = list_start_item+line; | 749 | list->selected_item = list_start_item+line; |
750 | |||
746 | gui_synclist_speak_item(list); | 751 | gui_synclist_speak_item(list); |
747 | } | 752 | } |
748 | if (action == BUTTON_TOUCHSCREEN) | 753 | if (action == BUTTON_TOUCHSCREEN) |