diff --git a/www-client/otter-browser/additional-files/haikuicons.zip b/www-client/otter-browser/additional-files/haikuicons.zip
index be4fcb68c..c35c408dd 100644
Binary files a/www-client/otter-browser/additional-files/haikuicons.zip and b/www-client/otter-browser/additional-files/haikuicons.zip differ
diff --git a/www-client/otter-browser/otter_browser-1.0.01.recipe b/www-client/otter-browser/otter_browser-1.0.01.recipe
index d811ed82e..d6e17c3a4 100644
--- a/www-client/otter-browser/otter_browser-1.0.01.recipe
+++ b/www-client/otter-browser/otter_browser-1.0.01.recipe
@@ -4,7 +4,7 @@ classic Opera (12.x) UI using Qt5."
HOMEPAGE="https://otter-browser.org/"
COPYRIGHT="2013-2019 Otter Browser Team"
LICENSE="GNU GPL v3"
-REVISION="6"
+REVISION="7"
SOURCE_URI="https://github.com/OtterBrowser/otter-browser/archive/v$portVersion.tar.gz"
CHECKSUM_SHA256="85aef7c74277cf94de237e516c3c2d507b3d19b9ad16853de938540b8bf2f16b"
SOURCE_FILENAME="otter-browser-$portVersion.tar.gz"
@@ -72,7 +72,7 @@ defineDebugInfoPackage otter_browser$secondaryArchSuffix \
PATCH()
{
- unzip -o $sourceDir/../../additional-files/haikuicons.zip -d $sourceDir/resources/icons/theme
+ unzip -o $sourceDir/../../additional-files/haikuicons.zip -d $sourceDir/resources/icons
}
BUILD()
diff --git a/www-client/otter-browser/patches/otter_browser-1.0.01.patchset b/www-client/otter-browser/patches/otter_browser-1.0.01.patchset
index eb1177fce..9ae0fe25c 100644
--- a/www-client/otter-browser/patches/otter_browser-1.0.01.patchset
+++ b/www-client/otter-browser/patches/otter_browser-1.0.01.patchset
@@ -1,4 +1,4 @@
-From ba9fd1f8f8b3c5cc0fa819f645ea586bade5a038 Mon Sep 17 00:00:00 2001
+From 5c52f0ab82e4ba06391e67f4f3e359f181fc5863 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Thu, 3 Jan 2019 17:08:40 +1000
Subject: Fix for Haiku
@@ -103,14 +103,14 @@ index bec0f9c..d2d6581 100644
2.19.1
-From e84f821939a5b4b3f7a607e08506fdffd52fff8d Mon Sep 17 00:00:00 2001
+From 3e92b28544aa663f84d8e0707ecca12068ddbe91 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 2 Mar 2019 23:13:15 +1000
Subject: Add haiku hunspell paths
diff --git a/3rdparty/sonnet/src/plugins/hunspell/hunspellclient.cpp b/3rdparty/sonnet/src/plugins/hunspell/hunspellclient.cpp
-index e9767a9..1956528 100644
+index e9767a9..78694a9 100644
--- a/3rdparty/sonnet/src/plugins/hunspell/hunspellclient.cpp
+++ b/3rdparty/sonnet/src/plugins/hunspell/hunspellclient.cpp
@@ -56,6 +56,8 @@ HunspellClient::HunspellClient(QObject *parent)
@@ -125,3 +125,420 @@ index e9767a9..1956528 100644
--
2.19.1
+
+From f62530291720990392c793a93273f39835951ce4 Mon Sep 17 00:00:00 2001
+From: Gerasim Troeglazov <3dEyes@gmail.com>
+Date: Sun, 10 Mar 2019 14:18:43 +1000
+Subject: Add platform integration module for Haiku
+
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6bd212f..38873bc 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -504,6 +504,16 @@ elseif (APPLE)
+ )
+
+ set_source_files_properties(resources/icons/otter-browser.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
++elseif (HAIKU)
++ set(otter_src
++ ${otter_src}
++ src/modules/platforms/haiku/HaikuPlatformIntegration.cpp
++ src/modules/platforms/haiku/HaikuPlatformStyle.cpp
++ 3rdparty/libmimeapps/ConfigReader.cpp
++ 3rdparty/libmimeapps/DesktopEntry.cpp
++ 3rdparty/libmimeapps/Index.cpp
++ 3rdparty/libmimeapps/Tools.cpp
++ )
+ elseif (UNIX)
+ find_package(Qt5DBus 5.6.0 QUIET)
+
+@@ -554,6 +564,10 @@ elseif (UNIX)
+ target_link_libraries(otter-browser Qt5::DBus)
+ endif ()
+
++ if (HAIKU)
++ target_link_libraries(otter-browser -lbe)
++ endif ()
++
+ if (ENABLE_CRASHREPORTS)
+ target_link_libraries(otter-browser -lpthread)
+ endif ()
+diff --git a/src/core/Application.cpp b/src/core/Application.cpp
+index 64b6cc6..1b041e2 100644
+--- a/src/core/Application.cpp
++++ b/src/core/Application.cpp
+@@ -46,6 +46,8 @@
+ #include "../modules/platforms/windows/WindowsPlatformIntegration.h"
+ #elif defined(Q_OS_MAC)
+ #include "../modules/platforms/mac/MacPlatformIntegration.h"
++#elif defined(Q_OS_HAIKU)
++#include "../modules/platforms/haiku/HaikuPlatformIntegration.h"
+ #elif defined(Q_OS_UNIX)
+ #include "../modules/platforms/freedesktoporg/FreeDesktopOrgPlatformIntegration.h"
+ #endif
+@@ -454,6 +456,8 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv), Act
+ m_platformIntegration = new WindowsPlatformIntegration(this);
+ #elif defined(Q_OS_MAC)
+ m_platformIntegration = new MacPlatformIntegration(this);
++#elif defined(Q_OS_HAIKU)
++ m_platformIntegration = new HaikuPlatformIntegration(this);
+ #elif defined(Q_OS_UNIX)
+ m_platformIntegration = new FreeDesktopOrgPlatformIntegration(this);
+ #endif
+diff --git a/src/modules/platforms/haiku/HaikuPlatformIntegration.cpp b/src/modules/platforms/haiku/HaikuPlatformIntegration.cpp
+new file mode 100644
+index 0000000..8e0d6d7
+--- /dev/null
++++ b/src/modules/platforms/haiku/HaikuPlatformIntegration.cpp
+@@ -0,0 +1,191 @@
++/**************************************************************************
++* Otter Browser: Web browser controlled by the user, not vice-versa.
++* Copyright (C) 2019 Gerasim Troeglazov <3dEyes@gmail.com>
++*
++* This program is free software: you can redistribute it and/or modify
++* it under the terms of the GNU General Public License as published by
++* the Free Software Foundation, either version 3 of the License, or
++* (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program. If not, see .
++*
++**************************************************************************/
++
++#include "HaikuPlatformIntegration.h"
++#include "HaikuPlatformStyle.h"
++#include "../../../core/Application.h"
++#include "../../../core/NotificationsManager.h"
++#include "../../../core/SettingsManager.h"
++#include "../../../core/TransfersManager.h"
++#include "../../../core/Utils.h"
++#include "../../../../3rdparty/libmimeapps/DesktopEntry.h"
++#include "../../../../3rdparty/libmimeapps/Index.h"
++
++#include
++#include
++#include
++#include
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++namespace Otter
++{
++
++HaikuPlatformIntegration::HaikuPlatformIntegration(QObject *parent) : PlatformIntegration(parent)
++{
++}
++
++HaikuPlatformIntegration::~HaikuPlatformIntegration()
++{
++}
++
++void HaikuPlatformIntegration::runApplication(const QString &command, const QUrl &url) const
++{
++ if (command.isEmpty())
++ QDesktopServices::openUrl(url);
++
++ std::vector fileNames;
++ fileNames.push_back((url.isLocalFile() ? QDir::toNativeSeparators(url.toLocalFile()) : url.url()).toStdString());
++
++ const std::vector parsed(LibMimeApps::DesktopEntry::parseExec(command.toStdString(), \
++ fileNames, LibMimeApps::DesktopEntry::ParseOptions::NecessarilyUseUrl));
++
++ if (parsed.size() < 1)
++ return;
++
++ QStringList arguments;
++ arguments.reserve(static_cast(parsed.size()));
++
++ for (std::vector::size_type i = 1; i < parsed.size(); ++i)
++ arguments.append(QString::fromStdString(parsed.at(i)));
++
++ QProcess::startDetached(QString::fromStdString(parsed.at(0)), arguments);
++}
++
++void HaikuPlatformIntegration::showNotification(Notification *notification)
++{
++ notification_type ntype = B_INFORMATION_NOTIFICATION;
++
++ QString title;
++ switch (notification->getLevel())
++ {
++ case Notification::ErrorLevel:
++ title = tr("Error");
++ ntype = B_ERROR_NOTIFICATION;
++ break;
++ case Notification::WarningLevel:
++ title = tr("Warning");
++ ntype = B_IMPORTANT_NOTIFICATION;
++ break;
++ default:
++ title = tr("Information");
++ notification_type ntype = B_INFORMATION_NOTIFICATION;
++ break;
++ }
++
++ QFileInfo appFileInfo(QCoreApplication::applicationFilePath());
++ BString stitle((const char *)(title.toUtf8()));
++ BString smessage((const char *)(notification->getMessage().toUtf8()));
++ BString smessageId((const char *)(appFileInfo.fileName().toUtf8()));
++ BString group((const char*)(appFileInfo.baseName().toUtf8()));
++
++ BFile file(appFileInfo.filePath().toUtf8(), O_RDONLY);
++ BNodeInfo nodeInfo(&file);
++ BRect rect(0, 0, B_LARGE_ICON - 1, B_LARGE_ICON -1);
++ BBitmap bitmap(rect, B_RGBA32);
++
++ BNotification notification(ntype);
++ notification.SetGroup(group);
++ notification.SetTitle(stitle);
++ notification.SetMessageID(smessageId);
++ notification.SetContent(smessage);
++
++ if (nodeInfo.GetTrackerIcon(&bitmap, B_LARGE_ICON) == B_NO_ERROR)
++ notification.SetIcon(&bitmap);
++
++ const int visibilityDuration(SettingsManager::getOption(SettingsManager::Interface_NotificationVisibilityDurationOption).toInt());
++
++ notification.Send((visibilityDuration <= 0) ? 3000000 : visibilityDuration * 1000000);
++}
++
++void HaikuPlatformIntegration::updateTransfersProgress()
++{
++}
++
++void HaikuPlatformIntegration::setTransfersProgress(qint64 bytesTotal, qint64 bytesReceived, qint64 transferAmount)
++{
++}
++
++Style* HaikuPlatformIntegration::createStyle(const QString &name) const
++{
++ return nullptr;
++}
++
++QVector HaikuPlatformIntegration::getApplicationsForMimeType(const QMimeType &mimeType)
++{
++ QVector result;
++
++ BMimeType type(mimeType.name().toLatin1());
++ BMessage applications;
++ if (type.GetSupportingApps(&applications) != B_OK)
++ return result;
++
++ ApplicationInformation application;
++ application.command = QString("/bin/open");
++ application.name = QString("Default application");
++ application.icon = QIcon::fromTheme("application-x-executable");
++ result.append(application);
++
++ const char* signature;
++ int32 i = 0;
++ while (applications.FindString("applications", i, &signature) == B_OK) {
++ char name[B_FILE_NAME_LENGTH];
++ BMimeType applicationType(signature);
++ entry_ref app_ref;
++ applicationType.GetAppHint(&app_ref);
++ icon_size iconSize = B_MINI_ICON;
++ BRect iconRect(0, 0, iconSize - 1, iconSize - 1);
++ BBitmap* appIcon = new BBitmap(iconRect, 0, B_RGBA32);
++ if (applicationType.GetIcon(appIcon, iconSize) < B_OK) {
++ delete appIcon;
++ appIcon = NULL;
++ }
++ BPath path(&app_ref);
++ if (applicationType.GetShortDescription(name) == B_OK) {
++ ApplicationInformation application;
++ application.command = QString(path.Path());
++ application.name = QString(name);
++ if (appIcon != NULL) {
++ QImage image(iconSize, iconSize, QImage::Format_ARGB32);
++ memcpy((uchar*)image.bits(), (uchar*)appIcon->Bits(), iconSize * iconSize * 4);
++ QPixmap pixmap = QPixmap::fromImage(image);
++ application.icon = QIcon(pixmap);
++ delete appIcon;
++ }
++ result.append(application);
++ }
++ i++;
++ }
++
++ return result;
++}
++
++bool HaikuPlatformIntegration::canShowNotifications() const
++{
++ return true;
++}
++
++}
+diff --git a/src/modules/platforms/haiku/HaikuPlatformIntegration.h b/src/modules/platforms/haiku/HaikuPlatformIntegration.h
+new file mode 100644
+index 0000000..f49bb32
+--- /dev/null
++++ b/src/modules/platforms/haiku/HaikuPlatformIntegration.h
+@@ -0,0 +1,53 @@
++/**************************************************************************
++* Otter Browser: Web browser controlled by the user, not vice-versa.
++* Copyright (C) 2019 Gerasim Troeglazov <3dEyes@gmail.com>
++*
++* This program is free software: you can redistribute it and/or modify
++* it under the terms of the GNU General Public License as published by
++* the Free Software Foundation, either version 3 of the License, or
++* (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program. If not, see .
++*
++**************************************************************************/
++
++#ifndef OTTER_HAIKUPLATFORMINTEGRATION_H
++#define OTTER_HAIKUPLATFORMINTEGRATION_H
++
++#include "../../../core/PlatformIntegration.h"
++
++namespace Otter
++{
++
++class HaikuPlatformIntegration final : public PlatformIntegration
++{
++ Q_OBJECT
++
++public:
++ explicit HaikuPlatformIntegration(QObject *parent);
++ ~HaikuPlatformIntegration();
++
++ void runApplication(const QString &command, const QUrl &url = {}) const override;
++ Style* createStyle(const QString &name) const override;
++ QVector getApplicationsForMimeType(const QMimeType &mimeType) override;
++ bool canShowNotifications() const override;
++
++public slots:
++ void showNotification(Notification *notification) override;
++
++protected:
++ void setTransfersProgress(qint64 bytesTotal, qint64 bytesReceived, qint64 transferAmount);
++
++protected slots:
++ void updateTransfersProgress();
++};
++
++}
++
++#endif
+diff --git a/src/modules/platforms/haiku/HaikuPlatformStyle.cpp b/src/modules/platforms/haiku/HaikuPlatformStyle.cpp
+new file mode 100644
+index 0000000..2258226
+--- /dev/null
++++ b/src/modules/platforms/haiku/HaikuPlatformStyle.cpp
+@@ -0,0 +1,46 @@
++/**************************************************************************
++* Otter Browser: Web browser controlled by the user, not vice-versa.
++* Copyright (C) 2019 Gerasim Troeglazov <3dEyes@gmail.com>
++*
++* This program is free software: you can redistribute it and/or modify
++* it under the terms of the GNU General Public License as published by
++* the Free Software Foundation, either version 3 of the License, or
++* (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program. If not, see .
++*
++**************************************************************************/
++
++#include "HaikuPlatformStyle.h"
++#include "../../../core/ThemesManager.h"
++#include "../../../ui/MainWindow.h"
++#include "../../../ui/ToolBarWidget.h"
++
++#include
++#include
++#include
++
++namespace Otter
++{
++
++HaikuPlatformStyle::HaikuPlatformStyle(const QString &name) : Style(name)
++{
++}
++
++void HaikuPlatformStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
++{
++ Style::drawControl(element, option, painter, widget);
++}
++
++int HaikuPlatformStyle::getExtraStyleHint(Style::ExtraStyleHint hint) const
++{
++ return Style::getExtraStyleHint(hint);
++}
++
++}
+diff --git a/src/modules/platforms/haiku/HaikuPlatformStyle.h b/src/modules/platforms/haiku/HaikuPlatformStyle.h
+new file mode 100644
+index 0000000..8b50d01
+--- /dev/null
++++ b/src/modules/platforms/haiku/HaikuPlatformStyle.h
+@@ -0,0 +1,39 @@
++/**************************************************************************
++* Otter Browser: Web browser controlled by the user, not vice-versa.
++* Copyright (C) 2019 Gerasim Troeglazov <3dEyes@gmail.com>
++*
++* This program is free software: you can redistribute it and/or modify
++* it under the terms of the GNU General Public License as published by
++* the Free Software Foundation, either version 3 of the License, or
++* (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program. If not, see .
++*
++**************************************************************************/
++
++#ifndef OTTER_HAIKUPLATFORMSTYLE_H
++#define OTTER_HAIKUPLATFORMSTYLE_H
++
++#include "../../../ui/Style.h"
++
++namespace Otter
++{
++
++class HaikuPlatformStyle final : public Style
++{
++ Q_OBJECT
++public:
++ explicit HaikuPlatformStyle(const QString &name);
++ void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override;
++ int getExtraStyleHint(ExtraStyleHint hint) const override;
++};
++
++}
++
++#endif
+--
+2.19.1
+