diff options
author | Tor Lillqvist <tml@collabora.com> | 2018-10-17 00:40:49 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2018-10-17 00:45:35 +0300 |
commit | 58db979291da40c4016516100873ea97951a6b99 (patch) | |
tree | d54c7cb4748206b757ee5a7d17a3182afa67eb8c /gtk | |
parent | e9d0b38103c56a3b331d3f9842afda3d66060cc5 (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/Makefile | 37 | ||||
-rw-r--r-- | gtk/main.cpp | 106 |
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; +} |