summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/color.c2
-rw-r--r--src/ui/inputwidget.c2
-rw-r--r--src/ui/listwidget.c2
-rw-r--r--src/ui/mobile.c89
-rw-r--r--src/ui/touch.c1
-rw-r--r--src/ui/util.c2
6 files changed, 64 insertions, 34 deletions
diff --git a/src/ui/color.c b/src/ui/color.c
index 6cbbdf28..a6ba18e4 100644
--- a/src/ui/color.c
+++ b/src/ui/color.c
@@ -305,7 +305,7 @@ void setThemePalette_Color(enum iColorTheme theme) {
305 0.4f)); 305 0.4f));
306 uiPalette_[uiMarked_ColorId ].a = 128; 306 uiPalette_[uiMarked_ColorId ].a = 128;
307 uiPalette_[uiMatching_ColorId].a = 128; 307 uiPalette_[uiMatching_ColorId].a = 128;
308 if (deviceType_App() == phone_AppDeviceType) { 308 if (deviceType_App() != desktop_AppDeviceType) {
309 copy_(uiInputBackground_ColorId, uiBackgroundSidebar_ColorId); 309 copy_(uiInputBackground_ColorId, uiBackgroundSidebar_ColorId);
310 copy_(uiInputFrame_ColorId, uiBackgroundSidebar_ColorId); 310 copy_(uiInputFrame_ColorId, uiBackgroundSidebar_ColorId);
311 copy_(uiInputFrameFocused_ColorId, uiBackgroundSidebar_ColorId); 311 copy_(uiInputFrameFocused_ColorId, uiBackgroundSidebar_ColorId);
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c
index fc843371..3b72cc60 100644
--- a/src/ui/inputwidget.c
+++ b/src/ui/inputwidget.c
@@ -306,7 +306,7 @@ static void updateMetrics_InputWidget_(iInputWidget *d) {
306 iWidget *w = as_Widget(d); 306 iWidget *w = as_Widget(d);
307 updateSizeForFixedLength_InputWidget_(d); 307 updateSizeForFixedLength_InputWidget_(d);
308 /* Caller must arrange the width, but the height is fixed. */ 308 /* Caller must arrange the width, but the height is fixed. */
309 w->rect.size.y = contentHeight_InputWidget_(d, iTrue) + 3 * padding_().y; /* TODO: Why 3x? */ 309 w->rect.size.y = contentHeight_InputWidget_(d, iTrue) + 3.0f * padding_().y; /* TODO: Why 3x? */
310 if (flags_Widget(w) & extraPadding_WidgetFlag) { 310 if (flags_Widget(w) & extraPadding_WidgetFlag) {
311 w->rect.size.y += 2 * gap_UI; 311 w->rect.size.y += 2 * gap_UI;
312 } 312 }
diff --git a/src/ui/listwidget.c b/src/ui/listwidget.c
index 95be44a0..a3406d48 100644
--- a/src/ui/listwidget.c
+++ b/src/ui/listwidget.c
@@ -414,7 +414,7 @@ static void draw_ListWidget_(const iListWidget *d) {
414 init_I2(blankWidth, d->itemHeight) }; 414 init_I2(blankWidth, d->itemHeight) };
415 iConstForEach(IntSet, v, &d->invalidItems) { 415 iConstForEach(IntSet, v, &d->invalidItems) {
416 const size_t index = *v.value; 416 const size_t index = *v.value;
417 if (contains_Range(&drawItems, index)) { 417 if (contains_Range(&drawItems, index) && index < size_PtrArray(&d->items)) {
418 const iListItem *item = constAt_PtrArray(&d->items, index); 418 const iListItem *item = constAt_PtrArray(&d->items, index);
419 const iRect itemRect = { init_I2(0, index * d->itemHeight - buf->origin), 419 const iRect itemRect = { init_I2(0, index * d->itemHeight - buf->origin),
420 init_I2(d->visBuf->texSize.x, d->itemHeight) }; 420 init_I2(d->visBuf->texSize.x, d->itemHeight) };
diff --git a/src/ui/mobile.c b/src/ui/mobile.c
index b1d4d71c..423e8cb5 100644
--- a/src/ui/mobile.c
+++ b/src/ui/mobile.c
@@ -35,10 +35,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
35# include "ios.h" 35# include "ios.h"
36#endif 36#endif
37 37
38static iBool useMobileSheetLayout_(void) {
39 return deviceType_App() != desktop_AppDeviceType;
40}
41
42static enum iFontId labelFont_(void) {
43 return deviceType_App() == phone_AppDeviceType ? defaultBig_FontId : defaultMedium_FontId;
44}
45
46static enum iFontId labelBoldFont_(void) {
47 return deviceType_App() == phone_AppDeviceType ? defaultBigBold_FontId : defaultMediumBold_FontId;
48}
49
38static void updatePanelSheetMetrics_(iWidget *sheet) { 50static void updatePanelSheetMetrics_(iWidget *sheet) {
39 iWidget *navi = findChild_Widget(sheet, "panel.navi"); 51 iWidget *navi = findChild_Widget(sheet, "panel.navi");
40 iWidget *naviPad = child_Widget(navi, 0); 52 iWidget *naviPad = child_Widget(navi, 0);
41 int naviHeight = lineHeight_Text(defaultBig_FontId) + 4 * gap_UI; 53 int naviHeight = lineHeight_Text(labelFont_()) + 4 * gap_UI;
42#if defined (iPlatformAppleMobile) 54#if defined (iPlatformAppleMobile)
43 float left, right, top, bottom; 55 float left, right, top, bottom;
44 safeAreaInsets_iOS(&left, &top, &right, &bottom); 56 safeAreaInsets_iOS(&left, &top, &right, &bottom);
@@ -70,16 +82,33 @@ static void unselectAllPanelButtons_(iWidget *topPanel) {
70static iBool mainDetailSplitHandler_(iWidget *mainDetailSplit, const char *cmd) { 82static iBool mainDetailSplitHandler_(iWidget *mainDetailSplit, const char *cmd) {
71 if (equal_Command(cmd, "window.resized")) { 83 if (equal_Command(cmd, "window.resized")) {
72 const iBool isPortrait = (deviceType_App() == phone_AppDeviceType && isPortrait_App()); 84 const iBool isPortrait = (deviceType_App() == phone_AppDeviceType && isPortrait_App());
73 const iRect safeRoot = safeRect_Root(mainDetailSplit->root); 85 const iRect safeRoot = safeRect_Root(mainDetailSplit->root);
74 setPos_Widget(mainDetailSplit, topLeft_Rect(safeRoot)); 86 setPos_Widget(mainDetailSplit, topLeft_Rect(safeRoot));
75 setFixedSize_Widget(mainDetailSplit, safeRoot.size); 87 setFixedSize_Widget(mainDetailSplit, safeRoot.size);
76 setFlags_Widget(mainDetailSplit, arrangeHorizontal_WidgetFlag, !isPortrait); 88 iWidget * sheet = parent_Widget(mainDetailSplit);
77 iWidget *detailStack = findChild_Widget(mainDetailSplit, "detailstack"); 89 iWidget * navi = findChild_Widget(sheet, "panel.navi");
78 setFlags_Widget(detailStack, expand_WidgetFlag, !isPortrait); 90 iWidget * detailStack = findChild_Widget(mainDetailSplit, "detailstack");
79 if (!isPortrait) { 91 const size_t numPanels = childCount_Widget(detailStack);
80 iWidget *topPanel = findChild_Widget(mainDetailSplit, "panel.top"); 92 const iBool isSideBySide = !isPortrait && numPanels > 0;
93 setFlags_Widget(mainDetailSplit, arrangeHorizontal_WidgetFlag, isSideBySide);
94 setFlags_Widget(detailStack, expand_WidgetFlag, isSideBySide);
95 setFlags_Widget(detailStack, hidden_WidgetFlag, numPanels == 0);
96 iWidget *topPanel = findChild_Widget(mainDetailSplit, "panel.top");
97 const int pad = isPortrait ? 0 : 3 * gap_UI;
98 if (isSideBySide) {
81 iAssert(topPanel); 99 iAssert(topPanel);
82 topPanel->rect.size.x = safeRoot.size.x * 2 / 5; 100 topPanel->rect.size.x = (deviceType_App() == phone_AppDeviceType ?
101 safeRoot.size.x * 2 / 5 : (safeRoot.size.x / 3));
102 }
103 if (deviceType_App() == tablet_AppDeviceType) {
104 setPadding_Widget(topPanel, pad, 0, pad, pad);
105 if (numPanels == 0) {
106 setFlags_Widget(sheet, centerHorizontal_WidgetFlag, iTrue);
107 const int sheetWidth = iMin(safeRoot.size.x, safeRoot.size.y);
108 mainDetailSplit->rect.size.x = sheetWidth;
109 setFixedSize_Widget(sheet, init_I2(sheetWidth, -1));
110 setFixedSize_Widget(navi, init_I2(sheetWidth, -1));
111 }
83 } 112 }
84 iForEach(ObjectList, i, children_Widget(detailStack)) { 113 iForEach(ObjectList, i, children_Widget(detailStack)) {
85 iWidget *panel = i.object; 114 iWidget *panel = i.object;
@@ -87,7 +116,6 @@ static iBool mainDetailSplitHandler_(iWidget *mainDetailSplit, const char *cmd)
87 if (!isPortrait) { 116 if (!isPortrait) {
88 setVisualOffset_Widget(panel, 0, 0, 0); 117 setVisualOffset_Widget(panel, 0, 0, 0);
89 } 118 }
90 const int pad = isPortrait ? 0 : 3 * gap_UI;
91 setPadding_Widget(panel, pad, 0, pad, pad); 119 setPadding_Widget(panel, pad, 0, pad, pad);
92 } 120 }
93 arrange_Widget(mainDetailSplit); 121 arrange_Widget(mainDetailSplit);
@@ -96,7 +124,7 @@ static iBool mainDetailSplitHandler_(iWidget *mainDetailSplit, const char *cmd)
96} 124}
97 125
98static iBool topPanelHandler_(iWidget *topPanel, const char *cmd) { 126static iBool topPanelHandler_(iWidget *topPanel, const char *cmd) {
99 const iBool isPortrait = deviceType_App() == phone_AppDeviceType && isPortrait_App(); 127 const iBool isPortrait = useMobileSheetLayout_() && isPortrait_App();
100 if (equal_Command(cmd, "panel.open")) { 128 if (equal_Command(cmd, "panel.open")) {
101 iWidget *button = pointer_Command(cmd); 129 iWidget *button = pointer_Command(cmd);
102 iWidget *panel = userData_Object(button); 130 iWidget *panel = userData_Object(button);
@@ -213,7 +241,7 @@ static iAnyObject *addPanelChild_(iWidget *panel, iAnyObject *child, int64_t fla
213 (elementType == textInput_PrefsElement && 241 (elementType == textInput_PrefsElement &&
214 precedingElementType != textInput_PrefsElement && 242 precedingElementType != textInput_PrefsElement &&
215 precedingElementType != heading_PrefsElement)) { 243 precedingElementType != heading_PrefsElement)) {
216 addChild_Widget(panel, iClob(makePadding_Widget(lineHeight_Text(defaultBig_FontId)))); 244 addChild_Widget(panel, iClob(makePadding_Widget(lineHeight_Text(labelFont_()))));
217 } 245 }
218 } 246 }
219 if ((elementType == toggle_PrefsElement && precedingElementType != toggle_PrefsElement) || 247 if ((elementType == toggle_PrefsElement && precedingElementType != toggle_PrefsElement) ||
@@ -242,7 +270,7 @@ static iLabelWidget *makePanelButton_(const char *text, const char *command) {
242 frameless_WidgetFlag | extraPadding_WidgetFlag, 270 frameless_WidgetFlag | extraPadding_WidgetFlag,
243 iTrue); 271 iTrue);
244 checkIcon_LabelWidget(btn); 272 checkIcon_LabelWidget(btn);
245 setFont_LabelWidget(btn, defaultBig_FontId); 273 setFont_LabelWidget(btn, labelFont_());
246 setTextColor_LabelWidget(btn, uiTextStrong_ColorId); 274 setTextColor_LabelWidget(btn, uiTextStrong_ColorId);
247 setBackgroundColor_Widget(as_Widget(btn), uiBackgroundSidebar_ColorId); 275 setBackgroundColor_Widget(as_Widget(btn), uiBackgroundSidebar_ColorId);
248 return btn; 276 return btn;
@@ -251,7 +279,7 @@ static iLabelWidget *makePanelButton_(const char *text, const char *command) {
251static iWidget *makeValuePadding_(iWidget *value) { 279static iWidget *makeValuePadding_(iWidget *value) {
252 iInputWidget *input = isInstance_Object(value, &Class_InputWidget) ? (iInputWidget *) value : NULL; 280 iInputWidget *input = isInstance_Object(value, &Class_InputWidget) ? (iInputWidget *) value : NULL;
253 if (input) { 281 if (input) {
254 setFont_InputWidget(input, defaultBig_FontId); 282 setFont_InputWidget(input, labelFont_());
255 setContentPadding_InputWidget(input, 3 * gap_UI, 3 * gap_UI); 283 setContentPadding_InputWidget(input, 3 * gap_UI, 3 * gap_UI);
256 } 284 }
257 iWidget *pad = new_Widget(); 285 iWidget *pad = new_Widget();
@@ -278,7 +306,7 @@ static iWidget *makeValuePaddingWithHeading_(iLabelWidget *heading, iWidget *val
278 setPadding_Widget(div, gap_UI, gap_UI, 4 * gap_UI, gap_UI); 306 setPadding_Widget(div, gap_UI, gap_UI, 4 * gap_UI, gap_UI);
279 addChildFlags_Widget(div, iClob(heading), 0); 307 addChildFlags_Widget(div, iClob(heading), 0);
280 //setFixedSize_Widget(as_Widget(heading), init_I2(-1, height_Widget(value))); 308 //setFixedSize_Widget(as_Widget(heading), init_I2(-1, height_Widget(value)));
281 setFont_LabelWidget(heading, defaultBig_FontId); 309 setFont_LabelWidget(heading, labelFont_());
282 setTextColor_LabelWidget(heading, uiTextStrong_ColorId); 310 setTextColor_LabelWidget(heading, uiTextStrong_ColorId);
283 if (isInstance_Object(value, &Class_InputWidget)) { 311 if (isInstance_Object(value, &Class_InputWidget)) {
284 addChildFlags_Widget(div, iClob(value), expand_WidgetFlag); 312 addChildFlags_Widget(div, iClob(value), expand_WidgetFlag);
@@ -331,7 +359,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
331 easier to create phone versions of each dialog, but at least this works with any 359 easier to create phone versions of each dialog, but at least this works with any
332 future changes to the UI (..."works"). At least this way it is possible to enforce 360 future changes to the UI (..."works"). At least this way it is possible to enforce
333 a consistent styling. */ 361 a consistent styling. */
334 if (deviceType_App() == phone_AppDeviceType && parent_Widget(sheet) == root_Widget(sheet)) { 362 if (useMobileSheetLayout_() && parent_Widget(sheet) == root_Widget(sheet)) {
335 if (~flags_Widget(sheet) & keepOnTop_WidgetFlag) { 363 if (~flags_Widget(sheet) & keepOnTop_WidgetFlag) {
336 /* Already finalized. */ 364 /* Already finalized. */
337 arrange_Widget(sheet); 365 arrange_Widget(sheet);
@@ -398,10 +426,10 @@ void finalizeSheet_Mobile(iWidget *sheet) {
398 } 426 }
399 iWidget *detailStack = new_Widget(); { 427 iWidget *detailStack = new_Widget(); {
400 setId_Widget(detailStack, "detailstack"); 428 setId_Widget(detailStack, "detailstack");
401 setFlags_Widget(detailStack, resizeWidthOfChildren_WidgetFlag, iTrue); 429 setFlags_Widget(detailStack, collapse_WidgetFlag | resizeWidthOfChildren_WidgetFlag, iTrue);
402 addChild_Widget(mainDetailSplit, iClob(detailStack)); 430 addChild_Widget(mainDetailSplit, iClob(detailStack));
403 } 431 }
404 addChild_Widget(topPanel, iClob(makePadding_Widget(lineHeight_Text(defaultBig_FontId)))); 432 addChild_Widget(topPanel, iClob(makePadding_Widget(lineHeight_Text(labelFont_()))));
405 /* Slide top panel with detail panels. */ { 433 /* Slide top panel with detail panels. */ {
406 setFlags_Widget(topPanel, refChildrenOffset_WidgetFlag, iTrue); 434 setFlags_Widget(topPanel, refChildrenOffset_WidgetFlag, iTrue);
407 topPanel->offsetRef = detailStack; 435 topPanel->offsetRef = detailStack;
@@ -433,7 +461,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
433 0x1f5a7, /* computer network */ 461 0x1f5a7, /* computer network */
434 }; 462 };
435 setIcon_LabelWidget(panelButton, icons[i]); 463 setIcon_LabelWidget(panelButton, icons[i]);
436// setFont_LabelWidget(panelButton, defaultBig_FontId); 464// setFont_LabelWidget(panelButton, labelFont_());
437// setBackgroundColor_Widget(as_Widget(panelButton), uiBackgroundSidebar_ColorId); 465// setBackgroundColor_Widget(as_Widget(panelButton), uiBackgroundSidebar_ColorId);
438 iRelease(page); 466 iRelease(page);
439 delete_String(text); 467 delete_String(text);
@@ -490,7 +518,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
490 } 518 }
491 if (isInstance_Object(value, &Class_LabelWidget)) { 519 if (isInstance_Object(value, &Class_LabelWidget)) {
492 valueLabel = (iLabelWidget *) value; 520 valueLabel = (iLabelWidget *) value;
493 setFont_LabelWidget(valueLabel, defaultBig_FontId); 521 setFont_LabelWidget(valueLabel, labelFont_());
494 } 522 }
495 if (isInstance_Object(value, &Class_InputWidget)) { 523 if (isInstance_Object(value, &Class_InputWidget)) {
496 valueInput = (iInputWidget *) value; 524 valueInput = (iInputWidget *) value;
@@ -505,7 +533,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
505 } 533 }
506 } 534 }
507 if (valueInput) { 535 if (valueInput) {
508 setFont_InputWidget(valueInput, defaultBig_FontId); 536 setFont_InputWidget(valueInput, labelFont_());
509 setContentPadding_InputWidget(valueInput, 3 * gap_UI, 0); 537 setContentPadding_InputWidget(valueInput, 3 * gap_UI, 0);
510 } 538 }
511 /* Toggles have the button on the right. */ 539 /* Toggles have the button on the right. */
@@ -541,7 +569,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
541 if (childCount_Widget(value) >= 2) { 569 if (childCount_Widget(value) >= 2) {
542 element = radioButton_PrefsElement; 570 element = radioButton_PrefsElement;
543 /* Always padding before radio buttons. */ 571 /* Always padding before radio buttons. */
544 addChild_Widget(owner, iClob(makePadding_Widget(lineHeight_Text(defaultBig_FontId)))); 572 addChild_Widget(owner, iClob(makePadding_Widget(lineHeight_Text(labelFont_()))));
545 } 573 }
546 addChildFlags_Widget(owner, iClob(heading), borderBottom_WidgetFlag); 574 addChildFlags_Widget(owner, iClob(heading), borderBottom_WidgetFlag);
547 if (headingLabel) { 575 if (headingLabel) {
@@ -577,13 +605,13 @@ void finalizeSheet_Mobile(iWidget *sheet) {
577 destroyPending_Root(sheet->root); 605 destroyPending_Root(sheet->root);
578 /* Additional elements for preferences. */ 606 /* Additional elements for preferences. */
579 if (isPrefs) { 607 if (isPrefs) {
580 addChild_Widget(topPanel, iClob(makePadding_Widget(lineHeight_Text(defaultBig_FontId)))); 608 addChild_Widget(topPanel, iClob(makePadding_Widget(lineHeight_Text(labelFont_()))));
581 addChildFlags_Widget(topPanel,
582 iClob(makePanelButton_(info_Icon " ${menu.help}", "!open url:about:help")),
583 borderTop_WidgetFlag);
584 iLabelWidget *aboutButton = addChildFlags_Widget(topPanel, 609 iLabelWidget *aboutButton = addChildFlags_Widget(topPanel,
585 iClob(makePanelButton_(planet_Icon " ${menu.about}", "panel.open")), 610 iClob(makePanelButton_(planet_Icon " ${menu.about}", "panel.open")),
586 chevron_WidgetFlag); 611 chevron_WidgetFlag);
612 addChildFlags_Widget(topPanel,
613 iClob(makePanelButton_(info_Icon " ${menu.help}", "!open url:about:help")),
614 borderTop_WidgetFlag);
587 /* The About panel. */ { 615 /* The About panel. */ {
588 iWidget *panel = addChildPanel_(detailStack, aboutButton, NULL); 616 iWidget *panel = addChildPanel_(detailStack, aboutButton, NULL);
589 iString *msg = collectNew_String(); 617 iString *msg = collectNew_String();
@@ -640,7 +668,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
640 alignLeft_WidgetFlag | extraPadding_WidgetFlag); 668 alignLeft_WidgetFlag | extraPadding_WidgetFlag);
641 checkIcon_LabelWidget(back); 669 checkIcon_LabelWidget(back);
642 setId_Widget(as_Widget(back), "panel.back"); 670 setId_Widget(as_Widget(back), "panel.back");
643 setFont_LabelWidget(back, defaultBig_FontId); 671 setFont_LabelWidget(back, labelFont_());
644 if (!isPrefs) { 672 if (!isPrefs) {
645 /* Pick up the dialog buttons for the navbar. */ 673 /* Pick up the dialog buttons for the navbar. */
646 iWidget *buttons = findChild_Widget(sheet, "dialogbuttons"); 674 iWidget *buttons = findChild_Widget(sheet, "dialogbuttons");
@@ -659,11 +687,11 @@ void finalizeSheet_Mobile(iWidget *sheet) {
659 setFlags_Widget(as_Widget(back), alignLeft_WidgetFlag, iFalse); 687 setFlags_Widget(as_Widget(back), alignLeft_WidgetFlag, iFalse);
660 setFlags_Widget(as_Widget(back), alignRight_WidgetFlag, iTrue); 688 setFlags_Widget(as_Widget(back), alignRight_WidgetFlag, iTrue);
661 setIcon_LabelWidget(back, 0); 689 setIcon_LabelWidget(back, 0);
662 setFont_LabelWidget(back, defaultBigBold_FontId); 690 setFont_LabelWidget(back, labelBoldFont_());
663 } 691 }
664 else if (def != cancel) { 692 else if (def != cancel) {
665 removeChild_Widget(buttons, def); 693 removeChild_Widget(buttons, def);
666 setFont_LabelWidget(def, defaultBigBold_FontId); 694 setFont_LabelWidget(def, labelBoldFont_());
667 setFlags_Widget(as_Widget(def), 695 setFlags_Widget(as_Widget(def),
668 frameless_WidgetFlag | extraPadding_WidgetFlag | 696 frameless_WidgetFlag | extraPadding_WidgetFlag |
669 noBackground_WidgetFlag, iTrue); 697 noBackground_WidgetFlag, iTrue);
@@ -677,7 +705,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
677 i.object != cancel && i.object != def) { 705 i.object != cancel && i.object != def) {
678 iLabelWidget *item = i.object; 706 iLabelWidget *item = i.object;
679 setBackgroundColor_Widget(i.object, uiBackgroundSidebar_ColorId); 707 setBackgroundColor_Widget(i.object, uiBackgroundSidebar_ColorId);
680 setFont_LabelWidget(item, defaultBig_FontId); 708 setFont_LabelWidget(item, labelFont_());
681 removeChild_Widget(buttons, item); 709 removeChild_Widget(buttons, item);
682 addChildFlags_Widget(topPanel, iClob(item), panelButtonFlags | 710 addChildFlags_Widget(topPanel, iClob(item), panelButtonFlags |
683 (isFirstAction ? borderTop_WidgetFlag : 0)); 711 (isFirstAction ? borderTop_WidgetFlag : 0));
@@ -721,7 +749,7 @@ void finalizeSheet_Mobile(iWidget *sheet) {
721} 749}
722 750
723void setupMenuTransition_Mobile(iWidget *sheet, iBool isIncoming) { 751void setupMenuTransition_Mobile(iWidget *sheet, iBool isIncoming) {
724 if (deviceType_App() != phone_AppDeviceType) { 752 if (!useMobileSheetLayout_()) {
725 return; 753 return;
726 } 754 }
727 const iBool isSlidePanel = (flags_Widget(sheet) & horizontalOffset_WidgetFlag) != 0; 755 const iBool isSlidePanel = (flags_Widget(sheet) & horizontalOffset_WidgetFlag) != 0;
@@ -751,6 +779,7 @@ void setupSheetTransition_Mobile(iWidget *sheet, iBool isIncoming) {
751 setVisualOffset_Widget(sheet, 0, 200, easeOut_AnimFlag); 779 setVisualOffset_Widget(sheet, 0, 200, easeOut_AnimFlag);
752 } 780 }
753 else { 781 else {
782 setFlags_Widget(sheet, horizontalOffset_WidgetFlag, iTrue);
754 const iBool wasDragged = iAbs(value_Anim(&sheet->visualOffset)) > 0; 783 const iBool wasDragged = iAbs(value_Anim(&sheet->visualOffset)) > 0;
755 setVisualOffset_Widget(sheet, size_Root(sheet->root).x, wasDragged ? 100 : 200, 784 setVisualOffset_Widget(sheet, size_Root(sheet->root).x, wasDragged ? 100 : 200,
756 wasDragged ? 0 : easeIn_AnimFlag); 785 wasDragged ? 0 : easeIn_AnimFlag);
diff --git a/src/ui/touch.c b/src/ui/touch.c
index e8f53bca..296e0e08 100644
--- a/src/ui/touch.c
+++ b/src/ui/touch.c
@@ -586,6 +586,7 @@ iBool processEvent_Touch(const SDL_Event *ev) {
586// pixels.y, y_F3(amount), y_F3(touch->accum)); 586// pixels.y, y_F3(amount), y_F3(touch->accum));
587 if (pixels.x || pixels.y) { 587 if (pixels.x || pixels.y) {
588 setFocus_Widget(NULL); 588 setFocus_Widget(NULL);
589 setCurrent_Root(touch->affinity->root);
589 dispatchMotion_Touch_(touch->pos[0], 0); 590 dispatchMotion_Touch_(touch->pos[0], 0);
590 dispatchEvent_Widget(touch->affinity, (SDL_Event *) &(SDL_MouseWheelEvent){ 591 dispatchEvent_Widget(touch->affinity, (SDL_Event *) &(SDL_MouseWheelEvent){
591 .type = SDL_MOUSEWHEEL, 592 .type = SDL_MOUSEWHEEL,
diff --git a/src/ui/util.c b/src/ui/util.c
index b4c43951..4b35f8f7 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -1513,7 +1513,7 @@ static int cmp_MenuItem_(const void *e1, const void *e2) {
1513#endif 1513#endif
1514 1514
1515void updatePreferencesLayout_Widget(iWidget *prefs) { 1515void updatePreferencesLayout_Widget(iWidget *prefs) {
1516 if (!prefs || deviceType_App() == phone_AppDeviceType) { 1516 if (!prefs || deviceType_App() != desktop_AppDeviceType) {
1517 return; 1517 return;
1518 } 1518 }
1519 /* Doing manual layout here because the widget arranging logic isn't sophisticated enough. */ 1519 /* Doing manual layout here because the widget arranging logic isn't sophisticated enough. */