[Goodies-commits] r5570 - xfce4-power-manager/trunk/src

Ali Abdallah aliov at xfce.org
Sat Oct 11 20:57:25 CEST 2008


Author: aliov
Date: 2008-10-11 18:57:25 +0000 (Sat, 11 Oct 2008)
New Revision: 5570

Modified:
   xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-button.c
   xfce4-power-manager/trunk/src/xfpm-hal.c
   xfce4-power-manager/trunk/src/xfpm-hal.h
Log:
some optimization

Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.c	2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.c	2008-10-11 18:57:25 UTC (rev 5570)
@@ -66,11 +66,23 @@
 static gboolean xfpm_ac_adapter_size_changed_cb(GtkStatusIcon *adapter,
                                                 gint size,
                                                 gpointer data);
-static void xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter,
-                                        SystemFormFactor factor);
-static void xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,const gchar *udi,
-                                                const gchar *key,gboolean is_removed,
-                                                gboolean is_added,XfpmAcAdapter *adapter);
+static void xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter);
+                                        
+static void xfpm_ac_adapter_device_added_cb(XfpmHal *hal,
+                                            const gchar *udi,
+                                            XfpmAcAdapter *adapter);
+
+static void xfpm_ac_adapter_device_removed_cb(XfpmHal *hal,
+                                              const gchar *udi,
+                                              XfpmAcAdapter *adapter);
+                                              
+static void xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,
+                                                const gchar *udi,
+                                                const gchar *key,
+                                                gboolean is_removed,
+                                                gboolean is_added,
+                                                XfpmAcAdapter *adapter);
+                                                
 static void xfpm_ac_adapter_popup_menu(GtkStatusIcon *tray_icon,
                                        guint button,
                                        guint activate_time,
@@ -79,6 +91,11 @@
 struct XfpmAcAdapterPrivate
 {
     XfpmHal *hal;
+    SystemFormFactor factor;
+    
+    GQuark adapter_udi;
+    
+    gboolean adapter_found;
     gboolean present;
     gboolean can_suspend;
     gboolean can_hibernate;
@@ -121,6 +138,7 @@
     priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
     
     priv->hal = xfpm_hal_new();
+    priv->adapter_udi = 0 ;
     
     GError *error = NULL;
     
@@ -180,17 +198,47 @@
 }
 
 static void
-xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter,SystemFormFactor factor)
+_ac_adapter_not_found(XfpmAcAdapter *adapter)
 {
     XfpmAcAdapterPrivate *priv;
     priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
     
-    if ( factor != SYSTEM_LAPTOP )
+    /* then the ac kernel module is not loaded */
+    if ( priv->factor == SYSTEM_LAPTOP )
     {
-        priv->present = TRUE;
-        goto l1;
+        priv->present = TRUE; /* assuming present */
+        priv->adapter_found = FALSE;
+        gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
+                                   _("Unkown adapter status, the power manager will not work properly"));
+#ifdef HAVE_LIBNOTIFY
+        xfpm_notify_simple(_("Xfce power manager"),
+                           _("Unkown adapter status, the power manager will not work properly,"\
+                            "make sure ac adapter driver is loaded into the kernel"),
+                           10000,
+                           NOTIFY_URGENCY_CRITICAL,
+                           NULL,
+                           "gpm-ac-adapter",
+                           2);
+        
+#endif                                       
+    }     
+    else  
+    {
+        priv->present = TRUE; /* just for eveything to function correctly */
+        priv->adapter_found = FALSE;
     }
+    g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
     
+}
+
+static void
+xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter)
+{
+    XfpmAcAdapterPrivate *priv;
+    priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+    
+    priv->adapter_udi = 0 ;
+    
     gchar **udi = NULL;
     gint num;
     GError *error = NULL;
@@ -202,13 +250,21 @@
         g_error_free(error);
         return;
     }
-    if ( !udi ) 
+    
+    if ( num == 0 )
     {
-        /* I think we should have something like g_strange()! */
-        XFPM_DEBUG("No AC Adapter found, assuming running on Solar power\n");
         priv->present = TRUE;
+        XFPM_DEBUG("No ac adapter device found\n");
+        _ac_adapter_not_found(adapter);
         return;
     }
+    
+    if ( !udi ) 
+    {
+        _ac_adapter_not_found(adapter);
+        return;
+    }
+    
     int i;
     for ( i = 0 ; udi[i]; i++)
     {
@@ -225,19 +281,67 @@
                 return;
             }                                                 
             XFPM_DEBUG("Getting udi %s\n",udi[i]);
+            priv->adapter_udi = g_quark_from_string(udi[i]);
+            priv->adapter_found = TRUE;
             break;
         }
     }
+    
+    gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
+                priv->present ? _("Adapter is online") : _("Adapter is offline"));   
+    g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
     libhal_free_string_array(udi);
-    g_signal_connect(priv->hal,"xfpm-device-property-changed",
-                     G_CALLBACK(xfpm_ac_adapter_property_changed_cb),adapter);
-    l1:
+}
+
+static void
+_get_adapter_status(XfpmAcAdapter *adapter,const gchar *udi)
+{
+    XfpmAcAdapterPrivate *priv;
+    priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+    GError *error = NULL;
+    gboolean ac_adapter = 
+    xfpm_hal_get_bool_info(priv->hal,udi,"ac_adapter.present",&error);
+    if ( error )                                        
+    {
+        XFPM_DEBUG("%s\n",error->message);
+        g_error_free(error);
+        return;
+    }       
+    XFPM_DEBUG("Ac adapter changed %d\n",ac_adapter);
+    priv->present = ac_adapter;
     gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
-                priv->present ? _("Adapter is online") : _("Adapter is offline"));    
+                priv->present ? _("Adapter is online") : _("Adapter is offline"));   
     g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
 }
 
 static void
+xfpm_ac_adapter_device_added_cb(XfpmHal *hal,const gchar *udi,XfpmAcAdapter *adapter)
+{
+    if ( xfpm_hal_device_have_key(hal,udi,"ac_adapter.present"))
+    {
+        XfpmAcAdapterPrivate *priv;
+        priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+        priv->adapter_found = TRUE;
+        priv->adapter_udi = g_quark_from_string(udi);
+    
+        _get_adapter_status(adapter,udi);
+    }
+}
+
+static void
+xfpm_ac_adapter_device_removed_cb(XfpmHal *hal,const gchar *udi,XfpmAcAdapter *adapter)
+{
+    XfpmAcAdapterPrivate *priv;
+    priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+    
+    if ( priv->adapter_udi == g_quark_from_string(udi) ) 
+    {
+        XFPM_DEBUG("Adapter removed\n");
+        xfpm_ac_adapter_get_adapter(adapter);
+    }
+}
+
+static void
 xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,const gchar *udi,
                                     const gchar *key,gboolean is_removed,
                                     gboolean is_added,XfpmAcAdapter *adapter)
@@ -246,24 +350,8 @@
     {
         XfpmAcAdapterPrivate *priv;
         priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+        _get_adapter_status(adapter,udi);
         
-        GError *error = NULL;
-        gboolean ac_adapter = 
-        xfpm_hal_get_bool_info(hal,udi,"ac_adapter.present",&error);
-        if ( error )                                        
-        {
-            XFPM_DEBUG("%s\n",error->message);
-            g_error_free(error);
-            return;
-        }       
-        if ( priv->present != ac_adapter )
-        {
-            XFPM_DEBUG("Ac adapter changed %d\n",ac_adapter);
-            priv->present = ac_adapter;
-            gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
-                        priv->present ? _("Adapter is online") : _("Adapter is offline"));   
-            g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
-        }
     }
 }
 
@@ -424,5 +512,19 @@
 void
 xfpm_ac_adapter_monitor(XfpmAcAdapter *adapter,SystemFormFactor factor)
 {
-    xfpm_ac_adapter_get_adapter(adapter,factor);
-}    
+    XfpmAcAdapterPrivate *priv;
+    priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+    priv->factor = factor;
+    xfpm_ac_adapter_get_adapter(adapter);
+    
+    if ( factor == SYSTEM_LAPTOP )
+    {
+        xfpm_hal_connect_to_signals(priv->hal,TRUE,TRUE,TRUE,FALSE);
+        g_signal_connect(priv->hal,"xfpm-device-added",
+                    G_CALLBACK(xfpm_ac_adapter_device_added_cb),adapter);
+        g_signal_connect(priv->hal,"xfpm-device-removed",
+                    G_CALLBACK(xfpm_ac_adapter_device_removed_cb),adapter); 
+        g_signal_connect(priv->hal,"xfpm-device-property-changed",
+                     G_CALLBACK(xfpm_ac_adapter_property_changed_cb),adapter);            
+    }
+}   

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-11 18:57:25 UTC (rev 5570)
@@ -250,6 +250,7 @@
         g_error_free(error);
     }            
     
+    xfpm_hal_connect_to_signals(priv->hal,TRUE,TRUE,TRUE,FALSE);
     
     g_signal_connect(G_OBJECT(priv->hal),"xfpm-device-added",
                      G_CALLBACK(xfpm_battery_handle_device_added),

Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c	2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-button.c	2008-10-11 18:57:25 UTC (rev 5570)
@@ -175,6 +175,8 @@
     xfpm_button_load_config(bt);
     xfpm_button_get_switches(bt);
     
+    xfpm_hal_connect_to_signals(priv->hal,FALSE,FALSE,FALSE,TRUE);
+    
     priv->handler_id =
     g_signal_connect(priv->hal,"xfpm-device-condition",
                     G_CALLBACK(xfpm_button_handle_device_condition_cb),bt);

Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-11 18:57:25 UTC (rev 5570)
@@ -51,7 +51,7 @@
                                                  const gchar *key,
                                                  dbus_bool_t is_removed,
                                                  dbus_bool_t is_added);
-                                                 
+/*                                                 
 static void xfpm_hal_device_new_capability        (LibHalContext *ctx,
                                                  const gchar *udi,
                                                  const gchar *capability);
@@ -59,7 +59,7 @@
 static void xfpm_hal_device_lost_capability       (LibHalContext *ctx,
                                                  const gchar *udi,
                                                  const gchar *capability);                                                 
-
+*/
 static void xfpm_hal_device_condition             (LibHalContext *ctx,
                                                  const gchar *udi,
                                                  const gchar *condition_name,
@@ -231,6 +231,7 @@
     
 }
 
+
 static void
 xfpm_hal_device_property_modified(LibHalContext *ctx,const gchar *udi,
                                  const gchar *key,dbus_bool_t is_removed,
@@ -241,7 +242,8 @@
     g_signal_emit(G_OBJECT(xfpm_hal),signals[XFPM_DEVICE_PROPERTY_CHANGED],0,udi,key,is_removed,is_added);
     
 }
-    
+
+/*    
 static void
 xfpm_hal_device_new_capability(LibHalContext *ctx,const gchar *udi,const gchar *capability) {
     
@@ -259,7 +261,7 @@
      g_signal_emit(G_OBJECT(xfpm_hal),signals[XFPM_DEVICE_LOST_CAPABILITY],0,udi,capability);
     
 }    
-
+*/
 static void xfpm_hal_device_condition            (LibHalContext *ctx,
                                                  const gchar *udi,
                                                  const gchar *condition_name,
@@ -298,23 +300,52 @@
         return FALSE;
     }    
     
-    libhal_ctx_set_device_added(priv->ctx,xfpm_hal_device_added);
-    libhal_ctx_set_device_removed(priv->ctx,xfpm_hal_device_removed);
-    libhal_ctx_set_device_property_modified(priv->ctx,xfpm_hal_device_property_modified);
-    libhal_ctx_set_device_new_capability(priv->ctx,xfpm_hal_device_new_capability);
-    libhal_ctx_set_device_lost_capability(priv->ctx,xfpm_hal_device_lost_capability);
-    libhal_ctx_set_device_condition(priv->ctx,xfpm_hal_device_condition);
+    libhal_ctx_set_user_data(priv->ctx,xfpm_hal);    
+    return TRUE;
+}    
+
+gboolean xfpm_hal_connect_to_signals(XfpmHal *hal,
+                                    gboolean device_removed,
+                                    gboolean device_added,
+                                    gboolean device_property_changed,
+                                    gboolean device_condition)
+{
+    g_return_val_if_fail(XFPM_IS_HAL(hal),FALSE);
+    XfpmHalPrivate *priv;
+    DBusError error;
+    priv = XFPM_HAL_GET_PRIVATE(hal);
     
+    dbus_error_init(&error);
     
-    libhal_device_property_watch_all(priv->ctx,&error);
+    if (device_added ) 
+    {
+        libhal_ctx_set_device_added(priv->ctx,xfpm_hal_device_added);
+    }
+    if ( device_removed )
+    {
+         libhal_ctx_set_device_removed(priv->ctx,xfpm_hal_device_removed);
+    }
+    if ( device_property_changed )
+    {
+        libhal_ctx_set_device_property_modified(priv->ctx,xfpm_hal_device_property_modified);
+    }
+    if ( device_condition )
+    {
+        libhal_ctx_set_device_condition(priv->ctx,xfpm_hal_device_condition);
+    }
+
+    //libhal_ctx_set_device_new_capability(priv->ctx,xfpm_hal_device_new_capability);
+    //libhal_ctx_set_device_lost_capability(priv->ctx,xfpm_hal_device_lost_capability);
+    
+    libhal_device_property_watch_all(priv->ctx,&error);        
+
     if ( dbus_error_is_set(&error) ) {
         g_printerr("Unable to watch device using HAL %s\n",error.message);
         return FALSE;
     }
     
-    libhal_ctx_set_user_data(priv->ctx,xfpm_hal);    
     return TRUE;
-}    
+}
 
 gchar **
 xfpm_hal_get_device_udi_by_capability(XfpmHal *xfpm_hal,const gchar *capability,

Modified: xfce4-power-manager/trunk/src/xfpm-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-11 18:57:25 UTC (rev 5570)
@@ -86,6 +86,12 @@
 
 GType                xfpm_hal_get_type                     (void);
 XfpmHal             *xfpm_hal_new                          (void);
+gboolean             xfpm_hal_connect_to_signals           (XfpmHal *hal,
+                                                            gboolean device_removed,
+                                                            gboolean device_added,
+                                                            gboolean device_property_changed,
+                                                            gboolean device_condition);
+                                                            
 gchar              **xfpm_hal_get_device_udi_by_capability (XfpmHal *xfpm_hal,
                                                              const gchar *capability,
                                                              gint *num,




More information about the Goodies-commits mailing list