summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancois Andriot <[email protected]>2013-05-24 01:37:29 +0200
committerSlávek Banko <[email protected]>2013-05-24 01:38:01 +0200
commit90c0f26c7c977c52e78246db83906807e0a109f5 (patch)
tree5b8a72c9e986d60cef92360d02070ef0f4772d95
parent2d2661a554c5195069caf2d3eead729f52898a8d (diff)
downloadtdelibs-90c0f26c7c977c52e78246db83906807e0a109f5.tar.gz
tdelibs-90c0f26c7c977c52e78246db83906807e0a109f5.zip
Fix saving display config when Gamma is not supported by xrandr
This resolves Bug 1506
-rw-r--r--tderandr/libtderandr.cc30
1 files changed, 20 insertions, 10 deletions
diff --git a/tderandr/libtderandr.cc b/tderandr/libtderandr.cc
index 9b7e25577..12382f1e5 100644
--- a/tderandr/libtderandr.cc
+++ b/tderandr/libtderandr.cc
@@ -25,6 +25,7 @@
#include <tqdir.h>
#include <tqtimer.h>
#include <tqstringlist.h>
+#include <tqregexp.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
@@ -691,7 +692,16 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre
TQString xrandr_command_output = exec(command.ascii());
xrandr_command_output = xrandr_command_output.stripWhiteSpace();
if (test) {
- if (xrandr_command_output != "") {
+ // In case gamma settings is not supported, try again without '--gamma' parameter
+ if (xrandr_command_output == "xrandr: Gamma size is 0.") {
+ command = command.replace(TQRegExp("--gamma [0-9\\.]*:[0-9\\.]*:[0-9\\.]*"), "");
+ xrandr_command_output = exec(command.ascii());
+ xrandr_command_output = xrandr_command_output.stripWhiteSpace();
+ }
+
+ 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);
accepted = false;
destroyScreenInformationObject(oldconfig);
@@ -1364,19 +1374,19 @@ TQPtrList<SingleScreenData> KRandrSimpleAPI::readCurrentDisplayConfiguration() {
// It may not always be 100% correct, or even anywhere close...
// Essentially it "undoes" the LUT gamma calculation from xrandr
// lut_gamma->green[i] = (pow(i/(size - 1), desired_gamma.green) * (size - 1) * 256);
+ screendata->gamma_red = 2.2;
+ screendata->gamma_green = 2.2;
+ screendata->gamma_blue = 2.2;
if (current_crtc) {
//int slot = 127;
int slot = 7;
int size = XRRGetCrtcGammaSize(randr_display, current_crtc->id);
- XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id);
- 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));
- }
- else {
- screendata->gamma_red = 2.2;
- screendata->gamma_green = 2.2;
- screendata->gamma_blue = 2.2;
+ if(size>0) {
+ XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id);
+ 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));
+ }
}
// Round off the gamma to one decimal place
screendata->gamma_red = floorf(screendata->gamma_red * 10 + 0.5) / 10;