[Goodies-commits] r6903 - in xfce4-power-manager/trunk: . libxfpm settings src
Ali Abdallah
aliov at xfce.org
Sat Mar 14 16:40:09 CET 2009
Author: aliov
Date: 2009-03-14 15:40:09 +0000 (Sat, 14 Mar 2009)
New Revision: 6903
Added:
xfce4-power-manager/trunk/src/xfpm-idle.c
xfce4-power-manager/trunk/src/xfpm-idle.h
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/libxfpm/hal-device.c
xfce4-power-manager/trunk/libxfpm/hal-power.c
xfce4-power-manager/trunk/settings/xfpm-settings.c
xfce4-power-manager/trunk/settings/xfpm-settings.glade
xfce4-power-manager/trunk/src/Makefile.am
xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
xfce4-power-manager/trunk/src/xfpm-config.h
xfce4-power-manager/trunk/src/xfpm-cpu.c
xfce4-power-manager/trunk/src/xfpm-engine.c
xfce4-power-manager/trunk/src/xfpm-supply.c
Log:
Idle function to reduce screen luminosity after a certain time+fix a bug in the adapter code
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/ChangeLog 2009-03-14 15:40:09 UTC (rev 6903)
@@ -1,4 +1,7 @@
+2009-03-14 16:40 Ali aliov at xfce.org
+ * : Idle function to reduce screen luminosity after a certain time+fix a bug in the adapter code
+
2009-03-13 16:31 Ali aliov at xfce.org
* : Move common code to hal-device+ fix issue with the apater of the previous revision
Modified: xfce4-power-manager/trunk/libxfpm/hal-device.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -222,7 +222,7 @@
gboolean
hal_device_watch (HalDevice *device)
{
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+ g_return_val_if_fail (device->priv->udi != NULL, FALSE);
hal_device_add_watch(device);
return device->priv->watch_added;
@@ -231,7 +231,7 @@
gboolean hal_device_get_property_bool (HalDevice *device, const gchar *property)
{
g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+ g_return_val_if_fail (device->priv->udi != NULL, FALSE);
gboolean value = FALSE;
GError *error = NULL;
@@ -254,7 +254,7 @@
gint hal_device_get_property_int (HalDevice *device, const gchar *property)
{
g_return_val_if_fail (HAL_IS_DEVICE(device), 0);
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), 0);
+ g_return_val_if_fail (device->priv->udi != NULL, 0);
gint value = 0;
GError *error = NULL;
@@ -277,7 +277,7 @@
gchar *hal_device_get_property_string (HalDevice *device, const gchar *property)
{
g_return_val_if_fail (HAL_IS_DEVICE(device), NULL);
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), NULL);
+ g_return_val_if_fail (device->priv->udi != NULL, NULL);
gchar *value = NULL;
GError *error = NULL;
@@ -300,7 +300,7 @@
gboolean hal_device_has_key (HalDevice *device, const gchar *key)
{
g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+ g_return_val_if_fail (device->priv->udi != NULL, FALSE);
gboolean value = FALSE;
GError *error = NULL;
@@ -324,7 +324,7 @@
gboolean hal_device_has_capability (HalDevice *device, const gchar *capability)
{
g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
- g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+ g_return_val_if_fail (device->priv->udi != NULL, FALSE);
gboolean value = FALSE;
GError *error = NULL;
Modified: xfce4-power-manager/trunk/libxfpm/hal-power.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -152,14 +152,13 @@
}
else if ( power->priv->adapter_found )
{
- gchar *adapter_udi = NULL;
- g_object_get (G_OBJECT(power->priv->adapter), "udi", &adapter_udi, NULL);
+ const gchar *adapter_udi;
+ adapter_udi = hal_device_get_udi (power->priv->adapter );
+
if (adapter_udi)
{
if ( xfpm_strequal (udi, adapter_udi ) )
hal_power_remove_adapter (power);
-
- g_free (adapter_udi);
}
}
}
@@ -295,6 +294,9 @@
if ( power->priv->manager )
g_object_unref(power->priv->manager);
+
+ if ( power->priv->adapter )
+ g_object_unref (power->priv->adapter);
G_OBJECT_CLASS(hal_power_parent_class)->finalize(object);
}
Modified: xfce4-power-manager/trunk/settings/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -284,8 +284,42 @@
return g_strdup_printf ("%d %s", (int)value, _("Minutes"));
}
-#endif
+#endif /* HAVE_DPMS */
+/*
+ * Format value of GtkRange used with Brightness
+ */
+static gchar *
+format_brightness_value_cb (GtkScale *scale, gdouble value)
+{
+ if ( (int)value == 9 )
+ return g_strdup _("Never");
+
+ return g_strdup_printf ("%d %s", (int)value, _("Seconds"));
+}
+
+static void
+brightness_on_battery_value_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+ gint value = (gint)gtk_range_get_value (GTK_RANGE(w));
+
+ if (!xfconf_channel_set_uint (channel, BRIGHTNESS_ON_BATTERY, value))
+ {
+ g_critical ("Cannot set value for property %s\n", BRIGHTNESS_ON_BATTERY);
+ }
+}
+
+static void
+brightness_on_ac_value_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+ gint value = (gint)gtk_range_get_value (GTK_RANGE(w));
+
+ if (!xfconf_channel_set_uint (channel, BRIGHTNESS_ON_AC, value))
+ {
+ g_critical ("Cannot set value for property %s\n", BRIGHTNESS_ON_AC);
+ }
+}
+
static gboolean
critical_spin_output_cb (GtkSpinButton *w, gpointer data)
{
@@ -477,6 +511,22 @@
g_free (str);
+ /*
+ *
+ * Brightness on battery power
+ */
+ GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-battery");
+
+ val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
+
+ gtk_range_set_value (GTK_RANGE(brg), val);
+
+ g_signal_connect (brg, "value-changed",
+ G_CALLBACK(brightness_on_battery_value_changed_cb), channel);
+
+ g_signal_connect (brg, "format-value",
+ G_CALLBACK(format_brightness_value_cb), NULL);
+
}
static void
@@ -547,6 +597,23 @@
gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
g_free (str);
+
+
+ /*
+ *
+ * Brightness on AC power
+ */
+ GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-ac");
+
+ val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_AC, 9);
+
+ gtk_range_set_value (GTK_RANGE(brg), val);
+
+ g_signal_connect (brg, "value-changed",
+ G_CALLBACK(brightness_on_ac_value_changed_cb), channel);
+
+ g_signal_connect (brg, "format-value",
+ G_CALLBACK(format_brightness_value_cb), NULL);
}
static void
Modified: xfce4-power-manager/trunk/settings/xfpm-settings.glade
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.glade 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.glade 2009-03-14 15:40:09 UTC (rev 6903)
@@ -310,7 +310,7 @@
<widget class="GtkHScale" id="sleep-dpms-on-ac">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 100 1 10 10</property>
+ <property name="adjustment">10 0 60 1 0 0</property>
<property name="show_fill_level">True</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
@@ -341,7 +341,7 @@
<widget class="GtkHScale" id="off-dpms-on-ac">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 100 1 10 10</property>
+ <property name="adjustment">15 0 60 1 0 10</property>
<property name="show_fill_level">True</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
@@ -399,10 +399,10 @@
</packing>
</child>
<child>
- <widget class="GtkHScale" id="hscale3">
+ <widget class="GtkHScale" id="brg-on-ac">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 100 1 10 10</property>
+ <property name="adjustment">10 9 120 1 0 0</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
</widget>
@@ -628,7 +628,7 @@
<widget class="GtkHScale" id="sleep-dpms-on-battery">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 60 1 10 10</property>
+ <property name="adjustment">5 0 60 1 0 0</property>
<property name="show_fill_level">True</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
@@ -659,7 +659,7 @@
<widget class="GtkHScale" id="off-dpms-on-battery">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 60 1 10 10</property>
+ <property name="adjustment">5 0 60 1 0 0</property>
<property name="show_fill_level">True</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
@@ -717,10 +717,10 @@
</packing>
</child>
<child>
- <widget class="GtkHScale" id="hscale4">
+ <widget class="GtkHScale" id="brg-on-battery">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">0 0 100 1 10 10</property>
+ <property name="adjustment">10 9 120 1 0 0</property>
<property name="digits">0</property>
<property name="value_pos">bottom</property>
</widget>
Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/Makefile.am 2009-03-14 15:40:09 UTC (rev 6903)
@@ -30,6 +30,8 @@
xfpm-lid-hal.h \
xfpm-brightness-hal.c \
xfpm-brightness-hal.h \
+ xfpm-idle.c \
+ xfpm-idle.h \
xfpm-tray-icon.c \
xfpm-tray-icon.h \
xfpm-notify.c \
Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -36,10 +36,17 @@
#include <errno.h>
#endif
+#include <dbus/dbus-glib.h>
+
#include <libxfce4util/libxfce4util.h>
+#include <xfconf/xfconf.h>
+#include "libxfpm/hal-manager.h"
+#include "libxfpm/hal-device.h"
#include "libxfpm/xfpm-string.h"
+#include "xfpm-idle.h"
+#include "xfpm-config.h"
#include "xfpm-brightness-hal.h"
/* Init */
@@ -52,10 +59,27 @@
struct XfpmBrightnessHalPrivate
{
- //HalCtx *ctx;
- gboolean hw_found;
+ HalManager *manager;
+ HalDevice *device;
+ DBusGProxy *proxy;
+
+ XfpmIdle *idle;
+
+ gint max_level;
+ guint on_battery_timeout;
+ guint on_ac_timeout;
+ gboolean hw_found;
+
+ gboolean on_battery;
};
+enum
+{
+ TIMEOUT_INPUT,
+ TIMEOUT_ON_AC_ID,
+ TIMEOUT_ON_BATTERY_ID
+};
+
G_DEFINE_TYPE(XfpmBrightnessHal, xfpm_brightness_hal, G_TYPE_OBJECT)
static void
@@ -65,7 +89,6 @@
object_class->finalize = xfpm_brightness_hal_finalize;
-
g_type_class_add_private(klass,sizeof(XfpmBrightnessHalPrivate));
}
@@ -74,8 +97,13 @@
{
brg->priv = XFPM_BRIGHTNESS_HAL_GET_PRIVATE(brg);
- //brg->priv->ctx = NULL;
- brg->priv->hw_found = FALSE;
+ brg->priv->manager = NULL;
+ brg->priv->device = NULL;
+ brg->priv->proxy = NULL;
+ brg->priv->idle = NULL;
+ brg->priv->hw_found = FALSE;
+ brg->priv->on_battery = FALSE;
+ brg->priv->max_level = 0;
}
static void
@@ -85,62 +113,286 @@
brg = XFPM_BRIGHTNESS_HAL(object);
+ if ( brg->priv->manager )
+ g_object_unref (brg->priv->manager);
+
+ if ( brg->priv->proxy )
+ g_object_unref (brg->priv->proxy);
+
+ if ( brg->priv->idle )
+ g_object_unref (brg->priv->idle);
+
+ if ( brg->priv->device )
+ g_object_unref (brg->priv->device);
+
G_OBJECT_CLASS(xfpm_brightness_hal_parent_class)->finalize(object);
}
-/*
+static gint
+xfpm_brightness_hal_get_level (XfpmBrightnessHal *brg)
+{
+ GError *error = NULL;
+ gint level = 0;
+ gboolean ret = FALSE;
+
+ ret = dbus_g_proxy_call (brg->priv->proxy, "GetBrightness", &error,
+ G_TYPE_INVALID,
+ G_TYPE_INT, &level,
+ G_TYPE_INVALID);
+
+ if ( error )
+ {
+ g_critical ("Error getting brightness level: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ if (!ret)
+ {
+ g_warning("GetBrightness failed\n");
+ }
+ return level;
+}
+G_GNUC_UNUSED
+static gboolean
+xfpm_brightness_hal_set_level (XfpmBrightnessHal *brg, gint level)
+{
+ GError *error = NULL;
+ gboolean ret = FALSE;
+ gint dummy;
+
+ ret = dbus_g_proxy_call (brg->priv->proxy, "SetBrightness", &error,
+ G_TYPE_INT, level,
+ G_TYPE_INVALID,
+ G_TYPE_INT, &dummy, /* Just to avoid a warning! */
+ G_TYPE_INVALID );
+
+ if ( error )
+ {
+ g_critical ("Error setting brightness level: %s\n", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ if (!ret)
+ {
+ g_warning("SetBrightness failed\n");
+ }
+
+ return TRUE;
+}
+
static void
-xfpm_brightness_hal_property_modified_cb (LibHalContext *ctx,
- const gchar *udi,
- const gchar *key,
- dbus_bool_t is_removed,
- dbus_bool_t is_added)
+xfpm_brightness_hal_device_changed_cb (HalDevice *device,
+ const gchar *udi,
+ const gchar *key,
+ gboolean is_removed,
+ gboolean is_added,
+ XfpmBrightnessHal *brg)
{
- g_print("BRIGHTNESS: udi=%s key=%s is_removed=%s is_added=%s\n",
- udi, key, xfpm_bool_to_string(is_removed), xfpm_bool_to_string(is_added) );
+ g_print("YALLA key=%s\n", key);
+ if ( xfpm_strequal (key, "laptop_panel.num_levels") )
+ {
+ gint level = hal_device_get_property_int (device, "laptop_panel.num_levels");
+ TRACE("Brigthness num_levels=%d\n", level);
+ }
+}
+
+static void
+xfpm_brightness_hal_get_device (XfpmBrightnessHal *brg, const gchar *udi)
+{
+ DBusGConnection *bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+ brg->priv->hw_found = TRUE;
+ hal_device_watch (brg->priv->device);
+
+ g_signal_connect (brg->priv->device, "device-changed",
+ G_CALLBACK(xfpm_brightness_hal_device_changed_cb), brg);
+
+ brg->priv->proxy = dbus_g_proxy_new_for_name (bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device.LaptopPanel");
+
+ if ( !brg->priv->proxy )
+ g_warning ("Unable to get proxy for device %s\n", udi);
+
+ brg->priv->max_level =
+ hal_device_get_property_int (brg->priv->device, "laptop_panel.num_levels");
+
+ TRACE ("laptop_panel.num_levels=%d\n", brg->priv->max_level);
}
static gboolean
xfpm_brightness_hal_setup (XfpmBrightnessHal *brg)
{
- brg->priv->ctx = hal_ctx_new ();
-
- if ( !hal_ctx_connect(brg->priv->ctx) )
- return FALSE;
+ gchar **udi = NULL;
- gchar **udi = NULL;
- gint num = 0;
+ brg->priv->manager = hal_manager_new ();
+ brg->priv->device = hal_device_new ();
- udi = hal_ctx_get_device_by_capability (brg->priv->ctx, "laptop_panel", &num );
+ udi = hal_manager_find_device_by_capability (brg->priv->manager, "laptop_panel");
if ( !udi )
return FALSE;
- g_return_val_if_fail (num == 1, FALSE);
+ hal_device_set_udi (brg->priv->device, udi[0]);
+
+ if ( hal_device_has_key (brg->priv->device, "laptop_panel.num_levels") )
+ {
+ TRACE ("Found laptop_panel with udi=%s\n", udi[0]);
+ xfpm_brightness_hal_get_device (brg, udi[0]);
+ }
+ else
+ {
+ g_object_unref (brg->priv->device);
+ }
+
+ hal_manager_free_string_array (udi);
+ return TRUE;
+}
+
+static void
+xfpm_brightness_hal_reset_cb (XfpmIdle *idle, XfpmBrightnessHal *brg)
+{
+ gint level = xfpm_brightness_hal_get_level(brg);
+
+ if ( level != brg->priv->max_level -1 )
+ xfpm_brightness_hal_set_level(brg, brg->priv->max_level -1 );
+}
+
+static void
+xfpm_brightness_hal_alarm_timeout_cb (XfpmIdle *idle, guint id, XfpmBrightnessHal *brg)
+{
+ gint level = xfpm_brightness_hal_get_level(brg);
- hal_ctx_set_device_property_callback (brg->priv->ctx, xfpm_brightness_hal_property_modified_cb);
- hal_ctx_set_user_data (brg->priv->ctx, brg);
+ if ( id == TIMEOUT_ON_AC_ID && brg->priv->on_ac_timeout != 9)
+ {
+ if ( brg->priv->on_battery )
+ return;
+
+ if ( level != 1 )
+ {
+ TRACE ("Reducing brightness, on AC power\n");
+ xfpm_brightness_hal_set_level(brg, 1);
+ }
+ }
+ else if ( id == TIMEOUT_ON_BATTERY_ID && brg->priv->on_battery_timeout != 9)
+ {
+ if ( !brg->priv->on_battery )
+ return;
+
+ if ( level != 1 )
+ {
+ xfpm_brightness_hal_set_level(brg, 1);
+ TRACE ("Reducing brightness, on battery power\n");
+ }
+ }
+}
+
+static void
+xfpm_brightness_hal_load_config (XfpmBrightnessHal *brg, XfconfChannel *channel)
+{
+ brg->priv->on_ac_timeout =
+ xfconf_channel_get_uint (channel, BRIGHTNESS_ON_AC, 9);
+
+ if ( brg->priv->on_ac_timeout > 120 || brg->priv->on_ac_timeout < 9)
+ {
+ g_warning ("Value %d for %s is out of range", brg->priv->on_ac_timeout, BRIGHTNESS_ON_AC );
+ brg->priv->on_ac_timeout = 9;
+ }
- if ( hal_ctx_device_has_key (brg->priv->ctx, udi[0], "laptop_panel.num_levels") )
+ brg->priv->on_battery_timeout =
+ xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
+
+ if ( brg->priv->on_battery_timeout > 120 || brg->priv->on_battery_timeout < 9)
{
- TRACE ("Found laptop_panel with udi=%s\n", udi[0]);
- brg->priv->hw_found = TRUE;
- hal_ctx_watch_device (brg->priv->ctx, udi[0] );
+ g_warning ("Value %d for %s is out of range", brg->priv->on_battery_timeout, BRIGHTNESS_ON_BATTERY );
+ brg->priv->on_battery_timeout = 10;
}
-
- libhal_free_string_array (udi);
+}
+
+static void
+xfpm_brightness_hal_set_timeouts (XfpmBrightnessHal *brg )
+{
+ xfpm_idle_new_alarm (brg->priv->idle, TIMEOUT_ON_AC_ID, brg->priv->on_ac_timeout * 1000);
+ xfpm_idle_new_alarm (brg->priv->idle, TIMEOUT_ON_BATTERY_ID, brg->priv->on_battery_timeout * 1000);
- return TRUE;
+ xfpm_idle_alarm_reset_all (brg->priv->idle);
}
-*/
+
+static void
+xfpm_brightness_hal_property_changed_cb (XfconfChannel *channel, gchar *property,
+ GValue *value, XfpmBrightnessHal *brg)
+{
+ gboolean set = FALSE;
+
+ if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
+ return;
+
+ if ( xfpm_strequal (property, BRIGHTNESS_ON_AC ) )
+ {
+ guint val = g_value_get_uint (value);
+
+ if ( val > 120 || val < 9)
+ {
+ g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_AC );
+ }
+ else
+ brg->priv->on_ac_timeout = val;
+ set = TRUE;
+ }
+ else if ( xfpm_strequal (property, BRIGHTNESS_ON_BATTERY ) )
+ {
+ guint val = g_value_get_uint (value);
+
+ if ( val > 120 || val < 9)
+ {
+ g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_BATTERY );
+ }
+ else
+ brg->priv->on_battery_timeout = val;
+ set = TRUE;
+ }
+
+ if ( set )
+ xfpm_brightness_hal_set_timeouts (brg);
+
+}
+
XfpmBrightnessHal *
-xfpm_brightness_hal_new(void)
+xfpm_brightness_hal_new (XfconfChannel *channel)
{
XfpmBrightnessHal *brg = NULL;
brg = g_object_new (XFPM_TYPE_BRIGHTNESS_HAL, NULL);
- //xfpm_brightness_hal_setup (brg);
+ xfpm_brightness_hal_setup (brg);
+
+ if ( brg->priv->hw_found || brg->priv->max_level != 0 )
+ {
+ brg->priv->idle = xfpm_idle_new ();
+
+ g_signal_connect (brg->priv->idle, "alarm-timeout",
+ G_CALLBACK(xfpm_brightness_hal_alarm_timeout_cb), brg);
+
+ g_signal_connect (brg->priv->idle, "reset",
+ G_CALLBACK(xfpm_brightness_hal_reset_cb), brg);
+
+ xfpm_brightness_hal_load_config (brg, channel);
+
+ g_signal_connect (channel, "property-changed",
+ G_CALLBACK(xfpm_brightness_hal_property_changed_cb), brg);
+
+ xfpm_brightness_hal_set_timeouts (brg);
+ }
return brg;
}
+
+void
+xfpm_brightness_hal_set_on_battery (XfpmBrightnessHal *brg, gboolean on_battery)
+{
+ g_return_if_fail (XFPM_IS_BRIGHTNESS_HAL(brg));
+
+ brg->priv->on_battery = on_battery;
+}
+
Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.h 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.h 2009-03-14 15:40:09 UTC (rev 6903)
@@ -45,8 +45,10 @@
} XfpmBrightnessHalClass;
GType xfpm_brightness_hal_get_type (void) G_GNUC_CONST;
-XfpmBrightnessHal *xfpm_brightness_hal_new (void);
+XfpmBrightnessHal *xfpm_brightness_hal_new (XfconfChannel *channel);
+void xfpm_brightness_hal_set_on_battery (XfpmBrightnessHal *brg,
+ gboolean on_battery);
G_END_DECLS
#endif /* __XFPM_BRIGHTNESS_HAL_H */
Modified: xfce4-power-manager/trunk/src/xfpm-config.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-config.h 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-config.h 2009-03-14 15:40:09 UTC (rev 6903)
@@ -38,6 +38,9 @@
#define LOCK_SCREEN_ON_SLEEP "/xfce4-power-manager/lock-screen-suspend-hibernate"
#define LCD_BRIGHTNESS_CFG "/xfce4-power-manager/lcd-brightness"
+#define BRIGHTNESS_ON_AC "/xfce4-power-manager/brightness-on-ac"
+#define BRIGHTNESS_ON_BATTERY "/xfce4-power-manager/brightness-on-battery"
+
#define LID_SWITCH_ON_AC_CFG "/xfce4-power-manager/lid-action-on-ac"
#define LID_SWITCH_ON_BATTERY_CFG "/xfce4-power-manager/lid-action-on-battery"
#define SLEEP_SWITCH_CFG "/xfce4-power-manager/sleep-switch-action"
Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -38,8 +38,6 @@
#include <libxfce4util/libxfce4util.h>
-#include <hal/libhal.h>
-
#include "libxfpm/dbus-hal.h"
#include "libxfpm/xfpm-string.h"
@@ -152,7 +150,6 @@
return;
}
- libhal_free_string (current_governor);
}
static void
Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -198,6 +198,7 @@
xfpm_dpms_set_on_battery (engine->priv->dpms, on_battery);
#endif
xfpm_cpu_set_on_battery (engine->priv->cpu, on_battery);
+ xfpm_brightness_hal_set_on_battery (engine->priv->brg_hal, on_battery);
}
static void
@@ -296,7 +297,7 @@
/*
* Brightness HAL
*/
- engine->priv->brg_hal = xfpm_brightness_hal_new ();
+ engine->priv->brg_hal = xfpm_brightness_hal_new (engine->priv->channel);
}
Added: xfce4-power-manager/trunk/src/xfpm-idle.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-idle.c (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-idle.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -0,0 +1,345 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ * Modified version of libidletime from gpm version 2.24.2
+ * Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/sync.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdk.h>
+
+#include "xfpm-idle.h"
+
+/* Init */
+static void xfpm_idle_class_init (XfpmIdleClass *klass);
+static void xfpm_idle_init (XfpmIdle *idle);
+static void xfpm_idle_finalize (GObject *object);
+
+#define XFPM_IDLE_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE((o), XFPM_TYPE_IDLE, XfpmIdlePrivate))
+
+struct XfpmIdlePrivate
+{
+ int sync_event;
+ XSyncCounter idle_counter;
+ GPtrArray *array;
+};
+
+typedef struct
+{
+ guint id;
+ XSyncValue timeout;
+ XSyncAlarm xalarm;
+
+} IdleAlarm;
+
+enum
+{
+ RESET,
+ ALARM_TIMEOUT,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE(XfpmIdle, xfpm_idle, G_TYPE_OBJECT)
+
+static void
+xfpm_idle_class_init(XfpmIdleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ signals[RESET] =
+ g_signal_new("reset",
+ XFPM_TYPE_IDLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmIdleClass, reset),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+
+ signals[ALARM_TIMEOUT] =
+ g_signal_new("alarm-timeout",
+ XFPM_TYPE_IDLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmIdleClass, alarm_timeout),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+
+ object_class->finalize = xfpm_idle_finalize;
+
+ g_type_class_add_private(klass,sizeof(XfpmIdlePrivate));
+}
+
+static IdleAlarm *
+xfpm_idle_find_alarm (XfpmIdle *idle, guint id)
+{
+ int i;
+ IdleAlarm *alarm;
+ for (i = 0; i<idle->priv->array->len; i++)
+ {
+ alarm = g_ptr_array_index (idle->priv->array, i);
+ if (alarm->id == id)
+ {
+ return alarm;
+ }
+ }
+ return NULL;
+}
+
+static void
+xfpm_idle_xsync_alarm_set (XfpmIdle *idle, IdleAlarm *alarm, gboolean positive)
+{
+ XSyncAlarmAttributes attr;
+ XSyncValue delta;
+ unsigned int flags;
+ XSyncTestType test;
+
+ if (positive)
+ test = XSyncPositiveComparison;
+ else
+ test = XSyncNegativeComparison;
+
+ XSyncIntToValue (&delta, 0);
+
+ attr.trigger.counter = idle->priv->idle_counter;
+ attr.trigger.value_type = XSyncAbsolute;
+ attr.trigger.test_type = test;
+ attr.trigger.wait_value = alarm->timeout;
+ attr.delta = delta;
+
+ flags = XSyncCACounter | XSyncCAValueType | XSyncCATestType | XSyncCAValue | XSyncCADelta;
+
+ if ( alarm->xalarm )
+ XSyncChangeAlarm ( GDK_DISPLAY (), alarm->xalarm, flags, &attr);
+ else
+ alarm->xalarm = XSyncCreateAlarm (GDK_DISPLAY (), flags, &attr);
+}
+
+static void
+xfpm_idle_xsync_value_add_one (XSyncValue *from, XSyncValue *to)
+{
+ int overflow;
+ XSyncValue add;
+ XSyncIntToValue (&add, -1);
+ XSyncValueAdd (to, *from, add, &overflow);
+}
+
+static void
+xfpm_idle_x_set_reset (XfpmIdle *idle, XSyncAlarmNotifyEvent *alarm_event)
+{
+ IdleAlarm *alarm;
+
+ alarm = xfpm_idle_find_alarm (idle, 0);
+ xfpm_idle_xsync_value_add_one (&alarm_event->counter_value, &alarm->timeout);
+ xfpm_idle_xsync_alarm_set (idle, alarm, FALSE);
+}
+
+static IdleAlarm *
+xfpm_idle_alarm_find_event (XfpmIdle *idle, XSyncAlarmNotifyEvent *alarm_event)
+{
+ guint i;
+ IdleAlarm *alarm;
+
+ for (i=0; i<idle->priv->array->len; i++)
+ {
+ alarm = g_ptr_array_index (idle->priv->array, i);
+ if (alarm_event->alarm == alarm->xalarm)
+ {
+ return alarm;
+ }
+ }
+ return NULL;
+}
+
+void
+xfpm_idle_alarm_reset_all (XfpmIdle *idle)
+{
+ guint i;
+ IdleAlarm *alarm;
+
+ for ( i=1; i<idle->priv->array->len; i++)
+ {
+ alarm = g_ptr_array_index (idle->priv->array, i);
+ xfpm_idle_xsync_alarm_set (idle, alarm, TRUE);
+ }
+
+ g_signal_emit (G_OBJECT(idle), signals[RESET], 0 );
+}
+
+static GdkFilterReturn
+xfpm_idle_x_event_filter (GdkXEvent *gdkxevent, GdkEvent *event, gpointer data)
+{
+ IdleAlarm *alarm;
+ XfpmIdle *idle = (XfpmIdle *) data;
+ XEvent *xevent = ( XEvent *) gdkxevent;
+ XSyncAlarmNotifyEvent *alarm_event;
+
+ if ( xevent->type != idle->priv->sync_event + XSyncAlarmNotify )
+ return GDK_FILTER_CONTINUE;
+
+ alarm_event = (XSyncAlarmNotifyEvent *) xevent;
+
+ alarm = xfpm_idle_alarm_find_event (idle, alarm_event);
+
+ if ( alarm )
+ {
+ g_print("Alarm id=%d\n",alarm->id);
+ if (alarm->id != 0 )
+ {
+ g_signal_emit (G_OBJECT(idle), signals[ALARM_TIMEOUT], 0, alarm->id );
+ xfpm_idle_x_set_reset (idle, alarm_event);
+ return GDK_FILTER_CONTINUE;
+ }
+ xfpm_idle_alarm_reset_all (idle);
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+static IdleAlarm *
+xfpm_idle_new_alarm_internal (XfpmIdle *idle, guint id)
+{
+ IdleAlarm *alarm;
+ alarm = g_new0 (IdleAlarm, 1);
+ alarm->id = id;
+ g_ptr_array_add (idle->priv->array, alarm);
+
+ return alarm;
+}
+
+static void
+xfpm_idle_init (XfpmIdle *idle)
+{
+ IdleAlarm *alarm;
+ int sync_error = 0;
+ int ncounters;
+ XSyncSystemCounter *counters;
+ int i;
+
+ idle->priv = XFPM_IDLE_GET_PRIVATE(idle);
+
+ idle->priv->array = g_ptr_array_new ();
+ idle->priv->sync_event = 0;
+
+ if (!XSyncQueryExtension (GDK_DISPLAY (), &idle->priv->sync_event, &sync_error) )
+ {
+ g_warning ("No Sync extension.");
+ return;
+ }
+
+ counters = XSyncListSystemCounters (GDK_DISPLAY (), &ncounters);
+
+ for ( i = 0; i < ncounters && !idle->priv->idle_counter; i++)
+ {
+ if (!strcmp(counters[i].name, "IDLETIME"))
+ idle->priv->idle_counter = counters[i].counter;
+ }
+
+ if ( !idle->priv->idle_counter )
+ {
+ g_warning ("No idle counter.");
+ return;
+ }
+
+ gdk_error_trap_push ();
+ XSelectInput (GDK_DISPLAY (), GDK_ROOT_WINDOW (), XSyncAlarmNotifyMask);
+
+ if ( gdk_error_trap_pop () )
+ g_warning ("XSelect Input failed");
+
+ gdk_window_add_filter (NULL, xfpm_idle_x_event_filter, idle);
+
+ alarm = xfpm_idle_new_alarm_internal (idle, 0);
+}
+
+static void
+xfpm_idle_free_alarm (XfpmIdle *idle, IdleAlarm *alarm)
+{
+ XSyncDestroyAlarm (GDK_DISPLAY(), alarm->xalarm);
+ g_free(alarm);
+ g_ptr_array_remove (idle->priv->array, alarm);
+}
+
+static void
+xfpm_idle_finalize(GObject *object)
+{
+ int i;
+ XfpmIdle *idle;
+ IdleAlarm *alarm;
+
+ idle = XFPM_IDLE(object);
+
+ for ( i = 0; i<idle->priv->array->len; i++)
+ {
+ alarm = g_ptr_array_index (idle->priv->array, i);
+ xfpm_idle_free_alarm (idle, alarm);
+ }
+ g_ptr_array_free (idle->priv->array, TRUE);
+
+ G_OBJECT_CLASS(xfpm_idle_parent_class)->finalize(object);
+}
+
+XfpmIdle *
+xfpm_idle_new(void)
+{
+ XfpmIdle *idle = NULL;
+ idle = g_object_new (XFPM_TYPE_IDLE,NULL);
+ return idle;
+}
+
+gboolean
+xfpm_idle_new_alarm (XfpmIdle *idle, guint id, guint timeout)
+{
+ IdleAlarm *alarm;
+
+ g_return_val_if_fail (XFPM_IS_IDLE (idle), FALSE);
+
+ if ( id == 0 )
+ return FALSE;
+
+ if ( timeout == 0 )
+ return FALSE;
+
+ alarm = xfpm_idle_find_alarm (idle, id);
+
+ if ( !alarm )
+ {
+ alarm = xfpm_idle_new_alarm_internal (idle, id);
+ XSyncIntToValue (&alarm->timeout, timeout);
+ xfpm_idle_xsync_alarm_set (idle, alarm, TRUE);
+ }
+ return TRUE;
+}
+
Added: xfce4-power-manager/trunk/src/xfpm-idle.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-idle.h (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-idle.h 2009-03-14 15:40:09 UTC (rev 6903)
@@ -0,0 +1,62 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __XFPM_IDLE_H
+#define __XFPM_IDLE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define XFPM_TYPE_IDLE (xfpm_idle_get_type () )
+#define XFPM_IDLE(o) (G_TYPE_CHECK_INSTANCE_CAST((o), XFPM_TYPE_IDLE, XfpmIdle))
+#define XFPM_IS_IDLE(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), XFPM_TYPE_IDLE))
+
+typedef struct XfpmIdlePrivate XfpmIdlePrivate;
+
+typedef struct
+{
+ GObject parent;
+ XfpmIdlePrivate *priv;
+
+} XfpmIdle;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ void (*alarm_timeout) (XfpmIdle *idle,
+ guint id);
+
+ void (*reset) (XfpmIdle *idle);
+
+} XfpmIdleClass;
+
+GType xfpm_idle_get_type (void) G_GNUC_CONST;
+XfpmIdle *xfpm_idle_new (void);
+
+gboolean xfpm_idle_new_alarm (XfpmIdle *idle,
+ guint id,
+ guint timeout);
+
+void xfpm_idle_alarm_reset_all (XfpmIdle *idle);
+G_END_DECLS
+
+#endif /* __XFPM_IDLE_H */
Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c 2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c 2009-03-14 15:40:09 UTC (rev 6903)
@@ -65,6 +65,7 @@
gboolean adapter_found;
gboolean adapter_present;
+
guint8 critical_level;
guint8 power_management;
};
@@ -687,8 +688,8 @@
static void
xfpm_supply_add_adapter (XfpmSupply *supply, const HalDevice *device)
{
- supply->priv->adapter_present = TRUE;
-
+ supply->priv->adapter_found = TRUE;
+
supply->priv->adapter = xfpm_adapter_new (device);
g_signal_connect (supply->priv->adapter, "adapter-changed",
G_CALLBACK(xfpm_supply_adapter_changed_cb), supply);
@@ -719,7 +720,7 @@
}
static void
-xfpm_supply_removed_adapter (XfpmSupply *supply)
+xfpm_supply_remove_adapter (XfpmSupply *supply)
{
supply->priv->adapter_found = FALSE;
g_object_unref (supply->priv->adapter);
@@ -738,7 +739,7 @@
xfpm_supply_adapter_removed_cb (HalPower *power, XfpmSupply *supply)
{
if ( supply->priv->adapter_found )
- xfpm_supply_removed_adapter (supply);
+ xfpm_supply_remove_adapter (supply);
}
static void
More information about the Goodies-commits
mailing list