summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2018-10-17 00:40:49 +0300
committerTor Lillqvist <tml@collabora.com>2018-10-17 00:45:35 +0300
commit58db979291da40c4016516100873ea97951a6b99 (patch)
treed54c7cb4748206b757ee5a7d17a3182afa67eb8c /gtk
parente9d0b38103c56a3b331d3f9842afda3d66060cc5 (diff)
Start on a gtk+-based workalike to the iOS app
The idea is that it would work sufficiently identically, so that even people without a Mac and without an iOS device could participate in development of the non-iOS-specific bits, like the JavaScript, or the online MOBILEAPP-specific plumbing. Which would be great. No, this doesn't do anything sane yet. It does compile the same online C++ files as the iOS app, though. (Some minor tweaks were needed in a couple of them to silence gcc warnings.) There is a plain Makefile, but I should change to using autofoo, too. Eventually, this will need to be built in a separate tree from a normal online, just like when using the --enable-iosapp configure switch. (But for now, doesn't matter.) Change-Id: I13e4d921acb99d802d2f9da4b0df4a237ca60ad6
Diffstat (limited to 'gtk')
-rw-r--r--gtk/Makefile37
-rw-r--r--gtk/main.cpp106
2 files changed, 143 insertions, 0 deletions
diff --git a/gtk/Makefile b/gtk/Makefile
new file mode 100644
index 000000000..cefbeb992
--- /dev/null
+++ b/gtk/Makefile
@@ -0,0 +1,37 @@
+PROGS = mobile
+
+all : $(PROGS)
+
+WARNINGFLAGS = -Wall -Werror -Wno-parentheses -Wno-sign-compare -Wno-unused-variable
+INCLUDEFLAGS = -I../common -I../net -I../kit -I../wsd -I../bundled/include -I.. -I.
+DEFINEFLAGS = -DMOBILEAPP -DLOOLWSD_DATADIR='"/usr/local/share/loolwsd"' -DLOOLWSD_CONFIGDIR='"/usr/local/etc/loolwsd"' -DTOPSRCDIR='"'$(realpath $(PWD)/..)'"'
+
+CFLAGS = -g $(WARNINGFLAGS) `pkg-config --cflags webkit2gtk-4.0` $(INCLUDEFLAGS) $(DEFINEFLAGS)
+CXXFLAGS = $(CFLAGS)
+
+LIBS=`pkg-config --libs webkit2gtk-4.0` -lPocoFoundationd -lPocoUtild -lPocoXMLd -lPocoJSONd -lPocoNetd -lpng -lpthread -ldl
+
+common_OBJS = Unit.o FileUtil.o Log.o MessageQueue.o Protocol.o Session.o SigUtil.o SpookyV2.o Util.o
+kit_OBJS = ChildSession.o Kit.o
+net_OBJS = FakeSocket.o Socket.o
+wsd_OBJS = ClientSession.o DocumentBroker.o LOOLWSD.o Storage.o TileCache.o
+
+mobile_OBJS = main.o $(common_OBJS) $(kit_OBJS) $(net_OBJS) $(wsd_OBJS)
+
+$(common_OBJS) : %.o : ../common/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(kit_OBJS) : %.o : ../kit/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(net_OBJS) : %.o : ../net/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(wsd_OBJS) : %.o : ../wsd/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+mobile : $(mobile_OBJS)
+ $(CXX) -o $@ $(mobile_OBJS) $(LIBS)
+
+clean :
+ rm -f $(PROGS) *.o 2>/dev/null
diff --git a/gtk/main.cpp b/gtk/main.cpp
new file mode 100644
index 000000000..e7dc9f4d6
--- /dev/null
+++ b/gtk/main.cpp
@@ -0,0 +1,106 @@
+// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*-
+/*
+ * Copyright (C) 2006, 2007 Apple Inc.
+ * Copyright (C) 2007 Alp Toker <alp@atoker.com>
+ * Copyright (C) 2011 Lukasz Slachciak
+ * Copyright (C) 2011 Bob Murphy
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <iostream>
+
+#include <gtk/gtk.h>
+#include <webkit2/webkit2.h>
+
+#include "FakeSocket.hpp"
+#include "Log.hpp"
+#include "LOOLWSD.hpp"
+#include "Util.hpp"
+
+static void destroyWindowCb(GtkWidget* widget, GtkWidget* window);
+static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window);
+
+int loolwsd_server_socket_fd;
+
+int main(int argc, char* argv[])
+{
+ Log::initialize("Mobile", "trace", false, false, {});
+ Util::setThreadName("main");
+ fakeSocketSetLoggingCallback([](const std::string& line)
+ {
+ LOG_TRC_NOFILE(line);
+ });
+
+ // Initialize GTK+
+ gtk_init(&argc, &argv);
+
+ // Create an 800x600 window that will contain the browser instance
+ GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);
+
+ // Create a "user content manager"
+ WebKitUserContentManager *userContentManager = WEBKIT_USER_CONTENT_MANAGER(webkit_user_content_manager_new());
+
+ // Create a browser instance
+ WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_user_content_manager(userContentManager));
+
+ // Put the browser area into the main window
+ gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
+
+ // Set up callbacks so that if either the main window or the browser instance is
+ // closed, the program will exit
+ g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
+ g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);
+
+ // Load a web page into the browser instance
+ webkit_web_view_load_uri(webView,
+ "file://" TOPSRCDIR "/loleaflet/dist/loleaflet.html"
+ "?file_path=" TOPSRCDIR "/test/data/hello-world.odt"
+ "&closebutton=1"
+ "&permission=edit"
+ "&debug=true");
+
+ // Make sure that when the browser area becomes visible, it will get mouse
+ // and keyboard events
+ gtk_widget_grab_focus(GTK_WIDGET(webView));
+
+ // Make sure the main window and all its contents are visible
+ gtk_widget_show_all(main_window);
+
+ // Run the main GTK+ event loop
+ gtk_main();
+
+ return 0;
+}
+
+
+static void destroyWindowCb(GtkWidget* widget, GtkWidget* window)
+{
+ gtk_main_quit();
+}
+
+static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window)
+{
+ gtk_widget_destroy(window);
+ return TRUE;
+}