diff options
Diffstat (limited to 'src/linux')
-rw-r--r-- | src/linux/up-backend.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/linux/up-backend.c b/src/linux/up-backend.c index 9f4d033..f588e74 100644 --- a/src/linux/up-backend.c +++ b/src/linux/up-backend.c @@ -371,11 +371,23 @@ up_backend_get_critical_action (UpBackend *backend) { "Hibernate", "CanHibernate" }, { "PowerOff", NULL }, }; - guint i; + guint i = 0; + char *action; g_return_val_if_fail (backend->priv->logind_proxy != NULL, NULL); - for (i = 0; i < G_N_ELEMENTS (actions); i++) { + /* Find the configured action first */ + action = up_config_get_string (backend->priv->config, "CriticalPowerAction"); + if (action != NULL) { + for (i = 0; i < G_N_ELEMENTS (actions); i++) + if (g_str_equal (actions[i].method, action)) + break; + if (i >= G_N_ELEMENTS (actions)) + i = 0; + g_free (action); + } + + for (; i < G_N_ELEMENTS (actions); i++) { GVariant *result; if (actions[i].can_method) { |