summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-05-02 07:28:33 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-05-02 07:28:33 +0000
commit09699fd899efc9ba7a1bb1a1b3f3172ef9b6fc19 (patch)
treec06aaf735ee21b38f829114d53202909767768c1
parentff4898fd413b863640a3b474ea0bb0c1b699f734 (diff)
downloadtdebase-09699fd899efc9ba7a1bb1a1b3f3172ef9b6fc19.tar.gz
tdebase-09699fd899efc9ba7a1bb1a1b3f3172ef9b6fc19.zip
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
-rw-r--r--kcontrol/iccconfig/Makefile.am4
-rw-r--r--kcontrol/iccconfig/iccconfig.cpp319
-rw-r--r--kcontrol/iccconfig/iccconfig.h27
-rw-r--r--kcontrol/iccconfig/iccconfigbase.ui136
-rw-r--r--kcontrol/iccconfig/iccconfigbase2.ui104
-rw-r--r--kcontrol/randr/krandrtray.cpp49
-rw-r--r--kcontrol/randr/krandrtray.h5
7 files changed, 478 insertions, 166 deletions
diff --git a/kcontrol/iccconfig/Makefile.am b/kcontrol/iccconfig/Makefile.am
index 8ebd2b289..3484a3708 100644
--- a/kcontrol/iccconfig/Makefile.am
+++ b/kcontrol/iccconfig/Makefile.am
@@ -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
diff --git a/kcontrol/iccconfig/iccconfig.cpp b/kcontrol/iccconfig/iccconfig.cpp
index 4174f3ce8..05ea09cac 100644
--- a/kcontrol/iccconfig/iccconfig.cpp
+++ b/kcontrol/iccconfig/iccconfig.cpp
@@ -1,8 +1,7 @@
/**
- * smartcard.cpp
+ * iccconfig.cpp
*
- * Copyright (c) 2001 George Staikos <[email protected]>
- * Copyright (c) 2001 Fernando Llobregat <[email protected]>
+ * Copyright (c) 2009-2010 Timothy Pearson <[email protected]>
*
* 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);
}
diff --git a/kcontrol/iccconfig/iccconfig.h b/kcontrol/iccconfig/iccconfig.h
index 0736968b4..a12c9a49d 100644
--- a/kcontrol/iccconfig/iccconfig.h
+++ b/kcontrol/iccconfig/iccconfig.h
@@ -1,7 +1,7 @@
/**
* iccconfig.h
*
- * Copyright (c) 2009 Timothy Pearson <[email protected]>
+ * Copyright (c) 2009-2010 Timothy Pearson <[email protected]>
*
* 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
diff --git a/kcontrol/iccconfig/iccconfigbase.ui b/kcontrol/iccconfig/iccconfigbase.ui
index 0d6689fd7..c9be0818f 100644
--- a/kcontrol/iccconfig/iccconfigbase.ui
+++ b/kcontrol/iccconfig/iccconfigbase.ui
@@ -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>
diff --git a/kcontrol/iccconfig/iccconfigbase2.ui b/kcontrol/iccconfig/iccconfigbase2.ui
deleted file mode 100644
index cad130b47..000000000
--- a/kcontrol/iccconfig/iccconfigbase2.ui
+++ /dev/null
@@ -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>
diff --git a/kcontrol/randr/krandrtray.cpp b/kcontrol/randr/krandrtray.cpp
index 18d14bdc6..292d51380 100644
--- a/kcontrol/randr/krandrtray.cpp
+++ b/kcontrol/randr/krandrtray.cpp
@@ -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;
diff --git a/kcontrol/randr/krandrtray.h b/kcontrol/randr/krandrtray.h
index fac91e358..d34c85071 100644
--- a/kcontrol/randr/krandrtray.h
+++ b/kcontrol/randr/krandrtray.h
@@ -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