macOS/progressobserver.m)
endif()
+ list(APPEND client_SRCS foregroundbackground_interface.h)
+ list(APPEND client_SRCS foregroundbackground_mac.mm)
+ list(APPEND client_SRCS foregroundbackground_cocoa.mm)
+
if(SPARKLE_FOUND AND BUILD_UPDATER)
# Define this, we need to check in updater.cpp
add_definitions(-DHAVE_SPARKLE)
--- /dev/null
+/*
+ * Copyright (C) by Elsie Hupp <gpl at elsiehupp dot 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 2 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.
+ */
+
+#import <AppKit/NSApplication.h>
+
+/**
+* @brief CocoaProcessType provides methods for moving the application between
+* the background and foreground.
+* @ingroup gui
+*/
+
+#ifndef COCOAPROCESSTYPE_H
+#define COCOAPROCESSTYPE_H
+
+@interface CocoaProcessType : NSApplication
+
+/**
+ * @brief CocoaProcessTypeToForeground() enables the macOS menubar and dock icon, which are necessary for a maximized window to be able to exit full screen.
+ * @ingroup gui
+ */
++ (void)ToForeground;
+
+/**
+ * @brief CocoaProcessTypeToBackground() disables the macOS menubar and dock icon, so that the application will only be present as a menubar icon.
+ * @ingroup gui
+ */
++ (void)ToBackground;
+
+@end
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) by Elsie Hupp <gpl at elsiehupp dot 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 2 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.
+ */
+
+#include "foregroundbackground_cocoa.h"
+#include "common/utility.h"
+
+@implementation CocoaProcessType
+
++ (void)ToForeground
+{
+ NSApplicationLoad();
+ ProcessSerialNumber processSerialNumber = { 0, kCurrentProcess };
+ TransformProcessType(&processSerialNumber, kProcessTransformToForegroundApplication);
+}
+
++ (void)ToBackground
+{
+ NSApplicationLoad();
+ ProcessSerialNumber processSerialNumber = { 0, kCurrentProcess };
+ TransformProcessType(&processSerialNumber, kProcessTransformToUIElementApplication);
+}
+
+@end
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) by Elsie Hupp <gpl at elsiehupp dot 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 2 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.
+ */
+
+/**
+* @brief ForegroundBackgroundInterface allows ForegroundBackground to be implemented differently per platform
+* @ingroup gui
+*/
+
+#ifndef FOREGROUNDBACKGROUND_INTERFACE_H
+#define FOREGROUNDBACKGROUND_INTERFACE_H
+
+#include <QObject>
+#include <QEvent>
+
+namespace OCC {
+namespace Ui {
+
+class ForegroundBackground;
+
+}
+}
+
+class ForegroundBackground : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ ForegroundBackground() = default;
+ ~ForegroundBackground() = default;
+
+ /**
+ * @brief EventFilter catches events that should trigger ForegroundBackground
+ * @ingroup gui
+ */
+ bool eventFilter(QObject *obj, QEvent *event) override;
+
+private:
+ /**
+ * @brief ToForeground() enables the macOS menubar and dock icon, which are necessary for a maximized window to be able to exit full screen.
+ * @ingroup gui
+ */
+ void ToForeground();
+
+ /**
+ * @brief ToBackground() disables the macOS menubar and dock icon, so that the application will only be present as a menubar icon.
+ * @ingroup gui
+ */
+ void ToBackground();
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) by Elsie Hupp <gpl at elsiehupp dot 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 2 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.
+ */
+
+#include "foregroundbackground_interface.h"
+#include "foregroundbackground_cocoa.h"
+
+bool ForegroundBackground::eventFilter(QObject * /*obj*/, QEvent *event)
+{
+ if (event->type() == QEvent::Show) {
+ ToForeground();
+ return true;
+ }
+ if (event->type() == QEvent::Close) {
+ ToBackground();
+ return true;
+ }
+ return false;
+}
+
+void ForegroundBackground::ToForeground()
+{
+ [CocoaProcessType ToForeground];
+}
+
+void ForegroundBackground::ToBackground()
+{
+ [CocoaProcessType ToBackground];
+}
#include <QQuickItem>
#include <QQmlContext>
+#ifdef Q_OS_MAC
+#include "foregroundbackground_interface.h"
+#endif
+
#ifdef BUILD_FILE_PROVIDER_MODULE
#include "macOS/fileprovider.h"
#include "macOS/fileproviderdomainmanager.h"
if (_settingsDialog.isNull()) {
_settingsDialog = new SettingsDialog(this);
_settingsDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+#ifdef Q_OS_MAC
+ auto *fgbg = new ForegroundBackground();
+ _settingsDialog->installEventFilter(fgbg);
+#endif
_settingsDialog->show();
}
raiseDialog(_settingsDialog.data());
#include "theme.h"
#include "owncloudgui.h"
+#ifdef Q_OS_MAC
+#include "foregroundbackground_interface.h"
+#endif
+
#include "wizard/owncloudwizard.h"
#include "wizard/welcomepage.h"
#include "wizard/owncloudsetuppage.h"
, _webViewPage(nullptr)
#endif // WITH_WEBENGINE
{
+#ifdef Q_OS_MAC
+ auto *fgbg = new ForegroundBackground();
+ this->installEventFilter(fgbg);
+#endif
setObjectName("owncloudWizard");
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);