aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-03-23 15:43:04 +0100
committerMattias Andrée <m@maandree.se>2025-03-23 15:43:04 +0100
commitc6baeaa6c016e2d4b7156019127454ef46e6e94a (patch)
treeaf4681c94ee40413159e9fdd11562785a34752a1
parentm fix (diff)
downloadredshift-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.h8
-rw-r--r--src/config.c3
-rw-r--r--src/gamma-coopgamma.c7
-rw-r--r--src/gamma-drm.c7
-rw-r--r--src/gamma-dummy.c7
-rw-r--r--src/gamma-quartz.c7
-rw-r--r--src/gamma-randr.c7
-rw-r--r--src/gamma-vidmode.c7
-rw-r--r--src/gamma-w32gdi.c7
-rw-r--r--src/gamma.c2
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..."));