[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