mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
Add OS native interface lib, with objective-c++ interface to Mac Cocoa libraries
This commit is contained in:
parent
f8f7d60cf0
commit
f6bd7b3b58
@ -494,8 +494,6 @@ ELSE (WIN32)
|
|||||||
ELSE ()
|
ELSE ()
|
||||||
SET (OSX_HAVE_LOADERPATH 0)
|
SET (OSX_HAVE_LOADERPATH 0)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
#this will define ${APP_SERVICES_LIBRARY}
|
|
||||||
FIND_LIBRARY(APP_SERVICES_LIBRARY ApplicationServices )
|
|
||||||
|
|
||||||
SET (DEFAULT_BIN_SUBDIR bin)
|
SET (DEFAULT_BIN_SUBDIR bin)
|
||||||
SET (QGIS_BIN_SUBDIR_REV ..)
|
SET (QGIS_BIN_SUBDIR_REV ..)
|
||||||
@ -750,6 +748,11 @@ ADD_CUSTOM_TARGET(version ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h)
|
|||||||
#TEST_DATA_DIR is also used by QgsRenderChecker currently in core
|
#TEST_DATA_DIR is also used by QgsRenderChecker currently in core
|
||||||
SET (TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/testdata")
|
SET (TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/testdata")
|
||||||
|
|
||||||
|
SET(USE_NATIVE_LIB FALSE)
|
||||||
|
IF(APPLE)
|
||||||
|
SET(USE_NATIVE_LIB TRUE)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(src)
|
ADD_SUBDIRECTORY(src)
|
||||||
ADD_SUBDIRECTORY(doc)
|
ADD_SUBDIRECTORY(doc)
|
||||||
ADD_SUBDIRECTORY(images)
|
ADD_SUBDIRECTORY(images)
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
ADD_SUBDIRECTORY(native)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(core)
|
ADD_SUBDIRECTORY(core)
|
||||||
ADD_SUBDIRECTORY(analysis)
|
ADD_SUBDIRECTORY(analysis)
|
||||||
ADD_SUBDIRECTORY(ui)
|
ADD_SUBDIRECTORY(ui)
|
||||||
|
@ -529,12 +529,18 @@ INCLUDE_DIRECTORIES(SYSTEM
|
|||||||
${QWTPOLAR_INCLUDE_DIR}
|
${QWTPOLAR_INCLUDE_DIR}
|
||||||
${QCA_INCLUDE_DIR}
|
${QCA_INCLUDE_DIR}
|
||||||
${QTKEYCHAIN_INCLUDE_DIR}
|
${QTKEYCHAIN_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
IF(ENABLE_MODELTEST)
|
IF(ENABLE_MODELTEST)
|
||||||
INCLUDE_DIRECTORIES(../../tests/qt_modeltest)
|
INCLUDE_DIRECTORIES(../../tests/qt_modeltest)
|
||||||
ENDIF(ENABLE_MODELTEST)
|
ENDIF(ENABLE_MODELTEST)
|
||||||
|
|
||||||
|
IF (USE_NATIVE_LIB)
|
||||||
|
IF(APPLE)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/native/mac)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
IF (ANDROID)
|
IF (ANDROID)
|
||||||
INCLUDE_DIRECTORIES(SYSTEM ${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot/usr/include)
|
INCLUDE_DIRECTORIES(SYSTEM ${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot/usr/include)
|
||||||
ENDIF (ANDROID)
|
ENDIF (ANDROID)
|
||||||
@ -586,6 +592,10 @@ IF (APPLE)
|
|||||||
TARGET_LINK_LIBRARIES(qgis_app ${APP_SERVICES_LIBRARY})
|
TARGET_LINK_LIBRARIES(qgis_app ${APP_SERVICES_LIBRARY})
|
||||||
ENDIF(APPLE)
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
TARGET_LINK_LIBRARIES(qgis_app qgis_native)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
SET_TARGET_PROPERTIES(qgis_app PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
|
SET_TARGET_PROPERTIES(qgis_app PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
|
||||||
ENDIF(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
ENDIF(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
@ -605,9 +615,11 @@ IF(WIN32)
|
|||||||
TARGET_LINK_LIBRARIES(qgis_app DbgHelp Qt5::WinExtras)
|
TARGET_LINK_LIBRARIES(qgis_app DbgHelp Qt5::WinExtras)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
IF (APPLE)
|
IF(USE_NATIVE_LIB)
|
||||||
TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} ${APP_SERVICES_LIBRARY})
|
TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} qgis_native)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
|
IF (APPLE)
|
||||||
SET_TARGET_PROPERTIES(${QGIS_APP_NAME} PROPERTIES
|
SET_TARGET_PROPERTIES(${QGIS_APP_NAME} PROPERTIES
|
||||||
INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
|
INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
|
||||||
INSTALL_RPATH_USE_LINK_PATH true
|
INSTALL_RPATH_USE_LINK_PATH true
|
||||||
|
@ -101,6 +101,12 @@ Q_GUI_EXPORT extern int qt_defaultDpiX();
|
|||||||
#ifdef Q_OS_MACX
|
#ifdef Q_OS_MACX
|
||||||
#include <ApplicationServices/ApplicationServices.h>
|
#include <ApplicationServices/ApplicationServices.h>
|
||||||
|
|
||||||
|
// Virtual interfaces to Cocoa objective-c frameworks/classes/calls
|
||||||
|
// cocoainitializer is to handle objective-c garbage collection
|
||||||
|
// see: http://el-tramo.be/blog/mixing-cocoa-and-qt/
|
||||||
|
//#include "cocoainitializer.h"
|
||||||
|
#include "qgsmacappkit.h"
|
||||||
|
|
||||||
// check macro breaks QItemDelegate
|
// check macro breaks QItemDelegate
|
||||||
#ifdef check
|
#ifdef check
|
||||||
#undef check
|
#undef check
|
||||||
@ -6120,9 +6126,10 @@ void QgisApp::bringAllToFront()
|
|||||||
{
|
{
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
// Bring forward all open windows while maintaining layering order
|
// Bring forward all open windows while maintaining layering order
|
||||||
ProcessSerialNumber psn;
|
// method valid for Mac OS X >= 10.6
|
||||||
GetCurrentProcess( &psn );
|
QgsNSRunningApplication* nsrapp = new QgsNSRunningApplication();
|
||||||
SetFrontProcess( &psn );
|
nsrapp->currentAppActivateIgnoringOtherApps();
|
||||||
|
delete nsrapp;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1044,6 +1044,12 @@ INCLUDE_DIRECTORIES(SYSTEM
|
|||||||
${QTKEYCHAIN_INCLUDE_DIR}
|
${QTKEYCHAIN_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
IF(APPLE)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/native/mac)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
#for PAL classes
|
#for PAL classes
|
||||||
IF (WIN32)
|
IF (WIN32)
|
||||||
ADD_DEFINITIONS("-D_HAVE_WINDOWS_H_")
|
ADD_DEFINITIONS("-D_HAVE_WINDOWS_H_")
|
||||||
@ -1112,9 +1118,9 @@ IF (WIN32)
|
|||||||
TARGET_LINK_LIBRARIES(qgis_core wsock32 ${SETUPAPI_LIBRARY} DbgHelp)
|
TARGET_LINK_LIBRARIES(qgis_core wsock32 ${SETUPAPI_LIBRARY} DbgHelp)
|
||||||
ENDIF (WIN32)
|
ENDIF (WIN32)
|
||||||
|
|
||||||
IF(APPLE)
|
IF(USE_NATIVE_LIB)
|
||||||
TARGET_LINK_LIBRARIES(qgis_core "-framework CoreFoundation -framework IOKit")
|
TARGET_LINK_LIBRARIES(qgis_core qgis_native)
|
||||||
ENDIF(APPLE)
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
IF (NOT WITH_INTERNAL_QEXTSERIALPORT)
|
IF (NOT WITH_INTERNAL_QEXTSERIALPORT)
|
||||||
TARGET_LINK_LIBRARIES(qgis_core ${QEXTSERIALPORT_LIBRARY})
|
TARGET_LINK_LIBRARIES(qgis_core ${QEXTSERIALPORT_LIBRARY})
|
||||||
|
116
src/native/CMakeLists.txt
Normal file
116
src/native/CMakeLists.txt
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
#############################################################
|
||||||
|
# locate native libs
|
||||||
|
|
||||||
|
SET(NATIVE_LINK_LIBS)
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
SET(APPLE_LIB_LIST ApplicationServices CoreFoundation IOKit AppKit)
|
||||||
|
FOREACH(_lib ${APPLE_LIB_LIST})
|
||||||
|
STRING(TOUPPER ${_lib} _lib_var)
|
||||||
|
# prefer /System/Library/Frameworks, in case CMAKE_FIND_FRAMEWORK=LAST, etc.
|
||||||
|
FIND_LIBRARY(APPLE_${_lib_var}_LIBRARY
|
||||||
|
NAMES ${_lib}
|
||||||
|
PATHS /System/Library/Frameworks
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
# if not found, drop back to standard find paths
|
||||||
|
FIND_LIBRARY(APPLE_${_lib_var}_LIBRARY ${_lib})
|
||||||
|
|
||||||
|
IF(NOT APPLE_${_lib_var}_LIBRARY)
|
||||||
|
MESSAGE(FATAL_ERROR "Couldn't find Apple's '${_lib}' framework or library")
|
||||||
|
ENDIF(NOT APPLE_${_lib_var}_LIBRARY)
|
||||||
|
|
||||||
|
LIST(APPEND NATIVE_LINK_LIBS "-framework ${_lib}")
|
||||||
|
ENDFOREACH(_lib ${APPLE_LIB_LIST})
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# sources
|
||||||
|
|
||||||
|
SET(QGIS_CORE_SRCS)
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
SET(QGIS_APP_OBJC_SRCS
|
||||||
|
mac/cocoainitializer.mm
|
||||||
|
mac/qgsmacappkit.mm
|
||||||
|
)
|
||||||
|
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(${QGIS_APP_OBJC_SRCS} PROPERTIES COMPILE_FLAGS "-x objective-c++")
|
||||||
|
|
||||||
|
SET(QGIS_CORE_SRCS ${QGIS_CORE_SRCS}
|
||||||
|
${QGIS_APP_OBJC_SRCS}
|
||||||
|
mac/qgsmacnative.cpp
|
||||||
|
)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
SET(QGIS_CORE_MOC_HDRS)
|
||||||
|
|
||||||
|
QT4_WRAP_CPP(QGIS_CORE_MOC_SRCS ${QGIS_CORE_MOC_HDRS})
|
||||||
|
|
||||||
|
# install headers
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
SET (QGIS_CORE_HDRS ${QGIS_CORE_HDRS}
|
||||||
|
mac/qgsmacnative.h
|
||||||
|
mac/cocoainitializer.h
|
||||||
|
mac/qgsmacappkit.h
|
||||||
|
)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
INCLUDE_DIRECTORIES(mac)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
# Test data dir for QgsRenderChecker
|
||||||
|
ADD_DEFINITIONS(-DTEST_DATA_DIR="\\"${TEST_DATA_DIR}\\"")
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# qgis_native library
|
||||||
|
|
||||||
|
ADD_LIBRARY(qgis_native SHARED ${QGIS_CORE_SRCS} ${QGIS_CORE_MOC_SRCS} ${QGIS_CORE_HDRS} ${QGIS_CORE_MOC_HDRS})
|
||||||
|
|
||||||
|
IF(NOT APPLE)
|
||||||
|
INSTALL(FILES ${QGIS_CORE_HDRS} ${QGIS_CORE_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
|
||||||
|
ELSE(NOT APPLE)
|
||||||
|
SET_TARGET_PROPERTIES(qgis_native PROPERTIES
|
||||||
|
CLEAN_DIRECT_OUTPUT 1
|
||||||
|
FRAMEWORK 1
|
||||||
|
FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}"
|
||||||
|
MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in"
|
||||||
|
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION}
|
||||||
|
MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis2_native
|
||||||
|
BUILD_WITH_INSTALL_RPATH TRUE
|
||||||
|
PUBLIC_HEADER "${QGIS_CORE_HDRS};${QGIS_CORE_MOC_HDRS}"
|
||||||
|
LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
|
||||||
|
)
|
||||||
|
ENDIF(NOT APPLE)
|
||||||
|
|
||||||
|
#generate unversioned libs for android
|
||||||
|
IF(NOT ANDROID)
|
||||||
|
SET_TARGET_PROPERTIES(qgis_native PROPERTIES
|
||||||
|
VERSION ${COMPLETE_VERSION}
|
||||||
|
SOVERSION ${COMPLETE_VERSION}
|
||||||
|
)
|
||||||
|
ENDIF(NOT ANDROID)
|
||||||
|
|
||||||
|
TARGET_LINK_LIBRARIES(qgis_native "${NATIVE_LINK_LIBS}")
|
||||||
|
|
||||||
|
# install
|
||||||
|
|
||||||
|
INSTALL(TARGETS qgis_native
|
||||||
|
RUNTIME DESTINATION ${QGIS_BIN_DIR}
|
||||||
|
LIBRARY DESTINATION ${QGIS_LIB_DIR}
|
||||||
|
ARCHIVE DESTINATION ${QGIS_LIB_DIR}
|
||||||
|
FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR}
|
||||||
|
PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# Mac dev frameworks
|
||||||
|
|
||||||
|
IF (APPLE AND QGIS_MACAPP_INSTALL_DEV)
|
||||||
|
INSTALL(TARGETS qgis_native FRAMEWORK DESTINATION ${QGIS_MACAPP_DEV_PREFIX})
|
||||||
|
INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -id \"${QGIS_MACAPP_DEV_PREFIX}/qgis_native.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_native\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_native.framework/qgis_native\")")
|
||||||
|
ENDIF (APPLE AND QGIS_MACAPP_INSTALL_DEV)
|
23
src/native/README.md
Normal file
23
src/native/README.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
README for qgis_native lib
|
||||||
|
==========================
|
||||||
|
|
||||||
|
This library is intended to offer abstraction to the host OS's underlying public
|
||||||
|
interfaces. This is useful for OSes that provide interfaces in languages other
|
||||||
|
than C/C++, or for grouping calls to OS-specific code so that it only needs to
|
||||||
|
be updated in one place in the source tree. It is advisable to leverage existing
|
||||||
|
functions provided by Qt, rather than rely upon OS-specific code, unless such
|
||||||
|
code extends the application to provide a better OS-specific user experience or
|
||||||
|
solve a problem.
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
As of Mac OS X 10.9 (Mavericks) many system public API calls to Carbon libraries
|
||||||
|
(based upon C) have been deprecated in favor of modern Cocoa libraries (written
|
||||||
|
in Objective-C), which can no longer be directly called from C++. Coalescing
|
||||||
|
and mixing these new calls in a library, using Objective-C++ allows not only
|
||||||
|
access to the Apple system Objective-C libraries and frameworks, but also those
|
||||||
|
from third-parties, like the auto-updating Sparkle.framework.
|
||||||
|
|
||||||
|
See also: http://el-tramo.be/blog/mixing-cocoa-and-qt/
|
||||||
|
http://sparkle.andymatuschak.org/
|
54
src/native/mac/cocoainitializer.h
Normal file
54
src/native/mac/cocoainitializer.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
cocoaInitializer.h - used to enable Cocoa’s memory management
|
||||||
|
-------------------
|
||||||
|
copyright : (C) 2008 by Remko Troncon
|
||||||
|
email : remco at el-tramo dot be
|
||||||
|
url : http://el-tramo.be/blog/mixing-cocoa-and-qt/
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
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.
|
||||||
|
|
||||||
|
(3)The name of the author may not be used to
|
||||||
|
endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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.
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef COCOAINITIALIZER_H
|
||||||
|
#define COCOAINITIALIZER_H
|
||||||
|
|
||||||
|
|
||||||
|
class CocoaInitializer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CocoaInitializer();
|
||||||
|
~CocoaInitializer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Private;
|
||||||
|
Private* d;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCOAINITIALIZER_H
|
61
src/native/mac/cocoainitializer.mm
Normal file
61
src/native/mac/cocoainitializer.mm
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
cocoaInitializer.mm - used to enable Cocoa’s memory management
|
||||||
|
-------------------
|
||||||
|
copyright : (C) 2008 by Remko Troncon
|
||||||
|
email : remco at el-tramo dot be
|
||||||
|
url : http://el-tramo.be/blog/mixing-cocoa-and-qt/
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
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.
|
||||||
|
|
||||||
|
(3)The name of the author may not be used to
|
||||||
|
endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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 "CocoaInitializer.h"
|
||||||
|
|
||||||
|
#include <AppKit/AppKit.h>
|
||||||
|
#include <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
class CocoaInitializer::Private
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NSAutoreleasePool* autoReleasePool_;
|
||||||
|
};
|
||||||
|
|
||||||
|
CocoaInitializer::CocoaInitializer()
|
||||||
|
{
|
||||||
|
d = new CocoaInitializer::Private();
|
||||||
|
NSApplicationLoad();
|
||||||
|
d->autoReleasePool_ = [[NSAutoreleasePool alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
CocoaInitializer::~CocoaInitializer()
|
||||||
|
{
|
||||||
|
[d->autoReleasePool_ release];
|
||||||
|
delete d;
|
||||||
|
}
|
37
src/native/mac/qgsmacappkit.h
Normal file
37
src/native/mac/qgsmacappkit.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmacappkit.h - interface to Mac objective-c AppKit.framework
|
||||||
|
-------------------
|
||||||
|
begin : January 2014
|
||||||
|
copyright : (C) 2014 by Larry Shaffer
|
||||||
|
email : larrys at dakotacarto 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. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGSMACAPPKIT_H
|
||||||
|
#define QGSMACAPPKIT_H
|
||||||
|
|
||||||
|
#include "qgsmacnative.h"
|
||||||
|
|
||||||
|
class QgsNSRunningApplication : public QgsMacAppKit
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QgsNSRunningApplication();
|
||||||
|
~QgsNSRunningApplication();
|
||||||
|
|
||||||
|
const char* currentAppLocalizedName();
|
||||||
|
void currentAppActivateIgnoringOtherApps();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Private;
|
||||||
|
Private* d;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QGSMACAPPKIT_H
|
51
src/native/mac/qgsmacappkit.mm
Normal file
51
src/native/mac/qgsmacappkit.mm
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmacappkit.mm - interface to Mac objective-c AppKit.framework
|
||||||
|
-------------------
|
||||||
|
begin : January 2014
|
||||||
|
copyright : (C) 2014 by Larry Shaffer
|
||||||
|
email : larrys at dakotacarto 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. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgsmacappkit.h"
|
||||||
|
|
||||||
|
#include <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
class QgsNSRunningApplication::Private
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// NSObject *obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
QgsNSRunningApplication::QgsNSRunningApplication()
|
||||||
|
{
|
||||||
|
// d = new Private;
|
||||||
|
// d->obj = [NSObject someFunction];
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsNSRunningApplication::~QgsNSRunningApplication()
|
||||||
|
{
|
||||||
|
// [d->obj release];
|
||||||
|
// delete d;
|
||||||
|
// d = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* QgsNSRunningApplication::currentAppLocalizedName()
|
||||||
|
{
|
||||||
|
return [[[NSRunningApplication currentApplication] localizedName] UTF8String];
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsNSRunningApplication::currentAppActivateIgnoringOtherApps()
|
||||||
|
{
|
||||||
|
// valid for Mac OS X >= 10.6
|
||||||
|
[[NSRunningApplication currentApplication] activateWithOptions:
|
||||||
|
(NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps)];
|
||||||
|
}
|
22
src/native/mac/qgsmacnative.cpp
Normal file
22
src/native/mac/qgsmacnative.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmacnative.cpp - abstracted interface to native Mac objective-c
|
||||||
|
-------------------
|
||||||
|
begin : January 2014
|
||||||
|
copyright : (C) 2014 by Larry Shaffer
|
||||||
|
email : larrys at dakotacarto 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. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgsmacnative.h"
|
||||||
|
|
||||||
|
QgsMacAppKit::~QgsMacAppKit()
|
||||||
|
{
|
||||||
|
}
|
31
src/native/mac/qgsmacnative.h
Normal file
31
src/native/mac/qgsmacnative.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmacnative.h - abstracted interface to native Mac objective-c
|
||||||
|
-------------------
|
||||||
|
begin : January 2014
|
||||||
|
copyright : (C) 2014 by Larry Shaffer
|
||||||
|
email : larrys at dakotacarto 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. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGSMACNATIVE_H
|
||||||
|
#define QGSMACNATIVE_H
|
||||||
|
|
||||||
|
class QgsMacAppKit
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~QgsMacAppKit();
|
||||||
|
|
||||||
|
// NSRunningApplication interface
|
||||||
|
virtual const char* currentAppLocalizedName() = 0;
|
||||||
|
virtual void currentAppActivateIgnoringOtherApps() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QGSMACNATIVE_H
|
@ -36,6 +36,9 @@ IF (ENABLE_TESTS)
|
|||||||
IF (WITH_DESKTOP)
|
IF (WITH_DESKTOP)
|
||||||
ADD_SUBDIRECTORY(app)
|
ADD_SUBDIRECTORY(app)
|
||||||
ENDIF (WITH_DESKTOP)
|
ENDIF (WITH_DESKTOP)
|
||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
ADD_SUBDIRECTORY(native)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
IF (WITH_BINDINGS)
|
IF (WITH_BINDINGS)
|
||||||
ADD_SUBDIRECTORY(python)
|
ADD_SUBDIRECTORY(python)
|
||||||
ENDIF (WITH_BINDINGS)
|
ENDIF (WITH_BINDINGS)
|
||||||
|
@ -37,6 +37,12 @@ INCLUDE_DIRECTORIES(SYSTEM
|
|||||||
${QSCINTILLA_INCLUDE_DIR}
|
${QSCINTILLA_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
IF(APPLE)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/native/mac)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
|
||||||
#note for tests we should not include the moc of our
|
#note for tests we should not include the moc of our
|
||||||
#qtests in the executable file list as the moc is
|
#qtests in the executable file list as the moc is
|
||||||
#directly included in the sources
|
#directly included in the sources
|
||||||
@ -76,6 +82,10 @@ MACRO (ADD_QGIS_TEST testname testsrc)
|
|||||||
TARGET_LINK_LIBRARIES(qgis_${testname} ${APP_SERVICES_LIBRARY} )
|
TARGET_LINK_LIBRARIES(qgis_${testname} ${APP_SERVICES_LIBRARY} )
|
||||||
ENDIF(APPLE)
|
ENDIF(APPLE)
|
||||||
ADD_TEST(qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR}/../../../output/bin/qgis_${testname} -maxwarnings 10000)
|
ADD_TEST(qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR}/../../../output/bin/qgis_${testname} -maxwarnings 10000)
|
||||||
|
IF(USE_NATIVE_LIB)
|
||||||
|
TARGET_LINK_LIBRARIES(qgis_${testname} qgis_native)
|
||||||
|
ENDIF(USE_NATIVE_LIB)
|
||||||
|
ADD_TEST(qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR}/../../../output/bin/qgis_${testname})
|
||||||
#SET_TARGET_PROPERTIES(qgis_${testname} PROPERTIES
|
#SET_TARGET_PROPERTIES(qgis_${testname} PROPERTIES
|
||||||
# INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
|
# INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
|
||||||
# INSTALL_RPATH_USE_LINK_PATH true )
|
# INSTALL_RPATH_USE_LINK_PATH true )
|
||||||
|
68
tests/src/native/CMakeLists.txt
Normal file
68
tests/src/native/CMakeLists.txt
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Standard includes and utils to compile into all tests.
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# Don't forget to include output directory, otherwise
|
||||||
|
# the UI file won't be wrapped!
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${QT_INCLUDE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/native/mac)
|
||||||
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Compiler defines
|
||||||
|
|
||||||
|
# This define is used for tests that need to locate the test
|
||||||
|
# data under tests/testdata in the qgis source tree.
|
||||||
|
# the TEST_DATA_DIR variable is set in the top level CMakeLists.txt
|
||||||
|
ADD_DEFINITIONS(-DTEST_DATA_DIR="\\"${TEST_DATA_DIR}\\"")
|
||||||
|
|
||||||
|
ADD_DEFINITIONS(-DINSTALL_PREFIX="\\"${CMAKE_INSTALL_PREFIX}\\"")
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# libraries
|
||||||
|
|
||||||
|
# because of htonl
|
||||||
|
IF (WIN32)
|
||||||
|
SET(PLATFORM_LIBRARIES wsock32)
|
||||||
|
ENDIF (WIN32)
|
||||||
|
|
||||||
|
# Since the tests are not actually installed, but rather
|
||||||
|
# run directly from the build/src/tests dir we need to
|
||||||
|
# ensure the qgis libs can be found.
|
||||||
|
IF (APPLE)
|
||||||
|
# For Mac OS X, the executable must be at the root of the bundle's executable folder
|
||||||
|
# SET (CMAKE_INSTALL_NAME_DIR @executable_path/../../../src/core)
|
||||||
|
ENDIF (APPLE)
|
||||||
|
|
||||||
|
#note for tests we should not include the moc of our
|
||||||
|
#qtests in the executable file list as the moc is
|
||||||
|
#directly included in the sources
|
||||||
|
#and should not be compiled twice. Trying to include
|
||||||
|
#them in will cause an error at build time
|
||||||
|
|
||||||
|
#No relinking and full RPATH for the install tree
|
||||||
|
#See: http://www.cmake.org/Wiki/CMake_RPATH_handling#No_relinking_and_full_RPATH_for_the_install_tree
|
||||||
|
|
||||||
|
MACRO (ADD_QGIS_TEST testname testsrc)
|
||||||
|
SET(qgis_${testname}_SRCS ${testsrc} ${util_SRCS})
|
||||||
|
SET(qgis_${testname}_MOC_CPPS ${testsrc})
|
||||||
|
QT4_WRAP_CPP(qgis_${testname}_MOC_SRCS ${qgis_${testname}_MOC_CPPS})
|
||||||
|
ADD_CUSTOM_TARGET(qgis_${testname}moc ALL DEPENDS ${qgis_${testname}_MOC_SRCS})
|
||||||
|
ADD_EXECUTABLE(qgis_${testname} ${qgis_${testname}_SRCS})
|
||||||
|
ADD_DEPENDENCIES(qgis_${testname} qgis_${testname}moc)
|
||||||
|
TARGET_LINK_LIBRARIES(qgis_${testname}
|
||||||
|
${QT_QTCORE_LIBRARY}
|
||||||
|
${QT_QTTEST_LIBRARY}
|
||||||
|
qgis_app
|
||||||
|
qgis_native)
|
||||||
|
ADD_TEST(qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR}/../../../output/bin/qgis_${testname})
|
||||||
|
ENDMACRO (ADD_QGIS_TEST)
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# Tests:
|
||||||
|
|
||||||
|
ADD_QGIS_TEST(macnativetest testqgsmacnative.cpp)
|
40
tests/src/native/testqgsmacnative.cpp
Normal file
40
tests/src/native/testqgsmacnative.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
testqgsmacnative.cpp
|
||||||
|
--------------------------------------
|
||||||
|
Date : January 2014
|
||||||
|
Copyright : (C) 2014 by Larry Shaffer
|
||||||
|
Email : larrys at dakotacarto 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. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <QtTest>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
//header for class being tested
|
||||||
|
#include <qgsmacappkit.h>
|
||||||
|
|
||||||
|
class TestQgsMacNative: public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void testGetRunningAppName();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TestQgsMacNative::testGetRunningAppName()
|
||||||
|
{
|
||||||
|
QgsNSRunningApplication* nsrapp = new QgsNSRunningApplication();
|
||||||
|
QString nsrapp_name( nsrapp->currentAppLocalizedName() );
|
||||||
|
delete nsrapp;
|
||||||
|
|
||||||
|
QCOMPARE( QString( "qgis_macnativetest" ), nsrapp_name.trimmed() );
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN( TestQgsMacNative )
|
||||||
|
#include "moc_testqgsmacnative.cxx"
|
Loading…
x
Reference in New Issue
Block a user