gnome-panel r11130 - in trunk/gnome-panel: . libpanel-util



Author: vuntz
Date: Thu Jun  5 23:37:43 2008
New Revision: 11130
URL: http://svn.gnome.org/viewvc/gnome-panel?rev=11130&view=rev

Log:
2008-06-06  Vincent Untz  <vuntz gnome org>

	* libpanel-util/panel-cleanup.[ch]: add description
	* libpanel-util/panel-keyfile.[ch]: ditto
	* libpanel-util/Makefile.am: add new file
	* libpanel-util/panel-dbus-service.[ch]: new utility object to make it
	easier to use dbus services. Maybe this is insane, but I have the
	feeling I'm going to duplicate lots of code without this.
	* panel-power-manager.[ch]: basically port to PanelDBusService and:
	(panel_get_power_manager): use panel_cleanup_register()


Added:
   trunk/gnome-panel/libpanel-util/panel-dbus-service.c
   trunk/gnome-panel/libpanel-util/panel-dbus-service.h
Modified:
   trunk/gnome-panel/ChangeLog
   trunk/gnome-panel/libpanel-util/Makefile.am
   trunk/gnome-panel/libpanel-util/panel-cleanup.c
   trunk/gnome-panel/libpanel-util/panel-cleanup.h
   trunk/gnome-panel/libpanel-util/panel-keyfile.c
   trunk/gnome-panel/libpanel-util/panel-keyfile.h
   trunk/gnome-panel/panel-power-manager.c
   trunk/gnome-panel/panel-power-manager.h

Modified: trunk/gnome-panel/libpanel-util/Makefile.am
==============================================================================
--- trunk/gnome-panel/libpanel-util/Makefile.am	(original)
+++ trunk/gnome-panel/libpanel-util/Makefile.am	Thu Jun  5 23:37:43 2008
@@ -22,6 +22,8 @@
 libpanel_util_la_SOURCES=	\
 	panel-cleanup.c			\
 	panel-cleanup.h			\
+	panel-dbus-service.c		\
+	panel-dbus-service.h		\
 	panel-keyfile.c			\
 	panel-keyfile.h			\
 	$(NULL)

Modified: trunk/gnome-panel/libpanel-util/panel-cleanup.c
==============================================================================
--- trunk/gnome-panel/libpanel-util/panel-cleanup.c	(original)
+++ trunk/gnome-panel/libpanel-util/panel-cleanup.c	Thu Jun  5 23:37:43 2008
@@ -1,5 +1,5 @@
 /*
- * panel-cleanup.c:
+ * panel-cleanup.c: utility to clean up things on exit
  *
  * Copyright (C) 2008 Novell, Inc.
  *

Modified: trunk/gnome-panel/libpanel-util/panel-cleanup.h
==============================================================================
--- trunk/gnome-panel/libpanel-util/panel-cleanup.h	(original)
+++ trunk/gnome-panel/libpanel-util/panel-cleanup.h	Thu Jun  5 23:37:43 2008
@@ -1,5 +1,5 @@
 /*
- * panel-cleanup.h:
+ * panel-cleanup.h: utility to clean up things on exit
  *
  * Copyright (C) 2008 Novell, Inc.
  *

Added: trunk/gnome-panel/libpanel-util/panel-dbus-service.c
==============================================================================
--- (empty file)
+++ trunk/gnome-panel/libpanel-util/panel-dbus-service.c	Thu Jun  5 23:37:43 2008
@@ -0,0 +1,307 @@
+/*
+ * panel-dbus-service.c: a simple base object to use a DBus service. Only
+ * useful when subclassed.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Based on code from panel-power-manager.c:
+ *  Copyright (C) 2006 Ray Strode <rstrode redhat com>
+ *  (not sure the copyright header was complete)
+ *
+ * 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.
+ *
+ * Authors:
+ *	Vincent Untz <vuntz gnome org>
+ */
+
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <dbus/dbus-glib.h>
+
+#include "panel-dbus-service.h"
+
+struct _PanelDBusServicePrivate {
+	DBusGConnection *dbus_connection;
+	DBusGProxy      *bus_proxy;
+	DBusGProxy      *service_proxy;
+	guint32          is_connected : 1;
+
+	const char      *service_name;
+	const char      *service_path;
+	const char      *service_interface;
+};
+
+static void panel_dbus_service_finalize (GObject *object);
+static void panel_dbus_service_class_install_properties (PanelDBusServiceClass *service_class);
+
+static void panel_dbus_service_get_property (GObject    *object,
+					     guint       prop_id,
+					     GValue     *value,
+					     GParamSpec *pspec);
+
+enum {
+  PROP_0 = 0,
+  PROP_IS_CONNECTED
+};
+
+G_DEFINE_TYPE (PanelDBusService, panel_dbus_service, G_TYPE_OBJECT);
+
+static void
+panel_dbus_service_class_init (PanelDBusServiceClass *service_class)
+{
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (service_class);
+
+	object_class->finalize = panel_dbus_service_finalize;
+
+	panel_dbus_service_class_install_properties (service_class);
+
+	g_type_class_add_private (service_class,
+				  sizeof (PanelDBusServicePrivate));
+}
+
+static void
+panel_dbus_service_class_install_properties (PanelDBusServiceClass *service_class)
+{
+	GObjectClass *object_class;
+	GParamSpec *param_spec;
+
+	object_class = G_OBJECT_CLASS (service_class);
+	object_class->get_property = panel_dbus_service_get_property;
+
+	param_spec = g_param_spec_boolean ("is-connected",
+					   "Is connected",
+					   "Whether the panel is connected to "
+					   "a DBus service",
+					   FALSE,
+					   G_PARAM_READABLE);
+	g_object_class_install_property (object_class, PROP_IS_CONNECTED,
+					 param_spec);
+}
+
+static void
+panel_dbus_service_init (PanelDBusService *service)
+{
+	service->priv = G_TYPE_INSTANCE_GET_PRIVATE (service,
+						     PANEL_TYPE_DBUS_SERVICE,
+						     PanelDBusServicePrivate);
+
+	service->priv->dbus_connection = NULL;
+	service->priv->bus_proxy = NULL;
+	service->priv->service_proxy = NULL;
+	service->priv->is_connected = FALSE;
+
+	service->priv->service_name = NULL;
+	service->priv->service_path = NULL;
+	service->priv->service_interface = NULL;
+}
+
+static void
+panel_dbus_service_finalize (GObject *object)
+{
+	PanelDBusService *service;
+		
+	service = PANEL_DBUS_SERVICE (object);
+
+	if (service->priv->dbus_connection != NULL) {
+		dbus_g_connection_unref (service->priv->dbus_connection);
+		service->priv->dbus_connection = NULL;
+	}
+
+	if (service->priv->bus_proxy != NULL) {
+		g_object_unref (service->priv->bus_proxy);
+		service->priv->bus_proxy = NULL;
+	}
+
+	if (service->priv->service_proxy != NULL) {
+		g_object_unref (service->priv->service_proxy);
+		service->priv->service_proxy = NULL;
+	}
+
+	G_OBJECT_CLASS (panel_dbus_service_parent_class)->finalize (object);
+}
+
+static void
+panel_dbus_service_get_property (GObject    *object,
+				 guint       prop_id,
+				 GValue     *value,
+				 GParamSpec *pspec)
+{
+	PanelDBusService *service;
+		
+	service = PANEL_DBUS_SERVICE (object);
+
+	switch (prop_id) {
+	case PROP_IS_CONNECTED:
+		g_value_set_boolean (value,
+				     service->priv->is_connected);
+		break;
+
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+						   prop_id,
+						   pspec);
+	}
+}
+
+static void
+panel_dbus_service_on_name_owner_changed (DBusGProxy       *bus_proxy,
+					  const char       *name,
+					  const char       *prev_owner,
+					  const char       *new_owner,
+					  PanelDBusService *service)
+{
+	g_assert (service->priv->service_name != NULL);
+
+	if (name && strcmp (name, service->priv->service_name) != 0)
+		return;
+
+	if (service->priv->service_proxy != NULL) {
+		g_object_unref (service->priv->service_proxy);
+		service->priv->service_proxy = NULL;
+	}
+
+	panel_dbus_service_ensure_connection (service, NULL);
+}
+
+gboolean
+panel_dbus_service_ensure_connection (PanelDBusService  *service,
+				      GError           **error)
+{
+	GError   *connection_error;
+	gboolean  is_connected;
+
+	g_return_val_if_fail (PANEL_IS_DBUS_SERVICE (service), FALSE);
+
+	if (!service->priv->service_name ||
+	    !service->priv->service_path ||
+	    !service->priv->service_interface)
+		return FALSE;
+
+	connection_error = NULL;
+	if (service->priv->dbus_connection == NULL) {
+		service->priv->dbus_connection = dbus_g_bus_get (DBUS_BUS_SESSION,
+								 &connection_error);
+
+		if (service->priv->dbus_connection == NULL) {
+			g_propagate_error (error, connection_error);
+			is_connected = FALSE;
+			goto out;
+		}
+	}
+
+	if (service->priv->bus_proxy == NULL) {
+		service->priv->bus_proxy =
+			dbus_g_proxy_new_for_name_owner (service->priv->dbus_connection,
+							 DBUS_SERVICE_DBUS,
+							 DBUS_PATH_DBUS,
+							 DBUS_INTERFACE_DBUS,
+							 &connection_error);
+
+		if (service->priv->bus_proxy == NULL) {
+			g_propagate_error (error, connection_error);
+			is_connected = FALSE;
+			goto out;
+		}
+
+		dbus_g_proxy_add_signal (service->priv->bus_proxy,
+					 "NameOwnerChanged",
+					 G_TYPE_STRING,
+					 G_TYPE_STRING,
+					 G_TYPE_STRING,
+					 G_TYPE_INVALID);
+		dbus_g_proxy_connect_signal (service->priv->bus_proxy,
+					     "NameOwnerChanged",
+					     G_CALLBACK (panel_dbus_service_on_name_owner_changed),
+					     service, NULL);
+	}
+
+	if (service->priv->service_proxy == NULL) {
+		service->priv->service_proxy =
+			dbus_g_proxy_new_for_name_owner (
+					service->priv->dbus_connection,
+					service->priv->service_name,
+					service->priv->service_path,
+					service->priv->service_interface,
+					&connection_error);
+
+		if (service->priv->service_proxy == NULL) {
+			g_propagate_error (error, connection_error);
+			is_connected = FALSE;
+			goto out;
+		}
+	}
+	is_connected = TRUE;
+
+out:
+	if (service->priv->is_connected != is_connected) {
+		service->priv->is_connected = is_connected;
+		g_object_notify (G_OBJECT (service), "is-connected");
+	}
+
+	if (!is_connected) {
+		if (service->priv->dbus_connection == NULL) {
+			if (service->priv->bus_proxy != NULL) {
+				g_object_unref (service->priv->bus_proxy);
+				service->priv->bus_proxy = NULL;
+			}
+
+			if (service->priv->service_proxy != NULL) {
+				g_object_unref (service->priv->service_proxy);
+				service->priv->service_proxy = NULL;
+			}
+		} else if (service->priv->bus_proxy == NULL) {
+			if (service->priv->service_proxy != NULL) {
+				g_object_unref (service->priv->service_proxy);
+				service->priv->service_proxy = NULL;
+			}
+		}
+	}
+
+	return is_connected;
+}
+
+void
+panel_dbus_service_init_service (PanelDBusService *service,
+				 const char       *name,
+				 const char       *path,
+				 const char       *interface)
+{
+	g_return_if_fail (PANEL_IS_DBUS_SERVICE (service));
+
+	g_assert (name != NULL);
+	g_assert (path != NULL);
+	g_assert (interface != NULL);
+	g_assert (service->priv->service_name == NULL);
+	g_assert (service->priv->service_path == NULL);
+	g_assert (service->priv->service_interface == NULL);
+
+	service->priv->service_name = name;
+	service->priv->service_path = path;
+	service->priv->service_interface = interface;
+}
+
+DBusGProxy *
+panel_dbus_service_get_proxy (PanelDBusService *service)
+{
+	g_return_val_if_fail (PANEL_IS_DBUS_SERVICE (service), NULL);
+
+	return service->priv->service_proxy;
+}

Added: trunk/gnome-panel/libpanel-util/panel-dbus-service.h
==============================================================================
--- (empty file)
+++ trunk/gnome-panel/libpanel-util/panel-dbus-service.h	Thu Jun  5 23:37:43 2008
@@ -0,0 +1,74 @@
+/*
+ * panel-dbus-service.h: a simple base object to use a DBus service. Only
+ * useful when subclassed.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Based on code from panel-power-manager.h:
+ *  Copyright (C) 2006 Ray Strode <rstrode redhat com>
+ *  (not sure the copyright header was complete)
+ *
+ * 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.
+ *
+ * Authors:
+ *	Vincent Untz <vuntz gnome org>
+ */
+
+#ifndef PANEL_DBUS_SERVICE_H
+#define PANEL_DBUS_SERVICE_H
+
+#include <glib-object.h>
+#include <dbus/dbus-glib.h>
+
+G_BEGIN_DECLS
+
+#define PANEL_TYPE_DBUS_SERVICE			(panel_dbus_service_get_type ())
+#define PANEL_DBUS_SERVICE(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), PANEL_TYPE_DBUS_SERVICE, PanelDBusService))
+#define PANEL_DBUS_SERVICE_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), PANEL_TYPE_DBUS_SERVICE, PanelDBusServiceClass))
+#define PANEL_IS_DBUS_SERVICE(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANEL_TYPE_DBUS_SERVICE))
+#define PANEL_IS_DBUS_SERVICE_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), PANEL_TYPE_DBUS_SERVICE))
+#define PANEL_DBUS_SERVICE_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), PANEL_TYPE_DBUS_SERVICE, PanelDBusServiceClass))
+
+typedef struct _PanelDBusService	PanelDBusService;
+typedef struct _PanelDBusServiceClass	PanelDBusServiceClass;
+typedef struct _PanelDBusServicePrivate	PanelDBusServicePrivate;
+
+struct _PanelDBusService {
+	GObject parent;
+
+	/*< private > */
+	PanelDBusServicePrivate *priv;
+};
+
+struct _PanelDBusServiceClass {
+	GObjectClass parent_class;
+};
+
+GType panel_dbus_service_get_type (void);
+
+void     panel_dbus_service_init_service      (PanelDBusService *service,
+					       const char       *name,
+					       const char       *path,
+					       const char       *interface);
+
+gboolean panel_dbus_service_ensure_connection (PanelDBusService  *service,
+					       GError           **error);
+
+DBusGProxy *panel_dbus_service_get_proxy (PanelDBusService *service);
+
+G_END_DECLS
+
+#endif /* PANEL_DBUS_SERVICE_H */

Modified: trunk/gnome-panel/libpanel-util/panel-keyfile.c
==============================================================================
--- trunk/gnome-panel/libpanel-util/panel-keyfile.c	(original)
+++ trunk/gnome-panel/libpanel-util/panel-keyfile.c	Thu Jun  5 23:37:43 2008
@@ -1,5 +1,5 @@
 /*
- * panel-keyfile.c:
+ * panel-keyfile.c: GKeyFile extensions
  *
  * Copyright (C) 2008 Novell, Inc.
  *

Modified: trunk/gnome-panel/libpanel-util/panel-keyfile.h
==============================================================================
--- trunk/gnome-panel/libpanel-util/panel-keyfile.h	(original)
+++ trunk/gnome-panel/libpanel-util/panel-keyfile.h	Thu Jun  5 23:37:43 2008
@@ -1,5 +1,5 @@
 /*
- * panel-keyfile.h:
+ * panel-keyfile.h: GKeyFile extensions
  *
  * Copyright (C) 2008 Novell, Inc.
  *

Modified: trunk/gnome-panel/panel-power-manager.c
==============================================================================
--- trunk/gnome-panel/panel-power-manager.c	(original)
+++ trunk/gnome-panel/panel-power-manager.c	Thu Jun  5 23:37:43 2008
@@ -2,6 +2,7 @@
  *                         suspending the computer
  *
  * Copyright (C) 2006 Ray Strode <rstrode redhat com>
+ * Copyright (C) 2008 Novell, Inc.
  *
  * 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
@@ -17,12 +18,11 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
+ *
+ * Authors:
+ *      Ray Strode <rstrode redhat com>
+ *      Vincent Untz <vuntz gnome org>
  */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "panel-power-manager.h"
 
 #include <errno.h>
 #include <string.h>
@@ -33,30 +33,15 @@
 
 #include <dbus/dbus-glib.h>
 
-struct _PanelPowerManagerPrivate {
-	DBusGConnection *dbus_connection;
-	DBusGProxy      *bus_proxy;
-	DBusGProxy      *gpm_proxy;
-	guint32          is_connected : 1;
-};
+#include <libpanel-util/panel-cleanup.h>
+#include <libpanel-util/panel-dbus-service.h>
 
+#include "panel-power-manager.h"
 
-static void panel_power_manager_finalize (GObject *object);
 static void panel_power_manager_class_install_signals (PanelPowerManagerClass *manager_class);
-static void panel_power_manager_class_install_properties (PanelPowerManagerClass *manager_class);
-
-static void panel_power_manager_get_property (GObject    *object,
-					      guint       prop_id,
-					      GValue     *value,
-					      GParamSpec *pspec);
-
-static gboolean panel_power_manager_ensure_gpm_connection (PanelPowerManager  *manager,
-	                                                   GError            **error);
-
-enum {
-  PROP_0 = 0,
-  PROP_IS_CONNECTED
-};
+static GObject *panel_power_manager_constructor (GType                  type,
+						 guint                  n_construct_properties,
+						 GObjectConstructParam *construct_properties);
 
 enum {
   REQUEST_FAILED = 0,
@@ -65,7 +50,7 @@
 
 static guint panel_power_manager_signals[NUMBER_OF_SIGNALS];
 
-G_DEFINE_TYPE (PanelPowerManager, panel_power_manager, G_TYPE_OBJECT);
+G_DEFINE_TYPE (PanelPowerManager, panel_power_manager, PANEL_TYPE_DBUS_SERVICE);
 
 static void
 panel_power_manager_class_init (PanelPowerManagerClass *manager_class)
@@ -74,13 +59,9 @@
 
 	object_class = G_OBJECT_CLASS (manager_class);
 
-	object_class->finalize = panel_power_manager_finalize;
+	object_class->constructor = panel_power_manager_constructor;
 
-	panel_power_manager_class_install_properties (manager_class);
 	panel_power_manager_class_install_signals (manager_class);
-
-	g_type_class_add_private (manager_class,
-				  sizeof (PanelPowerManagerPrivate));
 }
 
 static void
@@ -104,187 +85,37 @@
 }
 
 static void
-panel_power_manager_class_install_properties (PanelPowerManagerClass *manager_class)
-{
-	GObjectClass *object_class;
-	GParamSpec *param_spec;
-
-	object_class = G_OBJECT_CLASS (manager_class);
-	object_class->get_property = panel_power_manager_get_property;
-
-	param_spec = g_param_spec_boolean ("is-connected",
-					   "Is connected",
-					   "Whether the panel is connected to "
-					   "the power manager",
-					   FALSE,
-					   G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_IS_CONNECTED,
-					 param_spec);
-}
-
-static void
-panel_power_manager_on_name_owner_changed (DBusGProxy        *bus_proxy,
-	                                   const char        *name,
-	                                   const char        *prev_owner,
-	                                   const char        *new_owner,
-	                                   PanelPowerManager *manager)
-{
-	if (strcmp (name, "org.freedesktop.PowerManagement") != 0)
-		return;
-
-	if (manager->priv->gpm_proxy != NULL) {
-		g_object_unref (manager->priv->gpm_proxy);
-		manager->priv->gpm_proxy = NULL;
-	}
-
-	panel_power_manager_ensure_gpm_connection (manager, NULL);
-}
-
-static gboolean
-panel_power_manager_ensure_gpm_connection (PanelPowerManager  *manager,
-					   GError            **error)
-{
-	GError   *connection_error;
-	gboolean  is_connected;
-
-	connection_error = NULL;
-	if (manager->priv->dbus_connection == NULL) {
-		manager->priv->dbus_connection = dbus_g_bus_get (DBUS_BUS_SESSION,
-								 &connection_error);
-
-		if (manager->priv->dbus_connection == NULL) {
-			g_propagate_error (error, connection_error);
-			is_connected = FALSE;
-			goto out;
-		}
-	}
-
-	if (manager->priv->bus_proxy == NULL) {
-		manager->priv->bus_proxy =
-			dbus_g_proxy_new_for_name_owner (manager->priv->dbus_connection,
-							 DBUS_SERVICE_DBUS,
-							 DBUS_PATH_DBUS,
-							 DBUS_INTERFACE_DBUS,
-							 &connection_error);
-
-		if (manager->priv->bus_proxy == NULL) {
-			g_propagate_error (error, connection_error);
-			is_connected = FALSE;
-			goto out;
-		}
-
-		dbus_g_proxy_add_signal (manager->priv->bus_proxy,
-					 "NameOwnerChanged",
-					 G_TYPE_STRING,
-					 G_TYPE_STRING,
-					 G_TYPE_STRING,
-					 G_TYPE_INVALID);
-		dbus_g_proxy_connect_signal (manager->priv->bus_proxy,
-					     "NameOwnerChanged",
-					     G_CALLBACK (panel_power_manager_on_name_owner_changed),
-					     manager, NULL);
-	}
-
-	if (manager->priv->gpm_proxy == NULL) {
-		manager->priv->gpm_proxy =
-			dbus_g_proxy_new_for_name_owner (
-					manager->priv->dbus_connection,
-					"org.freedesktop.PowerManagement",
-					"/org/freedesktop/PowerManagement",
-					"org.freedesktop.PowerManagement",
-					&connection_error);
-
-		if (manager->priv->gpm_proxy == NULL) {
-			g_propagate_error (error, connection_error);
-			is_connected = FALSE;
-			goto out;
-		}
-	}
-	is_connected = TRUE;
-
-out:
-	if (manager->priv->is_connected != is_connected) {
-		manager->priv->is_connected = is_connected;
-		g_object_notify (G_OBJECT (manager), "is-connected");
-	}
-
-	if (!is_connected) {
-		if (manager->priv->dbus_connection == NULL) {
-			if (manager->priv->bus_proxy != NULL) {
-				g_object_unref (manager->priv->bus_proxy);
-				manager->priv->bus_proxy = NULL;
-			}
-
-			if (manager->priv->gpm_proxy != NULL) {
-				g_object_unref (manager->priv->gpm_proxy);
-				manager->priv->gpm_proxy = NULL;
-			}
-		} else if (manager->priv->bus_proxy == NULL) {
-			if (manager->priv->gpm_proxy != NULL) {
-				g_object_unref (manager->priv->gpm_proxy);
-				manager->priv->gpm_proxy = NULL;
-			}
-		}
-	}
-
-	return is_connected;
-}
-
-static void
 panel_power_manager_init (PanelPowerManager *manager)
 {
-	GError *error;
+}
 
-	manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
-						     PANEL_TYPE_POWER_MANAGER,
-						     PanelPowerManagerPrivate);
-
-	manager->priv->dbus_connection = NULL;
-	manager->priv->bus_proxy = NULL;
-	manager->priv->gpm_proxy = NULL;
-	manager->priv->is_connected = FALSE;
+static GObject *
+panel_power_manager_constructor (GType                  type,
+				 guint                  n_construct_properties,
+				 GObjectConstructParam *construct_properties)
+{
+	GObject *obj;
+	GError  *error;
+
+	obj = G_OBJECT_CLASS (panel_power_manager_parent_class)->constructor (type,
+									      n_construct_properties,
+									      construct_properties);
+
+
+	panel_dbus_service_init_service (PANEL_DBUS_SERVICE (obj),
+					 "org.freedesktop.PowerManagement",
+					 "/org/freedesktop/PowerManagement",
+					 "org.freedesktop.PowerManagement");
 
 	error = NULL;
-	if (!panel_power_manager_ensure_gpm_connection (manager, &error)) {
+	if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (obj),
+						   &error)) {
 		g_message ("Could not connect to power manager: %s",
 			   error->message);
 		g_error_free (error);
 	}
-}
-
-static void
-panel_power_manager_finalize (GObject *object)
-{
-	PanelPowerManager *manager;
-	GObjectClass *parent_class;
-
-	manager = PANEL_POWER_MANAGER (object);
-
-	parent_class = G_OBJECT_CLASS (panel_power_manager_parent_class);
-
-	if (parent_class->finalize != NULL)
-		parent_class->finalize (object);
-}
 
-static void
-panel_power_manager_get_property (GObject    *object,
-				  guint       prop_id,
-				  GValue     *value,
-				  GParamSpec *pspec)
-{
-	PanelPowerManager *manager = PANEL_POWER_MANAGER (object);
-
-	switch (prop_id) {
-	case PROP_IS_CONNECTED:
-		g_value_set_boolean (value,
-				     manager->priv->is_connected);
-		break;
-
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
-						   prop_id,
-						   pspec);
-	}
+	return obj;
 }
 
 GQuark
@@ -313,18 +144,22 @@
 {
 	GError *error;
 	gboolean can_suspend;
+	DBusGProxy *proxy;
 
 	error = NULL;
 
-	if (!panel_power_manager_ensure_gpm_connection (manager, &error)) {
+	if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
+						   &error)) {
 		g_message ("Could not connect to power manager: %s",
 			   error->message);
 		g_error_free (error);
 		return FALSE;
 	}
 
+	proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
+
 	can_suspend = FALSE;
-	if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "CanSuspend",
+	if (!dbus_g_proxy_call (proxy, "CanSuspend",
 				&error,
 				G_TYPE_INVALID,
 				G_TYPE_BOOLEAN, &can_suspend, G_TYPE_INVALID)) {
@@ -344,18 +179,22 @@
 {
 	GError *error;
 	gboolean can_hibernate;
+	DBusGProxy *proxy;
 
 	error = NULL;
 
-	if (!panel_power_manager_ensure_gpm_connection (manager, &error)) {
+	if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
+						   &error)) {
 		g_message ("Could not connect to power manager: %s",
 			   error->message);
 		g_error_free (error);
 		return FALSE;
 	}
 
+	proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
+
 	can_hibernate = FALSE;
-	if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "CanHibernate",
+	if (!dbus_g_proxy_call (proxy, "CanHibernate",
 				&error,
 				G_TYPE_INVALID,
 				G_TYPE_BOOLEAN, &can_hibernate, G_TYPE_INVALID)) {
@@ -374,17 +213,21 @@
 panel_power_manager_attempt_suspend (PanelPowerManager *manager)
 {
 	GError *error;
+	DBusGProxy *proxy;
 
 	error = NULL;
 
-	if (!panel_power_manager_ensure_gpm_connection (manager, &error)) {
+	if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
+						   &error)) {
 		g_warning ("Could not connect to power manager: %s",
 			   error->message);
 		g_error_free (error);
 		return;
 	}
 
-	if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "Suspend",
+	proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
+
+	if (!dbus_g_proxy_call (proxy, "Suspend",
 				&error,
 				G_TYPE_INVALID, G_TYPE_INVALID) &&
 	    error != NULL) {
@@ -410,17 +253,21 @@
 panel_power_manager_attempt_hibernate (PanelPowerManager *manager)
 {
 	GError *error;
+	DBusGProxy *proxy;
 
 	error = NULL;
 
-	if (!panel_power_manager_ensure_gpm_connection (manager, &error)) {
+	if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
+						   &error)) {
 		g_warning ("Could not connect to power manager: %s",
 			   error->message);
 		g_error_free (error);
 		return;
 	}
 
-	if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "Hibernate",
+	proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
+
+	if (!dbus_g_proxy_call (proxy, "Hibernate",
 				&error,
 				G_TYPE_INVALID, G_TYPE_INVALID) &&
 	    error != NULL) {
@@ -447,8 +294,11 @@
 {
 	static PanelPowerManager *manager = NULL;
 
-	if (manager == NULL)
+	if (manager == NULL) {
 		manager = panel_power_manager_new ();
+		panel_cleanup_register (panel_cleanup_unref_and_nullify,
+					&manager);
+	}
 
 	return g_object_ref (manager);
 }

Modified: trunk/gnome-panel/panel-power-manager.h
==============================================================================
--- trunk/gnome-panel/panel-power-manager.h	(original)
+++ trunk/gnome-panel/panel-power-manager.h	Thu Jun  5 23:37:43 2008
@@ -21,9 +21,10 @@
 #ifndef PANEL_POWER_MANAGER_H
 #define PANEL_POWER_MANAGER_H
 
-#include <glib.h>
 #include <glib-object.h>
 
+#include <libpanel-util/panel-dbus-service.h>
+
 G_BEGIN_DECLS
 
 #define PANEL_TYPE_POWER_MANAGER		(panel_power_manager_get_type ())
@@ -36,19 +37,14 @@
 
 typedef struct _PanelPowerManager		PanelPowerManager;
 typedef struct _PanelPowerManagerClass		PanelPowerManagerClass;
-typedef struct _PanelPowerManagerPrivate	PanelPowerManagerPrivate;
 typedef enum _PanelPowerManagerError		PanelPowerManagerError;
 
-
 struct _PanelPowerManager {
-	GObject parent;
-
-	/*< private > */
-	PanelPowerManagerPrivate *priv;
+	PanelDBusService parent;
 };
 
 struct _PanelPowerManagerClass {
-	GObjectClass parent_class;
+	PanelDBusServiceClass parent_class;
 
 	/* signals */
 	void (* request_failed) (PanelPowerManager *manager, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]