2017-01-02 17:05:30 -05:00
/*
* Copyright 2016 Smith AR < audoban @ openmailbox . org >
* Michail Vourlakos < mvourlakos @ gmail . com >
*
* This file is part of Latte - Dock
*
* Latte - Dock 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 .
*
* Latte - Dock 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 .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2016-12-28 02:45:21 -05:00
# include "abstractwindowinterface.h"
2016-12-30 02:13:33 -05:00
# include "xwindowinterface.h"
2017-04-25 17:48:36 +03:00
# include "waylandinterface.h"
2016-12-28 02:45:21 -05:00
# include <QObject>
# include <QQuickWindow>
2016-12-30 02:13:33 -05:00
# include <KWindowSystem>
2016-12-28 02:45:21 -05:00
namespace Latte {
2017-02-24 21:40:47 -05:00
AbstractWindowInterface : : AbstractWindowInterface ( QObject * parent )
: QObject ( parent )
2016-12-28 02:45:21 -05:00
{
2018-10-14 13:54:09 +03:00
QString defaultSchemePath = SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ;
SchemeColors * dScheme = new SchemeColors ( this , defaultSchemePath ) ;
m_schemes [ " kdeglobals " ] = dScheme ;
m_schemes [ defaultSchemePath ] = dScheme ;
connect ( this , & AbstractWindowInterface : : windowRemoved , this , [ & ] ( WindowId wid ) {
m_windowScheme . remove ( wid ) ;
} ) ;
2016-12-28 02:45:21 -05:00
}
AbstractWindowInterface : : ~ AbstractWindowInterface ( )
{
2018-10-14 13:54:09 +03:00
m_windowScheme . clear ( ) ;
//! it is just a reference to a real scheme file
m_schemes . take ( " kdeglobals " ) ;
qDeleteAll ( m_schemes ) ;
m_schemes . clear ( ) ;
2016-12-28 02:45:21 -05:00
}
2017-06-08 17:10:49 -05:00
void AbstractWindowInterface : : addDock ( WindowId wid )
2016-12-30 02:13:33 -05:00
{
2017-02-24 21:40:47 -05:00
m_docks . push_back ( wid ) ;
}
2017-06-08 17:10:49 -05:00
void AbstractWindowInterface : : removeDock ( WindowId wid )
2017-02-24 21:40:47 -05:00
{
2017-03-12 15:14:30 -05:00
auto it = std : : find ( m_docks . begin ( ) , m_docks . end ( ) , wid ) ;
2017-02-24 21:40:47 -05:00
2017-03-12 15:14:30 -05:00
if ( it ! = m_docks . end ( ) )
m_docks . erase ( it ) ;
2017-02-24 21:40:47 -05:00
}
2018-10-14 13:54:09 +03:00
//! Scheme support for windows
SchemeColors * AbstractWindowInterface : : schemeForWindow ( WindowId wid )
{
if ( ! m_windowScheme . contains ( wid ) ) {
return m_schemes [ " kdeglobals " ] ;
} else {
return m_schemes [ m_windowScheme [ wid ] ] ;
}
return nullptr ;
}
void AbstractWindowInterface : : setColorSchemeForWindow ( WindowId wid , QString scheme )
{
if ( scheme = = " kdeglobals " & & ! m_windowScheme . contains ( wid ) ) {
//default scheme does not have to be set
return ;
}
if ( scheme = = " kdeglobals " ) {
//! a window that previously had an explicit set scheme now is set back to default scheme
m_windowScheme . remove ( wid ) ;
} else {
QString schemeFile = SchemeColors : : possibleSchemeFile ( scheme ) ;
if ( ! m_schemes . contains ( schemeFile ) ) {
//! when this scheme file has not been loaded yet
m_schemes [ schemeFile ] = new SchemeColors ( this , schemeFile ) ;
}
m_windowScheme [ wid ] = schemeFile ;
}
}
2016-12-28 02:45:21 -05:00
}
2017-02-24 21:40:47 -05:00