diff --git a/docs/wayland-port.md b/docs/wayland-port.md index 45b4e9cc8..cf6a1aaf8 100644 --- a/docs/wayland-port.md +++ b/docs/wayland-port.md @@ -1763,3 +1763,34 @@ Both directions are checked, and the second one is the one that matters: The second is a control that FIRES: if the decline had stopped working, the line would be missing and X11 would never be reached on a machine without Wayland. + +## Saving a document works, and it took three missing methods + +docs/wayland-save-panel.png is the panel Command S opens: a file list of the guest root, Cancel and +Save. The proof is not the picture though, it is the file: type a sentence, Command S, click Save, +and /Users/root/Documents/Untitled 1 is an OpenDocument Text whose content.xml contains +"Drag across this sentence with the mouse please". + +THREE SEPARATE BUGS, each of which stopped the save on its own, and each invisible in the ordinary +sense: the application caught every one and reported nothing. + +1. -[NSSavePanel setCanSelectHiddenExtension:] did not exist. An application configures the panel + before showing it, so this killed the process outright: the whole dialog was built and then the + configure step raised. Unspecified Application Error, no panel. + +2. -[NSImage lockFocusFlipped:] did not exist. This one is subtler: the raise happened INSIDE the + save path, LibreOffice caught it, and the panel simply never appeared. The keystroke traced + perfectly to the application every time. This is what made the panel look flaky. + +3. -[NSSavePanel _selectFile:] took the filename from the SELECTED ROW, which cannot be right for a + save: the file does not exist yet, so nothing is selected, and the panel returned OK with an + empty name. Clicking Save closed the panel and saved nothing. It uses the name field the + application already sets, joined to the directory. NSOpenPanel keeps the row behaviour, in its + own override, because opening really is the row. + +The A and B for 3 is exact: the same script and the same click on the same panel wrote no file with +the row version and wrote the document with the name field version, one run apart. + +STILL WRONG in the panel: its buttons are clipped by about half. The panel maps at 500x400 and the +compositor tiles it to the full height, and something in the layout is a title bar taller than the +surface. The document window does not do this. Not chased yet. diff --git a/docs/wayland-save-panel.png b/docs/wayland-save-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..046ae16a71f021eab3d9d21f025b7c61ba845516 GIT binary patch literal 55480 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∋G-$m%Y7L`~B|YwZ3!ulwP6-J<&2n|Zd? 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 TlPxu=ksz+8tDnm{r-UW|e7hh7 literal 0 HcmV?d00001 diff --git a/src/darwin/wayland/window.rs b/src/darwin/wayland/window.rs index 519e7b1b0..ac43cb27c 100644 --- a/src/darwin/wayland/window.rs +++ b/src/darwin/wayland/window.rs @@ -291,12 +291,37 @@ pub fn deliver_pending_configures() { "cider-wayland-window resized number={} size={width}x{height}", st.number ); - if st.delegate.is_null() { - continue; + let has_delegate = !st.delegate.is_null(); + if has_delegate { + unsafe { + let sel = objc::sel_registerName(cstr!("platformWindow:frameChanged:didSize:")); + objc::msg_send_frame_changed(st.delegate, sel, st.owner, st.frame, objc::YES); + } } - unsafe { - let sel = objc::sel_registerName(cstr!("platformWindow:frameChanged:didSize:")); - objc::msg_send_frame_changed(st.delegate, sel, st.owner, st.frame, objc::YES); + /* + * WHAT THE APPLICATION MADE OF THE SIZE WE JUST GAVE IT. A window whose content view ends up + * taller than the surface draws its bottom row of controls off the end of the buffer, which + * looks like a clipped dialog and not like a geometry bug, so the two rects are worth having + * side by side rather than inferred from a screenshot. + */ + if has_delegate && std::env::var_os("CIDER_WAYLAND_TRACE_GEOMETRY").is_some() { + // THE DELEGATE IS THE NSWindow. st.owner is our own platform window, which answers the + // sixteen selectors AppKit sends a backend window and NOT -contentView; asking it + // raises inside our own code and the application reports Unspecified Application Error. + unsafe { + let f = objc::msg_send_rect_ret(st.delegate, objc::sel_registerName(cstr!("frame"))); + let cv = objc::msg_send0(st.delegate, objc::sel_registerName(cstr!("contentView"))); + let cf = if cv.is_null() { + objc::NsRect::new(0.0, 0.0, 0.0, 0.0) + } else { + objc::msg_send_rect_ret(cv, objc::sel_registerName(cstr!("frame"))) + }; + println!( + "cider-wayland-geometry number={} delegate={} surface={}x{} frame={}x{} content={}x{}+{}+{}", + st.number, has_delegate, width, height, f.size.width, f.size.height, + cf.size.width, cf.size.height, cf.origin.x, cf.origin.y + ); + } } /* * AND REDRAW THE WHOLE THING. A frame change makes the application lay out again, and it @@ -308,7 +333,9 @@ pub fn deliver_pending_configures() { * is resized once during startup and the rest of the bar was laid out into a strip nobody * repainted. One click on the bar brought all of it back. */ - st.needs_full_display = true; + if has_delegate { + st.needs_full_display = true; + } } } diff --git a/vendor/patches/cocotron/0052-save-panel-answers-and-names-the-file.patch b/vendor/patches/cocotron/0052-save-panel-answers-and-names-the-file.patch new file mode 100644 index 000000000..95dae973d --- /dev/null +++ b/vendor/patches/cocotron/0052-save-panel-answers-and-names-the-file.patch @@ -0,0 +1,189 @@ +--- a/AppKit/include/AppKit/NSSavePanel.h ++++ b/AppKit/include/AppKit/NSSavePanel.h +@@ -41,6 +41,10 @@ + + BOOL _showsHiddenFiles; + ++ /* Whether the panel offers the "Hide extension" checkbox. Stored rather than ignored because ++ * the caller that sets it also reads it back. */ ++ BOOL _canSelectHiddenExtension; ++ + BOOL _treatsFilePackagesAsDirectories; + NSView *_accessoryView; + +@@ -79,6 +83,14 @@ + + - (void) setAccessoryView: (NSView *) view; + - (void) setCanCreateDirectories: (BOOL) value; ++ ++/* THE THREE AN APPLICATION SENDS TO A SAVE PANEL THAT WERE NOT HERE. Sending any of them to a panel ++ * that does not answer raises, and an application that configures its panel before showing it dies ++ * before the panel appears. See the implementation. */ ++- (void) setCanSelectHiddenExtension: (BOOL) value; ++- (BOOL) canSelectHiddenExtension; ++- (void) validateVisibleColumns; ++- (IBAction) cancel: (id) sender; + - (void) setAllowedFileTypes: (NSArray *) value; + - (void) setAllowsOtherFileTypes: (BOOL) value; + +--- a/AppKit/NSSavePanel.subproj/NSSavePanel.m ++++ b/AppKit/NSSavePanel.subproj/NSSavePanel.m +@@ -113,9 +113,45 @@ + } + } + ++/* ++ * WHAT A SAVE PANEL RETURNS, and why saving a document did nothing at all. ++ * ++ * This took the filename from the SELECTED ROW. That is right for an open panel and cannot be right ++ * for a save panel: the file being saved does not exist yet, so there is no row to select, and with ++ * no selection -itemAtRow: is handed -1, answers nil, and the panel returned NSOKButton with an ++ * empty filename. LibreOffice asked for a save location, got "", and quietly did nothing -- the ++ * panel closed, the document stayed unsaved, and no error was raised anywhere. ++ * ++ * THE NAME COMES FROM THE NAME FIELD, which is what an application sets before it shows the panel ++ * (-setNameFieldStringValue:, already stored here) and what a name field would write into. It is ++ * joined to the directory the panel is showing, or to a selected DIRECTORY row when there is one, ++ * which is how a save panel picks a destination. ++ * ++ * With no name set, the old behaviour stands, so an open panel and a save panel used as a picker ++ * both still answer with the row. NSOpenPanel overrides this anyway, deliberately: nothing about ++ * opening should change because saving was fixed. ++ */ + - (IBAction) _selectFile: (id) sender { + NSURL *url = [_outlineView itemAtRow: [_outlineView selectedRow]]; +- [self _setFilename: [url path]]; ++ NSString *path = [url path]; ++ NSString *name = [self nameFieldStringValue]; ++ ++ if ([name length] > 0) { ++ NSFileManager *fm = [NSFileManager defaultManager]; ++ BOOL isDirectory = NO; ++ NSString *directory = path; ++ ++ if (directory == nil || ++ ![fm fileExistsAtPath: directory isDirectory: &isDirectory] || !isDirectory) { ++ directory = [self directory]; ++ } ++ if ([directory length] == 0) { ++ directory = NSHomeDirectory(); ++ } ++ path = [directory stringByAppendingPathComponent: name]; ++ } ++ ++ [self _setFilename: path]; + + [NSApp stopModalWithCode: NSOKButton]; + } +@@ -247,6 +283,41 @@ + NSUnimplementedMethod(); + } + ++/* ++ * THE THREE A SAVE PANEL HAS TO ANSWER, and the first one is why Command S killed LibreOffice. ++ * ++ * An application configures the panel before it shows it, so an unrecognized selector here is fatal ++ * BEFORE anything is drawn: the whole dialog was built -- outline view, scrollers, table corner -- ++ * and then -setCanSelectHiddenExtension: raised and the process reported Unspecified Application ++ * Error. Saving a document was impossible and nothing said which selector it was until the ++ * exception was caught. ++ * ++ * The flag is STORED rather than dropped: it decides whether the panel offers the "Hide extension" ++ * checkbox, and a caller that sets it reads it back to lay out its accessory view. ++ * ++ * -validateVisibleColumns asks a panel to re-read what it is showing, which is a refresh HINT and ++ * not a command; this panel builds its list when it opens and has no browser columns to re-read, so ++ * doing nothing is the correct answer rather than a stub for one. ++ * ++ * -cancel: is the standard action name for the dismiss button and is what an application sends to ++ * close a panel it opened itself. The panel already has -_cancel: for its own button, so this is ++ * the public name for the same thing rather than a second implementation of it. ++ */ ++- (void) setCanSelectHiddenExtension: (BOOL) value { ++ _canSelectHiddenExtension = value; ++} ++ ++- (BOOL) canSelectHiddenExtension { ++ return _canSelectHiddenExtension; ++} ++ ++- (void) validateVisibleColumns { ++} ++ ++- (IBAction) cancel: (id) sender { ++ [self _cancel: sender]; ++} ++ + - (void) setAllowedFileTypes: (NSArray *) value { + [_allowedFileTypes release]; + _allowedFileTypes = [value copy]; +--- a/AppKit/NSSavePanel.subproj/NSOpenPanel.m ++++ b/AppKit/NSSavePanel.subproj/NSOpenPanel.m +@@ -95,6 +95,20 @@ + _filenames = [@[ filename ] retain]; + } + ++/* ++ * OPENING ANSWERS WITH THE ROW, and says so here rather than relying on the superclass. ++ * ++ * NSSavePanel's version now prefers the name field, because a file being SAVED does not exist yet ++ * and has no row. An open panel is the opposite case: the row is the whole answer, and a stale name ++ * left in the field must not override what the user picked. ++ */ ++- (IBAction) _selectFile: (id) sender { ++ NSURL *url = [_outlineView itemAtRow: [_outlineView selectedRow]]; ++ [self _setFilename: [url path]]; ++ ++ [NSApp stopModalWithCode: NSOKButton]; ++} ++ + - (NSInteger) runModalForDirectory: (NSString *) directory + file: (NSString *) file + types: (NSArray *) types +--- a/AppKit/include/AppKit/NSImage.h ++++ b/AppKit/include/AppKit/NSImage.h +@@ -113,6 +113,9 @@ + factor: (float) factor; + + - (void) lockFocus; ++/* Locks focus with the origin at the TOP when flipped is YES. See the implementation: a missing ++ * one is what stopped LibreOffice from saving. */ ++- (void) lockFocusFlipped: (BOOL) flipped; + - (void) lockFocusOnRepresentation: (NSImageRep *) representation; + - (void) unlockFocus; + +--- a/AppKit/NSImage.m ++++ b/AppKit/NSImage.m +@@ -967,6 +967,32 @@ + [self lockFocusOnRepresentation: nil]; + } + ++/* ++ * DRAWING INTO AN IMAGE WITH THE ORIGIN AT THE TOP, which is what an application asks for when it ++ * renders an icon it is about to put in a view whose coordinates run downwards. ++ * ++ * IT IS ON THE SAVE PATH, which is why a missing method here was not a cosmetic gap: Command S in ++ * LibreOffice raised -[NSImage lockFocusFlipped:] as an unrecognized selector, the application ++ * caught it, and the save panel never opened. Nothing was logged but the raise itself, and the ++ * document simply did not save. ++ * ++ * The flip is the CTM, not a flag: translate to the top edge and invert Y, so a drawing operation ++ * with a small y lands near the top. lockFocus does the rest and unlockFocus is unchanged, since ++ * restoring the context discards the transform with it. ++ */ ++- (void) lockFocusFlipped: (BOOL) flipped { ++ [self lockFocus]; ++ ++ if (flipped) { ++ CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; ++ ++ if (context != NULL) { ++ CGContextTranslateCTM(context, 0.0, [self size].height); ++ CGContextScaleCTM(context, 1.0, -1.0); ++ } ++ } ++} ++ + - (void) lockFocusOnRepresentation: (NSImageRep *) representation { + NSGraphicsContext *context = nil; + CGContextRef graphicsPort;