From adaa1916d6abe559016d6cf9ffd58d0e46671e6d Mon Sep 17 00:00:00 2001 From: Luciano Iam Date: Thu, 5 Aug 2021 17:40:06 +0200 Subject: [PATCH] Fix Mac standalone window focus --- cmake/DPF-plugin.cmake | 8 +++++++ dgl/Makefile | 4 ++++ dgl/src/ApplicationPrivateData.cpp | 6 +++++ dgl/src/ApplicationPrivateData.hpp | 4 ++++ dgl/src/ApplicationPrivateData_macOS.mm | 29 +++++++++++++++++++++++++ 5 files changed, 51 insertions(+) create mode 100644 dgl/src/ApplicationPrivateData_macOS.mm diff --git a/cmake/DPF-plugin.cmake b/cmake/DPF-plugin.cmake index 7933a6c7..55ab864a 100644 --- a/cmake/DPF-plugin.cmake +++ b/cmake/DPF-plugin.cmake @@ -347,6 +347,10 @@ function(dpf__add_dgl_cairo) "${DPF_ROOT_DIR}/dgl/src/Window.cpp" "${DPF_ROOT_DIR}/dgl/src/WindowPrivateData.cpp" "${DPF_ROOT_DIR}/dgl/src/Cairo.cpp") + if(APPLE) + target_sources(dgl-cairo STATIC + "${DPF_ROOT_DIR}/dgl/src/ApplicationPrivateData_macOS.mm") + endif() if(NOT APPLE) target_sources(dgl-cairo PRIVATE "${DPF_ROOT_DIR}/dgl/src/pugl.cpp") @@ -409,6 +413,10 @@ function(dpf__add_dgl_opengl) "${DPF_ROOT_DIR}/dgl/src/WindowPrivateData.cpp" "${DPF_ROOT_DIR}/dgl/src/OpenGL.cpp" "${DPF_ROOT_DIR}/dgl/src/NanoVG.cpp") + if(APPLE) + target_sources(dgl-opengl STATIC + "${DPF_ROOT_DIR}/dgl/src/ApplicationPrivateData_macOS.mm") + endif() if(NOT APPLE) target_sources(dgl-opengl PRIVATE "${DPF_ROOT_DIR}/dgl/src/pugl.cpp") diff --git a/dgl/Makefile b/dgl/Makefile index db7049c3..9e50905a 100644 --- a/dgl/Makefile +++ b/dgl/Makefile @@ -41,6 +41,10 @@ OBJS_common = \ ../build/dgl/Window.cpp.o \ ../build/dgl/WindowPrivateData.cpp.o +ifeq ($(MACOS),true) +OBJS_common += ../build/dgl/ApplicationPrivateData_macOS.mm.o +endif + # --------------------------------------------------------------------------------------------------------------------- OBJS_cairo = $(OBJS_common) \ diff --git a/dgl/src/ApplicationPrivateData.cpp b/dgl/src/ApplicationPrivateData.cpp index 71fa6c87..05cb8830 100644 --- a/dgl/src/ApplicationPrivateData.cpp +++ b/dgl/src/ApplicationPrivateData.cpp @@ -64,6 +64,12 @@ Application::PrivateData::PrivateData(const bool standalone) #ifdef HAVE_X11 sofdFileDialogSetup(world); #endif + +#ifdef DISTRHO_OS_MAC + if (standalone) { + macActivateApp(); + } +#endif } Application::PrivateData::~PrivateData() diff --git a/dgl/src/ApplicationPrivateData.hpp b/dgl/src/ApplicationPrivateData.hpp index e35328d3..0a7c89c2 100644 --- a/dgl/src/ApplicationPrivateData.hpp +++ b/dgl/src/ApplicationPrivateData.hpp @@ -34,6 +34,10 @@ typedef struct PuglWorldImpl PuglWorld; START_NAMESPACE_DGL +#ifdef DISTRHO_OS_MAC +void macActivateApp(); +#endif + class Window; // -------------------------------------------------------------------------------------------------------------------- diff --git a/dgl/src/ApplicationPrivateData_macOS.mm b/dgl/src/ApplicationPrivateData_macOS.mm new file mode 100644 index 00000000..cbe9dd25 --- /dev/null +++ b/dgl/src/ApplicationPrivateData_macOS.mm @@ -0,0 +1,29 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2021 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#import + +#include "ApplicationPrivateData.hpp" + +START_NAMESPACE_DGL + +void macActivateApp() +{ + [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; + [NSApp activateIgnoringOtherApps:YES]; // focus window +} + +END_NAMESPACE_DGL