Updating branch refs/heads/master
         to abb27c06ad0bf2bc600c0f102cab3f295ef9fb3d (commit)
       from 212ef6d814f54448e85aa1fadef1e055a609de70 (commit)

commit abb27c06ad0bf2bc600c0f102cab3f295ef9fb3d
Author: Ali Abdallah <a...@ali-xfce.org>
Date:   Tue Oct 20 08:21:06 2009 +0000

    Rework the way to switch off the screen on lid event and fix bug #5805

 src/xfpm-dpms.c   |  158 ++++++++++++++--------------------------------------
 src/xfpm-dpms.h   |    8 +++
 src/xfpm-engine.c |   20 +++++--
 3 files changed, 66 insertions(+), 120 deletions(-)

diff --git a/src/xfpm-dpms.c b/src/xfpm-dpms.c
index 2cb3c5e..564fdcc 100644
--- a/src/xfpm-dpms.c
+++ b/src/xfpm-dpms.c
@@ -28,11 +28,6 @@
 #include <string.h>
 
 #include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-
-#include <X11/Xproto.h>
-#include <X11/extensions/dpms.h>
-#include <X11/extensions/dpmsstr.h>
 
 #include <libxfce4util/libxfce4util.h>
 
@@ -43,7 +38,6 @@
 #include "xfpm-adapter.h"
 #include "xfpm-xfconf.h"
 #include "xfpm-screen-saver.h"
-#include "xfpm-button-hal.h"
 #include "xfpm-config.h"
 
 #ifdef HAVE_DPMS
@@ -58,7 +52,6 @@ struct XfpmDpmsPrivate
     XfpmXfconf      *conf;
     XfpmAdapter     *adapter;
     XfpmScreenSaver *saver;
-    XfpmButtonHal   *bt_hal;
     
     gboolean       dpms_capable;
     gboolean       inhibited;
@@ -225,103 +218,6 @@ xfpm_dpms_inhibit_changed_cb (XfpmScreenSaver *saver, 
gboolean inhibited, XfpmDp
     xfpm_dpms_refresh (dpms);
 }
 
-static gboolean
-xfpm_dpms_force_off (gpointer data)
-{ 
-    XfpmDpms *dpms;
-    CARD16 power_level;
-    BOOL state;
-    
-    dpms = XFPM_DPMS (data);
-    
-    TRACE ("Start");
-    
-    if ( G_UNLIKELY (!DPMSInfo (GDK_DISPLAY (), &power_level, &state)) )
-    {
-       g_warning ("Cannot get DPMSInfo");
-       goto out;
-    }
-
-    if ( power_level != DPMSModeOff )
-    {
-       if ( xfpm_is_multihead_connected () )
-           goto out;
-       
-       TRACE ("Checking if we have multiple monitor : no");
-       TRACE ("Forcing DPMSModeOff");
-       if ( !DPMSForceLevel (GDK_DISPLAY (), DPMSModeOff ) )
-       {
-           g_warning ("Cannot set Force DPMSModeOff");
-           goto out;
-       }
-       XSync (GDK_DISPLAY (), FALSE);
-    }
-    
-out:
-    dpms->priv->switch_off_timeout_id = 0;
-    return FALSE;
-}
-
-static gboolean
-xfpm_dpms_force_on (gpointer data)
-{
-    XfpmDpms *dpms;
-    CARD16 power_level;
-    BOOL state;
-    
-    dpms = XFPM_DPMS (data);
-    
-    TRACE ("start");
-    
-    if ( G_UNLIKELY (!DPMSInfo (GDK_DISPLAY (), &power_level, &state)) )
-    {
-       g_warning ("Cannot get DPMSInfo");
-       goto out;
-    }
-
-    if ( power_level != DPMSModeOn )
-    {
-       TRACE ("Forcing DPMSModeOn");
-       if ( !DPMSForceLevel (GDK_DISPLAY (), DPMSModeOn ) )
-       {
-           g_warning ("Cannot set Force DPMSModeOn");
-           goto out;
-       }
-       XSync (GDK_DISPLAY (), FALSE);
-    }
-    
-out:
-    dpms->priv->switch_on_timeout_id = 0;
-    return FALSE;
-}
-
-static void
-xfpm_dpms_lid_event_cb (XfpmButtonHal *bt, gboolean pressed, XfpmDpms *dpms)
-{
-    TRACE ("pressed: %s", xfpm_bool_to_string (pressed));
-
-    if ( dpms->priv->switch_off_timeout_id != 0 )
-    {
-       g_source_remove (dpms->priv->switch_off_timeout_id);
-       dpms->priv->switch_off_timeout_id = 0;
-    }
-    
-    if ( dpms->priv->switch_on_timeout_id != 0 )
-    {
-       g_source_remove (dpms->priv->switch_on_timeout_id );
-       dpms->priv->switch_on_timeout_id = 0;
-    }
-       
-    if ( pressed )
-    {
-       g_timeout_add (100, (GSourceFunc) xfpm_dpms_force_off, dpms);
-    }
-    else
-    {
-       g_timeout_add (100, (GSourceFunc) xfpm_dpms_force_on, dpms);
-    }
-}
-
 static void
 xfpm_dpms_class_init(XfpmDpmsClass *klass)
 {
@@ -349,7 +245,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
        dpms->priv->adapter = xfpm_adapter_new ();
        dpms->priv->saver   = xfpm_screen_saver_new ();
        dpms->priv->conf    = xfpm_xfconf_new  ();
-       dpms->priv->bt_hal  = xfpm_button_hal_get ();
     
        g_signal_connect (dpms->priv->saver, "screen-saver-inhibited",
                          G_CALLBACK(xfpm_dpms_inhibit_changed_cb), dpms);
@@ -360,9 +255,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
        g_signal_connect (dpms->priv->conf, "notify",
                          G_CALLBACK (xfpm_dpms_settings_changed_cb), dpms);
                          
-       g_signal_connect (dpms->priv->bt_hal, "lid-event",
-                         G_CALLBACK (xfpm_dpms_lid_event_cb), dpms);
-                         
        dpms->priv->on_battery = !xfpm_adapter_get_present 
(dpms->priv->adapter);
        xfpm_dpms_refresh (dpms);
     }
@@ -380,11 +272,8 @@ xfpm_dpms_finalize(GObject *object)
     dpms = XFPM_DPMS (object);
     
     g_object_unref (dpms->priv->conf);
-       
     g_object_unref (dpms->priv->adapter);
-       
     g_object_unref ( dpms->priv->saver);
-    g_object_unref ( dpms->priv->bt_hal);
 
     G_OBJECT_CLASS(xfpm_dpms_parent_class)->finalize(object);
 }
@@ -397,14 +286,53 @@ xfpm_dpms_new (void)
     return dpms;
 }
 
-/*
- * Get if the display is DPMS capable. if not the dpms
- * object is freed by xfpm-engine
- */
 gboolean xfpm_dpms_capable (XfpmDpms *dpms)
 {
     g_return_val_if_fail (XFPM_IS_DPMS(dpms), FALSE);
     
     return dpms->priv->dpms_capable;
 }
+
+void xfpm_dpms_force_level (XfpmDpms *dpms, CARD16 level)
+{
+    CARD16 current_level;
+    BOOL current_state;
+    
+    TRACE ("start");
+    
+    if ( !dpms->priv->dpms_capable )
+       goto out;
+    
+    if ( G_UNLIKELY (!DPMSInfo (GDK_DISPLAY (), &current_level, 
&current_state)) )
+    {
+       g_warning ("Cannot get DPMSInfo");
+       goto out;
+    }
+
+    if ( !current_state )
+    {
+       TRACE ("DPMS is disabled");
+       goto out;
+    }
+
+    if ( current_level != level )
+    {
+       TRACE ("Forcing DPMS mode %d", level);
+       
+       if ( !DPMSForceLevel (GDK_DISPLAY (), level ) )
+       {
+           g_warning ("Cannot set Force DPMS level %d", level);
+           goto out;
+       }
+       XSync (GDK_DISPLAY (), FALSE);
+    }
+    else
+    {
+       TRACE ("No need to change DPMS mode, current_level=%d 
requested_level=%d", current_level, level);
+    }
+    
+    out:
+       ;
+}
+
 #endif /* HAVE_DPMS */
diff --git a/src/xfpm-dpms.h b/src/xfpm-dpms.h
index d822faa..9a5b1d4 100644
--- a/src/xfpm-dpms.h
+++ b/src/xfpm-dpms.h
@@ -31,6 +31,11 @@
 
 #ifdef HAVE_DPMS
 
+#include <gdk/gdkx.h>
+#include <X11/Xproto.h>
+#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsstr.h>
+
 G_BEGIN_DECLS
 
 #define XFPM_TYPE_DPMS        (xfpm_dpms_get_type () )
@@ -53,10 +58,13 @@ typedef struct
 } XfpmDpmsClass;
 
 GType           xfpm_dpms_get_type        (void) G_GNUC_CONST;
+
 XfpmDpms       *xfpm_dpms_new             (void);
 
 gboolean        xfpm_dpms_capable         (XfpmDpms *dpms) G_GNUC_PURE;
 
+void           xfpm_dpms_force_level     (XfpmDpms *dpms, CARD16 level);
+
 G_END_DECLS
 
 #endif /* HAVE_DPMS */
diff --git a/src/xfpm-engine.c b/src/xfpm-engine.c
index 5a3a962..ef3b2b2 100644
--- a/src/xfpm-engine.c
+++ b/src/xfpm-engine.c
@@ -236,15 +236,20 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean 
pressed, XfpmEngine *engi
 {
     XfpmLidTriggerAction action;
     
-    if ( pressed )
-    {
-       g_object_get (G_OBJECT (engine->priv->conf),
+    g_object_get (G_OBJECT (engine->priv->conf),
                      engine->priv->on_battery ? LID_SWITCH_ON_BATTERY_CFG : 
LID_SWITCH_ON_AC_CFG, &action,
                      NULL);
-                     
+
+    if ( pressed )
+    {
        XFPM_DEBUG_ENUM ("LID close event", action, 
XFPM_TYPE_LID_TRIGGER_ACTION);
        
-       if ( action == LID_TRIGGER_LOCK_SCREEN )
+       if ( action == LID_TRIGGER_NOTHING )
+       {
+           if ( !xfpm_is_multihead_connected () )
+               xfpm_dpms_force_level (engine->priv->dpms, DPMSModeOff);
+       }
+       else if ( action == LID_TRIGGER_LOCK_SCREEN )
        {
            if ( !xfpm_is_multihead_connected () )
                xfpm_lock_screen ();
@@ -252,6 +257,11 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean 
pressed, XfpmEngine *engi
        else 
            xfpm_engine_shutdown_request (engine, action, FALSE);
     }
+    else
+    {
+       XFPM_DEBUG_ENUM ("LID opened", action, XFPM_TYPE_LID_TRIGGER_ACTION);
+       xfpm_dpms_force_level (engine->priv->dpms, DPMSModeOn);
+    }
 }
 
 static void
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to