[Goodies-commits] r5540 - in xfce4-power-manager/trunk: . po src

Ali Abdallah aliov at xfce.org
Thu Oct 9 10:04:39 CEST 2008


Author: aliov
Date: 2008-10-09 08:04:39 +0000 (Thu, 09 Oct 2008)
New Revision: 5540

Added:
   xfce4-power-manager/trunk/src/xfpm-button.c
   xfce4-power-manager/trunk/src/xfpm-button.h
Modified:
   xfce4-power-manager/trunk/configure.ac.in
   xfce4-power-manager/trunk/po/Makefile
   xfce4-power-manager/trunk/src/Makefile.am
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-common.h
   xfce4-power-manager/trunk/src/xfpm-cpu.c
   xfce4-power-manager/trunk/src/xfpm-cpu.h
   xfce4-power-manager/trunk/src/xfpm-dpms.c
   xfce4-power-manager/trunk/src/xfpm-dpms.h
   xfce4-power-manager/trunk/src/xfpm-driver.c
   xfce4-power-manager/trunk/src/xfpm-enums.h
   xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
   xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h
   xfce4-power-manager/trunk/src/xfpm-main.c
   xfce4-power-manager/trunk/src/xfpm-settings.c
   xfce4-power-manager/trunk/src/xfpm-settings.h
Log:
Improvements, cpu freq,laptop switch buttons

Modified: xfce4-power-manager/trunk/configure.ac.in
===================================================================
--- xfce4-power-manager/trunk/configure.ac.in	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/configure.ac.in	2008-10-09 08:04:39 UTC (rev 5540)
@@ -90,9 +90,9 @@
 echo "----------------------------------------"
 echo 	 "   Build Configuration"
 echo 
-echo "   Debug        $enable_debug   "
-echo "   DPMS         $have_dpms      "
-echo "   LibNotiy     $LIBNOTIFY_FOUND"
+echo "   Debug  support          $enable_debug   "
+echo "   DPMS   support          $have_dpms      "
+echo "   Notification support    $LIBNOTIFY_FOUND"
 echo
 echo "----------------------------------------"  
 echo

Modified: xfce4-power-manager/trunk/po/Makefile
===================================================================
--- xfce4-power-manager/trunk/po/Makefile	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/po/Makefile	2008-10-09 08:04:39 UTC (rev 5540)
@@ -67,7 +67,3 @@
 EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS
 
 POTFILES = \
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/Makefile.am	2008-10-09 08:04:39 UTC (rev 5540)
@@ -41,8 +41,8 @@
 				xfpm-cpu.h			\
 				xfpm-lcd-brightness.c		\
 				xfpm-lcd-brightness.h		\
-				xfpm-lid.c			\
-				xfpm-lid.h			\
+				xfpm-button.c			\
+				xfpm-button.h			\
 				xfpm-dbus-messages.c		\
 				xfpm-dbus-messages.h		\
 				xfpm-battery.c			\

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -385,7 +385,7 @@
     else if ( batt->show_tray == CHARGING_OR_DISCHARGING && g_hash_table_size(priv->batteries) == 0 )
     {
         XFPM_DEBUG("batt->show_tray == CHARGING_OR_DISCHARGING && g_hash_table_size(priv->batteries) == 0 \n");
-        g_signal_emit(G_OBJECT(batt),signals[XFPM_SHOW_ADAPTER_ICON],0,TRUE);
+        g_signal_emit(G_OBJECT(batt),signals[XFPM_SHOW_ADAPTER_ICON],0,FALSE);
         
     }
     else if ( batt->show_tray == ALWAYS && g_hash_table_size(priv->batteries) != 0 )

Added: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c	                        (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-button.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -0,0 +1,270 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*-
+ *
+ * * Copyright (C) 2008 Ali <ali.slackware at gmail.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <xfconf/xfconf.h>
+
+#include "xfpm-button.h"
+#include "xfpm-hal.h"
+#include "xfpm-debug.h"
+#include "xfpm-common.h"
+#include "xfpm-enum-types.h"
+
+#define XFPM_BUTTON_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE(o,XFPM_TYPE_BUTTON,XfpmButtonPrivate))
+
+static void xfpm_button_init(XfpmButton *bt);
+static void xfpm_button_class_init(XfpmButtonClass *klass);
+static void xfpm_button_finalize(GObject *object);
+
+static void xfpm_button_set_property (GObject *object,
+                                           guint prop_id,
+                                           const GValue *value,
+                                           GParamSpec *pspec);
+static void xfpm_button_get_property (GObject *object,
+                                           guint prop_id,
+                                           GValue *value,
+                                           GParamSpec *pspec);
+                                           
+static void xfpm_button_handle_device_condition_cb(XfpmHal *hal,
+                                                   const gchar *udi,
+                                                   const gchar *condition_name,
+                                                   const gchar *condition_detail,
+                                                   XfpmButton *bt);
+
+static void xfpm_button_load_config(XfpmButton *bt);
+
+struct XfpmButtonPrivate
+{
+    XfpmHal *hal;
+
+};
+
+G_DEFINE_TYPE(XfpmButton,xfpm_button,G_TYPE_OBJECT)
+
+enum
+{
+    PROP_0,
+    PROP_LID_ACTION,
+    PROP_SLEEP_ACTION,
+    PROP_POWER_ACTION
+};
+
+static void xfpm_button_class_init(XfpmButtonClass *klass)
+{
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+    gobject_class->finalize = xfpm_button_finalize;
+    
+    gobject_class->set_property = xfpm_button_set_property;
+    gobject_class->get_property = xfpm_button_get_property;
+
+    g_object_class_install_property(gobject_class,
+                                    PROP_LID_ACTION,
+                                    g_param_spec_enum("lid-switch-action",
+                                                      "lid switch action",
+                                                      "lid switch action",
+                                                      XFPM_TYPE_BUTTON_ACTION,
+                                                      BUTTON_DO_NOTHING,
+                                                      G_PARAM_READWRITE));    
+    
+    g_object_class_install_property(gobject_class,
+                                    PROP_SLEEP_ACTION,
+                                    g_param_spec_enum("sleep-switch-action",
+                                                      "sleep switch action",
+                                                      "sleep switch action",
+                                                      XFPM_TYPE_BUTTON_ACTION,
+                                                      BUTTON_DO_NOTHING,
+                                                      G_PARAM_READWRITE));    
+    g_object_class_install_property(gobject_class,
+                                    PROP_LID_ACTION,
+                                    g_param_spec_enum("power-switch-action",
+                                                      "power switch action",
+                                                      "power switch action",
+                                                      XFPM_TYPE_BUTTON_ACTION,
+                                                      BUTTON_DO_NOTHING,
+                                                      G_PARAM_READWRITE));                                                      
+    
+    g_type_class_add_private(klass,sizeof(XfpmButtonPrivate));
+
+}
+
+static void xfpm_button_init(XfpmButton *bt)
+{
+    XfpmButtonPrivate *priv;
+    priv = XFPM_BUTTON_GET_PRIVATE(bt);
+    
+    priv->hal = xfpm_hal_new();
+    
+    xfpm_button_load_config(bt);
+    
+    g_signal_connect(priv->hal,"xfpm-device-condition",
+                    G_CALLBACK(xfpm_button_handle_device_condition_cb),bt);
+    
+}
+
+
+static void xfpm_button_set_property (GObject *object,
+                                      guint prop_id,
+                                      const GValue *value,
+                                      GParamSpec *pspec)
+{
+#ifdef DEBUG
+    gchar *content;
+    content = g_strdup_value_contents(value);
+    XFPM_DEBUG("param:%s value contents:%s\n",pspec->name,content);
+    g_free(content);
+#endif      
+    XfpmButton *bt;
+    bt = XFPM_BUTTON(object);
+    
+    switch (prop_id)
+    {
+    case PROP_LID_ACTION:
+        bt->lid_action = g_value_get_enum(value);
+        break;   
+    case PROP_SLEEP_ACTION:
+        bt->sleep_action = g_value_get_enum(value);
+        break;   
+     case PROP_POWER_ACTION:
+        bt->power_action = g_value_get_enum(value);
+        break;           
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+        break;
+    }
+}
+                                           
+static void xfpm_button_get_property (GObject *object,
+                                      guint prop_id,
+                                      GValue *value,
+                                      GParamSpec *pspec)
+{
+    XfpmButton *bt;
+    bt = XFPM_BUTTON(object);
+        
+    switch (prop_id)
+    {
+    case  PROP_LID_ACTION:
+        g_value_set_enum(value,bt->lid_action);
+        break;   
+     case PROP_SLEEP_ACTION:
+        g_value_set_enum(value,bt->sleep_action);
+        break;   
+     case PROP_POWER_ACTION:
+        g_value_set_enum(value,bt->power_action);
+        break;       
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+        break;
+    }                         
+    
+#ifdef DEBUG
+    gchar *content;
+    content = g_strdup_value_contents(value);
+    XFPM_DEBUG("param:%s value contents:%s\n",pspec->name,content);
+    g_free(content);
+#endif  
+    
+}
+
+static void xfpm_button_finalize(GObject *object)
+{
+    XfpmButton *bt;
+    bt = XFPM_BUTTON(object);
+    
+    bt->priv = XFPM_BUTTON_GET_PRIVATE(bt);
+    
+    if ( bt->priv->hal ) 
+    {
+        g_object_unref(bt->priv->hal);
+    }
+    
+    G_OBJECT_CLASS(xfpm_button_parent_class)->finalize(object);
+}
+
+static void
+xfpm_button_handle_device_condition_cb(XfpmHal *hal,
+                                       const gchar *udi,
+                                       const gchar *condition_name,
+                                       const gchar *condition_detail,
+                                       XfpmButton *bt)
+{
+    XFPM_DEBUG("condition name=%s detail=%s\n",condition_name,condition_detail);
+    
+}                                       
+
+
+static void 
+xfpm_button_load_config(XfpmButton *bt)
+{
+    XFPM_DEBUG("Loading configuration\n");
+    
+    GError *g_error = NULL;
+    if ( !xfconf_init(&g_error) )
+    {
+        g_critical("xfconf init failed: %s\n",g_error->message);
+        XFPM_DEBUG("Using default values\n");
+        g_error_free(g_error);
+        bt->lid_action = BUTTON_DO_NOTHING;
+        bt->sleep_action = BUTTON_DO_NOTHING;
+        bt->power_action = BUTTON_DO_NOTHING;
+        return;
+    }
+    XfconfChannel *channel;
+    
+    channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
+
+    bt->lid_action   = xfconf_channel_get_bool(channel,LID_SWITCH_CFG,BUTTON_DO_NOTHING);
+    bt->sleep_action   = xfconf_channel_get_bool(channel,SLEEP_SWITCH_CFG,BUTTON_DO_NOTHING);
+    bt->power_action = xfconf_channel_get_bool(channel,POWER_SWITCH_CFG,BUTTON_DO_NOTHING);
+    
+    g_object_unref(channel);
+    xfconf_shutdown();    
+}
+
+XfpmButton *
+xfpm_button_new(void)
+{
+    XfpmButton *bt;
+    bt = g_object_new(XFPM_TYPE_BUTTON,NULL);
+    return bt;
+}

Added: xfce4-power-manager/trunk/src/xfpm-button.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.h	                        (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-button.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -0,0 +1,58 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*-
+ *
+ * * Copyright (C) 2008 Ali <ali.slackware at gmail.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFPM_BUTTON_H
+#define __XFPM_BUTTON_H
+
+#include <glib-object.h>
+
+#include "xfpm-enums.h"
+
+G_BEGIN_DECLS
+
+#define XFPM_TYPE_BUTTON  (xfpm_button_get_type())
+#define XFPM_BUTTON(o)    (G_TYPE_CHECK_INSTANCE_CAST(o,XFPM_TYPE_BUTTON,XfpmButton)) 
+
+typedef struct XfpmButtonPrivate XfpmButtonPrivate;
+
+typedef struct
+{
+    GObject parent;
+    XfpmButtonPrivate *priv;
+    
+    XfpmButtonAction lid_action;
+    XfpmButtonAction power_action;
+    XfpmButtonAction sleep_action;
+    
+} XfpmButton;
+
+
+typedef struct
+{
+    GObjectClass parent_class;
+} XfpmButtonClass;
+
+GType          xfpm_button_get_type(void) G_GNUC_CONST;
+XfpmButton *xfpm_button_new(void);
+
+G_END_DECLS
+
+#endif

Modified: xfce4-power-manager/trunk/src/xfpm-common.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-common.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-common.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -39,6 +39,11 @@
 #define ON_AC_CPU_GOV_CFG           "/xfce4-power-manager/on-ac-cpu-gov"
 #define ON_BATT_CPU_GOV_CFG         "/xfce4-power-manager/on-batt-cpu-gov"
 
+#define LCD_BRIGHTNESS_CFG          "/xfce4-power-manager/lcd-brightness"
+#define LID_SWITCH_CFG              "/xfce4-power-manager/lid-switch-action"
+#define SLEEP_SWITCH_CFG              "/xfce4-power-manager/sleep-switch-action"
+#define POWER_SWITCH_CFG              "/xfce4-power-manager/power-switch-action"
+
 #ifdef HAVE_LIBNOTIFY
 #define BATT_STATE_NOTIFICATION_CFG "/xfce4-power-manager/battery-state-notification"  /* default TRUE */
 #define GENERAL_NOTIFICATION_CFG    "/xfce4-power-manager/general-notification"        /* default TRUE not yet used */

Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -49,6 +49,8 @@
 #include "xfpm-common.h"
 #include "xfpm-enum-types.h"
 
+#define XFPM_CPU_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE(o,XFPM_TYPE_CPU,XfpmCpuPrivate))
+
 static void xfpm_cpu_init(XfpmCpu *cpu);
 static void xfpm_cpu_class_init(XfpmCpuClass *klass);
 static void xfpm_cpu_finalize(GObject *object);
@@ -65,14 +67,20 @@
 
 static void xfpm_cpu_load_config(XfpmCpu *cpu);
                                    
+static void xfpm_cpu_set_governor(XfpmCpu *cpu,
+                                  gboolean ac_adapter_present);
+
 static void xfpm_cpu_notify_cb (GObject *object,
                                 GParamSpec *arg1,
-                                gpointer data);  
-
-static gboolean xfpm_cpu_set_freq(XfpmCpu *cpu);
+                                gpointer data);
                                 
 G_DEFINE_TYPE(XfpmCpu,xfpm_cpu,G_TYPE_OBJECT)
 
+struct XfpmCpuPrivate
+{
+    XfpmHal *hal;
+};
+
 enum
 {
     PROP_0,
@@ -125,16 +133,21 @@
                                                       XFPM_TYPE_CPU_GOVERNOR,
                                                       POWERSAVE,
                                                       G_PARAM_READWRITE));
-    
+    g_type_class_add_private(klass,sizeof(XfpmCpuPrivate));
 }
 
 static void
 xfpm_cpu_init(XfpmCpu *cpu)
 {
+    XfpmCpuPrivate *priv;
+    priv = XFPM_CPU_GET_PRIVATE(cpu);
+    
+    priv->hal = xfpm_hal_new();
+    
     xfpm_cpu_load_config(cpu);
     
     g_signal_connect(G_OBJECT(cpu),"notify",G_CALLBACK(xfpm_cpu_notify_cb),NULL);
-    g_timeout_add_seconds(CPU_FREQ_TIMEOUT,(GSourceFunc)xfpm_cpu_set_freq,cpu);
+    
 }
 
 static void xfpm_cpu_set_property(GObject *object,
@@ -209,8 +222,14 @@
 static void
 xfpm_cpu_finalize(GObject *object)
 {
-    //XfpmCpu *cpu = XFPM_CPU(object);
+    XfpmCpu *cpu = XFPM_CPU(object);
+    cpu->priv = XFPM_CPU_GET_PRIVATE(cpu);
     
+    if ( cpu->priv->hal )
+    {
+        g_object_unref(cpu->priv->hal);
+    }
+    
     G_OBJECT_CLASS(xfpm_cpu_parent_class)->finalize(object);
 }
 
@@ -242,60 +261,84 @@
     xfconf_shutdown();    
 }
 
-static void 
-xfpm_cpu_notify_cb (GObject *object,
-                    GParamSpec *arg1,
-                    gpointer data)
-{                                
-    
-    
-    
-}
 
-static gboolean 
-xfpm_cpu_set_freq(XfpmCpu *cpu)
+static
+gchar *_get_governor_from_enum(XfpmCpuGovernor governor)
 {
-   /* 
-    XfpmDriverPrivate *priv;
-    priv = XFPM_DRIVER_GET_PRIVATE(driver);
-    
-    if ( !driver->cpu_freq_scaling_enabled )
+    if ( governor == POWERSAVE )
     {
-        XFPM_DEBUG("cpu_freq_scaling_enabled disabled\n");
+        return "powersave";
     }
+    else if ( governor == ONDEMAND )
+    {
+        return "ondemand";
+    }
+    else if ( governor == PERFORMANCE )
+    {
+        return "performance";
+    }
+    else if ( governor == USERSPACE )
+    {
+        return "userspace";
+    }
+    else if ( governor == CONSERVATIVE )
+    {
+        return "conservative";
+    }
+    return NULL;
+}
+
+static void
+xfpm_cpu_set_governor(XfpmCpu *cpu,gboolean ac_adapter_present)
+{
+    XfpmCpuPrivate *priv;
+    priv = XFPM_CPU_GET_PRIVATE(cpu);
+
+    gchar *current_governor;
+    current_governor = xfpm_hal_get_current_cpu_governor(priv->hal);
     
-    char *current_governor;
-    char *config_gov = NULL;
+    if ( !current_governor ) return;
     
-    current_governor = xfpm_hal_get_current_cpu_governor(XFPM_HAL(driver));
-    if ( !current_governor ) return;
+    gchar *config_gov = 
+           _get_governor_from_enum(ac_adapter_present ? cpu->on_ac_cpu_gov : cpu->on_batt_cpu_gov);
 
-    if ( (priv->ac_adapter_present ? driver->on_ac_cpu_gov : driver->on_batt_cpu_gov) == ONDEMAND ) 
-    config_gov = "ondemand";
-    else if ( (priv->ac_adapter_present ? driver->on_ac_cpu_gov : driver->on_batt_cpu_gov ) == POWERSAVE )    
-    config_gov = "powersave";
-    else if ( (priv->ac_adapter_present ? driver->on_ac_cpu_gov : driver->on_batt_cpu_gov) == PERFORMANCE )  
-    config_gov = "performance";
-    else if ( (priv->ac_adapter_present ? driver->on_ac_cpu_gov : driver->on_batt_cpu_gov) == CONSERVATIVE ) 
-    config_gov = "conservative";
-    else if ( (priv->ac_adapter_present ? driver->on_ac_cpu_gov : driver->on_batt_cpu_gov) == USERSPACE )    
-    config_gov = "userspace";
+    if ( !config_gov )
+    {
+        XFPM_DEBUG("Unknown cpu governor\n");
+        return;
+    }
+        
+    XFPM_DEBUG("Configuration governor %s\n",config_gov);
     
-    g_return_if_fail(config_gov != NULL);
-    
     if ( strcmp(current_governor,config_gov) ) 
     {
         XFPM_DEBUG("CPU actuel governor %s, setting=%s\n",current_governor,config_gov);
-        xfpm_hal_set_cpu_governor(XFPM_HAL(driver),config_gov);
+        xfpm_hal_set_cpu_governor(priv->hal,config_gov);
     }    
     else
     {
         XFPM_DEBUG("No Need to change CPU Governor\n");
     }
-    */
-    return TRUE;
+}
+
+static void 
+xfpm_cpu_notify_cb (GObject *object,
+                    GParamSpec *arg1,
+                    gpointer data)
+{                                
+    XfpmCpu *cpu = XFPM_CPU(object);
     
+    if ( !cpu->cpu_freq_enabled )
+    {
+        XFPM_DEBUG("Cpu freq control is disabled\n");
+    }
     
+    if ( !strcmp(arg1->name,"on-ac-adapter") ||
+         !strcmp(arg1->name,"on-ac-cpu-gov") ||
+         !strcmp(arg1->name,"on-batt-cpu-gov") )
+    {
+        xfpm_cpu_set_governor(cpu,cpu->ac_adapter_present);
+    }
 }
 
 XfpmCpu *

Modified: xfce4-power-manager/trunk/src/xfpm-cpu.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -22,8 +22,6 @@
 #ifndef __XFPM_CPU_H
 #define __XFPM_CPU_H
 
-#define CPU_FREQ_TIMEOUT 60
-
 #include <glib-object.h>
 
 #include "xfpm-enums.h"
@@ -33,9 +31,12 @@
 #define XFPM_TYPE_CPU    (xfpm_cpu_get_type())
 #define XFPM_CPU(o)      (G_TYPE_CHECK_INSTANCE_CAST(o,XFPM_TYPE_CPU,XfpmCpu))
 
+typedef struct XfpmCpuPrivate XfpmCpuPrivate;
+
 typedef struct
 {
     GObject parent;
+    XfpmCpuPrivate *priv;
     
     gboolean ac_adapter_present;
     gboolean cpu_freq_enabled;
@@ -48,8 +49,7 @@
 typedef struct
 {
     GObjectClass parent_class;
-    
-                                   
+
 } XfpmCpuClass;
 
 GType          xfpm_cpu_get_type(void) G_GNUC_CONST;

Modified: xfce4-power-manager/trunk/src/xfpm-dpms.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dpms.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-dpms.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -78,6 +78,8 @@
 static void xfpm_dpms_load_config (XfpmDpms *dpms);                                   
 static gboolean xfpm_dpms_set_dpms_mode(XfpmDpms *dpms);
 
+static void xfpm_dpms_set_timeouts(XfpmDpms *dpms);
+
 static void xfpm_dpms_notify_cb        (GObject *object,
                                         GParamSpec *arg1,
                                         gpointer data);  
@@ -304,37 +306,11 @@
     }
     
     return TRUE;
-    
 }
 
 static void
-xfpm_dpms_notify_cb(GObject *object,GParamSpec *arg1,gpointer data)
+xfpm_dpms_set_timeouts(XfpmDpms *dpms)
 {
-    XfpmDpms *dpms;
-    XfpmDpmsPrivate *priv;
-    
-    if ( strcmp(arg1->name,"dpms") )
-    {
-        return;
-    }
-
-    dpms = XFPM_DPMS(object);
-    priv = XFPM_DPMS_GET_PRIVATE(dpms);
-    XFPM_DEBUG("dpms callback\n");
-    
-    if ( !priv->dpms_capable ) 
-    {
-        XFPM_DEBUG("dpms incapable\n");
-        return;
-    }
-    
-    xfpm_dpms_set_dpms_mode(dpms);
-    if ( !dpms->dpms_enabled )
-    {
-        XFPM_DEBUG("dpms disabled\n");
-        return;
-    }
-    
     CARD16 x_standby = 0 ,x_suspend = 0,x_off = 0;
     DPMSGetTimeouts(GDK_DISPLAY(),&x_standby,&x_suspend,&x_off);
     
@@ -363,6 +339,33 @@
     }
 }
 
+static void
+xfpm_dpms_notify_cb(GObject *object,GParamSpec *arg1,gpointer data)
+{
+    XfpmDpms *dpms;
+    XfpmDpmsPrivate *priv;
+    
+    dpms = XFPM_DPMS(object);
+    priv = XFPM_DPMS_GET_PRIVATE(dpms);
+    XFPM_DEBUG("dpms callback\n");
+    
+    if ( !priv->dpms_capable ) 
+    {
+        XFPM_DEBUG("dpms incapable\n");
+        return;
+    }
+    
+    if ( !strcmp(arg1->name,"dpms") )
+    {
+        xfpm_dpms_set_dpms_mode(dpms);
+    }
+    
+    if ( dpms->dpms_enabled )
+    {
+            xfpm_dpms_set_timeouts(dpms);
+    }
+}
+
 XfpmDpms *
 xfpm_dpms_new(void)
 {
@@ -371,4 +374,12 @@
     return dpms;
 }
 
+gboolean   
+xfpm_dpms_capable (XfpmDpms *dpms)
+{
+    XfpmDpmsPrivate *priv;
+    priv = XFPM_DPMS_GET_PRIVATE(dpms);
+    return priv->dpms_capable;
+}
+
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-dpms.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dpms.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-dpms.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -63,6 +63,7 @@
 
 GType      xfpm_dpms_get_type    ();
 XfpmDpms  *xfpm_dpms_new         (void);
+gboolean   xfpm_dpms_capable     (XfpmDpms *dpms);
 
 G_END_DECLS
 

Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -23,6 +23,24 @@
 #include <config.h>
 #endif
 
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include <gtk/gtk.h>
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -40,6 +58,8 @@
 #include "xfpm-battery.h"
 #include "xfpm-cpu.h"
 #include "xfpm-ac-adapter.h"
+#include "xfpm-button.h"
+#include "xfpm-lcd-brightness.h"
 #include "xfpm-notify.h"
 #include "xfpm-enum-types.h"
 #include "xfpm-common.h"
@@ -78,6 +98,15 @@
 #define XFPM_DRIVER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE((o),XFPM_TYPE_DRIVER,XfpmDriverPrivate))
 
+typedef enum 
+{
+    SYSTEM_LAPTOP,
+    SYSTEM_DESKTOP,
+    SYSTEM_SERVER,
+    SYSTEM_UNKNOWN
+    
+} SystemFormFactor;
+
 struct XfpmDriverPrivate 
 {
     DBusConnection *conn;
@@ -85,9 +114,16 @@
     
     gboolean dialog_opened;
     
+    SystemFormFactor formfactor;
+    gboolean can_suspend;
+    gboolean can_hibernate;
+    
     XfpmHal     *hal;
     XfpmCpu     *cpu;
     XfpmBattery *batt;
+    XfpmButton  *bt;
+    XfpmLcdBrightness *lcd;
+    
 #ifdef HAVE_DPMS    
     XfpmDpms *dpms;
 #endif    
@@ -117,6 +153,8 @@
     priv->cpu     = NULL;
     priv->adapter = NULL;
     priv->batt    = NULL;
+    priv->bt      = NULL;
+    priv->lcd     = NULL;
     priv->hal     = NULL;
 #ifdef HAVE_DPMS
     priv->dpms    = NULL;
@@ -152,6 +190,14 @@
     {
         g_object_unref(drv->priv->cpu);
     }
+    if ( drv->priv->bt )
+    {
+        g_object_unref(drv->priv->bt);
+    }
+    if ( drv->priv->lcd )
+    {
+        g_object_unref(drv->priv->lcd);
+    }
     if ( drv->priv->conn )
     {
         dbus_connection_unref(drv->priv->conn);
@@ -176,10 +222,8 @@
 #ifdef HAVE_DPMS    
     XFPM_DEBUG("Setting DPMS ac-adapter property\n");
     g_object_set(G_OBJECT(priv->dpms),"on-ac-adapter",priv->ac_adapter_present,NULL);
-    g_object_notify(G_OBJECT(priv->dpms),"dpms");
 #endif    
     g_object_set(G_OBJECT(priv->cpu),"on-ac-adapter",priv->ac_adapter_present,NULL);
-    g_object_notify(G_OBJECT(priv->cpu),"cpu-freq");
 
     g_object_set(G_OBJECT(priv->batt),"on-ac-adapter",priv->ac_adapter_present,NULL);
 }                                                    
@@ -250,27 +294,26 @@
         return;
     }
     
-    /*
     if ( !strcmp(property,CPU_FREQ_SCALING_CFG) ) 
     {
         gboolean val = g_value_get_boolean(value);
-        g_object_set(G_OBJECT(priv->drv),"cpu-freq-scaling-enabled",val,NULL);
+        g_object_set(G_OBJECT(priv->cpu),"cpu-freq-scaling-enabled",val,NULL);
         return;
     }
     
     if ( !strcmp(property,ON_AC_CPU_GOV_CFG) ) 
     {
         guint val = g_value_get_uint(value);
-        g_object_set(G_OBJECT(priv->drv),"on-ac-cpu-gov",val,NULL);
+        g_object_set(G_OBJECT(priv->cpu),"on-ac-cpu-gov",val,NULL);
         return;
     }
     if ( !strcmp(property,ON_BATT_CPU_GOV_CFG) ) 
     {
         guint val = g_value_get_uint(value);
-        g_object_set(G_OBJECT(priv->drv),"on-batt-cpu-gov",val,NULL);
+        g_object_set(G_OBJECT(priv->cpu),"on-batt-cpu-gov",val,NULL);
         return;
     }
-*/    
+    
 #ifdef HAVE_LIBNOTIFY    
     if ( !strcmp(property,BATT_STATE_NOTIFICATION_CFG) ) 
     {
@@ -339,6 +382,28 @@
         return;
     }
 #endif
+
+    if ( !strcmp(property,LID_SWITCH_CFG) ) 
+    {
+        guint val = g_value_get_uint(value);
+        g_object_set(G_OBJECT(priv->bt),"lid-switch-action",val,NULL);
+        return;
+    }
+    
+    if ( !strcmp(property,SLEEP_SWITCH_CFG) ) 
+    {
+        guint val = g_value_get_uint(value);
+        g_object_set(G_OBJECT(priv->bt),"sleep-switch-action",val,NULL);
+        return;
+    }
+    
+    if ( !strcmp(property,POWER_SWITCH_CFG) ) 
+    {
+        guint val = g_value_get_uint(value);
+        g_object_set(G_OBJECT(priv->bt),"power-switch-action",val,NULL);
+        return;
+    }
+    
 } 
 
 static gboolean
@@ -379,9 +444,20 @@
         }   
         libhal_free_string_array(govs);
     }
+    gboolean with_dpms;
+#ifdef HAVE_DPMS
+    with_dpms = xfpm_dpms_capable(priv->dpms);
+#else
+    with_dpms = FALSE;
+#endif
+            
+    dialog = xfpm_settings_new(channel,
+                               priv->formfactor == SYSTEM_LAPTOP ? TRUE : FALSE,
+                               priv->can_hibernate,
+                               priv->can_suspend,
+                               with_dpms,
+                               gov);
     
-    dialog = xfpm_settings_new(channel,TRUE,TRUE,gov);
-    
     xfce_gtk_window_center_on_monitor_with_pointer(GTK_WINDOW(dialog));
     gtk_window_set_modal(GTK_WINDOW(dialog), FALSE);
     
@@ -459,6 +535,36 @@
     
 }
 
+static void
+_get_system_form_factor(XfpmDriverPrivate *priv)
+{
+    priv->formfactor = SYSTEM_UNKNOWN;
+    
+    gchar *factor = xfpm_hal_get_string_info(priv->hal,
+                                            HAL_ROOT_COMPUTER,
+                                            "system.formfactor",
+                                            NULL);
+    if (!factor ) return;
+    
+    if ( !strcmp(factor,"laptop") )
+    {
+        priv->formfactor = SYSTEM_LAPTOP;
+    }
+    else if ( !strcmp(factor,"desktop") )
+    {
+        priv->formfactor = SYSTEM_DESKTOP;
+    }
+    else if ( !strcmp(factor,"server") )
+    {
+        priv->formfactor = SYSTEM_SERVER;
+    }
+    else if ( !strcmp(factor,"unknown") )
+    {
+        priv->formfactor = SYSTEM_UNKNOWN;
+    }
+    
+}
+
 gboolean
 xfpm_driver_monitor (XfpmDriver *drv)
 {
@@ -485,18 +591,42 @@
     dbus_connection_add_filter(priv->conn,xfpm_driver_signal_filter,drv,NULL);
     
     priv->hal = xfpm_hal_new();
+    _get_system_form_factor(priv);
+    
+    GError *g_error = NULL;
+    priv->can_suspend = xfpm_hal_get_bool_info(priv->hal,
+                                               HAL_ROOT_COMPUTER,
+                                               "power_management.can_suspend",
+                                               &g_error);
+                                               
+    if ( g_error )
+    {
+        XFPM_DEBUG("%s: \n",g_error->message);
+        g_error_free(g_error);
+    }            
+    
+    priv->can_hibernate = xfpm_hal_get_bool_info(priv->hal,
+                                               HAL_ROOT_COMPUTER,
+                                               "power_management.can_hibernate",
+                                               &g_error);
+                                               
+    if ( g_error )
+    {
+        XFPM_DEBUG("%s: \n",g_error->message);
+        g_error_free(g_error);
+    }            
+    
 #ifdef HAVE_DPMS    
-    XFPM_DEBUG("DPMS Monitoring\n");
     priv->dpms = xfpm_dpms_new();
 #endif  
-    XFPM_DEBUG("Cpu freq monitoring\n");
     priv->cpu = xfpm_cpu_new();
-
-    XFPM_DEBUG("Battery monitoring\n"); 
+    
+    priv->bt  = xfpm_button_new();
+    priv->lcd = xfpm_lcd_brightness_new();
+    
     priv->batt = xfpm_battery_new();
     g_signal_connect(priv->batt,"xfpm-show-adapter-icon",G_CALLBACK(_show_adapter_icon),drv);
-      
-    XFPM_DEBUG("AC adapter monitoring\n");
+    
     priv->adapter = xfpm_ac_adapter_new(FALSE);
     g_signal_connect(priv->adapter,"xfpm-ac-adapter-changed",
                     G_CALLBACK(xfpm_driver_ac_adapter_state_changed_cb),drv);

Modified: xfce4-power-manager/trunk/src/xfpm-enums.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-enums.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-enums.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -56,13 +56,13 @@
 } XfpmCpuGovernor;
 
 
-/* Lid switch control */
+/* button switch control */
 typedef enum
 {
-    LID_SWITCH_DO_NOTHING,
-    LID_SWITCH_DO_SUSPEND,
-    LID_SWITCH_DO_HIBERNATE
+    BUTTON_DO_NOTHING,
+    BUTTON_DO_SUSPEND,
+    BUTTON_DO_HIBERNATE
 
-} XfpmLidSwitchAction;
+} XfpmButtonAction;
 
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -45,6 +45,8 @@
 
 #include "xfpm-lcd-brightness.h"
 #include "xfpm-hal.h"
+#include "xfpm-debug.h"
+#include "xfpm-common.h"
 
 #define XFPM_LCD_BRIGHTNESS_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE(o,XFPM_TYPE_LCD_BRIGHTNESS,XfpmLcdBrightnessPrivate))
@@ -98,7 +100,24 @@
 
 static void xfpm_lcd_brightness_load_config(XfpmLcdBrightness *lcd)
 {
+    XFPM_DEBUG("Loading configuration\n");
+    GError *g_error = NULL;
+    if ( !xfconf_init(&g_error) )
+    {
+        g_critical("xfconf init failed: %s\n",g_error->message);
+        XFPM_DEBUG("Using default values\n");
+        g_error_free(g_error);
+        lcd->brightness_control_enabled = FALSE;
+        return;
+    }
     
+    XfconfChannel *channel;
+    channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
+
+    lcd->brightness_control_enabled = xfconf_channel_get_bool(channel,LCD_BRIGHTNESS_CFG,FALSE);
+    
+    g_object_unref(channel);
+    xfconf_shutdown();    
 }
 
 XfpmLcdBrightness *

Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -36,6 +36,8 @@
     GObject parent;
     XfpmLcdBrightnessPrivate *priv;
     
+    gboolean brightness_control_enabled;
+    
 } XfpmLcdBrightness;
 
 typedef struct

Modified: xfce4-power-manager/trunk/src/xfpm-main.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-main.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-main.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -125,7 +125,7 @@
         int reply;
         if (!xfpm_dbus_send_message_with_reply("Running",&reply))
         {
-            return -1;
+            return 1;
         }
         if ( reply != 1 )
         {
@@ -141,7 +141,7 @@
         int reply;
         if (!xfpm_dbus_send_message_with_reply("Quit",&reply))
         {
-            return -1;
+            return 1;
         }
         
         if ( reply == 0 )
@@ -158,7 +158,7 @@
         int reply;
         if (!xfpm_dbus_send_message_with_reply("Running",&reply))
         {
-            return -1;
+            return 1;
         }
         
         if ( reply == 1 )
@@ -172,7 +172,7 @@
              /* g_disaster */
             g_error("Unable to load xfce4 power manager driver\n");
             g_object_unref(driver);
-            return -1;
+            return 1;
         }    
     }
         

Modified: xfce4-power-manager/trunk/src/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-09 08:04:39 UTC (rev 5540)
@@ -68,6 +68,7 @@
 static GtkWidget *userspace_on_batt;
 
 #ifdef HAVE_DPMS
+static GtkWidget *dpms_op;
 static GtkWidget *on_batt_dpms;
 static GtkWidget *on_ac_dpms;
 #endif
@@ -106,6 +107,39 @@
     }
 }
 
+static void
+set_power_button_action_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+    guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+    
+    if(!xfconf_channel_set_uint(channel,POWER_SWITCH_CFG,value))
+    {
+        g_critical("Cannot set value %s\n",POWER_SWITCH_CFG);
+    }
+}
+
+static void
+set_sleep_button_action_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+    guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+    
+    if(!xfconf_channel_set_uint(channel,SLEEP_SWITCH_CFG,value))
+    {
+        g_critical("Cannot set value %s\n",SLEEP_SWITCH_CFG);
+    }
+}
+
+static void
+set_lid_button_action_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+    guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+    
+    if(!xfconf_channel_set_uint(channel,LID_SWITCH_CFG,value))
+    {
+        g_critical("Cannot set value %s\n",LID_SWITCH_CFG);
+    }
+}
+
 #ifdef HAVE_LIBNOTIFY
 static void
 set_battery_state_notification_cb(GtkWidget *widget,XfconfChannel *channel)
@@ -483,7 +517,6 @@
         }
     }
     
-    
     return frame;
 }
 
@@ -681,7 +714,7 @@
 }
 
 static GtkWidget *
-xfpm_settings_dpms(XfconfChannel *channel,gboolean laptop)
+xfpm_settings_dpms(XfconfChannel *channel,gboolean laptop,gboolean dpms_capable)
 {
     GtkWidget *hbox;
     hbox = gtk_hbox_new(FALSE,2);
@@ -698,11 +731,105 @@
         gtk_box_pack_start(GTK_BOX(hbox),frame,FALSE,FALSE,0);
     }
     
+    if (! dpms_capable ) 
+    {
+        GtkWidget *label;
+        label = gtk_label_new(_("Your monitor doesn't support DPMS settings"));
+        gtk_widget_show(label);
+        GtkWidget *vbox;
+        vbox = gtk_vbox_new(FALSE,2);
+        gtk_widget_show(vbox);
+        gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
+        gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+        gtk_widget_set_sensitive(dpms_op,FALSE);
+        xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_ac_dpms),FALSE); 
+    
+        if ( GTK_IS_WIDGET(on_batt_dpms) )
+        {
+            xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_batt_dpms),FALSE); 
+        }
+        return vbox;
+    }
     return hbox;
 }
 #endif
 
 static GtkWidget *
+xfpm_settings_keys(XfconfChannel *channel,gboolean can_hibernate,
+                   gboolean can_suspend,gboolean laptop)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+    GtkWidget *frame,*align;
+    
+    frame = xfce_create_framebox(_("Keyboard shortcuts"), &align);
+    gtk_widget_show(frame);
+    table = gtk_table_new(3,2,TRUE);
+    gtk_widget_show(table);
+    gtk_container_add(GTK_CONTAINER(align),table);
+    
+    guint default_config;
+    /// Power Button
+    label = gtk_label_new(_("When power button is pressed do"));
+    gtk_widget_show(label);
+    gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1);
+    
+    GtkWidget *power_button;
+    default_config = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,0);
+    power_button = gtk_combo_box_new_text();
+    gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Nothing"));
+    if ( can_hibernate )
+        gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Hibernate"));
+    if ( can_suspend ) 
+        gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Suspend"));
+    gtk_combo_box_set_active(GTK_COMBO_BOX(power_button),default_config);
+    gtk_widget_show(power_button);
+    gtk_table_attach(GTK_TABLE(table),power_button,1,2,0,1,GTK_SHRINK,GTK_SHRINK,0,0);
+    g_signal_connect(power_button,"changed",G_CALLBACK(set_power_button_action_cb),channel);
+    
+    /// Sleep Button
+    label = gtk_label_new(_("When sleep button is pressed do"));
+    gtk_widget_show(label);
+    gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,1,2);
+    
+    GtkWidget *sleep_button;
+    default_config = xfconf_channel_get_uint(channel,SLEEP_SWITCH_CFG,0);
+    sleep_button = gtk_combo_box_new_text();
+    gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Nothing"));
+    if ( can_hibernate )
+        gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Hibernate"));
+    if ( can_suspend ) 
+        gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Suspend"));
+    gtk_combo_box_set_active(GTK_COMBO_BOX(sleep_button),default_config);
+    gtk_widget_show(sleep_button);
+    gtk_table_attach(GTK_TABLE(table),sleep_button,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0);
+    g_signal_connect(sleep_button,"changed",G_CALLBACK(set_sleep_button_action_cb),channel);
+    
+    /// Lid Button
+    if ( laptop )
+    {
+        label = gtk_label_new(_("When lid button is pressed do"));
+        gtk_widget_show(label);
+        gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,2,3);
+        GtkWidget *lid_button;
+        default_config = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,0);
+        lid_button = gtk_combo_box_new_text();
+        gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Nothing"));
+        if ( can_hibernate )
+            gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Hibernate"));
+        if ( can_suspend ) 
+            gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Suspend"));
+        gtk_combo_box_set_active(GTK_COMBO_BOX(lid_button),default_config);
+        gtk_widget_show(lid_button);
+        gtk_table_attach(GTK_TABLE(table),lid_button,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);
+        g_signal_connect(lid_button,"changed",G_CALLBACK(set_lid_button_action_cb),channel);
+    }
+    
+    return frame;
+    
+}
+
+static GtkWidget *
 xfpm_settings_general(XfconfChannel *channel,gboolean battery_settings)
 {
     GtkWidget *table;
@@ -756,7 +883,6 @@
     gtk_table_attach(GTK_TABLE(table),cpu_gov,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0); 
     
 #ifdef HAVE_DPMS
-    GtkWidget *dpms_op;
     gboolean dpms_enabled;
     label = gtk_label_new(_("Enable DPMS control"));
     gtk_widget_show(label);
@@ -790,25 +916,19 @@
                        &int_data,
                        -1);
 
-    switch ( int_data )
+    if ( int_data >= 0 && int_data <= 3 )
     {
-        case 0:
-            gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),0);
-            break; 
-        case 1:
-            gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),1);
-            break;
-        case 2:
-            gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),2);
-            break;
-        default:
-            break;
-    }        
- 
+        gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),int_data);
+    }
+    else
+    {
+        gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),0);
+    }
+        
 }
 
 static GtkWidget *
-xfpm_settings_tree_view()
+xfpm_settings_tree_view(gboolean is_laptop)
 {
     GdkPixbuf *pix;
     GtkWidget *view;
@@ -830,20 +950,28 @@
 
     gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
 
-    pix = xfpm_load_icon("gnome-cpu-frequency-applet",42);      
+    pix = xfpm_load_icon("gnome-cpu-frequency-applet",38);      
     gtk_list_store_append(list_store,&iter);
     gtk_list_store_set(list_store,&iter,0,pix,1,0,-1);
     g_object_unref(pix);
 
-    pix = xfpm_load_icon("gpm-primary-100",42);
+    if ( is_laptop )
+    {
+        pix = xfpm_load_icon("gpm-primary-100",38);
+        gtk_list_store_append(list_store,&iter);
+        gtk_list_store_set(list_store,&iter,0,pix,1,1,-1);
+        g_object_unref(pix);
+    }
+   
+    pix = xfpm_load_icon("keyboard",38);
     gtk_list_store_append(list_store,&iter);
-    gtk_list_store_set(list_store,&iter,0,pix,1,1,-1);
+    gtk_list_store_set(list_store,&iter,0,pix,1,2,-1);
     g_object_unref(pix);
     
 #ifdef HAVE_DPMS    
-    pix = xfpm_load_icon("display",42);      
+    pix = xfpm_load_icon("display",38);      
     gtk_list_store_append(list_store,&iter);
-    gtk_list_store_set(list_store,&iter,0,pix,1,2,-1);
+    gtk_list_store_set(list_store,&iter,0,pix,1,3,-1);
     g_object_unref(pix);
 #endif  
     
@@ -853,8 +981,9 @@
 }
 
 GtkWidget *
-xfpm_settings_new(XfconfChannel *channel,gboolean laptop,
-                  gboolean can_hibernate,guint8 *govs)
+xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
+                  gboolean can_hibernate,gboolean can_suspend,
+                  gboolean dpms_capable,guint8 *govs)
 {
     GtkWidget *Dialog;  /* Main dialog window */
     GtkWidget *mainbox; /* Box to get (Dialog)->vbox */
@@ -877,7 +1006,7 @@
     mainbox = GTK_DIALOG(Dialog)->vbox;
     
     /// General Options Frame
-    box = xfpm_settings_general(channel,laptop);
+    box = xfpm_settings_general(channel,is_laptop);
     gtk_box_pack_start (GTK_BOX (mainbox), box, FALSE, FALSE, 0);
     
     /// Notebook container
@@ -887,24 +1016,26 @@
     table = gtk_table_new(1,2,FALSE);
     gtk_widget_show(table);
     gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0);
-    view = xfpm_settings_tree_view();
+    view = xfpm_settings_tree_view(is_laptop);
     gtk_table_attach_defaults(GTK_TABLE(table),view,0,1,0,1);  
     gtk_widget_show(view);  
     gtk_table_attach_defaults(GTK_TABLE(table),nt,1,2,0,1); 
     
     /// Cpu freq settings
-    box = xfpm_settings_cpu_freq(channel,govs,laptop);
+    box = xfpm_settings_cpu_freq(channel,govs,is_laptop);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
 
     /// Battery settings
-    if ( laptop )
-    {
-        box = xfpm_settings_battery(channel,can_hibernate);
-        gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
-    } 
+    box = xfpm_settings_battery(channel,can_hibernate);
+    gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
+
+    /// Keyboard buttons settings
+    box = xfpm_settings_keys(channel,can_hibernate,can_suspend,is_laptop);
+    gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); 
+    
     /// Dpms settings
 #ifdef HAVE_DPMS 
-    box = xfpm_settings_dpms(channel,laptop);
+    box = xfpm_settings_dpms(channel,is_laptop,dpms_capable);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
 #endif 
     

Modified: xfce4-power-manager/trunk/src/xfpm-settings.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.h	2008-10-09 08:03:19 UTC (rev 5539)
+++ xfce4-power-manager/trunk/src/xfpm-settings.h	2008-10-09 08:04:39 UTC (rev 5540)
@@ -22,8 +22,9 @@
 #ifndef __XFPM_SETTINGS_H
 #define __XFPM_SETTINGS_H
 
-GtkWidget *xfpm_settings_new(XfconfChannel *channel,gboolean battery_settings,
-                             gboolean can_hibernate,guint8 *govs);
+GtkWidget *xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
+                             gboolean can_hibernate,gboolean can_suspend,
+                             gboolean dpms_capable,guint8 *govs);
 
 
 #endif /* __XFPM_SETTINGS_H */




More information about the Goodies-commits mailing list