diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-27 16:14:58 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-16 14:53:16 +0100 |
commit | 5c73e8d200a16a3f83be475705f61c6e11bec491 (patch) | |
tree | 5f6ab2e6534e4d7bd621d3c1826b121f3b1894c0 /src/mm-properties-changed-signal.c | |
parent | 17ef0777976b3897972fcc14e5efc09d6bc60b55 (diff) |
build: remove obsolete files
This will very likely create lots of conflicts until the branch gets merged
into master, but anyway...
Diffstat (limited to 'src/mm-properties-changed-signal.c')
-rw-r--r-- | src/mm-properties-changed-signal.c | 352 |
1 files changed, 0 insertions, 352 deletions
diff --git a/src/mm-properties-changed-signal.c b/src/mm-properties-changed-signal.c deleted file mode 100644 index 4408e80a..00000000 --- a/src/mm-properties-changed-signal.c +++ /dev/null @@ -1,352 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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: - * - * Copyright (C) 2007 - 2008 Novell, Inc. - * Copyright (C) 2008 - 2010 Red Hat, Inc. - */ - -#include <string.h> -#include <stdio.h> - -#include <dbus/dbus-glib.h> -#include "mm-marshal.h" -#include "mm-properties-changed-signal.h" -#include "mm-properties-changed-glue.h" -#include "mm-log.h" - -#define DBUS_TYPE_G_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE)) -#define DBUS_TYPE_G_ARRAY_OF_STRING (dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRING)) - -#define MM_PC_SIGNAL_NAME "mm-properties-changed" -#define DBUS_PC_SIGNAL_NAME "properties-changed" -#define MM_DBUS_PROPERTY_CHANGED "MM_DBUS_PROPERTY_CHANGED" - -/*****************************************************************************/ - -typedef struct { - char *real_property; - char *interface; -} ChangeInfo; - -typedef struct { - /* Whitelist of GObject property names for which changes will be emitted - * over the bus. - * - * Mapping of {property-name -> ChangeInfo} - */ - GHashTable *registered; - - /* Table of each D-Bus interface of the object for which one or more - * properties have changed, and those properties and their new values. - * Destroyed after the changed signal has been sent. - * - * Mapping of {dbus-interface -> {property-name -> value}} - */ - GHashTable *hash; - - guint idle_id; -} PropertiesChangedInfo; - -static void -destroy_value (gpointer data) -{ - GValue *val = (GValue *) data; - - g_value_unset (val); - g_slice_free (GValue, val); -} - -static void -change_info_free (gpointer data) -{ - ChangeInfo *info = data; - - g_free (info->real_property); - g_free (info->interface); - memset (info, 0, sizeof (ChangeInfo)); - g_free (info); -} - -static PropertiesChangedInfo * -properties_changed_info_new (void) -{ - PropertiesChangedInfo *info; - - info = g_slice_new0 (PropertiesChangedInfo); - - info->registered = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, change_info_free); - info->hash = g_hash_table_new_full (g_str_hash, g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) g_hash_table_destroy); - return info; -} - -static void -properties_changed_info_destroy (gpointer data) -{ - PropertiesChangedInfo *info = (PropertiesChangedInfo *) data; - - if (info->idle_id) - g_source_remove (info->idle_id); - - g_hash_table_destroy (info->hash); - g_hash_table_destroy (info->registered); - g_slice_free (PropertiesChangedInfo, info); -} - -#ifdef DEBUG -static void -add_to_string (gpointer key, gpointer value, gpointer user_data) -{ - char *buf = (char *) user_data; - GValue str_val = { 0, }; - - g_value_init (&str_val, G_TYPE_STRING); - if (!g_value_transform ((GValue *) value, &str_val)) { - if (G_VALUE_HOLDS_OBJECT (value)) { - GObject *obj = g_value_get_object (value); - - if (g_value_get_object (value)) { - sprintf (buf + strlen (buf), "{%s: %p (%s)}, ", - (const char *) key, obj, G_OBJECT_TYPE_NAME (obj)); - } else { - sprintf (buf + strlen (buf), "{%s: %p}, ", (const char *) key, obj); - } - } else - sprintf (buf + strlen (buf), "{%s: <transform error>}, ", (const char *) key); - } else { - sprintf (buf + strlen (buf), "{%s: %s}, ", (const char *) key, g_value_get_string (&str_val)); - } - g_value_unset (&str_val); -} -#endif - -static gboolean -properties_changed (gpointer data) -{ - GObject *object = G_OBJECT (data); - PropertiesChangedInfo *info; - GHashTableIter iter; - gpointer key, value; - - info = (PropertiesChangedInfo *) g_object_get_data (object, MM_DBUS_PROPERTY_CHANGED); - g_assert (info); - - g_hash_table_iter_init (&iter, info->hash); - while (g_hash_table_iter_next (&iter, &key, &value)) { - const char *interface = (const char *) key; - GHashTable *props = (GHashTable *) value; - GPtrArray *ignore = g_ptr_array_new (); - -#ifdef DEBUG - { - char buf[2048] = { 0, }; - g_hash_table_foreach (props, add_to_string, &buf); - mm_dbg ("%s: %s -> (%s) %s", __func__, - G_OBJECT_TYPE_NAME (object), - interface, - buf); - } -#endif - - /* Send the PropertiesChanged signal */ - g_signal_emit_by_name (object, MM_PC_SIGNAL_NAME, interface, props); - g_signal_emit_by_name (object, DBUS_PC_SIGNAL_NAME, interface, props, ignore); - g_ptr_array_free (ignore, TRUE); - } - g_hash_table_remove_all (info->hash); - - return FALSE; -} - -static void -idle_id_reset (gpointer data) -{ - GObject *object = G_OBJECT (data); - PropertiesChangedInfo *info = (PropertiesChangedInfo *) g_object_get_data (object, MM_DBUS_PROPERTY_CHANGED); - - /* info is unset when the object is being destroyed */ - if (info) - info->idle_id = 0; -} - -static char* -uscore_to_wincaps (const char *uscore) -{ - const char *p; - GString *str; - gboolean last_was_uscore; - - last_was_uscore = TRUE; - - str = g_string_new (NULL); - p = uscore; - while (p && *p) { - if (*p == '-' || *p == '_') - last_was_uscore = TRUE; - else { - if (last_was_uscore) { - g_string_append_c (str, g_ascii_toupper (*p)); - last_was_uscore = FALSE; - } else - g_string_append_c (str, *p); - } - ++p; - } - - return g_string_free (str, FALSE); -} - -static PropertiesChangedInfo * -get_properties_changed_info (GObject *object) -{ - PropertiesChangedInfo *info = NULL; - - info = (PropertiesChangedInfo *) g_object_get_data (object, MM_DBUS_PROPERTY_CHANGED); - if (!info) { - info = properties_changed_info_new (); - g_object_set_data_full (object, MM_DBUS_PROPERTY_CHANGED, info, properties_changed_info_destroy); - } - - g_assert (info); - return info; -} - -static void -notify (GObject *object, GParamSpec *pspec) -{ - GHashTable *interfaces; - PropertiesChangedInfo *info; - ChangeInfo *ch_info; - GValue *value; - - info = get_properties_changed_info (object); - - ch_info = g_hash_table_lookup (info->registered, pspec->name); - if (!ch_info) - return; - - /* Check if there are other changed properties for this interface already, - * otherwise create a new hash table for all changed properties for this - * D-Bus interface. - */ - interfaces = g_hash_table_lookup (info->hash, ch_info->interface); - if (!interfaces) { - interfaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_value); - g_hash_table_insert (info->hash, g_strdup (ch_info->interface), interfaces); - } - - /* Now put the changed property value into the hash table of changed values - * for its D-Bus interface. - */ - value = g_slice_new0 (GValue); - g_value_init (value, pspec->value_type); - g_object_get_property (object, pspec->name, value); - - /* Use real property name, which takes shadow properties into accound */ - g_hash_table_insert (interfaces, uscore_to_wincaps (ch_info->real_property), value); - - if (!info->idle_id) - info->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, properties_changed, object, idle_id_reset); -} - -void -mm_properties_changed_signal_register_property (GObject *object, - const char *gobject_property, - const char *real_property, - const char *interface) -{ - PropertiesChangedInfo *info; - ChangeInfo *ch_info; - - /* All exported properties need to be registered explicitly for now since - * dbus-glib doesn't expose any method to find out the properties registered - * in the XML. - */ - - info = get_properties_changed_info (object); - ch_info = g_hash_table_lookup (info->registered, gobject_property); - if (ch_info) { - g_warning ("%s: property '%s' already registerd on interface '%s'", - __func__, gobject_property, ch_info->interface); - } else { - ch_info = g_malloc0 (sizeof (ChangeInfo)); - ch_info->real_property = g_strdup (real_property ? real_property : gobject_property); - ch_info->interface = g_strdup (interface); - g_hash_table_insert (info->registered, g_strdup (gobject_property), ch_info); - } -} - -void -mm_properties_changed_signal_enable (GObjectClass *object_class) -{ - object_class->notify = notify; -} - -/*****************************************************************************/ - -static void -mm_properties_changed_init (gpointer g_iface) -{ - static gboolean initialized = FALSE; - - if (initialized) - return; - - g_signal_new (MM_PC_SIGNAL_NAME, - G_TYPE_FROM_INTERFACE (g_iface), - G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, - mm_marshal_VOID__STRING_BOXED, - G_TYPE_NONE, 2, G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT); - - g_signal_new (DBUS_PC_SIGNAL_NAME, - G_TYPE_FROM_INTERFACE (g_iface), - G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, - mm_marshal_VOID__STRING_BOXED_BOXED, - G_TYPE_NONE, 3, - G_TYPE_STRING, - DBUS_TYPE_G_MAP_OF_VARIANT, - DBUS_TYPE_G_ARRAY_OF_STRING); - - initialized = TRUE; -} - -GType -mm_properties_changed_get_type (void) -{ - static GType pc_type = 0; - - if (!G_UNLIKELY (pc_type)) { - const GTypeInfo pc_info = { - sizeof (MMPropertiesChanged), /* class_size */ - mm_properties_changed_init, /* base_init */ - NULL, /* base_finalize */ - NULL, - NULL, /* class_finalize */ - NULL, /* class_data */ - 0, - 0, /* n_preallocs */ - NULL - }; - - pc_type = g_type_register_static (G_TYPE_INTERFACE, - "MMPropertiesChanged", - &pc_info, 0); - - g_type_interface_add_prerequisite (pc_type, G_TYPE_OBJECT); - dbus_g_object_type_install_info (pc_type, &dbus_glib_mm_properties_changed_object_info); - } - - return pc_type; -} |