forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.2 KiB
113 lines
3.2 KiB
/* |
|
* Copyright (C) 2016 P.L. Lucas |
|
* |
|
* 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. |
|
* |
|
* This program 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, write to the Free Software |
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
*/ |
|
|
|
#include "driver/libbacklight_backend.h" |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
#include "driver/libbacklight_backend.c" |
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#include "linuxbackend.h" |
|
#include <QTimer> |
|
#include <QDebug> |
|
|
|
namespace LXQt { |
|
|
|
LinuxBackend::LinuxBackend(QObject *parent):VirtualBackEnd(parent) |
|
{ |
|
maxBacklight = lxqt_backlight_backend_get_max(); |
|
backlightStream = NULL; |
|
if( isBacklightAvailable() ) { |
|
char *driver = lxqt_backlight_backend_get_driver(); |
|
fileSystemWatcher = new QFileSystemWatcher(this); |
|
fileSystemWatcher->addPath(QString::fromLatin1("/sys/class/backlight/%1/actual_brightness").arg(QL1S(driver))); |
|
fileSystemWatcher->addPath(QString::fromLatin1("/sys/class/backlight/%1/brightness").arg(QL1S(driver))); |
|
fileSystemWatcher->addPath(QString::fromLatin1("/sys/class/backlight/%1/bl_power").arg(QL1S(driver))); |
|
free(driver); |
|
actualBacklight = lxqt_backlight_backend_get(); |
|
connect(fileSystemWatcher, &QFileSystemWatcher::fileChanged, |
|
this, &LinuxBackend::fileSystemChanged); |
|
} |
|
} |
|
|
|
LinuxBackend::~LinuxBackend() |
|
{ |
|
closeBacklightStream(); |
|
} |
|
|
|
int LinuxBackend::getBacklight() |
|
{ |
|
actualBacklight = lxqt_backlight_backend_get(); |
|
return actualBacklight; |
|
} |
|
|
|
int LinuxBackend::getMaxBacklight() |
|
{ |
|
return maxBacklight; |
|
} |
|
|
|
bool LinuxBackend::isBacklightAvailable() |
|
{ |
|
return maxBacklight > 0; |
|
} |
|
|
|
bool LinuxBackend::isBacklightOff() |
|
{ |
|
return lxqt_backlight_is_backlight_off() > 0; |
|
} |
|
|
|
void LinuxBackend::setBacklight(int value) |
|
{ |
|
if( ! isBacklightAvailable() ) |
|
return; |
|
if( backlightStream == NULL ) { |
|
backlightStream = lxqt_backlight_backend_get_write_stream(); |
|
if( backlightStream != NULL ) { |
|
// Close stream after 60 seconds |
|
QTimer::singleShot(60000, this, SLOT(closeBacklightStream())); |
|
} |
|
} |
|
if( backlightStream != NULL ) { |
|
// normalize the value (to work around an issue in QSlider) |
|
value = qBound(0, value, maxBacklight); |
|
fprintf(backlightStream, "%d\n", value); |
|
fflush(backlightStream); |
|
} |
|
} |
|
|
|
void LinuxBackend::closeBacklightStream() |
|
{ |
|
if( backlightStream != NULL ) { |
|
fclose(backlightStream); |
|
backlightStream = NULL; |
|
} |
|
} |
|
|
|
void LinuxBackend::fileSystemChanged(const QString & /*path*/) |
|
{ |
|
int value = actualBacklight; |
|
if( value != getBacklight() ) { |
|
Q_EMIT backlightChanged(actualBacklight); |
|
} |
|
} |
|
|
|
} // namespace LXQt
|
|
|