[Goodies-commits] r7631 - in xfce4-power-manager/trunk: . libxfpm src
Ali Abdallah
aliov at xfce.org
Sun Jun 28 00:19:57 CEST 2009
Author: aliov
Date: 2009-06-27 22:19:57 +0000 (Sat, 27 Jun 2009)
New Revision: 7631
Removed:
xfce4-power-manager/trunk/libxfpm/hal-monitor.c
xfce4-power-manager/trunk/libxfpm/hal-monitor.h
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/libxfpm/Makefile.am
xfce4-power-manager/trunk/libxfpm/hal-device.c
xfce4-power-manager/trunk/src/xfpm-cpu.c
xfce4-power-manager/trunk/src/xfpm-dbus-monitor.c
xfce4-power-manager/trunk/src/xfpm-dbus-monitor.h
xfce4-power-manager/trunk/src/xfpm-inhibit.c
xfce4-power-manager/trunk/src/xfpm-manager.c
xfce4-power-manager/trunk/src/xfpm-marshal.list
xfce4-power-manager/trunk/src/xfpm-session.c
xfce4-power-manager/trunk/src/xfpm-shutdown.c
xfce4-power-manager/trunk/src/xfpm-tray-icon.c
Log:
* Use xfpm-dbus-monitor for dbus monitoring stuff, so hal-monitor is removed.
* hal-device.c Fix a Glib warnings when DBus is disconnected.
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/ChangeLog 2009-06-27 22:19:57 UTC (rev 7631)
@@ -1,3 +1,7 @@
+2009-06-28: 12:10 Ali aliov at xfce.org
+ * Use xfpm-dbus-monitor for dbus monitoring stuff, so hal-monitor is removed.
+ * hal-device.c Fix a Glib warnings when DBus is disconnected.
+
2009-06-27: 11:15 Ali aliov at xfce.org
* Use "/xfce4-power-manager" as a prefix for properties name to avoid
incompatibile installation with old versions.
Modified: xfce4-power-manager/trunk/libxfpm/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/libxfpm/Makefile.am 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/libxfpm/Makefile.am 2009-06-27 22:19:57 UTC (rev 7631)
@@ -4,8 +4,6 @@
libxfpmcommon.la
libxfpmhal_la_SOURCES = \
- hal-monitor.c \
- hal-monitor.h \
hal-manager.c \
hal-manager.h \
hal-device.c \
Modified: xfce4-power-manager/trunk/libxfpm/hal-device.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -149,7 +149,7 @@
G_TYPE_INVALID);
dbus_g_proxy_connect_signal (device->priv->proxy, "PropertyModified",
- G_CALLBACK(hal_device_property_modified_cb), device, NULL);
+ G_CALLBACK (hal_device_property_modified_cb), device, NULL);
device->priv->watch_added = TRUE;
}
@@ -182,6 +182,14 @@
}
static void
+hal_device_proxy_destroy_cb (HalDevice *device)
+{
+ g_return_if_fail (HAL_IS_DEVICE (device));
+
+ device->priv->proxy = NULL;
+}
+
+static void
hal_device_init (HalDevice *device)
{
GError *error = NULL;
@@ -204,30 +212,35 @@
}
static void
-hal_device_finalize(GObject *object)
+hal_device_finalize (GObject *object)
{
HalDevice *device;
- device = HAL_DEVICE(object);
+ device = HAL_DEVICE (object);
+
+ g_debug ("Finalizing object with udi=%s", device->priv->udi);
if ( device->priv->udi )
g_free (device->priv->udi);
-
+
if ( device->priv->bus )
dbus_g_connection_unref (device->priv->bus);
- if ( device->priv->watch_added )
+ if ( device->priv->watch_added && device->priv->proxy )
dbus_g_proxy_disconnect_signal (device->priv->proxy, "PropertyModified",
G_CALLBACK(hal_device_property_modified_cb), device);
- if ( device->priv->watch_condition_added )
+ if ( device->priv->watch_condition_added && device->priv->proxy )
+ {
dbus_g_proxy_disconnect_signal (device->priv->proxy, "Condition",
G_CALLBACK(hal_device_condition_cb), device);
-
+ }
+
+
if ( device->priv->proxy )
g_object_unref (device->priv->proxy);
- G_OBJECT_CLASS(hal_device_parent_class)->finalize(object);
+ G_OBJECT_CLASS (hal_device_parent_class)->finalize (object);
}
HalDevice *
@@ -256,6 +269,8 @@
"org.freedesktop.Hal",
device->priv->udi,
"org.freedesktop.Hal.Device");
+ g_signal_connect_swapped (G_OBJECT (device->priv->proxy), "destroy",
+ G_CALLBACK (hal_device_proxy_destroy_cb), device);
}
const gchar *hal_device_get_udi (HalDevice *device)
Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -395,11 +395,13 @@
XfpmCpu *cpu;
cpu = XFPM_CPU(object);
+
+ if ( cpu->priv->conf )
+ g_object_unref (cpu->priv->conf);
- g_object_unref (cpu->priv->conf);
+ if ( cpu->priv->conf )
+ g_object_unref (cpu->priv->adapter);
- g_object_unref (cpu->priv->adapter);
-
if ( cpu->priv->bus )
dbus_g_connection_unref (cpu->priv->bus);
Modified: xfce4-power-manager/trunk/src/xfpm-dbus-monitor.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-monitor.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-monitor.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -33,7 +33,11 @@
#include <libxfce4util/libxfce4util.h>
+#include "libxfpm/xfpm-string.h"
+#include "libxfpm/xfpm-dbus.h"
+
#include "xfpm-dbus-monitor.h"
+#include "xfpm-marshal.h"
static void xfpm_dbus_monitor_finalize (GObject *object);
@@ -43,14 +47,29 @@
struct XfpmDBusMonitorPrivate
{
DBusGConnection *system_bus;
- DBusGConnection *bus;
- DBusGProxy *proxy;
- GPtrArray *array;
+ DBusGConnection *session_bus;
+
+ DBusGProxy *system_proxy;
+ DBusGProxy *session_proxy;
+
+ GPtrArray *names_array;
+ GPtrArray *services_array;
+
+ gboolean hal_connected;
};
+typedef struct
+{
+ gchar *name;
+ DBusBusType bus_type;
+
+} XfpmWatchData;
+
enum
{
- CONNECTION_LOST,
+ UNIQUE_NAME_LOST,
+ SERVICE_CONNECTION_CHANGED,
+ HAL_CONNECTION_CHANGED,
SYSTEM_BUS_CONNECTION_CHANGED,
LAST_SIGNAL
};
@@ -60,34 +79,109 @@
G_DEFINE_TYPE (XfpmDBusMonitor, xfpm_dbus_monitor, G_TYPE_OBJECT)
static void
-xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, const gchar *name)
+xfpm_dbus_monitor_free_watch_data (XfpmWatchData *data)
{
+ g_free (data->name);
+ g_free (data);
+}
+
+static XfpmWatchData *
+xfpm_dbus_monitor_get_watch_data (GPtrArray *array, const gchar *name, DBusBusType bus_type)
+{
+ XfpmWatchData *data;
+ guint i;
+
+ for ( i = 0; i < array->len; i++)
+ {
+ data = g_ptr_array_index (array, i);
+ if ( !g_strcmp0 (data->name, name) && data->bus_type == bus_type )
+ return data;
+ }
+ return NULL;
+}
+
+static void
+xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *name)
+{
+ XfpmWatchData *watch;
guint i = 0;
- gchar *array_name;
- for ( i = 0; i < monitor->priv->array->len; i++ )
+ for ( i = 0; i < monitor->priv->names_array->len; i++ )
{
- array_name = g_ptr_array_index (monitor->priv->array, i);
- if ( g_strcmp0 (array_name, name) == 0 )
+ watch = g_ptr_array_index (monitor->priv->names_array, i);
+
+ if ( !g_strcmp0 (watch->name, name) && bus_type == watch->bus_type )
{
- g_signal_emit (G_OBJECT(monitor), signals [CONNECTION_LOST], 0, array_name);
- //g_free (array_name);
- //g_ptr_array_remove_index (monitor->priv->array, i);
+ TRACE ("Unique name %s disconnected ", name);
+ g_signal_emit (G_OBJECT(monitor), signals [UNIQUE_NAME_LOST], 0,
+ watch->name, bus_type == DBUS_BUS_SESSION ? TRUE : FALSE);
+ xfpm_dbus_monitor_free_watch_data (watch);
}
}
}
static void
-xfpm_dbus_monitor_name_owner_changed_cb (DBusGProxy *proxy, const gchar *name,
- const gchar *prev, const gchar *new,
- XfpmDBusMonitor *monitor)
+xfpm_dbus_monitor_service_connection_changed (XfpmDBusMonitor *monitor, DBusBusType bus_type,
+ const gchar *name, gboolean connected)
{
+ XfpmWatchData *watch;
+ guint i;
+
+ /* Simplify things for HAL */
+ if ( !g_strcmp0 (name, "org.freedesktop.Hal") && bus_type == DBUS_BUS_SYSTEM )
+ {
+ monitor->priv->hal_connected = connected;
+ g_signal_emit (G_OBJECT (monitor), signals [HAL_CONNECTION_CHANGED], 0, connected);
+ return;
+ }
+
+ for ( i = 0; i < monitor->priv->services_array->len; i++)
+ {
+ watch = g_ptr_array_index (monitor->priv->services_array, i);
+
+ if ( !g_strcmp0 (watch->name, name) && watch->bus_type == bus_type)
+ {
+ TRACE ("Service %s connection changed %s", name, xfpm_bool_to_string (connected));
+ g_signal_emit (G_OBJECT (monitor), signals [SERVICE_CONNECTION_CHANGED], 0,
+ name, connected, bus_type == DBUS_BUS_SESSION ? TRUE : FALSE);
+ }
+ }
+}
+
+static void
+xfpm_dbus_monitor_name_owner_changed (XfpmDBusMonitor *monitor, const gchar *name,
+ const gchar *prev, const gchar *new, DBusBusType bus_type)
+{
if ( strlen (prev) != 0 )
{
- xfpm_dbus_monitor_unique_connection_name_lost (monitor, prev);
+ xfpm_dbus_monitor_unique_connection_name_lost (monitor, bus_type, prev);
+
+ /* Connection has name */
+ if ( strlen (name) != 0 )
+ xfpm_dbus_monitor_service_connection_changed (monitor, bus_type, name, FALSE);
}
+ else if ( strlen (name) != 0 && strlen (new) != 0)
+ {
+ xfpm_dbus_monitor_service_connection_changed (monitor, bus_type, name, FALSE);
+ }
}
+static void
+xfpm_dbus_monitor_session_name_owner_changed_cb (DBusGProxy *proxy, const gchar *name,
+ const gchar *prev, const gchar *new,
+ XfpmDBusMonitor *monitor)
+{
+ xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, DBUS_BUS_SESSION);
+}
+
+static void
+xfpm_dbus_monitor_system_name_owner_changed_cb (DBusGProxy *proxy, const gchar *name,
+ const gchar *prev, const gchar *new,
+ XfpmDBusMonitor *monitor)
+{
+ xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, DBUS_BUS_SYSTEM);
+}
+
static gboolean
xfpm_dbus_monitor_query_system_bus_idle (gpointer data)
{
@@ -140,27 +234,89 @@
}
static void
+xfpm_dbus_monitor_session (XfpmDBusMonitor *monitor)
+{
+ monitor->priv->session_proxy = dbus_g_proxy_new_for_name_owner (monitor->priv->session_bus,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ NULL);
+ if ( !monitor->priv->session_proxy )
+ {
+ g_critical ("Unable to create proxy on /org/freedesktop/DBus");
+ return;
+ }
+
+ dbus_g_proxy_add_signal (monitor->priv->session_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (monitor->priv->session_proxy, "NameOwnerChanged",
+ G_CALLBACK (xfpm_dbus_monitor_session_name_owner_changed_cb), monitor, NULL);
+}
+
+static void
+xfpm_dbus_monitor_system (XfpmDBusMonitor *monitor)
+{
+ monitor->priv->system_proxy = dbus_g_proxy_new_for_name_owner (monitor->priv->system_bus,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ NULL);
+ if ( !monitor->priv->system_proxy )
+ {
+ g_critical ("Unable to create proxy on /org/freedesktop/DBus");
+ return;
+ }
+
+ dbus_g_proxy_add_signal (monitor->priv->system_proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (monitor->priv->system_proxy, "NameOwnerChanged",
+ G_CALLBACK (xfpm_dbus_monitor_system_name_owner_changed_cb), monitor, NULL);
+}
+
+static void
xfpm_dbus_monitor_class_init (XfpmDBusMonitorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- signals [CONNECTION_LOST] =
- g_signal_new("connection-lost",
- XFPM_TYPE_DBUS_MONITOR,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(XfpmDBusMonitorClass, connection_lost),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1, G_TYPE_STRING);
+ signals [UNIQUE_NAME_LOST] =
+ g_signal_new ("unique-name-lost",
+ XFPM_TYPE_DBUS_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (XfpmDBusMonitorClass, unique_name_lost),
+ NULL, NULL,
+ _xfpm_marshal_VOID__STRING_BOOLEAN,
+ G_TYPE_NONE, 2,
+ G_TYPE_STRING, G_TYPE_BOOLEAN);
+ signals [HAL_CONNECTION_CHANGED] =
+ g_signal_new ("hal-connection-changed",
+ XFPM_TYPE_DBUS_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (XfpmDBusMonitorClass, hal_connection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals [SERVICE_CONNECTION_CHANGED] =
+ g_signal_new ("service-connection-changed",
+ XFPM_TYPE_DBUS_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (XfpmDBusMonitorClass, service_connection_changed),
+ NULL, NULL,
+ _xfpm_marshal_VOID__STRING_BOOLEAN_BOOLEAN,
+ G_TYPE_NONE, 3, G_TYPE_STRING,
+ G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+
signals [SYSTEM_BUS_CONNECTION_CHANGED] =
- g_signal_new("system-bus-connection-changed",
- XFPM_TYPE_DBUS_MONITOR,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(XfpmDBusMonitorClass, system_bus_connection_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ g_signal_new ("system-bus-connection-changed",
+ XFPM_TYPE_DBUS_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (XfpmDBusMonitorClass, system_bus_connection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
object_class->finalize = xfpm_dbus_monitor_finalize;
@@ -170,37 +326,20 @@
static void
xfpm_dbus_monitor_init (XfpmDBusMonitor *monitor)
{
- GError *error = NULL;
-
monitor->priv = XFPM_DBUS_MONITOR_GET_PRIVATE (monitor);
- monitor->priv->bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
- monitor->priv->array = g_ptr_array_new ();
+ monitor->priv->session_proxy = NULL;
+ monitor->priv->system_proxy = NULL;
- monitor->priv->proxy = dbus_g_proxy_new_for_name_owner (monitor->priv->bus,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- "org.freedesktop.DBus",
- NULL);
- if ( !monitor->priv->proxy )
- {
- g_critical ("Unable to create proxy on /org/freedesktop/DBus");
- return;
- }
+ monitor->priv->names_array = g_ptr_array_new ();
+ monitor->priv->services_array = g_ptr_array_new ();
+
+ monitor->priv->session_bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
+ monitor->priv->system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- dbus_g_proxy_add_signal (monitor->priv->proxy, "NameOwnerChanged",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (monitor->priv->proxy, "NameOwnerChanged",
- G_CALLBACK(xfpm_dbus_monitor_name_owner_changed_cb), monitor, NULL);
-
- monitor->priv->system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ xfpm_dbus_monitor_session (monitor);
+ xfpm_dbus_monitor_system (monitor);
- if ( error )
- {
- g_error ("Error in getting connection to the system bus %s:", error->message);
- }
-
dbus_connection_set_exit_on_disconnect (dbus_g_connection_get_connection (monitor->priv->system_bus),
FALSE);
@@ -208,36 +347,47 @@
xfpm_dbus_monitor_system_bus_filter,
monitor,
NULL);
+
+ monitor->priv->hal_connected = xfpm_dbus_name_has_owner (dbus_g_connection_get_connection (monitor->priv->system_bus),
+ "org.freedesktop.Hal");
+
+ xfpm_dbus_monitor_add_service (monitor, DBUS_BUS_SESSION, "org.freedesktop.Hal");
}
static void
xfpm_dbus_monitor_finalize (GObject *object)
{
XfpmDBusMonitor *monitor;
- guint i;
- gchar *name;
monitor = XFPM_DBUS_MONITOR (object);
+ if ( monitor->priv->session_proxy )
+ {
+ dbus_g_proxy_disconnect_signal (monitor->priv->session_proxy, "NameOwnerChanged",
+ G_CALLBACK (xfpm_dbus_monitor_session_name_owner_changed_cb), monitor);
+ g_object_unref (monitor->priv->session_proxy);
+ }
+
+ if ( monitor->priv->system_proxy )
+ {
+ dbus_g_proxy_disconnect_signal (monitor->priv->system_proxy, "NameOwnerChanged",
+ G_CALLBACK (xfpm_dbus_monitor_system_name_owner_changed_cb), monitor);
+ g_object_unref (monitor->priv->system_proxy);
+ }
+
dbus_connection_remove_filter (dbus_g_connection_get_connection (monitor->priv->system_bus),
xfpm_dbus_monitor_system_bus_filter,
monitor);
dbus_g_connection_unref (monitor->priv->system_bus);
-
- dbus_g_connection_unref (monitor->priv->bus);
-
- g_object_unref (monitor->priv->proxy);
+ dbus_g_connection_unref (monitor->priv->session_bus);
- for ( i = 0; i<monitor->priv->array->len; i++)
- {
- name = g_ptr_array_index (monitor->priv->array, i);
- g_ptr_array_remove (monitor->priv->array, name);
- g_free (name);
- }
-
- g_ptr_array_free (monitor->priv->array, TRUE);
+ g_ptr_array_foreach (monitor->priv->names_array, (GFunc) xfpm_dbus_monitor_free_watch_data, NULL);
+ g_ptr_array_foreach (monitor->priv->services_array, (GFunc) xfpm_dbus_monitor_free_watch_data, NULL);
+ g_ptr_array_free (monitor->priv->names_array, TRUE);
+ g_ptr_array_free (monitor->priv->services_array, TRUE);
+
G_OBJECT_CLASS (xfpm_dbus_monitor_parent_class)->finalize (object);
}
@@ -245,6 +395,7 @@
xfpm_dbus_monitor_new (void)
{
static gpointer xfpm_dbus_monitor_object = NULL;
+
if ( G_LIKELY (xfpm_dbus_monitor_object != NULL) )
{
g_object_ref (xfpm_dbus_monitor_object);
@@ -258,45 +409,76 @@
return XFPM_DBUS_MONITOR (xfpm_dbus_monitor_object);
}
-gboolean xfpm_dbus_monitor_add_match (XfpmDBusMonitor *monitor, const gchar *unique_name)
+gboolean xfpm_dbus_monitor_add_unique_name (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *unique_name)
{
- guint i = 0;
- gchar *name;
+ XfpmWatchData *watch;
g_return_val_if_fail (XFPM_IS_DBUS_MONITOR (monitor), FALSE);
g_return_val_if_fail (unique_name != NULL, FALSE);
- for ( i = 0; i<monitor->priv->array->len; i++)
+ /* We have it already */
+ if ( xfpm_dbus_monitor_get_watch_data (monitor->priv->names_array, unique_name, bus_type) )
+ return FALSE;
+
+ TRACE ("Monitoring application with unique_name %s", unique_name);
+
+ watch = g_new0 (XfpmWatchData , 1);
+ watch->name = g_strdup (unique_name);
+ watch->bus_type = bus_type;
+
+ g_ptr_array_add (monitor->priv->names_array, watch);
+ return TRUE;
+}
+
+void xfpm_dbus_monitor_remove_unique_name (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *unique_name)
+{
+ XfpmWatchData *watch;
+
+ g_return_if_fail (XFPM_IS_DBUS_MONITOR (monitor));
+
+ watch = xfpm_dbus_monitor_get_watch_data (monitor->priv->names_array, unique_name, bus_type);
+
+ if ( watch )
{
- name = g_ptr_array_index (monitor->priv->array, i);
- if ( g_strcmp0 (name, unique_name) == 0 )
- {
- return FALSE;
- }
+ g_ptr_array_remove (monitor->priv->names_array, watch);
+ xfpm_dbus_monitor_free_watch_data (watch);
}
+}
+
+gboolean xfpm_dbus_monitor_add_service (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *service_name)
+{
+ XfpmWatchData *watch;
- g_ptr_array_add (monitor->priv->array, g_strdup (unique_name));
+ g_return_val_if_fail (XFPM_IS_DBUS_MONITOR (monitor), FALSE);
+ if ( xfpm_dbus_monitor_get_watch_data (monitor->priv->services_array, service_name, bus_type ) )
+ return FALSE;
+
+ watch = g_new0 (XfpmWatchData , 1);
+ watch->name = g_strdup (service_name);
+ watch->bus_type = bus_type;
+
+ g_ptr_array_add (monitor->priv->services_array, watch);
+
return TRUE;
}
-gboolean xfpm_dbus_monitor_remove_match (XfpmDBusMonitor *monitor, const gchar *unique_name)
+void xfpm_dbus_monitor_remove_service (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *service_name)
{
- guint i ;
- gchar *name;
+ XfpmWatchData *watch;
- g_return_val_if_fail (XFPM_IS_DBUS_MONITOR (monitor), FALSE);
+ g_return_if_fail (XFPM_IS_DBUS_MONITOR (monitor));
- for ( i = 0; i<monitor->priv->array->len; i++)
+ watch = xfpm_dbus_monitor_get_watch_data (monitor->priv->services_array, service_name, bus_type);
+
+ if ( watch )
{
- name = g_ptr_array_index (monitor->priv->array, i);
-
- if ( g_strcmp0 (name, unique_name) == 0 )
- {
- g_free (name);
- g_ptr_array_remove_index (monitor->priv->array, i);
- return TRUE;
- }
+ g_ptr_array_remove (monitor->priv->services_array, watch);
+ xfpm_dbus_monitor_free_watch_data (watch);
}
- return FALSE;
}
+
+gboolean xfpm_dbus_monitor_hal_connected (XfpmDBusMonitor *monitor)
+{
+ return monitor->priv->hal_connected;
+}
Modified: xfce4-power-manager/trunk/src/xfpm-dbus-monitor.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-monitor.h 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-monitor.h 2009-06-27 22:19:57 UTC (rev 7631)
@@ -22,6 +22,7 @@
#define __XFPM_DBUS_MONITOR_H
#include <glib-object.h>
+#include <dbus/dbus.h>
G_BEGIN_DECLS
@@ -40,30 +41,59 @@
typedef struct
{
- GObjectClass parent_class;
+ GObjectClass parent_class;
+
/*
- * Connection lost on the session bus
+ * Unique name connection lost.
*/
- void (*connection_lost) (XfpmDBusMonitor *monitor,
- gchar *unique_name);
-
+ void (*unique_name_lost) (XfpmDBusMonitor *monitor,
+ gchar *unique_name,
+ gboolean on_session);
+
/*
+ * A Service connection changed.
+ */
+ void (*service_connection_changed) (XfpmDBusMonitor *monitor,
+ gchar *service_name,
+ gboolean connected,
+ gboolean on_session);
+
+ /*
+ * Hal Connection
+ */
+ void (*hal_connection_changed) (XfpmDBusMonitor *monitor,
+ gboolean connected);
+
+ /*
* DBus: system bus disconnected
*/
- void (*system_bus_connection_changed) (XfpmDBusMonitor *monitor,
- gboolean connected);
+ void (*system_bus_connection_changed) (XfpmDBusMonitor *monitor,
+ gboolean connected);
} XfpmDBusMonitorClass;
-GType xfpm_dbus_monitor_get_type (void) G_GNUC_CONST;
-XfpmDBusMonitor *xfpm_dbus_monitor_new (void);
+GType xfpm_dbus_monitor_get_type (void) G_GNUC_CONST;
-gboolean xfpm_dbus_monitor_add_match (XfpmDBusMonitor *monitor,
- const gchar *unique_name);
+XfpmDBusMonitor *xfpm_dbus_monitor_new (void);
+
+gboolean xfpm_dbus_monitor_add_unique_name (XfpmDBusMonitor *monitor,
+ DBusBusType bus_type,
+ const gchar *unique_name);
-gboolean xfpm_dbus_monitor_remove_match (XfpmDBusMonitor *monitor,
- const gchar *unique_name);
+void xfpm_dbus_monitor_remove_unique_name (XfpmDBusMonitor *monitor,
+ DBusBusType bus_type,
+ const gchar *unique_name);
+gboolean xfpm_dbus_monitor_add_service (XfpmDBusMonitor *monitor,
+ DBusBusType bus_type,
+ const gchar *service_name);
+
+void xfpm_dbus_monitor_remove_service (XfpmDBusMonitor *monitor,
+ DBusBusType bus_type,
+ const gchar *service_name);
+
+gboolean xfpm_dbus_monitor_hal_connected (XfpmDBusMonitor *monitor);
+
G_END_DECLS
#endif /* __XFPM_DBUS_MONITOR_H */
Modified: xfce4-power-manager/trunk/src/xfpm-inhibit.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-inhibit.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-inhibit.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -176,7 +176,7 @@
if ( inhibitor )
{
- xfpm_dbus_monitor_remove_match (inhibit->priv->monitor, inhibitor->unique_name);
+ xfpm_dbus_monitor_remove_unique_name (inhibit->priv->monitor, DBUS_BUS_SESSION, inhibitor->unique_name);
xfpm_inhibit_free_inhibitor (inhibit, inhibitor);
return TRUE;
}
@@ -184,10 +184,14 @@
}
static void
-xfpm_inhibit_connection_lost_cb (XfpmDBusMonitor *monitor, gchar *unique_name, XfpmInhibit *inhibit)
+xfpm_inhibit_connection_lost_cb (XfpmDBusMonitor *monitor, gchar *unique_name,
+ gboolean on_session, XfpmInhibit *inhibit)
{
Inhibitor *inhibitor;
+ if ( !on_session)
+ return;
+
inhibitor = xfpm_inhibit_find_application_by_unique_connection_name (inhibit, unique_name );
if ( inhibitor )
@@ -204,7 +208,7 @@
GObjectClass *object_class = G_OBJECT_CLASS(klass);
signals[HAS_INHIBIT_CHANGED] =
- g_signal_new("has-inhibit-changed",
+ g_signal_new ("has-inhibit-changed",
XFPM_TYPE_INHIBIT,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(XfpmInhibitClass, has_inhibit_changed),
@@ -214,27 +218,27 @@
object_class->finalize = xfpm_inhibit_finalize;
- g_type_class_add_private(klass,sizeof(XfpmInhibitPrivate));
+ g_type_class_add_private (klass, sizeof (XfpmInhibitPrivate));
xfpm_inhibit_dbus_class_init (klass);
}
static void
-xfpm_inhibit_init(XfpmInhibit *inhibit)
+xfpm_inhibit_init (XfpmInhibit *inhibit)
{
inhibit->priv = XFPM_INHIBIT_GET_PRIVATE(inhibit);
inhibit->priv->array = g_ptr_array_new ();
inhibit->priv->monitor = xfpm_dbus_monitor_new ();
- g_signal_connect (inhibit->priv->monitor, "connection-lost",
+ g_signal_connect (inhibit->priv->monitor, "unique-name-lost",
G_CALLBACK (xfpm_inhibit_connection_lost_cb), inhibit);
xfpm_inhibit_dbus_init (inhibit);
}
static void
-xfpm_inhibit_finalize(GObject *object)
+xfpm_inhibit_finalize (GObject *object)
{
XfpmInhibit *inhibit;
Inhibitor *inhibitor;
@@ -338,7 +342,7 @@
xfpm_inhibit_has_inhibit_changed (inhibit);
- xfpm_dbus_monitor_add_match (inhibit->priv->monitor, sender);
+ xfpm_dbus_monitor_add_unique_name (inhibit->priv->monitor, DBUS_BUS_SESSION, sender);
g_free (sender);
dbus_g_method_return (context, cookie);
Modified: xfce4-power-manager/trunk/src/xfpm-manager.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-manager.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-manager.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -37,7 +37,6 @@
#include <libnotify/notify.h>
-#include "libxfpm/hal-monitor.h"
#include "libxfpm/xfpm-string.h"
#include "libxfpm/xfpm-dbus.h"
#include "libxfpm/xfpm-popups.h"
@@ -61,9 +60,8 @@
{
XfpmSession *session;
XfpmEngine *engine;
- XfpmDBusMonitor *dbus;
- HalMonitor *monitor;
+ XfpmDBusMonitor *monitor;
DBusGConnection *session_bus;
};
@@ -71,7 +69,7 @@
G_DEFINE_TYPE(XfpmManager, xfpm_manager, G_TYPE_OBJECT)
static void
-xfpm_manager_hal_connection_changed_cb (HalMonitor *monitor, gboolean connected, XfpmManager *manager)
+xfpm_manager_hal_connection_changed_cb (XfpmDBusMonitor *monitor, gboolean connected, XfpmManager *manager)
{
TRACE("connected = %s", xfpm_bool_to_string (connected));
@@ -100,6 +98,12 @@
}
static void
+xfpm_manager_session_die_cb (XfpmSession *session, XfpmManager *manager)
+{
+ xfpm_manager_quit (manager);
+}
+
+static void
xfpm_manager_class_init (XfpmManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -114,15 +118,19 @@
{
manager->priv = XFPM_MANAGER_GET_PRIVATE(manager);
- manager->priv->session_bus = NULL;
manager->priv->engine = NULL;
- manager->priv->monitor = NULL;
manager->priv->session = xfpm_session_new ();
- manager->priv->dbus = xfpm_dbus_monitor_new ();
+ manager->priv->monitor = xfpm_dbus_monitor_new ();
- g_signal_connect (G_OBJECT (manager->priv->dbus), "system_bus_connection_changed",
+ g_signal_connect (manager->priv->monitor, "hal-connection-changed",
+ G_CALLBACK(xfpm_manager_hal_connection_changed_cb), manager);
+
+ g_signal_connect (G_OBJECT (manager->priv->monitor), "system_bus_connection_changed",
G_CALLBACK (xfpm_manager_system_bus_connection_changed_cb), manager);
+
+ g_signal_connect (manager->priv->session, "session-die",
+ G_CALLBACK (xfpm_manager_session_die_cb), manager);
notify_init ("xfce4-power-manager");
}
@@ -135,7 +143,7 @@
manager = XFPM_MANAGER(object);
if ( manager->priv->session_bus )
- dbus_g_connection_unref(manager->priv->session_bus);
+ dbus_g_connection_unref (manager->priv->session_bus);
if ( manager->priv->engine )
g_object_unref (manager->priv->engine);
@@ -144,9 +152,7 @@
g_object_unref (manager->priv->monitor);
- g_object_unref (manager->priv->dbus);
-
- G_OBJECT_CLASS(xfpm_manager_parent_class)->finalize(object);
+ G_OBJECT_CLASS (xfpm_manager_parent_class)->finalize (object);
}
static void
@@ -163,9 +169,9 @@
xfpm_manager_quit (XfpmManager *manager)
{
xfpm_manager_release_names (manager);
- xfpm_session_quit (manager->priv->session);
+ //xfpm_session_quit (manager->priv->session);
- g_object_unref(G_OBJECT(manager));
+ g_object_unref (G_OBJECT (manager));
gtk_main_quit ();
return TRUE;
@@ -188,12 +194,6 @@
}
}
-static void
-xfpm_manager_session_die_cb (XfpmSession *session, XfpmManager *manager)
-{
- xfpm_manager_quit (manager);
-}
-
XfpmManager *
xfpm_manager_new (DBusGConnection *bus)
{
@@ -214,13 +214,8 @@
xfpm_manager_reserve_names (manager);
- manager->priv->monitor = hal_monitor_new ();
+ hal_running = xfpm_dbus_monitor_hal_connected (manager->priv->monitor);
- g_signal_connect (manager->priv->monitor, "connection-changed",
- G_CALLBACK(xfpm_manager_hal_connection_changed_cb), manager);
-
- hal_running = hal_monitor_get_connected (manager->priv->monitor);
-
if (!hal_running )
{
xfpm_error (_("Xfce power manager"), _("HAL daemon is not running"));
@@ -228,11 +223,6 @@
}
manager->priv->engine = xfpm_engine_new ();
- manager->priv->session = xfpm_session_new ();
-
- g_signal_connect (manager->priv->session, "session-die",
- G_CALLBACK (xfpm_manager_session_die_cb), manager);
-
out:
;
}
@@ -268,26 +258,26 @@
#include "xfce-power-manager-dbus-server.h"
static void
-xfpm_manager_dbus_class_init(XfpmManagerClass *klass)
+xfpm_manager_dbus_class_init (XfpmManagerClass *klass)
{
- dbus_g_object_type_install_info(G_TYPE_FROM_CLASS(klass),
- &dbus_glib_xfpm_manager_object_info);
+ dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_xfpm_manager_object_info);
}
static void
-xfpm_manager_dbus_init(XfpmManager *manager)
+xfpm_manager_dbus_init (XfpmManager *manager)
{
- dbus_g_connection_register_g_object(manager->priv->session_bus,
+ dbus_g_connection_register_g_object (manager->priv->session_bus,
"/org/xfce/PowerManager",
- G_OBJECT(manager));
+ G_OBJECT (manager));
}
static gboolean
-xfpm_manager_dbus_quit(XfpmManager *manager, GError **error)
+xfpm_manager_dbus_quit (XfpmManager *manager, GError **error)
{
TRACE("Quit message received\n");
- xfpm_manager_quit(manager);
+ xfpm_manager_quit (manager);
return TRUE;
}
Modified: xfce4-power-manager/trunk/src/xfpm-marshal.list
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-marshal.list 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-marshal.list 2009-06-27 22:19:57 UTC (rev 7631)
@@ -1,2 +1,4 @@
VOID:POINTER,UINT,UINT,UINT
VOID:BOOLEAN,ENUM
+VOID:STRING,BOOLEAN
+VOID:STRING,BOOLEAN,BOOLEAN
Modified: xfce4-power-manager/trunk/src/xfpm-session.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-session.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-session.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -152,9 +152,6 @@
if ( session->priv->client != NULL )
{
- if ( session->priv->managed )
- logout_session (session->priv->client);
-
client_session_free (session->priv->client);
}
Modified: xfce4-power-manager/trunk/src/xfpm-shutdown.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-shutdown.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-shutdown.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -34,9 +34,7 @@
#include <glib.h>
-#include "libxfpm/hal-monitor.h"
#include "libxfpm/hal-device.h"
-#include "libxfpm/hal-monitor.h"
#include "libxfpm/xfpm-string.h"
#include "libxfpm/xfpm-common.h"
@@ -44,6 +42,7 @@
#include "xfpm-shutdown.h"
#include "xfpm-session.h"
#include "xfpm-network-manager.h"
+#include "xfpm-dbus-monitor.h"
#include "xfpm-errors.h"
#define DUPLICATE_SHUTDOWN_REQUEST 8.0f
@@ -60,7 +59,7 @@
struct XfpmShutdownPrivate
{
DBusGConnection *bus;
- HalMonitor *monitor;
+ XfpmDBusMonitor *monitor;
XfpmSession *session;
gboolean connected;
@@ -140,7 +139,7 @@
}
static void
-xfpm_shutdown_connection_changed_cb (HalMonitor *monitor, gboolean connected, XfpmShutdown *shutdown)
+xfpm_shutdown_connection_changed_cb (XfpmDBusMonitor *monitor, gboolean connected, XfpmShutdown *shutdown)
{
TRACE ("Hal connection changed=%s", xfpm_bool_to_string (connected));
shutdown->priv->connected = connected;
@@ -209,10 +208,12 @@
return;
}
- shutdown->priv->monitor = hal_monitor_new ();
- g_signal_connect (shutdown->priv->monitor, "connection-changed",
+ shutdown->priv->monitor = xfpm_dbus_monitor_new ();
+
+ g_signal_connect (shutdown->priv->monitor, "hal-connection-changed",
G_CALLBACK (xfpm_shutdown_connection_changed_cb), shutdown);
- shutdown->priv->connected = hal_monitor_get_connected (shutdown->priv->monitor);
+
+ shutdown->priv->connected = xfpm_dbus_monitor_hal_connected (shutdown->priv->monitor);
xfpm_shutdown_power_management_check (shutdown);
}
@@ -252,8 +253,7 @@
if ( shutdown->priv->bus )
dbus_g_connection_unref (shutdown->priv->bus);
- if ( shutdown->priv->monitor )
- g_object_unref (shutdown->priv->monitor);
+ g_object_unref (shutdown->priv->monitor);
g_object_unref (shutdown->priv->session);
Modified: xfce4-power-manager/trunk/src/xfpm-tray-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-tray-icon.c 2009-06-27 09:18:09 UTC (rev 7630)
+++ xfce4-power-manager/trunk/src/xfpm-tray-icon.c 2009-06-27 22:19:57 UTC (rev 7631)
@@ -35,10 +35,10 @@
#include "libxfpm/xfpm-common.h"
#include "libxfpm/xfpm-string.h"
#include "libxfpm/xfpm-notify.h"
-#include "libxfpm/hal-monitor.h"
#include "xfpm-tray-icon.h"
#include "xfpm-shutdown.h"
+#include "xfpm-dbus-monitor.h"
#include "xfpm-inhibit.h"
#include "xfpm-screen-saver.h"
#include "xfpm-xfconf.h"
@@ -56,16 +56,16 @@
XfpmNotify *notify;
XfpmInhibit *inhibit;
XfpmScreenSaver *srv;
- HalMonitor *hal_monitor;
+ XfpmDBusMonitor *monitor;
- GtkStatusIcon *icon;
- GQuark icon_quark;
- gboolean info_menu;
- gboolean inhibited;
- gboolean data_available;
+ GtkStatusIcon *icon;
+ GQuark icon_quark;
+ gboolean info_menu;
+ gboolean inhibited;
+ gboolean data_available;
- gulong sig;
- gulong sig_1;
+ gulong sig;
+ gulong sig_1;
};
enum
@@ -247,7 +247,6 @@
xfpm_tray_icon_popup_menu_cb (GtkStatusIcon *icon, guint button,
guint activate_time, XfpmTrayIcon *tray)
{
-
GtkWidget *menu, *mi, *img;
gboolean can_suspend = FALSE;
gboolean can_hibernate = FALSE ;
@@ -272,8 +271,8 @@
if ( caller && can_hibernate && tray->priv->data_available )
{
gtk_widget_set_sensitive (mi, TRUE);
- g_signal_connect (G_OBJECT(mi), "activate",
- G_CALLBACK(xfpm_tray_icon_hibernate_cb), tray);
+ g_signal_connect (G_OBJECT (mi), "activate",
+ G_CALLBACK (xfpm_tray_icon_hibernate_cb), tray);
}
gtk_widget_show(mi);
gtk_menu_shell_append(GTK_MENU_SHELL(menu),mi);
@@ -381,7 +380,7 @@
}
static void
-xfpm_tray_icon_hal_connection_changed_cb (HalMonitor *monitor, gboolean connected, XfpmTrayIcon *tray)
+xfpm_tray_icon_hal_connection_changed_cb (XfpmDBusMonitor *monitor, gboolean connected, XfpmTrayIcon *tray)
{
if ( connected == FALSE )
xfpm_tray_icon_set_tooltip (tray, _("No data available"));
@@ -430,7 +429,7 @@
tray->priv->inhibited = FALSE;
tray->priv->inhibit = xfpm_inhibit_new ();
tray->priv->srv = xfpm_screen_saver_new ();
- tray->priv->hal_monitor = hal_monitor_new ();
+ tray->priv->monitor = xfpm_dbus_monitor_new ();
tray->priv->info_menu = TRUE;
tray->priv->icon_quark = 0;
@@ -443,13 +442,14 @@
g_signal_connect_swapped (tray->priv->icon, "activate",
G_CALLBACK (xfpm_tray_icon_activated_cb), tray);
+
tray->priv->sig = g_signal_connect (tray->priv->inhibit, "has-inhibit-changed",
G_CALLBACK (xfpm_tray_icon_inhibit_changed_cb), tray);
- tray->priv->sig_1 = g_signal_connect (tray->priv->hal_monitor, "connection_changed",
+ tray->priv->sig_1 = g_signal_connect (tray->priv->monitor, "hal-connection-changed",
G_CALLBACK (xfpm_tray_icon_hal_connection_changed_cb), tray);
- tray->priv->data_available = hal_monitor_get_connected (tray->priv->hal_monitor);
+ tray->priv->data_available = xfpm_dbus_monitor_hal_connected (tray->priv->monitor);
}
static void
@@ -462,10 +462,10 @@
if ( g_signal_handler_is_connected (tray->priv->inhibit, tray->priv->sig ) )
g_signal_handler_disconnect (G_OBJECT (tray->priv->inhibit), tray->priv->sig);
- if ( g_signal_handler_is_connected (tray->priv->hal_monitor, tray->priv->sig_1) )
- g_signal_handler_disconnect (G_OBJECT (tray->priv->hal_monitor), tray->priv->sig_1);
+ if ( g_signal_handler_is_connected (tray->priv->monitor, tray->priv->sig_1) )
+ g_signal_handler_disconnect (G_OBJECT (tray->priv->monitor), tray->priv->sig_1);
- g_object_unref (tray->priv->hal_monitor);
+ g_object_unref (tray->priv->monitor);
g_object_unref (tray->priv->icon);
More information about the Goodies-commits
mailing list