diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/colorramp.c | 2 | ||||
-rw-r--r-- | src/gamma-randr.c | 2 | ||||
-rw-r--r-- | src/gamma-vidmode.c | 2 | ||||
-rw-r--r-- | src/gamma-w32gdi.c | 6 | ||||
-rw-r--r-- | src/gtk-redshift/statusicon.py | 4 | ||||
-rw-r--r-- | src/location-manual.c | 2 | ||||
-rw-r--r-- | src/redshift.c | 161 |
8 files changed, 120 insertions, 61 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index c07aea3..3d872ed 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -9,7 +9,7 @@ INCLUDES = -DLOCALEDIR=\"$(localedir)\" bin_PROGRAMS = redshift redshift_SOURCES = \ - redshift.c \ + redshift.c redshift.h \ colorramp.c colorramp.h \ solar.c solar.h \ systemtime.c systemtime.h \ diff --git a/src/colorramp.c b/src/colorramp.c index a154a9e..7241a8d 100644 --- a/src/colorramp.c +++ b/src/colorramp.c @@ -130,7 +130,7 @@ void colorramp_fill(uint16_t *gamma_r, uint16_t *gamma_g, uint16_t *gamma_b, int size, int temp, float gamma[3]) { - /* Calculate white point */ + /* Approximate white point */ float white_point[3]; float alpha = (temp % 100) / 100.0; int temp_index = ((temp - 1000) / 100)*3; diff --git a/src/gamma-randr.c b/src/gamma-randr.c index 175bbf2..66d5c48 100644 --- a/src/gamma-randr.c +++ b/src/gamma-randr.c @@ -268,6 +268,8 @@ randr_print_help(FILE *f) fputs(_("Adjust gamma ramps with the X RANDR extension.\n"), f); fputs("\n", f); + /* TRANSLATORS: RANDR help output + left column must not be translated */ fputs(_(" screen=N\tX screen to apply adjustments to\n" " crtc=N\tCRTC to apply adjustments to\n"), f); fputs("\n", f); diff --git a/src/gamma-vidmode.c b/src/gamma-vidmode.c index 970c45d..e6b9412 100644 --- a/src/gamma-vidmode.c +++ b/src/gamma-vidmode.c @@ -131,6 +131,8 @@ vidmode_print_help(FILE *f) fputs(_("Adjust gamma ramps with the X VidMode extension.\n"), f); fputs("\n", f); + /* TRANSLATORS: VidMode help output + left column must not be translated */ fputs(_(" screen=N\tX screen to apply adjustments to\n"), f); fputs("\n", f); } diff --git a/src/gamma-w32gdi.c b/src/gamma-w32gdi.c index ac6fb0f..aa2474d 100644 --- a/src/gamma-w32gdi.c +++ b/src/gamma-w32gdi.c @@ -20,7 +20,9 @@ #include <stdio.h> #include <stdlib.h> -#define WINVER 0x0500 +#ifndef WINVER +# define WINVER 0x0500 +#endif #include <windows.h> #include <wingdi.h> @@ -47,7 +49,7 @@ w32gdi_init(w32gdi_state_t *state) } int -w32gdi_init(w32gdi_state_t *state) +w32gdi_start(w32gdi_state_t *state) { BOOL r; diff --git a/src/gtk-redshift/statusicon.py b/src/gtk-redshift/statusicon.py index 8019ad4..82b5cd6 100644 --- a/src/gtk-redshift/statusicon.py +++ b/src/gtk-redshift/statusicon.py @@ -50,6 +50,10 @@ def run(): def toggle_cb(widget, data=None): process.send_signal(signal.SIGUSR1) + if status_icon.get_icon_name() == 'redshift': + status_icon.set_from_icon_name('redshift-idle') + else: + status_icon.set_from_icon_name('redshift') def autostart_cb(widget, data=None): utils.set_autostart(widget.get_active()) diff --git a/src/location-manual.c b/src/location-manual.c index 1b27095..1f68b6c 100644 --- a/src/location-manual.c +++ b/src/location-manual.c @@ -65,6 +65,8 @@ location_manual_print_help(FILE *f) fputs(_("Specify location manually.\n"), f); fputs("\n", f); + /* TRANSLATORS: Manual location help output + left column must not be translated */ fputs(_(" lat=N\t\tLatitude\n" " lon=N\t\tLongitude\n"), f); fputs("\n", f); diff --git a/src/redshift.c b/src/redshift.c index a8f2966..18cc2c5 100644 --- a/src/redshift.c +++ b/src/redshift.c @@ -128,7 +128,7 @@ static const gamma_method_t gamma_methods[] = { (gamma_method_set_temperature_func *)w32gdi_set_temperature }, #endif - { NULL, NULL, NULL, NULL, NULL } + { NULL } }; @@ -169,7 +169,7 @@ static const location_provider_t location_providers[] = { (location_provider_get_location_func *) location_manual_get_location }, - { NULL, NULL, NULL, NULL } + { NULL } }; /* Bounds for parameters. */ @@ -187,6 +187,9 @@ static const location_provider_t location_providers[] = { #define DEFAULT_NIGHT_TEMP 3700 #define DEFAULT_GAMMA 1.0 +/* The color temperature when no adjustment is applied. */ +#define NEUTRAL_TEMP 6500 + /* Angular elevation of the sun at which the color temperature transition period starts and ends (in degress). Transition during twilight, and while the sun is lower than @@ -194,6 +197,13 @@ static const location_provider_t location_providers[] = { #define TRANSITION_LOW SOLAR_CIVIL_TWILIGHT_ELEV #define TRANSITION_HIGH 3.0 +/* Program modes. */ +typedef enum { + PROGRAM_MODE_CONTINUAL, + PROGRAM_MODE_ONE_SHOT, + PROGRAM_MODE_RESET +} program_mode_t; + #ifdef HAVE_SYS_SIGNAL_H @@ -284,6 +294,7 @@ print_help(const char *program_name) " \t\t(Type `list' to see available methods)\n" " -o\t\tOne shot mode (do not continously adjust" " color temperature)\n" + " -x\t\tReset mode (remove adjustment from screen)\n" " -r\t\tDisable temperature transitions\n" " -t DAY:NIGHT\tColor temperature to set at daytime/night\n"), stdout); @@ -312,6 +323,7 @@ print_method_list() fputs("\n", stdout); fputs(_("Specify colon-separated options with" " `-m METHOD:OPTIONS'.\n"), stdout); + /* TRANSLATORS: `help' must not be translated. */ fputs(_("Try `-m METHOD:help' for help.\n"), stdout); } @@ -326,6 +338,7 @@ print_provider_list() fputs("\n", stdout); fputs(_("Specify colon-separated options with" "`-l PROVIDER:OPTIONS'.\n"), stdout); + /* TRANSLATORS: `help' must not be translated. */ fputs(_("Try `-l PROVIDER:help' for help.\n"), stdout); } @@ -362,7 +375,8 @@ provider_try_start(const location_provider_t *provider, provider->free(state); fprintf(stderr, _("Failed to set %s option.\n"), provider->name); - fprintf(stderr, _("Try `-p %s:help' for more" + /* TRANSLATORS: `help' must not be translated. */ + fprintf(stderr, _("Try `-l %s:help' for more" " information.\n"), provider->name); return -1; } @@ -414,7 +428,8 @@ method_try_start(const gamma_method_t *method, method->free(state); fprintf(stderr, _("Failed to set %s option.\n"), method->name); - fprintf(stderr, _("Try `-p %s:help' for more" + /* TRANSLATORS: `help' must not be translated. */ + fprintf(stderr, _("Try -m %s:help' for more" " information.\n"), method->name); return -1; } @@ -462,13 +477,13 @@ main(int argc, char *argv[]) char *provider_args = NULL; int transition = 1; - int one_shot = 0; + program_mode_t mode = PROGRAM_MODE_CONTINUAL; int verbose = 0; char *s; /* Parse arguments. */ int opt; - while ((opt = getopt(argc, argv, "g:hl:m:ort:v")) != -1) { + while ((opt = getopt(argc, argv, "g:hl:m:ort:vx")) != -1) { switch (opt) { case 'g': s = strchr(optarg, ':'); @@ -590,7 +605,7 @@ main(int argc, char *argv[]) } break; case 'o': - one_shot = 1; + mode = PROGRAM_MODE_ONE_SHOT; break; case 'r': transition = 0; @@ -611,6 +626,9 @@ main(int argc, char *argv[]) case 'v': verbose = 1; break; + case 'x': + mode = PROGRAM_MODE_RESET; + break; case '?': fputs(_("Try `-h' for more information.\n"), stderr); exit(EXIT_FAILURE); @@ -622,66 +640,77 @@ main(int argc, char *argv[]) try all providers until one that works is found. */ location_state_t location_state; - if (provider != NULL) { - /* Use provider specified on command line. */ - r = provider_try_start(provider, &location_state, - provider_args); - if (r < 0) exit(EXIT_FAILURE); - } else { - /* Try all providers, use the first that works. */ - for (int i = 0; location_providers[i].name != NULL; i++) { - const location_provider_t *p = &location_providers[i]; - r = provider_try_start(p, &location_state, NULL); - if (r < 0) { - fputs(_("Trying other provider...\n"), stderr); - continue; - } + /* Location is not needed for reset mode. */ + if (mode != PROGRAM_MODE_RESET) { + if (provider != NULL) { + /* Use provider specified on command line. */ + r = provider_try_start(provider, &location_state, + provider_args); + if (r < 0) exit(EXIT_FAILURE); + } else { + /* Try all providers, use the first that works. */ + for (int i = 0; + location_providers[i].name != NULL; i++) { + const location_provider_t *p = + &location_providers[i]; + r = provider_try_start(p, &location_state, + NULL); + if (r < 0) { + fputs(_("Trying other provider...\n"), + stderr); + continue; + } - provider = p; - break; - } + provider = p; + break; + } - /* Failure if no providers were successful at this point. */ - if (provider == NULL) { - fputs(_("No more location providers to try.\n"), - stderr); - exit(EXIT_FAILURE); + /* Failure if no providers were successful at this + point. */ + if (provider == NULL) { + fputs(_("No more location providers" + " to try.\n"), stderr); + exit(EXIT_FAILURE); + } } } float lat = NAN; float lon = NAN; - /* Get current location. */ - r = provider->get_location(&location_state, &lat, &lon); - if (r < 0) { - fputs(_("Unable to get location from provider.\n"), stderr); - exit(EXIT_FAILURE); - } + if (mode != PROGRAM_MODE_RESET) { + /* Get current location. */ + r = provider->get_location(&location_state, &lat, &lon); + if (r < 0) { + fputs(_("Unable to get location from provider.\n"), + stderr); + exit(EXIT_FAILURE); + } - provider->free(&location_state); + provider->free(&location_state); - if (verbose) { - /* TRANSLATORS: Append degree symbols if possible. */ - printf(_("Location: %f, %f\n"), lat, lon); - } + if (verbose) { + /* TRANSLATORS: Append degree symbols if possible. */ + printf(_("Location: %f, %f\n"), lat, lon); + } - /* Latitude */ - if (lat < MIN_LAT || lat > MAX_LAT) { - /* TRANSLATORS: Append degree symbols if possible. */ - fprintf(stderr, - _("Latitude must be between %.1f and %.1f.\n"), - MIN_LAT, MAX_LAT); - exit(EXIT_FAILURE); - } + /* Latitude */ + if (lat < MIN_LAT || lat > MAX_LAT) { + /* TRANSLATORS: Append degree symbols if possible. */ + fprintf(stderr, + _("Latitude must be between %.1f and %.1f.\n"), + MIN_LAT, MAX_LAT); + exit(EXIT_FAILURE); + } - /* Longitude */ - if (lon < MIN_LON || lon > MAX_LON) { - /* TRANSLATORS: Append degree symbols if possible. */ - fprintf(stderr, - _("Longitude must be between %.1f and %.1f.\n"), - MIN_LON, MAX_LON); - exit(EXIT_FAILURE); + /* Longitude */ + if (lon < MIN_LON || lon > MAX_LON) { + /* TRANSLATORS: Append degree symbols if possible. */ + fprintf(stderr, + _("Longitude must be between" + " %.1f and %.1f.\n"), MIN_LON, MAX_LON); + exit(EXIT_FAILURE); + } } /* Color temperature at daytime */ @@ -744,7 +773,9 @@ main(int argc, char *argv[]) } } - if (one_shot) { + switch (mode) { + case PROGRAM_MODE_ONE_SHOT: + { /* Current angular elevation of the sun */ double now; r = systemtime_get_time(&now); @@ -774,7 +805,21 @@ main(int argc, char *argv[]) method->free(&state); exit(EXIT_FAILURE); } - } else { + } + break; + case PROGRAM_MODE_RESET: + { + /* Reset screen */ + r = method->set_temperature(&state, NEUTRAL_TEMP, gamma); + if (r < 0) { + fputs(_("Temperature adjustment failed.\n"), stderr); + method->free(&state); + exit(EXIT_FAILURE); + } + } + break; + case PROGRAM_MODE_CONTINUAL: + { /* Transition state */ double short_trans_end = 0; int short_trans = 0; @@ -951,6 +996,8 @@ main(int argc, char *argv[]) /* Restore saved gamma ramps */ method->restore(&state); } + break; + } /* Clean up gamma adjustment state */ method->free(&state); |