diff options
Diffstat (limited to 'src/ui/documentwidget.c')
-rw-r--r-- | src/ui/documentwidget.c | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 733ed543..240b2d4a 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -363,6 +363,24 @@ void deinit_DocumentWidget(iDocumentWidget *d) { | |||
363 | deinit_PersistentDocumentState(&d->mod); | 363 | deinit_PersistentDocumentState(&d->mod); |
364 | } | 364 | } |
365 | 365 | ||
366 | static void enableActions_DocumentWidget_(iDocumentWidget *d, iBool enable) { | ||
367 | /* Actions are invisible child widgets of the DocumentWidget. */ | ||
368 | iForEach(ObjectList, i, children_Widget(d)) { | ||
369 | if (isAction_Widget(i.object)) { | ||
370 | setFlags_Widget(i.object, disabled_WidgetFlag, !enable); | ||
371 | } | ||
372 | } | ||
373 | } | ||
374 | |||
375 | static void setLinkNumberMode_DocumentWidget_(iDocumentWidget *d, iBool set) { | ||
376 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, set); | ||
377 | /* Children have priority when handling events. */ | ||
378 | enableActions_DocumentWidget_(d, !set); | ||
379 | if (d->menu) { | ||
380 | setFlags_Widget(d->menu, disabled_WidgetFlag, set); | ||
381 | } | ||
382 | } | ||
383 | |||
366 | static void resetWideRuns_DocumentWidget_(iDocumentWidget *d) { | 384 | static void resetWideRuns_DocumentWidget_(iDocumentWidget *d) { |
367 | clear_Array(&d->wideRunOffsets); | 385 | clear_Array(&d->wideRunOffsets); |
368 | d->animWideRunId = 0; | 386 | d->animWideRunId = 0; |
@@ -1054,7 +1072,7 @@ static void fetch_DocumentWidget_(iDocumentWidget *d) { | |||
1054 | postCommandf_App("document.request.started doc:%p url:%s", d, cstr_String(d->mod.url)); | 1072 | postCommandf_App("document.request.started doc:%p url:%s", d, cstr_String(d->mod.url)); |
1055 | clear_ObjectList(d->media); | 1073 | clear_ObjectList(d->media); |
1056 | d->certFlags = 0; | 1074 | d->certFlags = 0; |
1057 | d->flags &= ~showLinkNumbers_DocumentWidgetFlag; | 1075 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1058 | d->state = fetching_RequestState; | 1076 | d->state = fetching_RequestState; |
1059 | set_Atomic(&d->isRequestUpdated, iFalse); | 1077 | set_Atomic(&d->isRequestUpdated, iFalse); |
1060 | d->request = new_GmRequest(certs_App()); | 1078 | d->request = new_GmRequest(certs_App()); |
@@ -1162,7 +1180,7 @@ static void refreshWhileScrolling_DocumentWidget_(iAny *ptr) { | |||
1162 | static void smoothScroll_DocumentWidget_(iDocumentWidget *d, int offset, int duration) { | 1180 | static void smoothScroll_DocumentWidget_(iDocumentWidget *d, int offset, int duration) { |
1163 | /* Get rid of link numbers when scrolling. */ | 1181 | /* Get rid of link numbers when scrolling. */ |
1164 | if (offset && d->flags & showLinkNumbers_DocumentWidgetFlag) { | 1182 | if (offset && d->flags & showLinkNumbers_DocumentWidgetFlag) { |
1165 | d->flags &= ~showLinkNumbers_DocumentWidgetFlag; | 1183 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1166 | invalidateVisibleLinks_DocumentWidget_(d); | 1184 | invalidateVisibleLinks_DocumentWidget_(d); |
1167 | } | 1185 | } |
1168 | if (!prefs_App()->smoothScrolling) { | 1186 | if (!prefs_App()->smoothScrolling) { |
@@ -1649,7 +1667,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
1649 | iWidget *w = as_Widget(d); | 1667 | iWidget *w = as_Widget(d); |
1650 | if (equal_Command(cmd, "window.resized") || equal_Command(cmd, "font.changed")) { | 1668 | if (equal_Command(cmd, "window.resized") || equal_Command(cmd, "font.changed")) { |
1651 | /* Alt/Option key may be involved in window size changes. */ | 1669 | /* Alt/Option key may be involved in window size changes. */ |
1652 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 1670 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1653 | d->phoneToolbar = findWidget_App("toolbar"); | 1671 | d->phoneToolbar = findWidget_App("toolbar"); |
1654 | const iBool keepCenter = equal_Command(cmd, "font.changed"); | 1672 | const iBool keepCenter = equal_Command(cmd, "font.changed"); |
1655 | updateDocumentWidthRetainingScrollPosition_DocumentWidget_(d, keepCenter); | 1673 | updateDocumentWidthRetainingScrollPosition_DocumentWidget_(d, keepCenter); |
@@ -1661,7 +1679,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
1661 | } | 1679 | } |
1662 | else if (equal_Command(cmd, "window.focus.lost")) { | 1680 | else if (equal_Command(cmd, "window.focus.lost")) { |
1663 | if (d->flags & showLinkNumbers_DocumentWidgetFlag) { | 1681 | if (d->flags & showLinkNumbers_DocumentWidgetFlag) { |
1664 | d->flags &= ~showLinkNumbers_DocumentWidgetFlag; | 1682 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1665 | invalidateVisibleLinks_DocumentWidget_(d); | 1683 | invalidateVisibleLinks_DocumentWidget_(d); |
1666 | refresh_Widget(w); | 1684 | refresh_Widget(w); |
1667 | } | 1685 | } |
@@ -1682,7 +1700,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
1682 | updateSize_DocumentWidget(d); | 1700 | updateSize_DocumentWidget(d); |
1683 | } | 1701 | } |
1684 | else if (equal_Command(cmd, "tabs.changed")) { | 1702 | else if (equal_Command(cmd, "tabs.changed")) { |
1685 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 1703 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1686 | if (cmp_String(id_Widget(w), suffixPtr_Command(cmd, "id")) == 0) { | 1704 | if (cmp_String(id_Widget(w), suffixPtr_Command(cmd, "id")) == 0) { |
1687 | /* Set palette for our document. */ | 1705 | /* Set palette for our document. */ |
1688 | updateTheme_DocumentWidget_(d); | 1706 | updateTheme_DocumentWidget_(d); |
@@ -1987,7 +2005,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
1987 | } | 2005 | } |
1988 | else if (equal_Command(cmd, "document.linkkeys") && document_App() == d) { | 2006 | else if (equal_Command(cmd, "document.linkkeys") && document_App() == d) { |
1989 | if (argLabel_Command(cmd, "release")) { | 2007 | if (argLabel_Command(cmd, "release")) { |
1990 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 2008 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
1991 | } | 2009 | } |
1992 | else if (argLabel_Command(cmd, "more")) { | 2010 | else if (argLabel_Command(cmd, "more")) { |
1993 | if (d->flags & showLinkNumbers_DocumentWidgetFlag && | 2011 | if (d->flags & showLinkNumbers_DocumentWidgetFlag && |
@@ -2007,13 +2025,13 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
2007 | else if (~d->flags & showLinkNumbers_DocumentWidgetFlag) { | 2025 | else if (~d->flags & showLinkNumbers_DocumentWidgetFlag) { |
2008 | d->ordinalMode = homeRow_DocumentLinkOrdinalMode; | 2026 | d->ordinalMode = homeRow_DocumentLinkOrdinalMode; |
2009 | d->ordinalBase = 0; | 2027 | d->ordinalBase = 0; |
2010 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iTrue); | 2028 | setLinkNumberMode_DocumentWidget_(d, iTrue); |
2011 | } | 2029 | } |
2012 | } | 2030 | } |
2013 | else { | 2031 | else { |
2014 | d->ordinalMode = arg_Command(cmd); | 2032 | d->ordinalMode = arg_Command(cmd); |
2015 | d->ordinalBase = 0; | 2033 | d->ordinalBase = 0; |
2016 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iTrue); | 2034 | setLinkNumberMode_DocumentWidget_(d, iTrue); |
2017 | iChangeFlags(d->flags, setHoverViaKeys_DocumentWidgetFlag, | 2035 | iChangeFlags(d->flags, setHoverViaKeys_DocumentWidgetFlag, |
2018 | argLabel_Command(cmd, "hover") != 0); | 2036 | argLabel_Command(cmd, "hover") != 0); |
2019 | iChangeFlags(d->flags, newTabViaHomeKeys_DocumentWidgetFlag, | 2037 | iChangeFlags(d->flags, newTabViaHomeKeys_DocumentWidgetFlag, |
@@ -2457,7 +2475,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2457 | cstr_String(absoluteUrl_String( | 2475 | cstr_String(absoluteUrl_String( |
2458 | d->mod.url, linkUrl_GmDocument(d->doc, run->linkId)))); | 2476 | d->mod.url, linkUrl_GmDocument(d->doc, run->linkId)))); |
2459 | } | 2477 | } |
2460 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 2478 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
2461 | invalidateVisibleLinks_DocumentWidget_(d); | 2479 | invalidateVisibleLinks_DocumentWidget_(d); |
2462 | refresh_Widget(d); | 2480 | refresh_Widget(d); |
2463 | return iTrue; | 2481 | return iTrue; |
@@ -2467,7 +2485,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2467 | switch (key) { | 2485 | switch (key) { |
2468 | case SDLK_ESCAPE: | 2486 | case SDLK_ESCAPE: |
2469 | if (d->flags & showLinkNumbers_DocumentWidgetFlag && document_App() == d) { | 2487 | if (d->flags & showLinkNumbers_DocumentWidgetFlag && document_App() == d) { |
2470 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 2488 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
2471 | invalidateVisibleLinks_DocumentWidget_(d); | 2489 | invalidateVisibleLinks_DocumentWidget_(d); |
2472 | refresh_Widget(d); | 2490 | refresh_Widget(d); |
2473 | return iTrue; | 2491 | return iTrue; |
@@ -3634,7 +3652,7 @@ void deserializeState_DocumentWidget(iDocumentWidget *d, iStream *ins) { | |||
3634 | } | 3652 | } |
3635 | 3653 | ||
3636 | void setUrlFromCache_DocumentWidget(iDocumentWidget *d, const iString *url, iBool isFromCache) { | 3654 | void setUrlFromCache_DocumentWidget(iDocumentWidget *d, const iString *url, iBool isFromCache) { |
3637 | d->flags &= ~showLinkNumbers_DocumentWidgetFlag; | 3655 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
3638 | set_String(d->mod.url, urlFragmentStripped_String(url)); | 3656 | set_String(d->mod.url, urlFragmentStripped_String(url)); |
3639 | /* See if there a username in the URL. */ | 3657 | /* See if there a username in the URL. */ |
3640 | parseUser_DocumentWidget_(d); | 3658 | parseUser_DocumentWidget_(d); |