Mobile/Mobile.xcodeproj/project.pbxproj | 134 +++++++++++++++++++++++++++++++ Mobile/Mobile/Document.mm | 1 Mobile/Mobile/DocumentViewController.mm | 49 +++++++++-- loleaflet/js/toolbar.js | 8 + loleaflet/src/control/Control.Menubar.js | 8 + 5 files changed, 186 insertions(+), 14 deletions(-)
New commits: commit ed348677f22d887d80c76b5dcae22a109e457f72 Author: Tor Lillqvist <t...@collabora.com> AuthorDate: Fri Oct 12 17:48:45 2018 +0300 Commit: Tor Lillqvist <t...@collabora.com> CommitDate: Fri Oct 12 17:48:45 2018 +0300 Add "Close document" menu entry (or corresponding button) to the iOS app In the JS, send the special "BYE" message to the app code. In the iOS app code, handle that message by closing the fake socket connection to the Online code, which eventually will cause the corresponding thread to exit etc, and the app to return to displaying the DocumentBrowserViewController. (Currently it causes the whole app to exit which is wrong of course; an iOS should never exit intentionally.) diff --git a/Mobile/Mobile/Document.mm b/Mobile/Mobile/Document.mm index eadf653ec..e36b219e0 100644 --- a/Mobile/Mobile/Document.mm +++ b/Mobile/Mobile/Document.mm @@ -38,6 +38,7 @@ NSURL *url = [[NSBundle mainBundle] URLForResource:@"loleaflet" withExtension:@"html"]; NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; components.queryItems = @[ [NSURLQueryItem queryItemWithName:@"file_path" value:[NSString stringWithUTF8String:uri.c_str()]], + [NSURLQueryItem queryItemWithName:@"closebutton" value:@"1"], [NSURLQueryItem queryItemWithName:@"permission" value:@"edit"], [NSURLQueryItem queryItemWithName:@"debug" value:@"true"]]; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:components.URL]; diff --git a/Mobile/Mobile/DocumentViewController.mm b/Mobile/Mobile/DocumentViewController.mm index 5f203fdef..fc7f2deee 100644 --- a/Mobile/Mobile/DocumentViewController.mm +++ b/Mobile/Mobile/DocumentViewController.mm @@ -19,7 +19,7 @@ #import "DocumentViewController.h" @interface DocumentViewController() <WKNavigationDelegate, WKUIDelegate, WKScriptMessageHandler> { - BOOL waitingForInitialLoad; + int closeNotificationPipeForForwardingThread[2]; } @end @@ -157,20 +157,42 @@ rc = fakeSocketConnect(self.document->fakeClientFd, loolwsd_server_socket_fd); assert(rc != -1); + // Create a socket pair to notify the below thread when the document has been closed + fakeSocketPipe2(closeNotificationPipeForForwardingThread); + // Start another thread to read responses and forward them to the JavaScript dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ while (true) { - struct pollfd p; - p.fd = self.document->fakeClientFd; - p.events = POLLIN; - if (fakeSocketPoll(&p, 1, -1) == 1) { - int n = fakeSocketAvailableDataLength(self.document->fakeClientFd); - if (n == 0) + struct pollfd p[2]; + p[0].fd = self.document->fakeClientFd; + p[0].events = POLLIN; + p[1].fd = self->closeNotificationPipeForForwardingThread[1]; + p[1].events = POLLIN; + if (fakeSocketPoll(p, 2, -1) > 0) { + if (p[1].revents == POLLIN) { + // The code below handling the "BYE" fake Websocket + // message has closed the other end of the + // closeNotificationPipeForForwardingThread. Let's close + // the other end too just for cleanliness, even if a + // FakeSocket as such is not a system resource so nothing + // is saved by closing it. + fakeSocketClose(self->closeNotificationPipeForForwardingThread[0]); + + // Close our end of the fake socket connection to the + // ClientSession thread, so that it terminates + fakeSocketClose(self.document->fakeClientFd); + return; - std::vector<char> buf(n); - n = fakeSocketRead(self.document->fakeClientFd, buf.data(), n); - [self.document send2JS:buf.data() length:n]; + } + if (p[0].revents == POLLIN) { + int n = fakeSocketAvailableDataLength(self.document->fakeClientFd); + if (n == 0) + return; + std::vector<char> buf(n); + n = fakeSocketRead(self.document->fakeClientFd, buf.data(), n); + [self.document send2JS:buf.data() length:n]; + } } else break; @@ -187,6 +209,13 @@ fakeSocketWrite(self.document->fakeClientFd, url.c_str(), url.size()); return; + } else if ([message.body isEqualToString:@"BYE"]) { + NSLog(@"document window closed! Closing our end of the socket?"); + + // Close one end of the socket pair, that will wake up the forwarding thread above + fakeSocketClose(closeNotificationPipeForForwardingThread[0]); + + return; } const char *buf = [message.body UTF8String]; diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js index a08e81598..40a16b668 100644 --- a/loleaflet/js/toolbar.js +++ b/loleaflet/js/toolbar.js @@ -1869,8 +1869,12 @@ $(document).ready(function() { $('#closebuttonwrapper').hide(); } else { $('#closebutton').click(function() { - map.fire('postMessage', {msgId: 'close', args: {EverModified: map._everModified, Deprecated: true}}); - map.fire('postMessage', {msgId: 'UI_Close', args: {EverModified: map._everModified}}); + if (window.ThisIsTheiOSApp) { + window.webkit.messageHandlers.lool.postMessage('BYE', '*'); + } else { + map.fire('postMessage', {msgId: 'close', args: {EverModified: map._everModified, Deprecated: true}}); + map.fire('postMessage', {msgId: 'UI_Close', args: {EverModified: map._everModified}}); + } map.remove(); }); } diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index 236d54f74..7c0e46e52 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -735,8 +735,12 @@ L.Control.Menubar = L.Control.extend({ this._map.fire('postMessage', {msgId: 'rev-history', args: {Deprecated: true}}); this._map.fire('postMessage', {msgId: 'UI_FileVersions'}); } else if (id === 'closedocument') { - this._map.fire('postMessage', {msgId: 'close', args: {EverModified: this._map._everModified, Deprecated: true}}); - this._map.fire('postMessage', {msgId: 'UI_Close', args: {EverModified: this._map._everModified}}); + if (window.ThisIsTheiOSApp) { + window.webkit.messageHandlers.lool.postMessage('BYE', '*'); + } else { + this._map.fire('postMessage', {msgId: 'close', args: {EverModified: this._map._everModified, Deprecated: true}}); + this._map.fire('postMessage', {msgId: 'UI_Close', args: {EverModified: this._map._everModified}}); + } this._map.remove(); } else if (id === 'repair') { this._map._socket.sendMessage('commandvalues command=.uno:DocumentRepair'); commit 0318f383f78d548b66d45c8e908c71e16839e654 Author: Tor Lillqvist <t...@collabora.com> AuthorDate: Fri Oct 12 15:09:07 2018 +0300 Commit: Tor Lillqvist <t...@collabora.com> CommitDate: Fri Oct 12 15:09:07 2018 +0300 Agan, add more core source files diff --git a/Mobile/Mobile.xcodeproj/project.pbxproj b/Mobile/Mobile.xcodeproj/project.pbxproj index fe689f972..5821bcfa4 100644 --- a/Mobile/Mobile.xcodeproj/project.pbxproj +++ b/Mobile/Mobile.xcodeproj/project.pbxproj @@ -198,6 +198,57 @@ BEA2835F214ACA8500848631 /* FakeSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FakeSocket.cpp; sourceTree = "<group>"; }; BEA28376214FFD8C00848631 /* Unit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Unit.cpp; sourceTree = "<group>"; }; BEA283782150172600848631 /* Unit.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Unit.hpp; sourceTree = "<group>"; }; + BEB6521C216F5D8B00B8C09A /* file_path_helper.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = file_path_helper.hxx; path = "../../ios-device/sal/osl/unx/file_path_helper.hxx"; sourceTree = "<group>"; }; + BEB6521D216F5D8B00B8C09A /* file_error_transl.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = file_error_transl.hxx; path = "../../ios-device/sal/osl/unx/file_error_transl.hxx"; sourceTree = "<group>"; }; + BEB6521E216F5D8B00B8C09A /* nlsupport.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = nlsupport.hxx; path = "../../ios-device/sal/osl/unx/nlsupport.hxx"; sourceTree = "<group>"; }; + BEB6521F216F5D8B00B8C09A /* createfilehandlefromfd.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = createfilehandlefromfd.hxx; path = "../../ios-device/sal/osl/unx/createfilehandlefromfd.hxx"; sourceTree = "<group>"; }; + BEB65220216F5D8B00B8C09A /* sockimpl.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = sockimpl.hxx; path = "../../ios-device/sal/osl/unx/sockimpl.hxx"; sourceTree = "<group>"; }; + BEB65221216F5D8B00B8C09A /* file_error_transl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_error_transl.cxx; path = "../../ios-device/sal/osl/unx/file_error_transl.cxx"; sourceTree = "<group>"; }; + BEB65222216F5D8B00B8C09A /* system.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = system.hxx; path = "../../ios-device/sal/osl/unx/system.hxx"; sourceTree = "<group>"; }; + BEB65223216F5D8B00B8C09A /* backtrace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = backtrace.h; path = "../../ios-device/sal/osl/unx/backtrace.h"; sourceTree = "<group>"; }; + BEB65224216F5D8B00B8C09A /* file_url.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = file_url.hxx; path = "../../ios-device/sal/osl/unx/file_url.hxx"; sourceTree = "<group>"; }; + BEB65225216F5D8B00B8C09A /* file_volume.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_volume.cxx; path = "../../ios-device/sal/osl/unx/file_volume.cxx"; sourceTree = "<group>"; }; + BEB65226216F5D8B00B8C09A /* mutex.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mutex.cxx; path = "../../ios-device/sal/osl/unx/mutex.cxx"; sourceTree = "<group>"; }; + BEB65227216F5D8B00B8C09A /* security.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = security.cxx; path = "../../ios-device/sal/osl/unx/security.cxx"; sourceTree = "<group>"; }; + BEB65228216F5D8B00B8C09A /* memory.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memory.cxx; path = "../../ios-device/sal/osl/unx/memory.cxx"; sourceTree = "<group>"; }; + BEB65229216F5D8B00B8C09A /* system.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = system.cxx; path = "../../ios-device/sal/osl/unx/system.cxx"; sourceTree = "<group>"; }; + BEB6522A216F5D8B00B8C09A /* file_misc.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_misc.cxx; path = "../../ios-device/sal/osl/unx/file_misc.cxx"; sourceTree = "<group>"; }; + BEB6522B216F5D8B00B8C09A /* thread.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = thread.cxx; path = "../../ios-device/sal/osl/unx/thread.cxx"; sourceTree = "<group>"; }; + BEB6522C216F5D8B00B8C09A /* signal.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = signal.cxx; path = "../../ios-device/sal/osl/unx/signal.cxx"; sourceTree = "<group>"; }; + BEB6522D216F5D8C00B8C09A /* secimpl.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = secimpl.hxx; path = "../../ios-device/sal/osl/unx/secimpl.hxx"; sourceTree = "<group>"; }; + BEB6522E216F5D8C00B8C09A /* profile.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profile.cxx; path = "../../ios-device/sal/osl/unx/profile.cxx"; sourceTree = "<group>"; }; + BEB6522F216F5D8C00B8C09A /* system.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = system.mm; path = "../../ios-device/sal/osl/unx/system.mm"; sourceTree = "<group>"; }; + BEB65230216F5D8C00B8C09A /* backtrace.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = backtrace.c; path = "../../ios-device/sal/osl/unx/backtrace.c"; sourceTree = "<group>"; }; + BEB65231216F5D8C00B8C09A /* file_path_helper.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_path_helper.cxx; path = "../../ios-device/sal/osl/unx/file_path_helper.cxx"; sourceTree = "<group>"; }; + BEB65232216F5D8C00B8C09A /* process_impl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = process_impl.cxx; path = "../../ios-device/sal/osl/unx/process_impl.cxx"; sourceTree = "<group>"; }; + BEB65233216F5D8C00B8C09A /* file_impl.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = file_impl.hxx; path = "../../ios-device/sal/osl/unx/file_impl.hxx"; sourceTree = "<group>"; }; + BEB65234216F5D8C00B8C09A /* socket.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = socket.cxx; path = "../../ios-device/sal/osl/unx/socket.cxx"; sourceTree = "<group>"; }; + BEB65235216F5D8C00B8C09A /* readwrite_helper.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = readwrite_helper.cxx; path = "../../ios-device/sal/osl/unx/readwrite_helper.cxx"; sourceTree = "<group>"; }; + BEB65236216F5D8C00B8C09A /* osxlocale.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = osxlocale.cxx; path = "../../ios-device/sal/osl/unx/osxlocale.cxx"; sourceTree = "<group>"; }; + BEB65237216F5D8C00B8C09A /* file_stat.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_stat.cxx; path = "../../ios-device/sal/osl/unx/file_stat.cxx"; sourceTree = "<group>"; }; + BEB65238216F5D8C00B8C09A /* file.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file.cxx; path = "../../ios-device/sal/osl/unx/file.cxx"; sourceTree = "<group>"; }; + BEB65239216F5D8C00B8C09A /* module.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = module.cxx; path = "../../ios-device/sal/osl/unx/module.cxx"; sourceTree = "<group>"; }; + BEB6523A216F5D8C00B8C09A /* pipe.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pipe.cxx; path = "../../ios-device/sal/osl/unx/pipe.cxx"; sourceTree = "<group>"; }; + BEB6523B216F5D8C00B8C09A /* readwrite_helper.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = readwrite_helper.hxx; path = "../../ios-device/sal/osl/unx/readwrite_helper.hxx"; sourceTree = "<group>"; }; + BEB6523C216F5D8C00B8C09A /* salinit.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = salinit.cxx; path = "../../ios-device/sal/osl/unx/salinit.cxx"; sourceTree = "<group>"; }; + BEB6523D216F5D8C00B8C09A /* file_url.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = file_url.cxx; path = "../../ios-device/sal/osl/unx/file_url.cxx"; sourceTree = "<group>"; }; + BEB6523E216F5D8C00B8C09A /* backtraceapi.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = backtraceapi.cxx; path = "../../ios-device/sal/osl/unx/backtraceapi.cxx"; sourceTree = "<group>"; }; + BEB6523F216F5D8C00B8C09A /* interlck.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = interlck.cxx; path = "../../ios-device/sal/osl/unx/interlck.cxx"; sourceTree = "<group>"; }; + BEB65240216F5D8C00B8C09A /* random.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = random.cxx; path = "../../ios-device/sal/osl/unx/random.cxx"; sourceTree = "<group>"; }; + BEB65241216F5D8C00B8C09A /* tempfile.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tempfile.cxx; path = "../../ios-device/sal/osl/unx/tempfile.cxx"; sourceTree = "<group>"; }; + BEB65242216F5D8C00B8C09A /* uunxapi.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = uunxapi.hxx; path = "../../ios-device/sal/osl/unx/uunxapi.hxx"; sourceTree = "<group>"; }; + BEB65243216F5D8C00B8C09A /* conditn.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = conditn.cxx; path = "../../ios-device/sal/osl/unx/conditn.cxx"; sourceTree = "<group>"; }; + BEB65244216F5D8C00B8C09A /* asm */ = {isa = PBXFileReference; lastKnownFileType = folder; name = asm; path = "../../ios-device/sal/osl/unx/asm"; sourceTree = "<group>"; }; + BEB65245216F5D8C00B8C09A /* uunxapi.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = uunxapi.cxx; path = "../../ios-device/sal/osl/unx/uunxapi.cxx"; sourceTree = "<group>"; }; + BEB65246216F5D8D00B8C09A /* time.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time.cxx; path = "../../ios-device/sal/osl/unx/time.cxx"; sourceTree = "<group>"; }; + BEB65247216F5D8D00B8C09A /* uunxapi.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = uunxapi.mm; path = "../../ios-device/sal/osl/unx/uunxapi.mm"; sourceTree = "<group>"; }; + BEB65248216F5D8D00B8C09A /* process.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = process.cxx; path = "../../ios-device/sal/osl/unx/process.cxx"; sourceTree = "<group>"; }; + BEB65249216F5D8D00B8C09A /* saltime.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = saltime.hxx; path = "../../ios-device/sal/osl/unx/saltime.hxx"; sourceTree = "<group>"; }; + BEB6524A216F5D8D00B8C09A /* nlsupport.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nlsupport.cxx; path = "../../ios-device/sal/osl/unx/nlsupport.cxx"; sourceTree = "<group>"; }; + BEB6524D216FD0CA00B8C09A /* vcompat.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = vcompat.cxx; path = "../../ios-device/tools/source/stream/vcompat.cxx"; sourceTree = "<group>"; }; + BEB6524E216FD0CA00B8C09A /* stream.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stream.cxx; path = "../../ios-device/tools/source/stream/stream.cxx"; sourceTree = "<group>"; }; + BEB6524F216FD0CA00B8C09A /* strmwnt.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = strmwnt.cxx; path = "../../ios-device/tools/source/stream/strmwnt.cxx"; sourceTree = "<group>"; }; + BEB65250216FD0CA00B8C09A /* strmunx.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = strmunx.cxx; path = "../../ios-device/tools/source/stream/strmunx.cxx"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -300,7 +351,9 @@ BE6362BE2153A79200F4237E /* Core */ = { isa = PBXGroup; children = ( + BEB6521A216F5D4600B8C09A /* sal */, BE93D43C216D555C007A39F4 /* sfx2 */, + BEB6524B216FD09400B8C09A /* tools */, BE93D420216CAA52007A39F4 /* vcl */, ); name = Core; @@ -472,6 +525,87 @@ path = ../net; sourceTree = SOURCE_ROOT; }; + BEB6521A216F5D4600B8C09A /* sal */ = { + isa = PBXGroup; + children = ( + BEB6521B216F5D4C00B8C09A /* unx */, + ); + name = sal; + sourceTree = "<group>"; + }; + BEB6521B216F5D4C00B8C09A /* unx */ = { + isa = PBXGroup; + children = ( + BEB65244216F5D8C00B8C09A /* asm */, + BEB65230216F5D8C00B8C09A /* backtrace.c */, + BEB65223216F5D8B00B8C09A /* backtrace.h */, + BEB6523E216F5D8C00B8C09A /* backtraceapi.cxx */, + BEB65243216F5D8C00B8C09A /* conditn.cxx */, + BEB6521F216F5D8B00B8C09A /* createfilehandlefromfd.hxx */, + BEB65221216F5D8B00B8C09A /* file_error_transl.cxx */, + BEB6521D216F5D8B00B8C09A /* file_error_transl.hxx */, + BEB65233216F5D8C00B8C09A /* file_impl.hxx */, + BEB6522A216F5D8B00B8C09A /* file_misc.cxx */, + BEB65231216F5D8C00B8C09A /* file_path_helper.cxx */, + BEB6521C216F5D8B00B8C09A /* file_path_helper.hxx */, + BEB65237216F5D8C00B8C09A /* file_stat.cxx */, + BEB6523D216F5D8C00B8C09A /* file_url.cxx */, + BEB65224216F5D8B00B8C09A /* file_url.hxx */, + BEB65225216F5D8B00B8C09A /* file_volume.cxx */, + BEB65238216F5D8C00B8C09A /* file.cxx */, + BEB6523F216F5D8C00B8C09A /* interlck.cxx */, + BEB65228216F5D8B00B8C09A /* memory.cxx */, + BEB65239216F5D8C00B8C09A /* module.cxx */, + BEB65226216F5D8B00B8C09A /* mutex.cxx */, + BEB6524A216F5D8D00B8C09A /* nlsupport.cxx */, + BEB6521E216F5D8B00B8C09A /* nlsupport.hxx */, + BEB65236216F5D8C00B8C09A /* osxlocale.cxx */, + BEB6523A216F5D8C00B8C09A /* pipe.cxx */, + BEB65232216F5D8C00B8C09A /* process_impl.cxx */, + BEB65248216F5D8D00B8C09A /* process.cxx */, + BEB6522E216F5D8C00B8C09A /* profile.cxx */, + BEB65240216F5D8C00B8C09A /* random.cxx */, + BEB65235216F5D8C00B8C09A /* readwrite_helper.cxx */, + BEB6523B216F5D8C00B8C09A /* readwrite_helper.hxx */, + BEB6523C216F5D8C00B8C09A /* salinit.cxx */, + BEB65249216F5D8D00B8C09A /* saltime.hxx */, + BEB6522D216F5D8C00B8C09A /* secimpl.hxx */, + BEB65227216F5D8B00B8C09A /* security.cxx */, + BEB6522C216F5D8B00B8C09A /* signal.cxx */, + BEB65234216F5D8C00B8C09A /* socket.cxx */, + BEB65220216F5D8B00B8C09A /* sockimpl.hxx */, + BEB65229216F5D8B00B8C09A /* system.cxx */, + BEB65222216F5D8B00B8C09A /* system.hxx */, + BEB6522F216F5D8C00B8C09A /* system.mm */, + BEB65241216F5D8C00B8C09A /* tempfile.cxx */, + BEB6522B216F5D8B00B8C09A /* thread.cxx */, + BEB65246216F5D8D00B8C09A /* time.cxx */, + BEB65245216F5D8C00B8C09A /* uunxapi.cxx */, + BEB65242216F5D8C00B8C09A /* uunxapi.hxx */, + BEB65247216F5D8D00B8C09A /* uunxapi.mm */, + ); + name = unx; + sourceTree = "<group>"; + }; + BEB6524B216FD09400B8C09A /* tools */ = { + isa = PBXGroup; + children = ( + BEB6524C216FD0AA00B8C09A /* stream */, + ); + name = tools; + sourceTree = "<group>"; + }; + BEB6524C216FD0AA00B8C09A /* stream */ = { + isa = PBXGroup; + children = ( + BEB6524E216FD0CA00B8C09A /* stream.cxx */, + BEB65250216FD0CA00B8C09A /* strmunx.cxx */, + BEB6524F216FD0CA00B8C09A /* strmwnt.cxx */, + BEB6524D216FD0CA00B8C09A /* vcompat.cxx */, + ); + name = stream; + sourceTree = "<group>"; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits