diff options
author | Mattias Andrée <m@maandree.se> | 2025-03-23 15:43:04 +0100 |
---|---|---|
committer | Mattias Andrée <m@maandree.se> | 2025-03-23 15:43:04 +0100 |
commit | c6baeaa6c016e2d4b7156019127454ef46e6e94a (patch) | |
tree | af4681c94ee40413159e9fdd11562785a34752a1 | |
parent | m fix (diff) | |
download | redshift-ng-c6baeaa6c016e2d4b7156019127454ef46e6e94a.tar.gz redshift-ng-c6baeaa6c016e2d4b7156019127454ef46e6e94a.tar.bz2 redshift-ng-c6baeaa6c016e2d4b7156019127454ef46e6e94a.tar.xz |
Exclude unavailable adjustment methods when listing and trying
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r-- | src/common.h | 8 | ||||
-rw-r--r-- | src/config.c | 3 | ||||
-rw-r--r-- | src/gamma-coopgamma.c | 7 | ||||
-rw-r--r-- | src/gamma-drm.c | 7 | ||||
-rw-r--r-- | src/gamma-dummy.c | 7 | ||||
-rw-r--r-- | src/gamma-quartz.c | 7 | ||||
-rw-r--r-- | src/gamma-randr.c | 7 | ||||
-rw-r--r-- | src/gamma-vidmode.c | 7 | ||||
-rw-r--r-- | src/gamma-w32gdi.c | 7 | ||||
-rw-r--r-- | src/gamma.c | 2 |
10 files changed, 61 insertions, 1 deletions
diff --git a/src/common.h b/src/common.h index 578a82d..a14e8d4 100644 --- a/src/common.h +++ b/src/common.h @@ -929,6 +929,13 @@ struct gamma_method { int autoreset; /** + * Check if the adjustment method is available in the used backend + * + * @return 1 if the adjustment method is available, 0 otherwise + */ + int (*is_available)(void); + + /** * Create an initialised state object * * @param state_out Output parameter for the state object @@ -1005,6 +1012,7 @@ struct gamma_method { .name = (NAME),\ .autostart = (AUTOSTART),\ .autoreset = (AUTORESET),\ + .is_available = &PREFIX##_is_available,\ .create = &PREFIX##_create,\ .set_option = &PREFIX##_set_option,\ .print_help = &PREFIX##_print_help,\ diff --git a/src/config.c b/src/config.c index de7207d..dc6e47c 100644 --- a/src/config.c +++ b/src/config.c @@ -567,7 +567,8 @@ print_method_list(void) size_t i; printf(_("Available adjustment methods:\n")); for (i = 0; gamma_methods[i]; i++) - printf(" %s\n", gamma_methods[i]->name); + if (gamma_methods[i]->is_available()) + printf(" %s\n", gamma_methods[i]->name); printf("\n"); printf(_("Specify colon-separated options with `-m METHOD:OPTIONS'.\n")); diff --git a/src/gamma-coopgamma.c b/src/gamma-coopgamma.c index 7a33746..9818a88 100644 --- a/src/gamma-coopgamma.c +++ b/src/gamma-coopgamma.c @@ -123,6 +123,13 @@ print_error(struct gamma_state *state) static int +coopgamma_is_available(void) +{ + return 1; +} + + +static int coopgamma_create(struct gamma_state **state_out) { struct gamma_state *state; diff --git a/src/gamma-drm.c b/src/gamma-drm.c index 798fc84..196b4dd 100644 --- a/src/gamma-drm.c +++ b/src/gamma-drm.c @@ -21,6 +21,13 @@ static int +drm_is_available(void) +{ + return libgamma_is_method_available(LIBGAMMA_METHOD_LINUX_DRM); +} + + +static int drm_create(struct gamma_state **state_out) { return direct_create(state_out, LIBGAMMA_METHOD_LINUX_DRM, "drm"); diff --git a/src/gamma-dummy.c b/src/gamma-dummy.c index 7074cd9..ba9480a 100644 --- a/src/gamma-dummy.c +++ b/src/gamma-dummy.c @@ -21,6 +21,13 @@ static int +dummy_is_available(void) +{ + return 1; +} + + +static int dummy_create(struct gamma_state **state_out) { *state_out = NULL; diff --git a/src/gamma-quartz.c b/src/gamma-quartz.c index 1750c98..38e476d 100644 --- a/src/gamma-quartz.c +++ b/src/gamma-quartz.c @@ -21,6 +21,13 @@ static int +quartz_is_available(void) +{ + return libgamma_is_method_available(LIBGAMMA_METHOD_QUARTZ_CORE_GRAPHICS); +} + + +static int quartz_create(struct gamma_state **state_out) { return direct_create(state_out, LIBGAMMA_METHOD_QUARTZ_CORE_GRAPHICS, "quartz"); diff --git a/src/gamma-randr.c b/src/gamma-randr.c index 5580a4f..f10a95b 100644 --- a/src/gamma-randr.c +++ b/src/gamma-randr.c @@ -21,6 +21,13 @@ static int +randr_is_available(void) +{ + return libgamma_is_method_available(LIBGAMMA_METHOD_X_RANDR); +} + + +static int randr_create(struct gamma_state **state_out) { return direct_create(state_out, LIBGAMMA_METHOD_X_RANDR, "randr"); diff --git a/src/gamma-vidmode.c b/src/gamma-vidmode.c index 505fba0..634fc37 100644 --- a/src/gamma-vidmode.c +++ b/src/gamma-vidmode.c @@ -21,6 +21,13 @@ static int +vidmode_is_available(void) +{ + return libgamma_is_method_available(LIBGAMMA_METHOD_X_VIDMODE); +} + + +static int vidmode_create(struct gamma_state **state_out) { return direct_create(state_out, LIBGAMMA_METHOD_X_VIDMODE, "vidmode"); diff --git a/src/gamma-w32gdi.c b/src/gamma-w32gdi.c index a09f768..4f766a2 100644 --- a/src/gamma-w32gdi.c +++ b/src/gamma-w32gdi.c @@ -21,6 +21,13 @@ static int +w32gdi_is_available(void) +{ + return libgamma_is_method_available(LIBGAMMA_METHOD_W32_GDI); +} + + +static int w32gdi_create(struct gamma_state **state_out) { return direct_create(state_out, LIBGAMMA_METHOD_W32_GDI, "wingdi"); diff --git a/src/gamma.c b/src/gamma.c index 1d21a06..a66f2b2 100644 --- a/src/gamma.c +++ b/src/gamma.c @@ -117,6 +117,8 @@ acquire_adjustment_method(struct settings *settings, GAMMA_STATE **method_state_ for (i = 0; gamma_methods[i]; i++) { if (!gamma_methods[i]->autostart) continue; + if (!gamma_methods[i]->is_available()) + continue; if (try_start(gamma_methods[i], method_state_out, &settings->config, NULL) < 0) { weprintf(_("Trying next method...")); |