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"
2018-12-02 02:05:52 +02:00
2019-05-11 21:10:02 +03:00
// local
# include "windowstracker.h"
# include "../lattecorona.h"
2018-12-02 02:05:52 +02:00
// Qt
2016-12-28 02:45:21 -05:00
# include <QObject>
2018-10-18 18:19:44 +03:00
# include <QDir>
2016-12-28 02:45:21 -05:00
# include <QQuickWindow>
2018-12-02 02:05:52 +02:00
// KDE
2018-10-18 18:19:44 +03:00
# include <KDirWatch>
2016-12-30 02:13:33 -05:00
# include <KWindowSystem>
2016-12-28 02:45:21 -05:00
namespace Latte {
2019-05-11 15:43:10 +03:00
namespace WindowSystem {
2016-12-28 02:45:21 -05:00
2017-02-24 21:40:47 -05:00
AbstractWindowInterface : : AbstractWindowInterface ( QObject * parent )
: QObject ( parent )
2016-12-28 02:45:21 -05:00
{
2019-05-11 21:10:02 +03:00
m_corona = qobject_cast < Latte : : Corona * > ( parent ) ;
m_windowsTracker = new WindowsTracker ( this ) ;
2018-10-18 18:19:44 +03:00
updateDefaultScheme ( ) ;
2018-10-14 13:54:09 +03:00
connect ( this , & AbstractWindowInterface : : windowRemoved , this , [ & ] ( WindowId wid ) {
m_windowScheme . remove ( wid ) ;
} ) ;
2018-10-18 18:19:44 +03:00
//! track for changing default scheme
QString kdeSettingsFile = QDir : : homePath ( ) + " /.config/kdeglobals " ;
KDirWatch : : self ( ) - > addFile ( kdeSettingsFile ) ;
2018-10-27 11:06:40 +03:00
connect ( KDirWatch : : self ( ) , & KDirWatch : : dirty , this , [ & , kdeSettingsFile ] ( const QString & path ) {
if ( path = = kdeSettingsFile ) {
this - > updateDefaultScheme ( ) ;
}
} ) ;
connect ( KDirWatch : : self ( ) , & KDirWatch : : created , this , [ & , kdeSettingsFile ] ( const QString & path ) {
if ( path = = kdeSettingsFile ) {
this - > updateDefaultScheme ( ) ;
}
} ) ;
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 ( ) ;
2019-05-11 21:10:02 +03:00
m_windowsTracker - > deleteLater ( ) ;
2016-12-28 02:45:21 -05:00
}
2018-10-14 13:54:09 +03:00
//! Scheme support for windows
2018-10-18 18:19:44 +03:00
void AbstractWindowInterface : : updateDefaultScheme ( )
{
QString defaultSchemePath = SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ;
2019-03-11 21:23:26 +02:00
qDebug ( ) < < " Windows default color scheme :: " < < defaultSchemePath ;
2018-10-18 18:19:44 +03:00
SchemeColors * dScheme ;
if ( ! m_schemes . contains ( defaultSchemePath ) ) {
dScheme = new SchemeColors ( this , defaultSchemePath ) ;
2019-02-22 16:43:31 +02:00
m_schemes [ defaultSchemePath ] = dScheme ;
2018-10-18 18:19:44 +03:00
} else {
dScheme = m_schemes [ defaultSchemePath ] ;
}
2019-02-22 16:43:31 +02:00
if ( ! m_schemes . contains ( " kdeglobals " ) | | m_schemes [ " kdeglobals " ] - > schemeFile ( ) ! = defaultSchemePath ) {
2018-10-18 18:19:44 +03:00
m_schemes [ " kdeglobals " ] = dScheme ;
}
}
2019-05-11 21:10:02 +03:00
Latte : : Corona * AbstractWindowInterface : : corona ( )
{
return m_corona ;
}
2018-10-14 13:54:09 +03:00
SchemeColors * AbstractWindowInterface : : schemeForWindow ( WindowId wid )
{
if ( ! m_windowScheme . contains ( wid ) ) {
return m_schemes [ " kdeglobals " ] ;
} else {
return m_schemes [ m_windowScheme [ wid ] ] ;
}
return nullptr ;
}
2019-05-11 21:10:02 +03:00
WindowsTracker * AbstractWindowInterface : : windowsTracker ( )
{
return m_windowsTracker ;
}
2018-10-14 13:54:09 +03:00
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 ;
2019-02-16 13:16:17 +02:00
}
2018-10-21 19:51:40 +03:00
2019-02-16 13:16:17 +02:00
if ( wid = = activeWindow ( ) ) {
emit activeWindowChanged ( wid ) ;
2018-10-14 13:54:09 +03:00
}
}
2016-12-28 02:45:21 -05:00
}
2019-05-11 15:43:10 +03:00
}
2017-02-24 21:40:47 -05:00