diff --git a/adsConfig.cmake b/adsConfig.cmake index d006a3f..9f9b307 100644 --- a/adsConfig.cmake +++ b/adsConfig.cmake @@ -2,5 +2,7 @@ include(CMakeFindDependencyMacro) find_dependency(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED) find_dependency(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED) find_dependency(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED) -find_dependency(Qt5X11Extras ${REQUIRED_QT_VERSION} REQUIRED) +if(UNIX AND NOT APPLE) + find_dependency(Qt5X11Extras ${REQUIRED_QT_VERSION} REQUIRED) +endif() include("${CMAKE_CURRENT_LIST_DIR}/adsTargets.cmake") \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index abe86ba..c2d6e37 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.5) project(QtAdvancedDockingSystem LANGUAGES CXX VERSION ${VERSION_SHORT}) find_package(Qt5 5.5 COMPONENTS Core Gui Widgets REQUIRED) -if (UNIX) +if (UNIX AND NOT APPLE) find_package(Qt5 5.5 COMPONENTS X11Extras REQUIRED) endif() set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -48,7 +48,7 @@ set(ads_HEADERS IconProvider.h DockComponentsFactory.h ) -if (UNIX) +if (UNIX AND NOT APPLE) set(ads_SRCS linux/FloatingWidgetTitleBar.cpp ${ads_SRCS}) set(ads_HEADERS linux/FloatingWidgetTitleBar.h ${ads_HEADERS}) endif() diff --git a/src/DockFocusController.cpp b/src/DockFocusController.cpp index 77e73c1..6f3318a 100644 --- a/src/DockFocusController.cpp +++ b/src/DockFocusController.cpp @@ -240,7 +240,11 @@ void CDockFocusController::onApplicationFocusChanged(QWidget* focusedOld, QWidge auto OtherDockWidgetTab = internal::findParent(focusedNow); if (OtherDockWidgetTab && focusedOld) { - focusedOld->setFocus(); + auto OldFocusedDockWidget = internal::findParent(focusedOld); + if (OldFocusedDockWidget) + { + focusedOld->setFocus(); + } return; } } diff --git a/src/DockManager.cpp b/src/DockManager.cpp index 16b2d01..a7b0ddb 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -55,6 +55,7 @@ #include "DockingStateReader.h" #include "DockAreaTitleBar.h" #include "DockFocusController.h" +#include "DockSplitter.h" #ifdef Q_OS_LINUX #include "linux/FloatingWidgetTitleBar.h" @@ -1093,6 +1094,34 @@ CDockWidget* CDockManager::focusedDockWidget() const } } +//=========================================================================== +QList CDockManager::splitterSizes(CDockAreaWidget *ContainedArea) const +{ + if (ContainedArea) + { + auto Splitter = internal::findParent(ContainedArea); + if (Splitter) + { + return Splitter->sizes(); + } + } + return QList(); +} + +//=========================================================================== +void CDockManager::setSplitterSizes(CDockAreaWidget *ContainedArea, const QList& sizes) +{ + if (!ContainedArea) + { + return; + } + + auto Splitter = internal::findParent(ContainedArea); + if (Splitter && Splitter->count() == sizes.count()) + { + Splitter->setSizes(sizes); + } +} } // namespace ads diff --git a/src/DockManager.h b/src/DockManager.h index 8832415..c3924d3 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -487,6 +487,25 @@ public: */ CDockWidget* focusedDockWidget() const; + /** + * Returns the sizes of the splitter that contains the dock area. + * + * If there is no splitter that contains the area, an empty list will be + * returned. + */ + QList splitterSizes(CDockAreaWidget *ContainedArea) const; + + /** + * Update the sizes of a splitter + * Programmatically updates the sizes of a given splitter by calling + * QSplitter::setSizes(). The splitter will be the splitter that + * contains the supplied dock area widget. If there is not splitter + * that contains the dock area, or the sizes supplied does not match + * the number of children of the splitter, this method will have no + * effect. + */ + void setSplitterSizes(CDockAreaWidget *ContainedArea, const QList& sizes); + public slots: /** * Opens the perspective with the given name. diff --git a/src/stylesheets/default.css b/src/stylesheets/default.css index f5cd680..6ae011a 100644 --- a/src/stylesheets/default.css +++ b/src/stylesheets/default.css @@ -5,7 +5,7 @@ ads--CDockContainerWidget { background: palette(dark); } -ads--CDockContainerWidget QSplitter::handle { +ads--CDockContainerWidget ads--CDockSplitter::handle { background: palette(dark); } diff --git a/src/stylesheets/default_linux.css b/src/stylesheets/default_linux.css index 51e52ac..bf7f336 100644 --- a/src/stylesheets/default_linux.css +++ b/src/stylesheets/default_linux.css @@ -5,7 +5,7 @@ ads--CDockContainerWidget { background: palette(dark); } -ads--CDockContainerWidget QSplitter::handle { +ads--CDockContainerWidget ads--CDockSplitter::handle { background: palette(dark); } diff --git a/src/stylesheets/focus_highlighting_linux.css b/src/stylesheets/focus_highlighting_linux.css index bea52d0..888092f 100644 --- a/src/stylesheets/focus_highlighting_linux.css +++ b/src/stylesheets/focus_highlighting_linux.css @@ -5,7 +5,7 @@ ads--CDockContainerWidget { background: palette(dark); } -ads--CDockContainerWidget QSplitter::handle { +ads--CDockContainerWidget ads--CDockSplitter::handle { background: palette(dark); } @@ -192,3 +192,4 @@ ads--CFloatingDockContainer[isActiveWindow="true"] #floatingTitleMaximizeButton: background: rgba(255, 255, 255, 92); } */ +