[webkit-reviews] patch for webview bustage after trying to print
invalid page range
John Sullivan
sullivan at apple.com
Mon Jun 13 17:04:35 PDT 2005
Dave Harrison had a potential robustness enhancement that I'm going
to try before I land this. I did test and verify that both formerly-
working and formerly-failing cases work now.
John
On Jun 13, 2005, at 4:57 PM, Maciej Stachowiak wrote:
>
> Assuming you tested, r=me.
>
> On Jun 13, 2005, at 4:34 PM, John Sullivan wrote:
>
>> 2005-06-13 John Sullivan <sullivan at apple.com>
>>
>> Reviewed by NOBODY (OOPS!).
>>
>> - fixed <rdar://problem/4145905> WebView: Attempting to
>> print an invalid page range
>> results in unusable window
>>
>> * WebView.subproj/WebHTMLView.m:
>> (-[WebHTMLView _endPrintMode:]):
>> new method, extracted from identical code in beginDocument
>> and endDocument. This method must be called
>> once to counterbalance the code called from knowsPageRange
>> that turns on "printing mode".
>> (-[WebHTMLView knowsPageRange:]):
>> after turning on "printing mode", queue up a delayed call
>> to _endPrintMode:. If there's an early
>> error in the print mechanism such that beginDocument is
>> never called, this will cleanly end "printing
>> mode" and make the webview usable again.
>> (-[WebHTMLView beginDocument]):
>> cancel any delayed call to _endPrintMode:. If we get this
>> far along in printing, then we don't need
>> the failsafe call to _endPrintMode: that was set up in
>> knowsPageRange:. Also, call extracted method
>> (-[WebHTMLView endDocument]):
>> call extracted method
>>
>> Index: WebView.subproj/WebHTMLView.m
>> ===================================================================
>> RCS file: /cvs/root/WebKit/WebView.subproj/WebHTMLView.m,v
>> retrieving revision 1.449
>> diff -u -r1.449 WebHTMLView.m
>> --- WebView.subproj/WebHTMLView.m 13 Jun 2005 03:28:08 -0000
>> 1.449
>> +++ WebView.subproj/WebHTMLView.m 13 Jun 2005 23:11:42 -0000
>> @@ -3148,6 +3148,11 @@
>> [self _setPrinting:YES minimumPageWidth:pageWidth
>> maximumPageWidth:pageWidth adjustViewSize:YES];
>> }
>> +- (void)_endPrintMode:(id)unused
>> +{
>> + [self _setPrinting:NO minimumPageWidth:0.0 maximumPageWidth:
>> 0.0 adjustViewSize:YES];
>> + [[self window] setAutodisplay:YES];
>> +}
>> // Return the number of pages available for printing
>> - (BOOL)knowsPageRange:(NSRangePointer)range {
>> @@ -3166,6 +3171,11 @@
>> maxLayoutWidth = paperWidth*PrintingMaximumShrinkFactor;
>> }
>> [self _setPrinting:YES minimumPageWidth:minLayoutWidth
>> maximumPageWidth:maxLayoutWidth adjustViewSize:YES]; // will relayout
>> + // Certain types of errors, including invalid page ranges,
>> can cause beginDocument and
>> + // endDocument to be skipped after we've put ourselves in
>> print mode (see 4145905). In those cases
>> + // we need to get out of print mode without relying on any
>> more callbacks from the printing mechanism.
>> + // If we get as far as beginDocument without trouble, then
>> this delayed request will be cancelled.
>> + [self performSelector:@selector(_endPrintMode:)
>> withObject:nil afterDelay:0];
>> [[self _webView] _adjustPrintingMarginsForHeaderAndFooter];
>>
>> // There is a theoretical chance that someone could do some
>> drawing between here and endDocument,
>> @@ -3207,12 +3217,16 @@
>> - (void)beginDocument
>> {
>> NS_DURING
>> + // From now on we'll get a chance to call _endPrintMode:
>> in either beginDocument or
>> + // endDocument, so we can cancel the "just in case"
>> pending call.
>> + [NSObject cancelPreviousPerformRequestsWithTarget:self
>> +
>> selector:@selector(_endPrintMode:)
>> + object:nil];
>> [super beginDocument];
>> NS_HANDLER
>> // Exception during [super beginDocument] means that
>> endDocument will not get called,
>> // so we need to clean up our "print mode" here.
>> - [self _setPrinting:NO minimumPageWidth:0.0
>> maximumPageWidth:0.0 adjustViewSize:YES];
>> - [[self window] setAutodisplay:YES];
>> + [self _endPrintMode:nil];
>> NS_ENDHANDLER
>> }
>> @@ -3220,8 +3234,7 @@
>> {
>> [super endDocument];
>> // Note sadly at this point [NSGraphicsContext
>> currentContextDrawingToScreen] is still NO
>> - [self _setPrinting:NO minimumPageWidth:0.0 maximumPageWidth:
>> 0.0 adjustViewSize:YES];
>> - [[self window] setAutodisplay:YES];
>> + [self _endPrintMode:nil];
>> }
>> - (BOOL)_interceptEditingKeyEvent:(NSEvent *)event
>>
>> _______________________________________________
>> webkit-reviews mailing list
>> webkit-reviews at opendarwin.org
>> http://www.opendarwin.org/mailman/listinfo/webkit-reviews
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/webkit-reviews/attachments/20050613/4977bbdb/attachment.html
More information about the webkit-reviews
mailing list