From e9e03b2d8a92adf458dc7b0dd849d99c36e77492 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 15:34:51 -0600 Subject: Adding in a defaults object --- libdbusmenu-glib/defaults.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 libdbusmenu-glib/defaults.c (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c new file mode 100644 index 0000000..cbd9bfa --- /dev/null +++ b/libdbusmenu-glib/defaults.c @@ -0,0 +1,49 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "defaults.h" + +typedef struct _DbusmenuDefaultsPrivate DbusmenuDefaultsPrivate; + +struct _DbusmenuDefaultsPrivate +{ +}; + +#define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_DEFAULTS_TYPE, DbusmenuDefaultsPrivate)) + +static void dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass); +static void dbusmenu_defaults_init (DbusmenuDefaults *self); +static void dbusmenu_defaults_dispose (GObject *object); +static void dbusmenu_defaults_finalize (GObject *object); + +G_DEFINE_TYPE (DbusmenuDefaults, dbusmenu_defaults, G_TYPE_OBJECT); + +static void +dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass) +{ +GObjectClass *object_class = G_OBJECT_CLASS (klass); + +g_type_class_add_private (klass, sizeof (DbusmenuDefaultsPrivate)); + +object_class->dispose = dbusmenu_defaults_dispose; +object_class->finalize = dbusmenu_defaults_finalize; +} + +static void +dbusmenu_defaults_init (DbusmenuDefaults *self) +{ +} + +static void +dbusmenu_defaults_dispose (GObject *object) +{ +G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->dispose (object); +} + +static void +dbusmenu_defaults_finalize (GObject *object) +{ +G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->finalize (object); +} -- cgit v1.2.3 From 4f8113b14cbba9ef88b46be5545f3bb235060b10 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 15:42:18 -0600 Subject: License headers --- libdbusmenu-glib/defaults.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index cbd9bfa..450707f 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -1,3 +1,31 @@ +/* +A library to communicate a menu object set accross DBus and +track updates and maintain consistency. + +Copyright 2011 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -- cgit v1.2.3 From 0d6f893deda7eebefab68be2b7566e8033f2be48 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 15:43:11 -0600 Subject: Format sanely --- libdbusmenu-glib/defaults.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index 450707f..af86a90 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -34,8 +34,8 @@ License version 3 and version 2.1 along with this program. If not, see typedef struct _DbusmenuDefaultsPrivate DbusmenuDefaultsPrivate; -struct _DbusmenuDefaultsPrivate -{ +struct _DbusmenuDefaultsPrivate { + GHashTable * types; }; #define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \ @@ -51,27 +51,34 @@ G_DEFINE_TYPE (DbusmenuDefaults, dbusmenu_defaults, G_TYPE_OBJECT); static void dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass) { -GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); -g_type_class_add_private (klass, sizeof (DbusmenuDefaultsPrivate)); + g_type_class_add_private (klass, sizeof (DbusmenuDefaultsPrivate)); -object_class->dispose = dbusmenu_defaults_dispose; -object_class->finalize = dbusmenu_defaults_finalize; + object_class->dispose = dbusmenu_defaults_dispose; + object_class->finalize = dbusmenu_defaults_finalize; + return; } static void dbusmenu_defaults_init (DbusmenuDefaults *self) { + + return; } static void dbusmenu_defaults_dispose (GObject *object) { -G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->dispose (object); + + G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->dispose (object); + return; } static void dbusmenu_defaults_finalize (GObject *object) { -G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->finalize (object); + + G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->finalize (object); + return; } -- cgit v1.2.3 From 1c1171f7a84e37dd96385cea1600465350217ae0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 15:47:40 -0600 Subject: Fleshing out the ref_default --- libdbusmenu-glib/defaults.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index af86a90..a6dd4a2 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -32,8 +32,6 @@ License version 3 and version 2.1 along with this program. If not, see #include "defaults.h" -typedef struct _DbusmenuDefaultsPrivate DbusmenuDefaultsPrivate; - struct _DbusmenuDefaultsPrivate { GHashTable * types; }; @@ -82,3 +80,23 @@ dbusmenu_defaults_finalize (GObject *object) G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->finalize (object); return; } + +static DbusmenuDefaults * default_defaults = NULL; + +/** + * dbusmenu_defaults_ref_default: + * + * Get a reference to the default instance. If it doesn't exist this + * function will create it. + * + * Return value: (transfer full): A reference to the defaults + */ +DbusmenuDefaults * +dbusmenu_defaults_ref_default (void) +{ + if (default_defaults == NULL) { + default_defaults = DBUSMENU_DEFAULTS(g_object_new(DBUSMENU_TYPE_DEFAULTS, NULL)); + } + + return default_defaults; +} -- cgit v1.2.3 From a4a9e45e12ebfc45306f986953b04e2409f9cc7e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 16:13:44 -0600 Subject: Putting in stubs for our get/set functions --- libdbusmenu-glib/defaults.c | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index a6dd4a2..ec70ce1 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -100,3 +100,60 @@ dbusmenu_defaults_ref_default (void) return default_defaults; } + +/** + * dbusmenu_defaults_default_set: + * @default: The #DbusmenuDefaults object to add to + * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT + * @property: Property name for the default + * @prop_type: (allow-none): Type of the property for runtime checking. To disable checking set to #NULL. + * @value: (allow-none): Default value for @property. #NULL if by default it is unset, but you want type checking from @prop_type. + * + * Sets up an entry in the defaults database for a given @property + * and menuitem type @type. @prop_type and @value can both be #NULL + * but both of them can not. + */ +void +dbusmenu_defaults_default_set (DbusmenuDefaults * defaults, const gchar * type, const gchar * property, const GVariantType * prop_type, GVariant * value) +{ + + return; +} + +/** + * dbusmenu_defaults_default_get: + * @defaults: The default database to use + * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT + * @property: Property name to lookup + * + * Gets an entry in the database for a give @property and @type. + * + * Return value: (transfer none): Returns a variant that does not + * have it's ref count increased. If you want to keep it, you should + * do that. + */ +GVariant * +dbusmenu_defaults_default_get (DbusmenuDefaults * defaults, const gchar * type, const gchar * property) +{ + + return NULL; +} + +/** + * dbusmenu_defaults_default_get_type: + * @defaults: The default database to use + * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT + * @property: Property name to lookup + * + * Gets the type for an entry in the database for a give @property and @type. + * + * Return value: (transfer none): Returns a type for the given + * @property value. + */ +GVariantType * +dbusmenu_defaults_default_get_type (DbusmenuDefaults * defaults, const gchar * type, const gchar * property) +{ + + return NULL; +} + -- cgit v1.2.3 From 69951e51941d1122b58119f52b072aa9863fc3c2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:01:02 -0600 Subject: Setting the core defaults up in a handy table. --- libdbusmenu-glib/defaults.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index ec70ce1..c225612 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -30,7 +30,11 @@ License version 3 and version 2.1 along with this program. If not, see #include "config.h" #endif +#include + #include "defaults.h" +#include "menuitem.h" +#include "client.h" struct _DbusmenuDefaultsPrivate { GHashTable * types; @@ -62,6 +66,19 @@ static void dbusmenu_defaults_init (DbusmenuDefaults *self) { + /* Standard defaults */ + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ENABLED, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_LABEL, G_VARIANT_TYPE_STRING, g_variant_new_string(_("Label Empty"))); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ICON_NAME, G_VARIANT_TYPE_STRING, NULL); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE, G_VARIANT_TYPE_STRING, NULL); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE, G_VARIANT_TYPE_INT32, NULL); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_SHORTCUT, G_VARIANT_TYPE_ARRAY, NULL); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY, G_VARIANT_TYPE_STRING, NULL); + + /* Separator defaults */ + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_SEPARATOR, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); + return; } @@ -103,7 +120,7 @@ dbusmenu_defaults_ref_default (void) /** * dbusmenu_defaults_default_set: - * @default: The #DbusmenuDefaults object to add to + * @defaults: The #DbusmenuDefaults object to add to * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT * @property: Property name for the default * @prop_type: (allow-none): Type of the property for runtime checking. To disable checking set to #NULL. -- cgit v1.2.3 From 6d298a977a906aa9029b8f82b19fae71562db5fe Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:15:14 -0600 Subject: Create an entry structure and functions for creating and destroying it --- libdbusmenu-glib/defaults.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index c225612..3a98923 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -40,6 +40,12 @@ struct _DbusmenuDefaultsPrivate { GHashTable * types; }; +typedef struct _DefaultEntry DefaultEntry; +struct _DefaultEntry { + GVariantType * type; + GVariant * value; +}; + #define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_DEFAULTS_TYPE, DbusmenuDefaultsPrivate)) @@ -48,6 +54,9 @@ static void dbusmenu_defaults_init (DbusmenuDefaults *self); static void dbusmenu_defaults_dispose (GObject *object); static void dbusmenu_defaults_finalize (GObject *object); +static DefaultEntry * entry_create (GVariantType * type, GVariant * variant); +static void entry_destroy (gpointer entry); + G_DEFINE_TYPE (DbusmenuDefaults, dbusmenu_defaults, G_TYPE_OBJECT); static void @@ -98,6 +107,44 @@ dbusmenu_defaults_finalize (GObject *object) return; } +/* Create a new entry based on the info provided */ +static DefaultEntry * +entry_create (GVariantType * type, GVariant * variant) +{ + DefaultEntry * defentry = g_new0(DefaultEntry, 1); + + if (type != NULL) { + defentry->type = g_variant_type_copy(type); + } + + if (variant != NULL) { + defentry->value = variant; + g_variant_ref_sink(variant); + } + + return defentry; +} + +/* Destroy an entry */ +static void +entry_destroy (gpointer entry) +{ + DefaultEntry * defentry = (DefaultEntry *)entry; + + if (defentry->type != NULL) { + g_variant_type_free(defentry->type); + defentry->type = NULL; + } + + if (defentry->value != NULL) { + g_variant_unref(defentry->value); + defentry->value = NULL; + } + + g_free(defentry); + return; +} + static DbusmenuDefaults * default_defaults = NULL; /** -- cgit v1.2.3 From 6c544a4f41d713878667418cd14411e5fc6c1f3f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:18:58 -0600 Subject: Building our hash table and making sure it gets cleaned up --- libdbusmenu-glib/defaults.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index 3a98923..53ef09d 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -47,7 +47,7 @@ struct _DefaultEntry { }; #define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_DEFAULTS_TYPE, DbusmenuDefaultsPrivate)) +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaultsPrivate)) static void dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass); static void dbusmenu_defaults_init (DbusmenuDefaults *self); @@ -74,6 +74,9 @@ dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass) static void dbusmenu_defaults_init (DbusmenuDefaults *self) { + self->priv = DBUSMENU_DEFAULTS_GET_PRIVATE(self); + + self->priv->types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, entry_destroy); /* Standard defaults */ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); @@ -94,6 +97,12 @@ dbusmenu_defaults_init (DbusmenuDefaults *self) static void dbusmenu_defaults_dispose (GObject *object) { + DbusmenuDefaults * self = DBUSMENU_DEFAULTS(object); + + if (self->priv->types != NULL) { + g_hash_table_destroy(self->priv->types); + self->priv->types = NULL; + } G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->dispose (object); return; -- cgit v1.2.3 From c89e30d70bcd342837af4633f393a26c7fb3bdc9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:29:13 -0600 Subject: Create a basic setter function and fix our hashtables so they work with it. --- libdbusmenu-glib/defaults.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index 53ef09d..9fde682 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -54,7 +54,7 @@ static void dbusmenu_defaults_init (DbusmenuDefaults *self); static void dbusmenu_defaults_dispose (GObject *object); static void dbusmenu_defaults_finalize (GObject *object); -static DefaultEntry * entry_create (GVariantType * type, GVariant * variant); +static DefaultEntry * entry_create (const GVariantType * type, GVariant * variant); static void entry_destroy (gpointer entry); G_DEFINE_TYPE (DbusmenuDefaults, dbusmenu_defaults, G_TYPE_OBJECT); @@ -76,7 +76,7 @@ dbusmenu_defaults_init (DbusmenuDefaults *self) { self->priv = DBUSMENU_DEFAULTS_GET_PRIVATE(self); - self->priv->types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, entry_destroy); + self->priv->types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_hash_table_destroy); /* Standard defaults */ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); @@ -118,7 +118,7 @@ dbusmenu_defaults_finalize (GObject *object) /* Create a new entry based on the info provided */ static DefaultEntry * -entry_create (GVariantType * type, GVariant * variant) +entry_create (const GVariantType * type, GVariant * variant) { DefaultEntry * defentry = g_new0(DefaultEntry, 1); @@ -189,6 +189,26 @@ dbusmenu_defaults_ref_default (void) void dbusmenu_defaults_default_set (DbusmenuDefaults * defaults, const gchar * type, const gchar * property, const GVariantType * prop_type, GVariant * value) { + g_return_if_fail(DBUSMENU_IS_DEFAULTS(defaults)); + g_return_if_fail(property != NULL); + g_return_if_fail(prop_type != NULL || value != NULL); + + if (type == NULL) { + type = DBUSMENU_CLIENT_TYPES_DEFAULT; + } + + GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type); + + /* We've never had a default for this type, so we need + to create a table for it. */ + if (prop_table == NULL) { + prop_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, entry_destroy); + + g_hash_table_insert(prop_table, g_strdup(property), entry_create(prop_type, value)); + g_hash_table_insert(defaults->priv->types, g_strdup(type), prop_table); + } else { + g_hash_table_replace(prop_table, g_strdup(property), entry_create(prop_type, value)); + } return; } -- cgit v1.2.3 From 543691a8c404735cc6f5bfbe24dc8bbe57908ff0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:32:53 -0600 Subject: Flesh out the getters as well --- libdbusmenu-glib/defaults.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index 9fde682..e8cdea0 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -228,8 +228,26 @@ dbusmenu_defaults_default_set (DbusmenuDefaults * defaults, const gchar * type, GVariant * dbusmenu_defaults_default_get (DbusmenuDefaults * defaults, const gchar * type, const gchar * property) { + g_return_val_if_fail(DBUSMENU_IS_DEFAULTS(defaults), NULL); + g_return_val_if_fail(property != NULL, NULL); - return NULL; + if (type == NULL) { + type = DBUSMENU_CLIENT_TYPES_DEFAULT; + } + + GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type); + + if (prop_table == NULL) { + return NULL; + } + + DefaultEntry * entry = (DefaultEntry *)g_hash_table_lookup(prop_table, property); + + if (entry == NULL) { + return NULL; + } + + return entry->value; } /** @@ -246,7 +264,25 @@ dbusmenu_defaults_default_get (DbusmenuDefaults * defaults, const gchar * type, GVariantType * dbusmenu_defaults_default_get_type (DbusmenuDefaults * defaults, const gchar * type, const gchar * property) { + g_return_val_if_fail(DBUSMENU_IS_DEFAULTS(defaults), NULL); + g_return_val_if_fail(property != NULL, NULL); + + if (type == NULL) { + type = DBUSMENU_CLIENT_TYPES_DEFAULT; + } + + GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type); + + if (prop_table == NULL) { + return NULL; + } + + DefaultEntry * entry = (DefaultEntry *)g_hash_table_lookup(prop_table, property); + + if (entry == NULL) { + return NULL; + } - return NULL; + return entry->type; } -- cgit v1.2.3 From c704e7e82e57f2ac6ca9e058459d600c0bbed6ab Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 17:37:45 -0600 Subject: Making sure to have weak pointer support incase we do drop all the refs --- libdbusmenu-glib/defaults.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index e8cdea0..9031d20 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -169,6 +169,7 @@ dbusmenu_defaults_ref_default (void) { if (default_defaults == NULL) { default_defaults = DBUSMENU_DEFAULTS(g_object_new(DBUSMENU_TYPE_DEFAULTS, NULL)); + g_object_add_weak_pointer(G_OBJECT(default_defaults), (gpointer *)&default_defaults); } return default_defaults; -- cgit v1.2.3 From 47b42d7d4679cab52b6b9871fc15e2fb4d12297a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Feb 2011 21:51:35 -0600 Subject: Make sure to either ref or allocate --- libdbusmenu-glib/defaults.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libdbusmenu-glib/defaults.c') diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index 9031d20..3ad5d76 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -170,6 +170,8 @@ dbusmenu_defaults_ref_default (void) if (default_defaults == NULL) { default_defaults = DBUSMENU_DEFAULTS(g_object_new(DBUSMENU_TYPE_DEFAULTS, NULL)); g_object_add_weak_pointer(G_OBJECT(default_defaults), (gpointer *)&default_defaults); + } else { + g_object_ref(default_defaults); } return default_defaults; -- cgit v1.2.3