diff options
-rw-r--r-- | src/app.c | 3 | ||||
-rw-r--r-- | src/history.c | 12 | ||||
-rw-r--r-- | src/history.h | 6 | ||||
-rw-r--r-- | src/ui/documentwidget.c | 30 | ||||
-rw-r--r-- | src/ui/documentwidget.h | 2 | ||||
-rw-r--r-- | src/ui/sidebarwidget.c | 1 |
6 files changed, 15 insertions, 39 deletions
@@ -2780,8 +2780,7 @@ iBool handleCommand_App(const char *cmd) { | |||
2780 | urlEncodePath_String(url); | 2780 | urlEncodePath_String(url); |
2781 | } | 2781 | } |
2782 | setUrlFlags_DocumentWidget(doc, url, | 2782 | setUrlFlags_DocumentWidget(doc, url, |
2783 | (isHistory ? useCachedContentIfAvailable_DocumentWidgetSetUrlFlag : 0) | | 2783 | isHistory ? useCachedContentIfAvailable_DocumentWidgetSetUrlFlag : 0); |
2784 | (fromSidebar ? openedFromSidebar_DocumentWidgetSetUrlFlag : 0)); | ||
2785 | /* Optionally, jump to a text in the document. This will only work if the document | 2784 | /* Optionally, jump to a text in the document. This will only work if the document |
2786 | is already available, e.g., it's from "about:" or restored from cache. */ | 2785 | is already available, e.g., it's from "about:" or restored from cache. */ |
2787 | const iRangecc gotoHeading = range_Command(cmd, "gotoheading"); | 2786 | const iRangecc gotoHeading = range_Command(cmd, "gotoheading"); |
diff --git a/src/history.c b/src/history.c index 91416020..837b38cb 100644 --- a/src/history.c +++ b/src/history.c | |||
@@ -37,7 +37,7 @@ void init_RecentUrl(iRecentUrl *d) { | |||
37 | d->normScrollY = 0; | 37 | d->normScrollY = 0; |
38 | d->cachedResponse = NULL; | 38 | d->cachedResponse = NULL; |
39 | d->cachedDoc = NULL; | 39 | d->cachedDoc = NULL; |
40 | d->flags.openedFromSidebar = iFalse; | 40 | d->flags = 0; |
41 | } | 41 | } |
42 | 42 | ||
43 | void deinit_RecentUrl(iRecentUrl *d) { | 43 | void deinit_RecentUrl(iRecentUrl *d) { |
@@ -181,7 +181,7 @@ void serialize_History(const iHistory *d, iStream *outs) { | |||
181 | const iRecentUrl *item = i.value; | 181 | const iRecentUrl *item = i.value; |
182 | serialize_String(&item->url, outs); | 182 | serialize_String(&item->url, outs); |
183 | write32_Stream(outs, item->normScrollY * 1.0e6f); | 183 | write32_Stream(outs, item->normScrollY * 1.0e6f); |
184 | writeU16_Stream(outs, item->flags.openedFromSidebar ? iBit(1) : 0); | 184 | writeU16_Stream(outs, item->flags); |
185 | if (item->cachedResponse) { | 185 | if (item->cachedResponse) { |
186 | write8_Stream(outs, 1); | 186 | write8_Stream(outs, 1); |
187 | serialize_GmResponse(item->cachedResponse, outs); | 187 | serialize_GmResponse(item->cachedResponse, outs); |
@@ -205,10 +205,7 @@ void deserialize_History(iHistory *d, iStream *ins) { | |||
205 | set_String(&item.url, canonicalUrl_String(&item.url)); | 205 | set_String(&item.url, canonicalUrl_String(&item.url)); |
206 | item.normScrollY = (float) read32_Stream(ins) / 1.0e6f; | 206 | item.normScrollY = (float) read32_Stream(ins) / 1.0e6f; |
207 | if (version_Stream(ins) >= addedRecentUrlFlags_FileVersion) { | 207 | if (version_Stream(ins) >= addedRecentUrlFlags_FileVersion) { |
208 | uint16_t flags = readU16_Stream(ins); | 208 | item.flags = readU16_Stream(ins); |
209 | if (flags & iBit(1)) { | ||
210 | item.flags.openedFromSidebar = iTrue; | ||
211 | } | ||
212 | } | 209 | } |
213 | if (read8_Stream(ins)) { | 210 | if (read8_Stream(ins)) { |
214 | item.cachedResponse = new_GmResponse(); | 211 | item.cachedResponse = new_GmResponse(); |
@@ -409,7 +406,7 @@ void setCachedResponse_History(iHistory *d, const iGmResponse *response) { | |||
409 | unlock_Mutex(d->mtx); | 406 | unlock_Mutex(d->mtx); |
410 | } | 407 | } |
411 | 408 | ||
412 | void setCachedDocument_History(iHistory *d, iGmDocument *doc, iBool openedFromSidebar) { | 409 | void setCachedDocument_History(iHistory *d, iGmDocument *doc) { |
413 | lock_Mutex(d->mtx); | 410 | lock_Mutex(d->mtx); |
414 | iRecentUrl *item = mostRecentUrl_History(d); | 411 | iRecentUrl *item = mostRecentUrl_History(d); |
415 | iAssert(size_GmDocument(doc).x > 0); | 412 | iAssert(size_GmDocument(doc).x > 0); |
@@ -421,7 +418,6 @@ void setCachedDocument_History(iHistory *d, iGmDocument *doc, iBool openedFromSi | |||
421 | cstr_String(url_GmDocument(doc))); | 418 | cstr_String(url_GmDocument(doc))); |
422 | } | 419 | } |
423 | #endif | 420 | #endif |
424 | item->flags.openedFromSidebar = openedFromSidebar; | ||
425 | if (item->cachedDoc != doc) { | 421 | if (item->cachedDoc != doc) { |
426 | iRelease(item->cachedDoc); | 422 | iRelease(item->cachedDoc); |
427 | item->cachedDoc = ref_Object(doc); | 423 | item->cachedDoc = ref_Object(doc); |
diff --git a/src/history.h b/src/history.h index bfb88cf4..383c132b 100644 --- a/src/history.h +++ b/src/history.h | |||
@@ -39,9 +39,7 @@ struct Impl_RecentUrl { | |||
39 | float normScrollY; /* normalized to document height */ | 39 | float normScrollY; /* normalized to document height */ |
40 | iGmResponse *cachedResponse; /* kept in memory for quicker back navigation */ | 40 | iGmResponse *cachedResponse; /* kept in memory for quicker back navigation */ |
41 | iGmDocument *cachedDoc; /* cached copy of the presentation: layout and media (not serialized) */ | 41 | iGmDocument *cachedDoc; /* cached copy of the presentation: layout and media (not serialized) */ |
42 | struct { | 42 | uint16_t flags; |
43 | uint8_t openedFromSidebar : 1; | ||
44 | } flags; | ||
45 | }; | 43 | }; |
46 | 44 | ||
47 | iDeclareType(MemInfo) | 45 | iDeclareType(MemInfo) |
@@ -65,7 +63,7 @@ void clear_History (iHistory *); | |||
65 | void add_History (iHistory *, const iString *url); | 63 | void add_History (iHistory *, const iString *url); |
66 | void replace_History (iHistory *, const iString *url); | 64 | void replace_History (iHistory *, const iString *url); |
67 | void setCachedResponse_History (iHistory *, const iGmResponse *response); | 65 | void setCachedResponse_History (iHistory *, const iGmResponse *response); |
68 | void setCachedDocument_History (iHistory *, iGmDocument *doc, iBool openedFromSidebar); | 66 | void setCachedDocument_History (iHistory *, iGmDocument *doc); |
69 | iBool goBack_History (iHistory *); | 67 | iBool goBack_History (iHistory *); |
70 | iBool goForward_History (iHistory *); | 68 | iBool goForward_History (iHistory *); |
71 | iRecentUrl *precedingLocked_History (iHistory *); /* requires manual lock/unlock! */ | 69 | iRecentUrl *precedingLocked_History (iHistory *); /* requires manual lock/unlock! */ |
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 4af3dd72..3bd9f059 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -220,13 +220,12 @@ enum iDocumentWidgetFlag { | |||
220 | movingSelectMarkEnd_DocumentWidgetFlag = iBit(11), | 220 | movingSelectMarkEnd_DocumentWidgetFlag = iBit(11), |
221 | otherRootByDefault_DocumentWidgetFlag = iBit(12), /* links open to other root by default */ | 221 | otherRootByDefault_DocumentWidgetFlag = iBit(12), /* links open to other root by default */ |
222 | urlChanged_DocumentWidgetFlag = iBit(13), | 222 | urlChanged_DocumentWidgetFlag = iBit(13), |
223 | openedFromSidebar_DocumentWidgetFlag = iBit(14), | 223 | drawDownloadCounter_DocumentWidgetFlag = iBit(14), |
224 | drawDownloadCounter_DocumentWidgetFlag = iBit(15), | 224 | fromCache_DocumentWidgetFlag = iBit(15), /* don't write anything to cache */ |
225 | fromCache_DocumentWidgetFlag = iBit(16), /* don't write anything to cache */ | 225 | animationPlaceholder_DocumentWidgetFlag = iBit(16), /* avoid slow operations */ |
226 | animationPlaceholder_DocumentWidgetFlag = iBit(17), /* avoid slow operations */ | 226 | invalidationPending_DocumentWidgetFlag = iBit(17), /* invalidate as soon as convenient */ |
227 | invalidationPending_DocumentWidgetFlag = iBit(18), /* invalidate as soon as convenient */ | 227 | leftWheelSwipe_DocumentWidgetFlag = iBit(18), /* swipe state flags are used on desktop */ |
228 | leftWheelSwipe_DocumentWidgetFlag = iBit(19), /* swipe state flags are used on desktop */ | 228 | rightWheelSwipe_DocumentWidgetFlag = iBit(19), |
229 | rightWheelSwipe_DocumentWidgetFlag = iBit(20), | ||
230 | eitherWheelSwipe_DocumentWidgetFlag = leftWheelSwipe_DocumentWidgetFlag | | 229 | eitherWheelSwipe_DocumentWidgetFlag = leftWheelSwipe_DocumentWidgetFlag | |
231 | rightWheelSwipe_DocumentWidgetFlag, | 230 | rightWheelSwipe_DocumentWidgetFlag, |
232 | }; | 231 | }; |
@@ -2144,9 +2143,7 @@ static void documentWasChanged_DocumentWidget_(iDocumentWidget *d) { | |||
2144 | } | 2143 | } |
2145 | showOrHidePinningIndicator_DocumentWidget_(d); | 2144 | showOrHidePinningIndicator_DocumentWidget_(d); |
2146 | if (~d->flags & fromCache_DocumentWidgetFlag) { | 2145 | if (~d->flags & fromCache_DocumentWidgetFlag) { |
2147 | setCachedDocument_History(d->mod.history, | 2146 | setCachedDocument_History(d->mod.history, d->view.doc /* keeps a ref */); |
2148 | d->view.doc, /* keeps a ref */ | ||
2149 | (d->flags & openedFromSidebar_DocumentWidgetFlag) != 0); | ||
2150 | } | 2147 | } |
2151 | } | 2148 | } |
2152 | 2149 | ||
@@ -2905,14 +2902,11 @@ static void updateFromCachedResponse_DocumentWidget_(iDocumentWidget *d, float n | |||
2905 | static iBool updateFromHistory_DocumentWidget_(iDocumentWidget *d) { | 2902 | static iBool updateFromHistory_DocumentWidget_(iDocumentWidget *d) { |
2906 | const iRecentUrl *recent = constMostRecentUrl_History(d->mod.history); | 2903 | const iRecentUrl *recent = constMostRecentUrl_History(d->mod.history); |
2907 | if (recent && recent->cachedResponse && equalCase_String(&recent->url, d->mod.url)) { | 2904 | if (recent && recent->cachedResponse && equalCase_String(&recent->url, d->mod.url)) { |
2908 | iChangeFlags(d->flags, | ||
2909 | openedFromSidebar_DocumentWidgetFlag, | ||
2910 | recent->flags.openedFromSidebar); | ||
2911 | updateFromCachedResponse_DocumentWidget_( | 2905 | updateFromCachedResponse_DocumentWidget_( |
2912 | d, recent->normScrollY, recent->cachedResponse, recent->cachedDoc); | 2906 | d, recent->normScrollY, recent->cachedResponse, recent->cachedDoc); |
2913 | if (!recent->cachedDoc) { | 2907 | if (!recent->cachedDoc) { |
2914 | /* We have a cached copy now. */ | 2908 | /* We have a cached copy now. */ |
2915 | setCachedDocument_History(d->mod.history, d->view.doc, iFalse); | 2909 | setCachedDocument_History(d->mod.history, d->view.doc); |
2916 | } | 2910 | } |
2917 | return iTrue; | 2911 | return iTrue; |
2918 | } | 2912 | } |
@@ -5617,8 +5611,6 @@ void deserializeState_DocumentWidget(iDocumentWidget *d, iStream *ins) { | |||
5617 | } | 5611 | } |
5618 | 5612 | ||
5619 | void setUrlFlags_DocumentWidget(iDocumentWidget *d, const iString *url, int setUrlFlags) { | 5613 | void setUrlFlags_DocumentWidget(iDocumentWidget *d, const iString *url, int setUrlFlags) { |
5620 | iChangeFlags(d->flags, openedFromSidebar_DocumentWidgetFlag, | ||
5621 | (setUrlFlags & openedFromSidebar_DocumentWidgetSetUrlFlag) != 0); | ||
5622 | const iBool allowCache = (setUrlFlags & useCachedContentIfAvailable_DocumentWidgetSetUrlFlag) != 0; | 5614 | const iBool allowCache = (setUrlFlags & useCachedContentIfAvailable_DocumentWidgetSetUrlFlag) != 0; |
5623 | setLinkNumberMode_DocumentWidget_(d, iFalse); | 5615 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
5624 | setUrl_DocumentWidget_(d, urlFragmentStripped_String(url)); | 5616 | setUrl_DocumentWidget_(d, urlFragmentStripped_String(url)); |
@@ -5631,7 +5623,6 @@ void setUrlFlags_DocumentWidget(iDocumentWidget *d, const iString *url, int setU | |||
5631 | 5623 | ||
5632 | void setUrlAndSource_DocumentWidget(iDocumentWidget *d, const iString *url, const iString *mime, | 5624 | void setUrlAndSource_DocumentWidget(iDocumentWidget *d, const iString *url, const iString *mime, |
5633 | const iBlock *source) { | 5625 | const iBlock *source) { |
5634 | d->flags &= ~openedFromSidebar_DocumentWidgetFlag; | ||
5635 | setLinkNumberMode_DocumentWidget_(d, iFalse); | 5626 | setLinkNumberMode_DocumentWidget_(d, iFalse); |
5636 | setUrl_DocumentWidget_(d, url); | 5627 | setUrl_DocumentWidget_(d, url); |
5637 | parseUser_DocumentWidget_(d); | 5628 | parseUser_DocumentWidget_(d); |
@@ -5673,11 +5664,6 @@ void setRedirectCount_DocumentWidget(iDocumentWidget *d, int count) { | |||
5673 | d->redirectCount = count; | 5664 | d->redirectCount = count; |
5674 | } | 5665 | } |
5675 | 5666 | ||
5676 | void setOpenedFromSidebar_DocumentWidget(iDocumentWidget *d, iBool fromSidebar) { | ||
5677 | iChangeFlags(d->flags, openedFromSidebar_DocumentWidgetFlag, fromSidebar); | ||
5678 | // setCachedDocument_History(d->mod.history, d->doc, fromSidebar); | ||
5679 | } | ||
5680 | |||
5681 | iBool isRequestOngoing_DocumentWidget(const iDocumentWidget *d) { | 5667 | iBool isRequestOngoing_DocumentWidget(const iDocumentWidget *d) { |
5682 | return d->request != NULL; | 5668 | return d->request != NULL; |
5683 | } | 5669 | } |
diff --git a/src/ui/documentwidget.h b/src/ui/documentwidget.h index 1405f19d..1bee8351 100644 --- a/src/ui/documentwidget.h +++ b/src/ui/documentwidget.h | |||
@@ -50,7 +50,6 @@ int documentWidth_DocumentWidget (const iDocumentWidget *); | |||
50 | 50 | ||
51 | enum iDocumentWidgetSetUrlFlags { | 51 | enum iDocumentWidgetSetUrlFlags { |
52 | useCachedContentIfAvailable_DocumentWidgetSetUrlFlag = iBit(1), | 52 | useCachedContentIfAvailable_DocumentWidgetSetUrlFlag = iBit(1), |
53 | openedFromSidebar_DocumentWidgetSetUrlFlag = iBit(2), | ||
54 | }; | 53 | }; |
55 | 54 | ||
56 | void setOrigin_DocumentWidget (iDocumentWidget *, const iDocumentWidget *other); | 55 | void setOrigin_DocumentWidget (iDocumentWidget *, const iDocumentWidget *other); |
@@ -60,7 +59,6 @@ void setUrlAndSource_DocumentWidget (iDocumentWidget *, const iString *url, | |||
60 | void setInitialScroll_DocumentWidget (iDocumentWidget *, float normScrollY); /* set after content received */ | 59 | void setInitialScroll_DocumentWidget (iDocumentWidget *, float normScrollY); /* set after content received */ |
61 | void setRedirectCount_DocumentWidget (iDocumentWidget *, int count); | 60 | void setRedirectCount_DocumentWidget (iDocumentWidget *, int count); |
62 | void setSource_DocumentWidget (iDocumentWidget *, const iString *sourceText); | 61 | void setSource_DocumentWidget (iDocumentWidget *, const iString *sourceText); |
63 | void setOpenedFromSidebar_DocumentWidget(iDocumentWidget *, iBool fromSidebar); | ||
64 | 62 | ||
65 | void takeRequest_DocumentWidget (iDocumentWidget *, iGmRequest *finishedRequest); /* ownership given */ | 63 | void takeRequest_DocumentWidget (iDocumentWidget *, iGmRequest *finishedRequest); /* ownership given */ |
66 | 64 | ||
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c index 4b4968a3..fe8ec939 100644 --- a/src/ui/sidebarwidget.c +++ b/src/ui/sidebarwidget.c | |||
@@ -965,7 +965,6 @@ static void itemClicked_SidebarWidget_(iSidebarWidget *d, iSidebarItem *item, si | |||
965 | const iGmHeading *head = constAt_Array(headings_GmDocument(doc), item->id); | 965 | const iGmHeading *head = constAt_Array(headings_GmDocument(doc), item->id); |
966 | postCommandf_App("document.goto loc:%p", head->text.start); | 966 | postCommandf_App("document.goto loc:%p", head->text.start); |
967 | dismissPortraitPhoneSidebars_Root(as_Widget(d)->root); | 967 | dismissPortraitPhoneSidebars_Root(as_Widget(d)->root); |
968 | setOpenedFromSidebar_DocumentWidget(document_App(), iTrue); | ||
969 | } | 968 | } |
970 | break; | 969 | break; |
971 | } | 970 | } |