summaryrefslogtreecommitdiffstats
path: root/tderandr/libtderandr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tderandr/libtderandr.cpp')
-rw-r--r--tderandr/libtderandr.cpp90
1 files changed, 47 insertions, 43 deletions
diff --git a/tderandr/libtderandr.cpp b/tderandr/libtderandr.cpp
index 50c7a1673..94828e434 100644
--- a/tderandr/libtderandr.cpp
+++ b/tderandr/libtderandr.cpp
@@ -31,6 +31,8 @@
#include <tdemessagebox.h>
#include <tdeapplication.h>
+#include <kdebug.h>
+
#include <stdlib.h>
#include <unistd.h>
#include <cmath>
@@ -78,14 +80,14 @@ TQString capitalizeString(TQString in) {
}
TQString KRandrSimpleAPI::getIccFileName(TQString profileName, TQString screenName, TQString kde_confdir) {
- KSimpleConfig *t_config = NULL;
- KSimpleConfig *t_systemconfig = NULL;
+ TDESimpleConfig *t_config = NULL;
+ TDESimpleConfig *t_systemconfig = NULL;
int t_numberOfProfiles;
TQStringList t_cfgProfiles;
TQString retval;
if ((profileName != NULL) && (profileName != "")) {
- t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
+ t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
t_config->setGroup(NULL);
if (t_config->readBoolEntry("EnableICC", false) == true) {
t_config->setGroup(profileName);
@@ -97,7 +99,7 @@ TQString KRandrSimpleAPI::getIccFileName(TQString profileName, TQString screenNa
delete t_config;
}
else {
- t_systemconfig = new KSimpleConfig( kde_confdir + TQString("/kicc/kiccconfigrc") );
+ t_systemconfig = new TDESimpleConfig( kde_confdir + TQString("/kicc/kiccconfigrc") );
t_systemconfig->setGroup(NULL);
if (t_systemconfig->readBoolEntry("EnableICC", false) == true) {
retval = t_systemconfig->readEntry("ICCFile");
@@ -264,12 +266,12 @@ TQString KRandrSimpleAPI::applyIccConfiguration(TQString profileName, TQString k
Display *randr_display;
ScreenInfo *randr_screen_info;
XRROutputInfo *output_info;
- KSimpleConfig *t_config;
+ TDESimpleConfig *t_config;
int screenNumber = 0;
TQString errorstr = "";
- t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
+ t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
// Find all screens
if (isValid() == true) {
@@ -371,9 +373,9 @@ TQByteArray KRandrSimpleAPI::getEDID(int card, TQString displayname) {
TQString KRandrSimpleAPI::getCurrentProfile () {
TQString profileName;
- KSimpleConfig *t_config;
+ TDESimpleConfig *t_config;
- t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
+ t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" ));
profileName = t_config->readEntry("CurrentProfile");
delete t_config;
return profileName;
@@ -457,7 +459,7 @@ void KRandrSimpleAPI::saveDisplayConfiguration(bool enable, bool applyonstart, T
filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
display_config->setGroup("General");
display_config->writeEntry("EnableDisplayControl", enable);
display_config->writeEntry("ApplySettingsOnStart", applyonstart);
@@ -471,7 +473,7 @@ void KRandrSimpleAPI::saveDisplayConfiguration(bool enable, bool applyonstart, T
}
filename.prepend(kde_confdir.append("/displayconfig/"));
- display_config = new KSimpleConfig( filename );
+ display_config = new TDESimpleConfig( filename );
i=0;
SingleScreenData *screendata;
@@ -537,7 +539,7 @@ TQPoint KRandrSimpleAPI::applyDisplayConfiguration(TQString profilename, TQStrin
TQPtrList<SingleScreenData> screenInfoArray;
screenInfoArray = loadDisplayConfiguration(profilename, kde_confdir);
if (screenInfoArray.count() > 0) {
- applyDisplayConfiguration(screenInfoArray, FALSE, kde_confdir);
+ applyDisplayConfiguration(screenInfoArray, false, kde_confdir);
}
destroyScreenInformationObject(screenInfoArray);
screenInfoArray = readCurrentDisplayConfiguration();
@@ -559,7 +561,7 @@ TQPtrList<SingleScreenData> KRandrSimpleAPI::loadDisplayConfiguration(TQString p
}
filename.prepend(kde_confdir.append("/displayconfig/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
TQStringList grouplist = display_config->groupList();
SingleScreenData *screendata;
@@ -644,11 +646,11 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre
SingleScreenData *screendata;
TQPtrList<SingleScreenData> oldconfig;
- if (test == TRUE) {
+ if (test) {
oldconfig = readCurrentDisplayConfiguration();
}
- if (isValid() == true) {
+ if (isValid()) {
#ifdef USE_XRANDR_PROGRAM
// Assemble the command string for xrandr
TQString command;
@@ -701,7 +703,7 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre
if(xrandr_command_output.startsWith("xrandr: Failed to get size of gamma for output")) {
KMessageBox::sorry(0, xrandr_command_output, i18n("Setting gamma failed."));
} else if (xrandr_command_output != "") {
- applyDisplayConfiguration(oldconfig, FALSE, kde_confdir);
+ applyDisplayConfiguration(oldconfig, false, kde_confdir);
accepted = false;
destroyScreenInformationObject(oldconfig);
KMessageBox::sorry(0, xrandr_command_output, i18n("XRandR encountered a problem"));
@@ -802,10 +804,10 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre
applySystemWideIccConfiguration(kde_confdir);
applyIccConfiguration(current_icc_profile, kde_confdir);
- if (test == TRUE) {
+ if (test) {
int ret = showTestConfigurationDialog();
if (!ret) {
- applyDisplayConfiguration(oldconfig, FALSE, kde_confdir);
+ applyDisplayConfiguration(oldconfig, false, kde_confdir);
accepted = false;
}
destroyScreenInformationObject(oldconfig);
@@ -960,7 +962,7 @@ HotPlugRulesList KRandrSimpleAPI::getHotplugRules(TQString kde_confdir) {
filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
TQStringList grouplist = display_config->groupList();
for ( TQStringList::Iterator it = grouplist.begin(); it != grouplist.end(); ++it ) {
@@ -985,7 +987,7 @@ void KRandrSimpleAPI::saveHotplugRules(HotPlugRulesList rules, TQString kde_conf
filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
TQStringList grouplist = display_config->groupList();
for ( TQStringList::Iterator it = grouplist.begin(); it != grouplist.end(); ++it ) {
if (!(*it).startsWith("Hotplug-Rule")) {
@@ -1009,7 +1011,7 @@ void KRandrSimpleAPI::saveHotplugRules(HotPlugRulesList rules, TQString kde_conf
bool KRandrSimpleAPI::getDisplayConfigurationEnabled(TQString kde_confdir) {
TQString filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
display_config->setGroup("General");
bool enabled = display_config->readBoolEntry("EnableDisplayControl", false);
delete display_config;
@@ -1020,7 +1022,7 @@ bool KRandrSimpleAPI::getDisplayConfigurationEnabled(TQString kde_confdir) {
bool KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyEnabled(TQString kde_confdir) {
TQString filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
display_config->setGroup("General");
bool applyonstart = display_config->readBoolEntry("ApplySettingsOnStart", false);
delete display_config;
@@ -1031,7 +1033,7 @@ bool KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyEnabled(TQString kd
TQString KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyName(TQString kde_confdir) {
TQString filename = "displayglobals";
filename.prepend(kde_confdir.append("/"));
- KSimpleConfig* display_config = new KSimpleConfig( filename );
+ TDESimpleConfig* display_config = new TDESimpleConfig( filename );
display_config->setGroup("General");
TQString profilename = display_config->readEntry("StartupProfileName", "");
delete display_config;
@@ -1095,7 +1097,6 @@ void KRandrSimpleAPI::applyHotplugRules(TQString kde_confdir) {
}
void KRandrSimpleAPI::applyDisplayGamma(TQPtrList<SingleScreenData> screenInfoArray) {
- int i;
Display *randr_display;
XRROutputInfo *output_info;
ScreenInfo *randr_screen_info;
@@ -1106,37 +1107,35 @@ void KRandrSimpleAPI::applyDisplayGamma(TQPtrList<SingleScreenData> screenInfoAr
if (isValid() == true) {
randr_display = tqt_xdisplay();
randr_screen_info = read_screen_info(randr_display);
- for (i = 0; i < screenInfoArray.count(); i++) {
+ for (int i = 0; i < screenInfoArray.count(); i++) {
screendata = screenInfoArray.at(i);
output_info = randr_screen_info->outputs[i]->info;
CrtcInfo *current_crtc = randr_screen_info->outputs[i]->cur_crtc;
if (!current_crtc) {
continue;
}
- // vvvvvvvvv This chunk of code is borrowed from xrandr vvvvvvvvvv
+ // vvvvvvvvv This chunk of code is based on code from the function set_gamma() of xrandr vvvvvvvvvv
int size = XRRGetCrtcGammaSize(randr_display, current_crtc->id);
- if (!size) {
+ if (size <= 0 || size > 65536) {
+ kdWarning() << "Gamma correction table has wrong size." << endl;
continue;
}
gamma = XRRAllocGamma(size);
if (!gamma) {
+ kdWarning() << "Gamma allocation failed." << endl;
continue;
}
- for (i = 0; i < size; i++) {
- if (screendata->gamma_red == 1.0)
- gamma->red[i] = i << 8;
- else
- gamma->red[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_red) * (double)(size-1)*256);
-
- if (screendata->gamma_green == 1.0)
- gamma->green[i] = i << 8;
- else
- gamma->green[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_green) * (double)(size-1)*256);
-
- if (screendata->gamma_blue == 1.0)
- gamma->blue[i] = i << 8;
- else
- gamma->blue[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_blue) * (double)(size-1)*256);
+ for (int j = 0; j < size; j++) {
+ if (size == 1) {
+ gamma->red[j] = 0.0;
+ gamma->green[j] = 0.0;
+ gamma->blue[j] = 0.0;
+ }
+ else {
+ gamma->red[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_red), 1.0) * 65535.0;
+ gamma->green[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_green), 1.0) * 65535.0;
+ gamma->blue[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_blue), 1.0) * 65535.0;
+ }
}
XRRSetCrtcGamma(randr_display, current_crtc->id, gamma);
free(gamma);
@@ -1380,8 +1379,13 @@ TQPtrList<SingleScreenData> KRandrSimpleAPI::readCurrentDisplayConfiguration() {
//int slot = 127;
int slot = 7;
int size = XRRGetCrtcGammaSize(randr_display, current_crtc->id);
- if(size>0) {
- XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id);
+ XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id);
+ if (size == 1) {
+ screendata->gamma_red = 0.0;
+ screendata->gamma_green = 0.0;
+ screendata->gamma_blue = 0.0;
+ }
+ else if (size > 1) {
screendata->gamma_red = log(gammastruct->red[slot]/((size-1.0)*256.0))/log(slot/(size-1.0));
screendata->gamma_green = log(gammastruct->green[slot]/((size-1.0)*256.0))/log(slot/(size-1.0));
screendata->gamma_blue = log(gammastruct->blue[slot]/((size-1.0)*256.0))/log(slot/(size-1.0));