[Xfce4-commits] [xfce/xfce4-power-manager] 01/01: Break dpms power loop
noreply at xfce.org
noreply at xfce.org
Fri May 30 19:16:17 CEST 2014
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository xfce/xfce4-power-manager.
commit 35c1387b35e9300291951540ae189827939cc219
Author: Eric Koegel <eric.koegel at gmail.com>
Date: Fri May 30 20:09:54 2014 +0300
Break dpms power loop
dpms depended on power which depended on dpms which depended on
power which ... Break this loop by making power tell dpms directly
when it should be inhibited (presentation mode) and when it goes
on/off battery. This fixes at least one known xfpm startup issue.
---
src/xfpm-dpms.c | 77 +++++++++++++++++++++++++++++-------------------------
src/xfpm-dpms.h | 6 +++++
src/xfpm-power.c | 20 +++++++++-----
3 files changed, 62 insertions(+), 41 deletions(-)
diff --git a/src/xfpm-dpms.c b/src/xfpm-dpms.c
index 41825e1..32d682d 100644
--- a/src/xfpm-dpms.c
+++ b/src/xfpm-dpms.c
@@ -34,7 +34,6 @@
#include "xfpm-common.h"
#include "xfpm-dpms.h"
-#include "xfpm-power.h"
#include "xfpm-xfconf.h"
#include "xfpm-config.h"
#include "xfpm-debug.h"
@@ -49,8 +48,7 @@ static void xfpm_dpms_finalize (GObject *object);
struct XfpmDpmsPrivate
{
XfpmXfconf *conf;
- XfpmPower *power;
-
+
gboolean dpms_capable;
gboolean inhibited;
@@ -156,22 +154,19 @@ xfpm_dpms_refresh (XfpmDpms *dpms)
guint16 off_timeout;
guint16 sleep_timeout;
gboolean sleep_mode;
- gboolean presentation_mode;
-
- presentation_mode = (xfpm_power_is_in_presentation_mode (dpms->priv->power) == TRUE);
-
- if ( dpms->priv->inhibited || presentation_mode)
+
+ if ( dpms->priv->inhibited)
{
- xfpm_dpms_disable (dpms);
- return;
+ xfpm_dpms_disable (dpms);
+ return;
}
xfpm_dpms_get_enabled (dpms, &enabled);
if ( !enabled )
{
- xfpm_dpms_disable (dpms);
- return;
+ xfpm_dpms_disable (dpms);
+ return;
}
xfpm_dpms_enable (dpms);
@@ -205,13 +200,6 @@ xfpm_dpms_settings_changed_cb (GObject *obj, GParamSpec *spec, XfpmDpms *dpms)
}
static void
-xfpm_dpms_on_battery_changed_cb (XfpmPower *power, gboolean on_battery, XfpmDpms *dpms)
-{
- dpms->priv->on_battery = on_battery;
- xfpm_dpms_refresh (dpms);
-}
-
-static void
xfpm_dpms_class_init(XfpmDpmsClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -235,24 +223,16 @@ xfpm_dpms_init(XfpmDpms *dpms)
if ( dpms->priv->dpms_capable )
{
- dpms->priv->power = xfpm_power_get ();
- dpms->priv->conf = xfpm_xfconf_new ();
-
- g_signal_connect (dpms->priv->power, "on-battery-changed",
- G_CALLBACK(xfpm_dpms_on_battery_changed_cb), dpms);
-
- g_signal_connect (dpms->priv->conf, "notify",
- G_CALLBACK (xfpm_dpms_settings_changed_cb), dpms);
-
- g_object_get (G_OBJECT (dpms->priv->power),
- "on-battery", &dpms->priv->on_battery,
- NULL);
-
- xfpm_dpms_refresh (dpms);
+ dpms->priv->conf = xfpm_xfconf_new ();
+
+ g_signal_connect (dpms->priv->conf, "notify",
+ G_CALLBACK (xfpm_dpms_settings_changed_cb), dpms);
+
+ xfpm_dpms_refresh (dpms);
}
else
{
- g_warning ("Monitor is not DPMS capable");
+ g_warning ("Monitor is not DPMS capable");
}
}
@@ -264,7 +244,6 @@ xfpm_dpms_finalize(GObject *object)
dpms = XFPM_DPMS (object);
g_object_unref (dpms->priv->conf);
- g_object_unref (dpms->priv->power);
G_OBJECT_CLASS(xfpm_dpms_parent_class)->finalize(object);
}
@@ -338,4 +317,32 @@ void xfpm_dpms_force_level (XfpmDpms *dpms, CARD16 level)
;
}
+gboolean
+xfpm_dpms_is_inhibited (XfpmDpms *dpms)
+{
+ return dpms->priv->inhibited;
+}
+
+void
+xfpm_dpms_inhibit (XfpmDpms *dpms, gboolean inhibit)
+{
+ if ( dpms->priv->inhibited == inhibit )
+ return;
+
+ dpms->priv->inhibited = inhibit;
+ xfpm_dpms_refresh (dpms);
+ XFPM_DEBUG ("dpms inhibited %s", inhibit ? "TURE" : "FALSE");
+}
+
+void
+xfpm_dpms_set_on_battery (XfpmDpms *dpms, gboolean on_battery)
+{
+ if ( dpms->priv->on_battery == on_battery )
+ return;
+
+ dpms->priv->on_battery = on_battery;
+ xfpm_dpms_refresh (dpms);
+ XFPM_DEBUG ("dpms on battery %s", on_battery ? "TURE" : "FALSE");
+}
+
#endif /* HAVE_DPMS */
diff --git a/src/xfpm-dpms.h b/src/xfpm-dpms.h
index 125cbba..57237ad 100644
--- a/src/xfpm-dpms.h
+++ b/src/xfpm-dpms.h
@@ -66,6 +66,12 @@ void xfpm_dpms_force_level (XfpmDpms *dpms, CARD16 level);
void xfpm_dpms_refresh (XfpmDpms *dpms);
+void xfpm_dpms_inhibit (XfpmDpms *dpms, gboolean inhibit);
+
+gboolean xfpm_dpms_is_inhibited (XfpmDpms *dpms);
+
+void xfpm_dpms_set_on_battery (XfpmDpms *dpms, gboolean on_battery);
+
G_END_DECLS
#endif /* HAVE_DPMS */
diff --git a/src/xfpm-power.c b/src/xfpm-power.c
index 0eb1bf5..d4091ad 100644
--- a/src/xfpm-power.c
+++ b/src/xfpm-power.c
@@ -99,6 +99,9 @@ struct XfpmPowerPrivate
XfpmBatteryCharge overall_state;
gboolean critical_action_done;
+#ifdef HAVE_DPMS
+ XfpmDpms *dpms;
+#endif
gboolean presentation_mode;
EggIdletime *idletime;
@@ -191,6 +194,7 @@ xfpm_power_check_power (XfpmPower *power, gboolean on_battery)
GList *list;
guint len, i;
g_signal_emit (G_OBJECT (power), signals [ON_BATTERY_CHANGED], 0, on_battery);
+ xfpm_dpms_set_on_battery (power->priv->dpms, on_battery);
power->priv->on_battery = on_battery;
list = g_hash_table_get_values (power->priv->hash);
len = g_list_length (list);
@@ -1079,6 +1083,9 @@ xfpm_power_init (XfpmPower *power)
power->priv->dialog = NULL;
power->priv->overall_state = XFPM_BATTERY_CHARGE_OK;
power->priv->critical_action_done = FALSE;
+#ifdef HAVE_DPMS
+ power->priv->dpms = xfpm_dpms_new ();
+#endif
power->priv->presentation_mode = FALSE;
power->priv->suspend = xfpm_suspend_get ();
@@ -1219,6 +1226,10 @@ xfpm_power_finalize (GObject *object)
g_object_unref (power->priv->polkit);
#endif
+#ifdef HAVE_DPMS
+ g_object_unref(power->priv->dpms);
+#endif
+
G_OBJECT_CLASS (xfpm_power_parent_class)->finalize (object);
}
@@ -1280,9 +1291,7 @@ gboolean xfpm_power_has_battery (XfpmPower *power)
static void
xfpm_power_change_presentation_mode (XfpmPower *power, gboolean presentation_mode)
{
- #ifdef HAVE_DPMS
- XfpmDpms *dpms;
-
+#ifdef HAVE_DPMS
/* no change, exit */
if (power->priv->presentation_mode == presentation_mode)
return;
@@ -1293,9 +1302,8 @@ xfpm_power_change_presentation_mode (XfpmPower *power, gboolean presentation_mod
power->priv->presentation_mode = presentation_mode;
- dpms = xfpm_dpms_new ();
- xfpm_dpms_refresh (dpms);
- g_object_unref (dpms);
+ /* presentation mode inhibits dpms */
+ xfpm_dpms_inhibit (power->priv->dpms, presentation_mode);
if (presentation_mode == FALSE)
{
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list