mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-28 19:58:56 +03:00
Show/Hide Menubar and Dock Icon
Signed-off-by: Elsie Hupp <9206310+elsiehupp@users.noreply.github.com>
This commit is contained in:
parent
5bdc2b911d
commit
de55ae9b5e
7 changed files with 198 additions and 0 deletions
|
@ -316,6 +316,10 @@ IF( APPLE )
|
|||
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)
|
||||
|
|
42
src/gui/foregroundbackground_cocoa.h
Normal file
42
src/gui/foregroundbackground_cocoa.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* 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
|
34
src/gui/foregroundbackground_cocoa.mm
Normal file
34
src/gui/foregroundbackground_cocoa.mm
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* 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
|
63
src/gui/foregroundbackground_interface.h
Normal file
63
src/gui/foregroundbackground_interface.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* 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
|
39
src/gui/foregroundbackground_mac.mm
Normal file
39
src/gui/foregroundbackground_mac.mm
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* 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];
|
||||
}
|
|
@ -64,6 +64,10 @@
|
|||
#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"
|
||||
|
@ -598,6 +602,10 @@ void ownCloudGui::slotShowSettings()
|
|||
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());
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
#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"
|
||||
|
@ -56,6 +60,10 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
|||
, _webViewPage(nullptr)
|
||||
#endif // WITH_WEBENGINE
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
auto *fgbg = new ForegroundBackground();
|
||||
this->installEventFilter(fgbg);
|
||||
#endif
|
||||
setObjectName("owncloudWizard");
|
||||
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
|
|
Loading…
Reference in a new issue