diff options
Diffstat (limited to 'src/ui/util.c')
-rw-r--r-- | src/ui/util.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/ui/util.c b/src/ui/util.c index 04dbe190..adb3c4b4 100644 --- a/src/ui/util.c +++ b/src/ui/util.c | |||
@@ -517,14 +517,21 @@ iWidget *makeMenu_Widget(iWidget *parent, const iMenuItem *items, size_t n) { | |||
517 | } | 517 | } |
518 | 518 | ||
519 | void openMenu_Widget(iWidget *d, iInt2 coord) { | 519 | void openMenu_Widget(iWidget *d, iInt2 coord) { |
520 | openMenuFlags_Widget(d, coord, iTrue); | ||
521 | } | ||
522 | |||
523 | void openMenuFlags_Widget(iWidget *d, iInt2 coord, iBool postCommands) { | ||
520 | const iInt2 rootSize = rootSize_Window(get_Window()); | 524 | const iInt2 rootSize = rootSize_Window(get_Window()); |
521 | const iBool isPortraitPhone = (deviceType_App() == phone_AppDeviceType && isPortrait_App()); | 525 | const iBool isPortraitPhone = (deviceType_App() == phone_AppDeviceType && isPortrait_App()); |
522 | const iBool isSlidePanel = (flags_Widget(d) & horizontalOffset_WidgetFlag) != 0; | 526 | const iBool isSlidePanel = (flags_Widget(d) & horizontalOffset_WidgetFlag) != 0; |
527 | if (postCommands) { | ||
528 | postCommand_App("cancel"); /* dismiss any other menus */ | ||
529 | } | ||
523 | /* Menu closes when commands are emitted, so handle any pending ones beforehand. */ | 530 | /* Menu closes when commands are emitted, so handle any pending ones beforehand. */ |
524 | postCommand_App("cancel"); /* dismiss any other menus */ | ||
525 | processEvents_App(postedEventsOnly_AppEventMode); | 531 | processEvents_App(postedEventsOnly_AppEventMode); |
526 | setFlags_Widget(d, hidden_WidgetFlag | disabled_WidgetFlag, iFalse); | 532 | setFlags_Widget(d, hidden_WidgetFlag | disabled_WidgetFlag, iFalse); |
527 | setFlags_Widget(d, commandOnMouseMiss_WidgetFlag, iTrue); | 533 | setFlags_Widget(d, commandOnMouseMiss_WidgetFlag, iTrue); |
534 | raise_Widget(d); | ||
528 | setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iFalse); | 535 | setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iFalse); |
529 | if (isPortraitPhone) { | 536 | if (isPortraitPhone) { |
530 | setFlags_Widget(d, arrangeWidth_WidgetFlag | resizeChildrenToWidestChild_WidgetFlag, iFalse); | 537 | setFlags_Widget(d, arrangeWidth_WidgetFlag | resizeChildrenToWidestChild_WidgetFlag, iFalse); |
@@ -576,7 +583,7 @@ void openMenu_Widget(iWidget *d, iInt2 coord) { | |||
576 | float l, t, r, b; | 583 | float l, t, r, b; |
577 | safeAreaInsets_iOS(&l, &t, &r, &b); | 584 | safeAreaInsets_iOS(&l, &t, &r, &b); |
578 | topExcess += t; | 585 | topExcess += t; |
579 | bottomExcess += b; | 586 | bottomExcess += iMax(b, get_Window()->keyboardHeight); |
580 | leftExcess += l; | 587 | leftExcess += l; |
581 | rightExcess += r; | 588 | rightExcess += r; |
582 | } | 589 | } |
@@ -594,7 +601,9 @@ void openMenu_Widget(iWidget *d, iInt2 coord) { | |||
594 | d->rect.pos.x += leftExcess; | 601 | d->rect.pos.x += leftExcess; |
595 | } | 602 | } |
596 | postRefresh_App(); | 603 | postRefresh_App(); |
597 | postCommand_Widget(d, "menu.opened"); | 604 | if (postCommands) { |
605 | postCommand_Widget(d, "menu.opened"); | ||
606 | } | ||
598 | if (isPortraitPhone) { | 607 | if (isPortraitPhone) { |
599 | setVisualOffset_Widget(d, isSlidePanel ? width_Widget(d) : height_Widget(d), 0, 0); | 608 | setVisualOffset_Widget(d, isSlidePanel ? width_Widget(d) : height_Widget(d), 0, 0); |
600 | setVisualOffset_Widget(d, 0, 330, easeOut_AnimFlag | softer_AnimFlag); | 609 | setVisualOffset_Widget(d, 0, 330, easeOut_AnimFlag | softer_AnimFlag); |