[Libreoffice-commits] online.git: 2 commits - loleaflet/js loleaflet/src Mobile/Mobile Mobile/Mobile.xcodeproj

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 12 15:01:14 UTC 2018


 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 <tml at collabora.com>
AuthorDate: Fri Oct 12 17:48:45 2018 +0300
Commit:     Tor Lillqvist <tml at 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 <tml at collabora.com>
AuthorDate: Fri Oct 12 15:09:07 2018 +0300
Commit:     Tor Lillqvist <tml at 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 */


More information about the Libreoffice-commits mailing list