summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel AINS <lains@caramail.com>2018-10-29 08:25:19 +0100
committerLionel AINS <lains@caramail.com>2018-10-29 08:25:19 +0100
commit91a8f7a2b661770453162241f5be38078f6565a3 (patch)
tree52c5ee9b53d9da68a9a3517088568d34684e39f2
parent59948f00ece870973facf2df0e45afd0c3088702 (diff)
downloadnavit-91a8f7a2b661770453162241f5be38078f6565a3.tar.gz
Adding virtual keyboard resize handler, improving resize for menu topbox
-rw-r--r--navit/gui/internal/gui_internal_keyboard.c11
-rw-r--r--navit/gui/internal/gui_internal_menu.c26
2 files changed, 20 insertions, 17 deletions
diff --git a/navit/gui/internal/gui_internal_keyboard.c b/navit/gui/internal/gui_internal_keyboard.c
index 4b2c64cd8..b0c87ce39 100644
--- a/navit/gui/internal/gui_internal_keyboard.c
+++ b/navit/gui/internal/gui_internal_keyboard.c
@@ -133,6 +133,16 @@ struct gui_internal_keyb_mode {
-> datai = (mode & VKBD_MASK_7) | ((x) & VKBD_LAYOUT_MASK)
#define SWCASE() MODE(gui_internal_keyb_modes[mode/8].case_mode)
#define UMLAUT() MODE(gui_internal_keyb_modes[mode/8].umlaut_mode)
+
+static void gui_internal_keyboard_topbox_resize(struct gui_priv *this, struct widget *w, void *data, int neww, int newh) {
+ struct menu_data *md=gui_internal_menu_data(this);
+ struct widget *old_wkbdb = md->keyboard;
+
+ dbg(lvl_error, "gui_internal_keyboard_topbox_resize called on %p with w=%d, h=%d", w, neww, newh);
+ dbg(lvl_error, "old keyboard widget was at %p", old_wkbdb);
+ gui_internal_keyboard_do(this, old_wkbdb, md->keyboard_mode);
+}
+
/**
* @brief Creates a new keyboard widget or switches the layout of an existing widget
*
@@ -176,6 +186,7 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode)
wkbd->cols=8;
wkbd->spx=0;
wkbd->spy=0;
+ wkbd->on_resize=gui_internal_keyboard_topbox_resize;
max_w=max_w/8;
max_h=max_h/8; // Allows 3 results in the list when searching for Towns
wkbd->p.y=max_h*2;
diff --git a/navit/gui/internal/gui_internal_menu.c b/navit/gui/internal/gui_internal_menu.c
index 7225c96b0..40eb66690 100644
--- a/navit/gui/internal/gui_internal_menu.c
+++ b/navit/gui/internal/gui_internal_menu.c
@@ -126,6 +126,8 @@ void gui_internal_prune_menu_count(struct gui_priv *this, int count, int render)
void gui_internal_menu_topbox_resize(struct gui_priv *this, struct widget *w, void *data, int neww, int newh) {
w->w=neww;
w->h=newh;
+ gui_internal_box_resize(this, w, data, w->w, w->h);
+ /* Note: this widget and its children have been resized, a call to gui_internal_box_render() needs to be done by the caller */
}
void gui_internal_menu_menu_resize(struct gui_priv *this, struct widget *w, void *data, int neww, int newh) {
@@ -146,6 +148,8 @@ void gui_internal_menu_menu_resize(struct gui_priv *this, struct widget *w, void
w->w = neww;
w->h = newh;
}
+ gui_internal_box_resize(this, w, data, w->w, w->h);
+ /* Note: this widget and its children have been resized, a call to gui_internal_box_render() needs to be done by the caller */
}
/**
@@ -262,26 +266,14 @@ void gui_internal_menu_render(struct gui_priv *this) {
void gui_internal_menu_resize(struct gui_priv *this, int w, int h) {
GList *l;
- struct widget *menu;
- struct widget *topbox;
- struct widget *wb;
+ struct widget *menu_topwidget;
gui_internal_apply_config(this);
l=g_list_last(this->root.children);
- menu=l->data;
- /* Search for the topbox widget */
- l=g_list_first(menu->children);
- topbox=l->data;
- if (menu->on_resize)
- menu->on_resize(this, menu, NULL, topbox->w, topbox->h);
- if (topbox->on_resize)
- topbox->on_resize(this, topbox, NULL, this->root.w, this->root.h);
- l=topbox->children;
- while (l) {
- wb=l->data;
- if (wb->on_resize)
- wb->on_resize(this, wb, NULL, topbox->w, topbox->h);
- l=g_list_next(l);
+ menu_topwidget=l->data;
+ if (menu_topwidget->on_resize) {
+ dbg(lvl_error, "Invoking resize handler for menu_topwidget at %p", menu_topwidget);
+ menu_topwidget->on_resize(this, menu_topwidget, NULL, this->root.w, this->root.h);
}
}