diff options
author | Sebastian Leske <sebastian.leske@sleske.name> | 2016-05-27 08:56:45 +0200 |
---|---|---|
committer | Sebastian Leske <sebastian.leske@sleske.name> | 2016-05-31 22:35:48 +0200 |
commit | dce47eec67da325662603f47b03dfc53a8e1f957 (patch) | |
tree | d3a50aa61288d9673db5d175651b51a71e8a507f | |
parent | bd2e244ea877f242efbd02412f22aaa6a50fd2ab (diff) | |
download | navit-dce47eec67da325662603f47b03dfc53a8e1f957.tar.gz |
Fix:gui_internal:Repair "Set distance to"/"Get more" menu items. Fixes #1342.
During table rendering, do not disable off-screen table entries by
toggling STATE_SENSITIVE. Doing so breaks the menu items "Set distance to"/
"Get more"; these must never be STATE_SENSITIVE, since their sub-widgets
should receive clicks.
Instead, use STATE_OFFSCREEN to mark off-screen entries and skip them
during traversal with a rotary encoder.
-rw-r--r-- | navit/gui/internal/gui_internal.c | 7 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal.h | 1 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_widget.c | 10 |
3 files changed, 12 insertions, 6 deletions
diff --git a/navit/gui/internal/gui_internal.c b/navit/gui/internal/gui_internal.c index a3a7b2994..2437ddee5 100644 --- a/navit/gui/internal/gui_internal.c +++ b/navit/gui/internal/gui_internal.c @@ -2701,7 +2701,9 @@ gui_internal_keynav_point(struct widget *w, int dx, int dy, struct point *p) static struct widget* gui_internal_keynav_find_next_sensitive_child(struct widget *wi) { GList *l=wi->children; - if (wi && wi->state & STATE_SENSITIVE) + if (wi->state & STATE_OFFSCREEN) + return NULL; + if (wi->state & STATE_SENSITIVE) return wi; while (l) { struct widget* tmp = gui_internal_keynav_find_next_sensitive_child(l->data); @@ -2746,6 +2748,9 @@ gui_internal_keynav_find_prev(struct widget *wi, struct widget *current_highligh // Reached current widget; last widget found is the result. return RESULT_FOUND; } + // If widget is off-screen, do not recurse into it. + if (wi->state & STATE_OFFSCREEN) + return NO_RESULT_YET; if (wi->state & STATE_SENSITIVE) *result= wi; GList *l=wi->children; diff --git a/navit/gui/internal/gui_internal.h b/navit/gui/internal/gui_internal.h index 162fb296e..ea5ab79ae 100644 --- a/navit/gui/internal/gui_internal.h +++ b/navit/gui/internal/gui_internal.h @@ -8,6 +8,7 @@ struct gui_priv; #define STATE_CLEAR 32 #define STATE_EDITABLE 64 #define STATE_SCROLLABLE 128 +#define STATE_OFFSCREEN 256 #define GESTURE_RINGSIZE 100 diff --git a/navit/gui/internal/gui_internal_widget.c b/navit/gui/internal/gui_internal_widget.c index a4c859375..1dd28837f 100644 --- a/navit/gui/internal/gui_internal_widget.c +++ b/navit/gui/internal/gui_internal_widget.c @@ -1248,7 +1248,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) is_first_page=1; } - /* First, let's deactivate all columns that are in rows which are *before* + /* First, let's mark all columns as off-screen that are in rows which are *before* * our current page. * */ GList *row = w->children; @@ -1264,7 +1264,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) cur_column=g_list_next(cur_column)) { struct widget * cur_widget = (struct widget*) cur_column->data; - cur_widget->state &= ~STATE_SENSITIVE; + cur_widget->state |= STATE_OFFSCREEN; } row = g_list_next(row); } @@ -1308,7 +1308,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) /* We pack the widget before rendering to ensure that the x and y * coordinates get pushed down. */ - cur_widget->state |= STATE_SENSITIVE; + cur_widget->state &= ~STATE_OFFSCREEN; gui_internal_widget_pack(this,cur_widget); gui_internal_widget_render(this,cur_widget); @@ -1317,8 +1317,8 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) max_height = dim->height; } } else { - /* Deactivate contents that we don't have space for. */ - cur_widget->state &= ~STATE_SENSITIVE; + /* Mark contents that we don't have space for. */ + cur_widget->state |= STATE_OFFSCREEN; } } |