Added new, enchanced ICC configuration with new per-user settings

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1121795 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
parent ff4898fd41
commit 09699fd899

@ -3,9 +3,9 @@ kde_module_LTLIBRARIES = kcm_iccconfig.la
kcm_iccconfig_la_SOURCES = iccconfig.cpp iccconfigbase.ui iccconfig.skel
kcm_iccconfig_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined
kcm_iccconfig_la_LDFLAGS = $(all_libraries) -lkrandr -module -avoid-version -no-undefined
kcm_iccconfig_la_LIBADD = -lkdeui $(LIB_KIO)
kcm_iccconfig_la_LIBADD = -lkdeui $(LIB_KIO) $(LIB_XRANDR)
METASOURCES = AUTO

@ -1,8 +1,7 @@
/**
* smartcard.cpp
* iccconfig.cpp
*
* Copyright (c) 2001 George Staikos <staikos@kde.org>
* Copyright (c) 2001 Fernando Llobregat <fernando.llobregat@free.fr>
* Copyright (c) 2009-2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* 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
@ -19,8 +18,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "iccconfig.h"
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
@ -32,6 +29,7 @@
#include <kaboutdata.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kcombobox.h>
#include <kdebug.h>
#include <kdialog.h>
#include <kglobal.h>
@ -39,6 +37,7 @@
#include <klocale.h>
#include <kmessagebox.h>
#include <kpopupmenu.h>
#include <kinputdialog.h>
#include <kurlrequester.h>
#include <kgenericfactory.h>
@ -48,6 +47,8 @@
#include <stdio.h>
#include <qstring.h>
#include "iccconfig.h"
using namespace std;
/**** DLL Interface ****/
@ -55,6 +56,7 @@ typedef KGenericFactory<KICCConfig, QWidget> KICCCFactory;
K_EXPORT_COMPONENT_FACTORY( kcm_iccconfig, KICCCFactory("kcmiccconfig") )
KSimpleConfig *config;
KSimpleConfig *systemconfig;
/**** KICCConfig ****/
@ -63,7 +65,8 @@ KICCConfig::KICCConfig(QWidget *parent, const char *name, const QStringList &)
{
QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
config = new KSimpleConfig( QString::fromLatin1( KDE_CONFDIR "/kicc/kiccconfigrc" ));
config = new KSimpleConfig( QString::fromLatin1( "kiccconfigrc" ));
systemconfig = new KSimpleConfig( QString::fromLatin1( KDE_CONFDIR "/kicc/kiccconfigrc" ));
KAboutData *about =
new KAboutData(I18N_NOOP("kcmiccconfig"), I18N_NOOP("KDE ICC Profile Control Module"),
@ -76,25 +79,149 @@ KICCConfig::KICCConfig(QWidget *parent, const char *name, const QStringList &)
base = new ICCConfigBase(this);
layout->add(base);
setRootOnlyMsg(i18n("<b>The ICC color profile is a system wide setting, and requires administrator access</b><br>To alter the system's ICC profile, click on the \"Administrator Mode\" button below."));
setRootOnlyMsg(i18n("<b>The global ICC color profile is a system wide setting, and requires administrator access</b><br>To alter the system's global ICC profile, click on the \"Administrator Mode\" button below."));
setUseRootOnlyMsg(true);
connect(base->systemEnableSupport, SIGNAL(clicked()), SLOT(changed()));
connect(base->systemEnableSupport, SIGNAL(toggled(bool)), base->systemIccFile, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(clicked()), SLOT(changed()));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->iccFile, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->randrScreenList, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->iccProfileList, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->addProfileButton, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->renameProfileButton, SLOT(setEnabled(bool)));
connect(base->enableSupport, SIGNAL(toggled(bool)), base->deleteProfileButton, SLOT(setEnabled(bool)));
connect(base->iccProfileList, SIGNAL(activated(int)), this, SLOT(selectProfile(int)));
connect(base->randrScreenList, SIGNAL(activated(int)), this, SLOT(selectScreen(int)));
connect(base->iccFile, SIGNAL(textChanged(const QString&)), SLOT(updateArray()));
connect(base->systemIccFile, SIGNAL(textChanged(const QString&)), SLOT(changed()));
connect(base->iccFile, SIGNAL(textChanged(const QString&)), SLOT(changed()));
connect(base->addProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
connect(base->renameProfileButton, SIGNAL(clicked()), this, SLOT(renameProfile()));
connect(base->deleteProfileButton, SIGNAL(clicked()), this, SLOT(deleteProfile()));
load();
if (getuid() != 0 || !config->checkConfigFilesWritable( true )) {
if (!config->checkConfigFilesWritable( true )) {
base->enableSupport->setEnabled(false);
base->randrScreenList->setEnabled(false);
base->iccProfileList->setEnabled(false);
base->iccFile->setEnabled(false);
base->addProfileButton->setEnabled(false);
base->renameProfileButton->setEnabled(false);
base->deleteProfileButton->setEnabled(false);
}
if (getuid() != 0 || !systemconfig->checkConfigFilesWritable( true )) {
base->systemEnableSupport->setEnabled(false);
base->systemIccFile->setEnabled(false);
}
}
KICCConfig::~KICCConfig()
{
delete [] iccFileArray;
delete config;
delete systemconfig;
}
void KICCConfig::deleteProfile () {
int i;
QString *iccFileArrayNew;
// Delete the profile
config->deleteGroup(base->iccProfileList->currentText());
base->iccProfileList->removeItem(base->iccProfileList->currentItem());
base->iccProfileList->setCurrentItem(base->iccProfileList->count()-1);
// Contract the profile memory
numberOfProfiles--;
iccFileArrayNew = new QString[numberOfProfiles*numberOfScreens];
for (i=0;i<(numberOfProfiles*numberOfScreens);i++) {
iccFileArrayNew[i] = iccFileArray[i];
}
delete [] iccFileArray;
iccFileArray = iccFileArrayNew;
}
void KICCConfig::renameProfile () {
int i;
QString *iccFileArrayNew;
// Pop up a text entry box asking for the name of the new profile
bool _ok = false;
bool _end = false;
QString _new;
QString _text = i18n("Please enter the new profile name below:");
QString _error;
while (!_end) {
_new = KInputDialog::getText( i18n("ICC Profile Configuration"), _error + _text, QString::null, &_ok, this);
if (!_ok ) {
_end = true;
} else {
_error = QString();
if (!_new.isEmpty()) {
if (findProfileIndex(_new) != -1)
_error = i18n("Error: A profile with that name already exists") + QString("\n");
else
_end = true;
}
}
}
// Rename the profile
config->deleteGroup(base->iccProfileList->currentText());
base->iccProfileList->changeItem(_new, base->iccProfileList->currentItem());
updateDisplayedInformation();
emit changed();
}
void KICCConfig::addProfile () {
int i;
QString *iccFileArrayNew;
// Pop up a text entry box asking for the name of the new profile
bool _ok = false;
bool _end = false;
QString _new;
QString _text = i18n("Please enter the new profile name below:");
QString _error;
while (!_end) {
_new = KInputDialog::getText( i18n("ICC Profile Configuration"), _error + _text, QString::null, &_ok, this);
if (!_ok ) {
_end = true;
} else {
_error = QString();
if (!_new.isEmpty()) {
if (findProfileIndex(_new) != -1)
_error = i18n("Error: A profile with that name already exists") + QString("\n");
else
_end = true;
}
}
}
// Expand the profile memory
numberOfProfiles++;
iccFileArrayNew = new QString[numberOfProfiles*numberOfScreens];
for (i=0;i<((numberOfProfiles-1)*numberOfScreens);i++) {
iccFileArrayNew[i] = iccFileArray[i];
}
delete [] iccFileArray;
iccFileArray = iccFileArrayNew;
for (;i<(numberOfProfiles*numberOfScreens);i++) {
iccFileArray[i] = "";
}
// Insert the new profile name
base->iccProfileList->insertItem(_new, -1);
base->iccProfileList->setCurrentItem(base->iccProfileList->count()-1);
updateDisplayedInformation();
emit changed();
}
void KICCConfig::load()
@ -102,52 +229,170 @@ void KICCConfig::load()
load( false );
}
void KICCConfig::selectProfile (int slotNumber) {
updateDisplayedInformation();
emit changed();
}
void KICCConfig::selectScreen (int slotNumber) {
updateDisplayedInformation();
}
void KICCConfig::updateArray (void) {
iccFileArray[((base->iccProfileList->currentItem())*(base->randrScreenList->count()))+(base->randrScreenList->currentItem())] = base->iccFile->url();
config->setGroup(base->iccProfileList->currentText());
if (config->readEntry(base->randrScreenList->currentText()) != iccFileArray[((base->iccProfileList->currentItem())*(base->randrScreenList->count()))+(base->randrScreenList->currentItem())]) {
emit changed();
}
}
void KICCConfig::updateDisplayedInformation () {
base->iccFile->setURL(iccFileArray[((base->iccProfileList->currentItem())*(base->randrScreenList->count()))+(base->randrScreenList->currentItem())]);
}
QString KICCConfig::extractFileName(QString displayName, QString profileName) {
//
}
int KICCConfig::findProfileIndex(QString profileName) {
int i;
for (i=0;i<numberOfProfiles;i++) {
if (base->iccProfileList->text(i) == profileName) {
return i;
}
}
return -1;
}
int KICCConfig::findScreenIndex(QString screenName) {
int i;
for (i=0;i<(base->randrScreenList->count());i++) {
if (base->randrScreenList->text(i) == screenName) {
return i;
}
}
return -1;
}
void KICCConfig::load(bool useDefaults )
{
//Update the toggle buttons with the current configuration
int i;
int j;
// FIXME Should use font size (basically resultant string length) to set button widths...
base->addProfileButton->setFixedWidth(110);
base->renameProfileButton->setFixedWidth(90);
base->deleteProfileButton->setFixedWidth(90);
XRROutputInfo *output_info;
KRandrSimpleAPI *randrsimple = new KRandrSimpleAPI::KRandrSimpleAPI();
config->setReadDefaults( useDefaults );
config->setGroup(NULL);
base->enableSupport->setChecked(config->readBoolEntry("EnableICC", false));
base->randrScreenList->setEnabled(config->readBoolEntry("EnableICC", false));
base->iccProfileList->setEnabled(config->readBoolEntry("EnableICC", false));
base->iccFile->setEnabled(config->readBoolEntry("EnableICC", false));
base->iccFile->setURL(config->readEntry("ICCFile"));
base->addProfileButton->setEnabled(config->readBoolEntry("EnableICC", false));
base->renameProfileButton->setEnabled(config->readBoolEntry("EnableICC", false));
base->deleteProfileButton->setEnabled(config->readBoolEntry("EnableICC", false));
numberOfScreens = 0;
if (randrsimple->isValid() == true) {
randr_display = XOpenDisplay(NULL);
randr_screen_info = randrsimple->read_screen_info(randr_display);
for (i = 0; i < randr_screen_info->n_output; i++) {
output_info = randr_screen_info->outputs[i]->info;
base->randrScreenList->insertItem(output_info->name, -1);
numberOfScreens++;
}
}
else {
base->randrScreenList->insertItem("Default", -1);
numberOfScreens++;
}
// Find all profile names
numberOfProfiles = 0;
cfgProfiles = config->groupList();
for (QStringList::Iterator i(cfgProfiles.begin()); i != cfgProfiles.end(); ++i) {
base->iccProfileList->insertItem((*i), -1);
numberOfProfiles++;
}
if (numberOfProfiles == 0) {
base->iccProfileList->insertItem("<default>", -1);
numberOfProfiles++;
}
// Load all profiles into memory
iccFileArray = new QString[numberOfProfiles*numberOfScreens];
for (i=0;i<(base->iccProfileList->count());i++) {
config->setGroup(base->iccProfileList->text(i));
for (j=0;j<(base->randrScreenList->count());j++) {
iccFileArray[(i*(base->randrScreenList->count()))+j] = config->readEntry(base->randrScreenList->text(j));
}
}
if ((findProfileIndex(base->iccProfileList->currentText()) >= 0) && (findScreenIndex(base->randrScreenList->currentText()) >= 0)) {
base->iccFile->setURL(iccFileArray[(findProfileIndex(base->iccProfileList->currentText())*base->randrScreenList->count())+findScreenIndex(base->randrScreenList->currentText())]);
}
else {
base->iccFile->setURL("");
}
systemconfig->setGroup(NULL);
base->systemEnableSupport->setChecked(systemconfig->readBoolEntry("EnableICC", false));
base->systemIccFile->setEnabled(systemconfig->readBoolEntry("EnableICC", false));
base->systemIccFile->setURL(systemconfig->readEntry("ICCFile"));
delete randrsimple;
emit changed(useDefaults);
}
void KICCConfig::save()
{
int i;
int j;
KRandrSimpleAPI *randrsimple = new KRandrSimpleAPI::KRandrSimpleAPI();
// Write system configuration
systemconfig->setGroup(NULL);
systemconfig->writeEntry("EnableICC", base->systemEnableSupport->isChecked());
systemconfig->writeEntry("ICCFile", base->systemIccFile->url());
// Write user configuration
config->setGroup(NULL);
config->writeEntry("DefaultProfile", m_defaultProfile);
config->writeEntry("EnableICC", base->enableSupport->isChecked());
config->writeEntry("ICCFile", base->iccFile->url());
if (base->enableSupport->isChecked()) {
// Apply ICC settings with XCalib
string icc_command="/usr/bin/xcalib ";
FILE *pipe_xcalib;
char xcalib_result[2048];
int i;
xcalib_result[0]=0;
icc_command.append(base->iccFile->url().ascii());
if ((pipe_xcalib = popen(icc_command.c_str(), "r")) == NULL)
{
printf("Xcalib pipe error\n\r");
}
else {
fgets(xcalib_result, 2048, pipe_xcalib);
pclose(pipe_xcalib);
for (i=1;i<2048;i++) {
if (xcalib_result[i] == 0) {
xcalib_result[i-1]=0;
i=2048;
}
}
if (strlen(xcalib_result) > 2) {
KMessageBox::error(this, QString("Unable to apply ICC configuration:\n\r%1").arg(xcalib_result));
}
// Save all profiles to disk
for (i=0;i<(base->iccProfileList->count());i++) {
config->setGroup(base->iccProfileList->text(i));
for (j=0;j<(base->randrScreenList->count());j++) {
config->writeEntry(base->randrScreenList->text(j), iccFileArray[(i*(base->randrScreenList->count()))+j]);
}
}
config->sync();
systemconfig->sync();
QString errorstr;
if (base->enableSupport->isChecked() == true) {
errorstr = randrsimple->applyIccConfiguration(base->iccProfileList->currentText(), KDE_CONFDIR);
}
else if (base->systemEnableSupport->isChecked() == true) {
errorstr = randrsimple->applySystemWideIccConfiguration(KDE_CONFDIR);
}
else {
errorstr = randrsimple->clearIccConfiguration();
}
if (errorstr != "") {
KMessageBox::error(this, QString("Unable to apply ICC configuration:\n\r%1").arg(errorstr));
}
emit changed(false);
}

@ -1,7 +1,7 @@
/**
* iccconfig.h
*
* Copyright (c) 2009 Timothy Pearson <kb9vqf@pearsoncomputing.net>
* Copyright (c) 2009-2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* 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
@ -27,7 +27,7 @@
#include <dcopobject.h>
#include <kcmodule.h>
#include <libkrandr/libkrandr.h>
#include "iccconfigbase.h"
@ -62,9 +62,26 @@ private:
KConfig *config;
bool _ok;
KPopupMenu * _popUpKardChooser;
Display *randr_display;
ScreenInfo *randr_screen_info;
int numberOfProfiles;
int numberOfScreens;
QStringList cfgScreenInfo;
QStringList cfgProfiles;
void updateDisplayedInformation ();
QString extractFileName(QString displayName, QString profileName);
QString *iccFileArray;
int findProfileIndex(QString profileName);
int findScreenIndex(QString screenName);
QString m_defaultProfile;
private slots:
void selectProfile (int slotNumber);
void selectScreen (int slotNumber);
void updateArray (void);
void addProfile (void);
void renameProfile (void);
void deleteProfile (void);
};
#endif

@ -34,31 +34,131 @@
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QCheckBox" row="0" column="0" colspan="2">
<property name="name">
<cstring>enableSupport</cstring>
</property>
<property name="text">
<string>&amp;Enable global ICC color profile support</string>
</property>
</widget>
<widget class="KURLRequester" row="1" column="1">
<widget class="QGroupBox" row="0" column="0">
<property name="name">
<cstring>iccFile</cstring>
<cstring>groupSystemSettings</cstring>
</property>
<property name="filter">
<string>*.icc</string>
<property name="title">
<string>System Settings</string>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QCheckBox" row="0" column="0" colspan="2">
<property name="name">
<cstring>systemEnableSupport</cstring>
</property>
<property name="text">
<string>&amp;Enable global ICC color profile support</string>
</property>
</widget>
<widget class="KURLRequester" row="1" column="1" colspan="4">
<property name="name">
<cstring>systemIccFile</cstring>
</property>
<property name="filter">
<string>*.icc</string>
</property>
</widget>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>textLabel4_2</cstring>
</property>
<property name="text">
<string>ICC File</string>
</property>
</widget>
</grid>
</widget>
<widget class="QLabel" row="1" column="0">
<widget class="QGroupBox" row="1" column="0">
<property name="name">
<cstring>textLabel2_2</cstring>
<cstring>groupUserSettings</cstring>
</property>
<property name="text">
<string>ICC File</string>
<property name="title">
<string>User Settings</string>
</property>
</widget>
<spacer row="2" column="0">
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QCheckBox" row="0" column="0" colspan="2">
<property name="name">
<cstring>enableSupport</cstring>
</property>
<property name="text">
<string>&amp;Enable user ICC color profile support</string>
</property>
</widget>
<widget class="KComboBox" row="1" column="1">
<property name="name">
<cstring>iccProfileList</cstring>
</property>
</widget>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>textLabel2_9</cstring>
</property>
<property name="text">
<string>Current Profile</string>
</property>
</widget>
<widget class="KPushButton" row="1" column="2">
<property name="name">
<cstring>addProfileButton</cstring>
</property>
<property name="text">
<string>Create New</string>
</property>
</widget>
<widget class="KPushButton" row="1" column="3">
<property name="name">
<cstring>renameProfileButton</cstring>
</property>
<property name="text">
<string>Rename</string>
</property>
</widget>
<widget class="KPushButton" row="1" column="4">
<property name="name">
<cstring>deleteProfileButton</cstring>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
<widget class="KComboBox" row="2" column="1" colspan="4">
<property name="name">
<cstring>randrScreenList</cstring>
</property>
</widget>
<widget class="QLabel" row="2" column="0">
<property name="name">
<cstring>textLabel2_8</cstring>
</property>
<property name="text">
<string>Settings for output</string>
</property>
</widget>
<widget class="KURLRequester" row="3" column="1" colspan="4">
<property name="name">
<cstring>iccFile</cstring>
</property>
<property name="filter">
<string>*.icc</string>
</property>
</widget>
<widget class="QLabel" row="3" column="0">
<property name="name">
<cstring>textLabel2_2</cstring>
</property>
<property name="text">
<string>ICC File</string>
</property>
</widget>
</grid>
</widget>
<spacer row="4" column="0">
<property name="name" stdset="0">
<cstring>Spacer4</cstring>
</property>

@ -1,104 +0,0 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>ICCConfigBase</class>
<widget class="QWidget">
<property name="name">
<cstring>ICCConfigBase</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>519</width>
<height>356</height>
</rect>
</property>
<property name="caption">
<string>ICCConfigBase</string>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QTabWidget" row="0" column="0">
<property name="name">
<cstring>TabWidget2</cstring>
</property>
<property name="enabled">
<bool>true</bool>
</property>
<widget class="QWidget">
<property name="name">
<cstring>tab</cstring>
</property>
<attribute name="title">
<string>ICC Color Profile Configuration</string>
</attribute>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>enableSupport</cstring>
</property>
<property name="text">
<string>&amp;Enable ICC color profile support</string>
</property>
</widget>
<widget class="KURLRequester" row="1" column="1">
<property name="name">
<cstring>editPCF</cstring>
</property>
<property name="filter">
<string>.icc</string>
</property>
</widget>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>textLabel2_2</cstring>
</property>
<property name="text">
<string>ICC File</string>
</property>
</widget>
<spacer row="2" column="0">
<property name="name">
<cstring>Spacer4</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</grid>
</widget>
</widget>
</grid>
</widget>
<connections>
<connection>
<sender>enableSupport</sender>
<signal>toggled(bool)</signal>
<receiver>ICCConfigBase</receiver>
<slot>enableSupport_toggled(bool)</slot>
</connection>
</connections>
<slots>
<slot>enableSupport_toggled(bool)</slot>
</slots>
<layoutdefaults spacing="3" margin="6"/>
<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
<includehints>
<includehint>kurlrequester.h</includehint>
<includehint>klineedit.h</includehint>
<includehint>kpushbutton.h</includehint>
</includehints>
</UI>

@ -78,6 +78,14 @@ KRandRSystemTray::KRandRSystemTray(QWidget* parent, const char *name)
last_known_x = currentScreen()->currentPixelWidth();
last_known_y = currentScreen()->currentPixelHeight();
}
t_config = new KSimpleConfig("kiccconfigrc");
QString cur_profile;
cur_profile = getCurrentProfile();
if (cur_profile != "") {
applyIccConfiguration(cur_profile, NULL);
}
}
void KRandRSystemTray::mousePressEvent(QMouseEvent* e)
@ -179,8 +187,26 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
addOutputMenu(menu);
// Find any user ICC profiles
menu->insertTitle(SmallIcon("kcoloredit"), i18n("Color Profile"));
QStringList cfgProfiles;
cfgProfiles = t_config->groupList();
for (QStringList::Iterator t(cfgProfiles.begin()); t != cfgProfiles.end(); ++t) {
lastIndex = menu->insertItem(*t);
if (t_config->readEntry("CurrentProfile") == (*t)) {
menu->setItemChecked(lastIndex, true);
}
menu->setItemEnabled(lastIndex, t_config->readBoolEntry("EnableICC", false));
menu->connectItem(lastIndex, this, SLOT(slotColorProfileChanged(int)));
}
menu->insertTitle(SmallIcon("randr"), i18n("Global Configuation"));
KAction *actColors = new KAction( i18n( "Configure Color Profiles..." ),
SmallIconSet( "configure" ), KShortcut(), this, SLOT( slotColorConfig() ),
actionCollection() );
actColors->plug( menu );
// KAction *actPrefs = new KAction( i18n( "Configure Display..." ),
// SmallIconSet( "configure" ), KShortcut(), this, SLOT( slotPrefs() ),
// actionCollection() );
@ -194,6 +220,8 @@ void KRandRSystemTray::contextMenuAboutToShow(KPopupMenu* menu)
menu->insertItem(SmallIcon("help"),KStdGuiItem::help().text(), m_help->menu());
KAction *quitAction = actionCollection()->action(KStdAction::name(KStdAction::Quit));
quitAction->plug(menu);
m_menu = menu;
}
void KRandRSystemTray::slotScreenActivated()
@ -225,6 +253,12 @@ void KRandRSystemTray::configChanged()
}
first = false;
QString cur_profile;
cur_profile = getCurrentProfile();
if (cur_profile != "") {
applyIccConfiguration(cur_profile, NULL);
}
}
int KRandRSystemTray::GetDefaultResolutionParameter()
@ -401,6 +435,15 @@ void KRandRSystemTray::slotPrefs()
kcm->exec();
}
void KRandRSystemTray::slotColorConfig()
{
KCMultiDialog *kcm = new KCMultiDialog( KDialogBase::Plain, i18n( "Configure" ), this );
kcm->addModule( "iccconfig" );
kcm->setPlainCaption( i18n( "Configure Display Color Profiles" ) );
kcm->exec();
}
void KRandRSystemTray::slotSettingsChanged(int category)
{
if ( category == (int) KApplication::SETTINGS_SHORTCUTS ) {
@ -693,6 +736,12 @@ void KRandRSystemTray::addOutputMenu(KPopupMenu* menu)
}
}
void KRandRSystemTray::slotColorProfileChanged(int parameter)
{
t_config->writeEntry("CurrentProfile", m_menu->text(parameter));
applyIccConfiguration(m_menu->text(parameter), NULL);
}
void KRandRSystemTray::slotOutputChanged(int parameter)
{
XRROutputInfo *output_info;

@ -50,10 +50,12 @@ protected slots:
void slotOrientationChanged(int parameter);
void slotRefreshRateChanged(int parameter);
void slotPrefs();
void slotColorConfig();
void slotSKeys();
void slotSettingsChanged(int category);
void slotCycleDisplays();
void slotOutputChanged(int parameter);
void slotColorProfileChanged(int parameter);
protected:
void mousePressEvent( QMouseEvent *e );
@ -75,6 +77,9 @@ private:
int last_known_x;
int last_known_y;
KPopupMenu* m_menu;
KSimpleConfig *t_config;
};
#endif

Loading…
Cancel
Save