gnome-panel r11130 - in trunk/gnome-panel: . libpanel-util
- From: vuntz svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-panel r11130 - in trunk/gnome-panel: . libpanel-util
- Date: Thu, 5 Jun 2008 23:37:43 +0000 (UTC)
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]