soc.2008.themes: ffa766fc: Fixed theme-manager to be more of a sing...
ffdragon at soc.pidgin.im
ffdragon at soc.pidgin.im
Tue Jun 10 23:45:42 EDT 2008
-----------------------------------------------------------------
Revision: ffa766fcace95adc027d03fe5a19d60f628a1e89
Ancestor: 12ae7a2153deb69daa4c2bd574cc87dc70b6787b
Author: ffdragon at soc.pidgin.im
Date: 2008-06-11T03:41:35
Branch: im.pidgin.soc.2008.themes
URL: http://d.pidgin.im/viewmtn/revision/info/ffa766fcace95adc027d03fe5a19d60f628a1e89
Modified files:
libpurple/theme-manager.c libpurple/theme-manager.h
ChangeLog:
Fixed theme-manager to be more of a singleton and less-gobject like
-------------- next part --------------
============================================================
--- libpurple/theme-manager.c 28908a38ae455f677383986255ed88c588315e1b
+++ libpurple/theme-manager.c 58f6ff4aa6595947b2c4f1c2570bd8df061619ce
@@ -24,16 +24,13 @@
#include <stdarg.h>
#include "theme-manager.h"
-#define PURPLE_THEME_MANAGER_GET_PRIVATE(Gobject) \
- ((PurpleThemeManagerPrivate *) ((PURPLE_THEME_MANAGER(Gobject))->priv))
-
/******************************************************************************
- * Structs
+ * Globals
*****************************************************************************/
-typedef struct {
- GHashTable *theme_table;
-} PurpleThemeManagerPrivate;
+static GHashTable *theme_table;
+
+
/*****************************************************************************
* GObject Stuff
****************************************************************************/
@@ -41,10 +38,7 @@ purple_theme_manager_finalize (GObject *
static void
purple_theme_manager_finalize (GObject *obj)
{
- PurpleThemeManagerPrivate *priv;
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(obj);
-
- g_hash_table_destroy(priv->theme_table);
+ g_hash_table_destroy(theme_table);
}
static void
@@ -122,21 +116,19 @@ static void
}
static void
-purple_theme_manager_build(PurpleThemeManager *self, const gchar *root)
+purple_theme_manager_build(const gchar *root)
{
- PurpleThemeManagerPrivate *priv;
+
GDir *rdir;
gchar *name, *type;
GDir *dir;
PurpleThemeLoader *loader;
-
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
rdir = g_dir_open(root, 0, NULL);/*TODO: should have debug error?*/
g_return_if_fail(rdir);
- /*TODO: This looks messy*/
+ /*TODO: This looks messy, leaks*/
/* Parses directory by root/name/purple/type */
while((name = g_strdup(g_dir_read_name (rdir)))){
@@ -145,9 +137,8 @@ purple_theme_manager_build(PurpleThemeMa
if(dir) {
while((type = g_strdup(g_dir_read_name (dir)))) {
- if((loader = g_hash_table_lookup (priv->theme_table, type)))
- purple_theme_manager_add_theme(self,
- purple_theme_loader_build(loader, g_strconcat(root, '/', name, '/',
+ if((loader = g_hash_table_lookup (theme_table, type)))
+ purple_theme_manager_add_theme(purple_theme_loader_build(loader, g_strconcat(root, '/', name, '/',
"purple", '/', type, NULL)));
g_free(type);
@@ -167,75 +158,59 @@ purple_theme_manager_build(PurpleThemeMa
* Public API functions *
*****************************************************************************/
-PurpleThemeManager *
-purple_theme_manager_new (PurpleThemeLoader *loader1, ...)
+void
+purple_theme_manager_init (PurpleThemeLoader *loader1, ...)
{
- PurpleThemeManager *self;
- PurpleThemeManagerPrivate *priv;
va_list args;
PurpleThemeLoader *loader;
- self = g_object_new(PURPLE_TYPE_THEME_MANAGER, NULL, NULL, NULL);
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
+ theme_table = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_object_unref);
- priv->theme_table = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_object_unref); /* purple_theme_finalize() ?*/
-
va_start(args, loader1);
for (loader = loader1; loader != NULL; loader = va_arg(args, PurpleThemeLoader *))
- purple_theme_manager_register_type(self, loader);
+ purple_theme_manager_register_type(loader);
va_end(args);
/* TODO: add themes properly */
- purple_theme_manager_build(self, NULL);
- return self;
+ purple_theme_manager_build(NULL);
}
void
-purple_theme_manager_register_type(PurpleThemeManager *self,
- PurpleThemeLoader *loader)
+purple_theme_manager_register_type(PurpleThemeLoader *loader)
{
- PurpleThemeManagerPrivate *priv = NULL;
gchar *type;
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
g_return_if_fail(PURPLE_IS_THEME_LOADER(loader));
-
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
type = purple_theme_loader_get_type_string(loader);
g_return_if_fail(type);
/* if something is already there do nothing */
- if(! g_hash_table_lookup (priv->theme_table, type))
- g_hash_table_insert(priv->theme_table, type, loader);
+ if(! g_hash_table_lookup (theme_table, type))
+ g_hash_table_insert(theme_table, type, loader);
g_free(type);
}
void
-purple_theme_manager_unregister_type(PurpleThemeManager *self,
- PurpleThemeLoader *loader)
+purple_theme_manager_unregister_type(PurpleThemeLoader *loader)
{
- PurpleThemeManagerPrivate *priv = NULL;
gchar *type;
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
g_return_if_fail(PURPLE_IS_THEME_LOADER(loader));
-
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
type = purple_theme_loader_get_type_string(loader);
g_return_if_fail(type);
- if(g_hash_table_lookup (priv->theme_table, type) == loader){
+ if(g_hash_table_lookup (theme_table, type) == loader){
- g_hash_table_remove (priv->theme_table, type);
+ g_hash_table_remove (theme_table, type);
- g_hash_table_foreach_remove (priv->theme_table,
+ g_hash_table_foreach_remove (theme_table,
(GHRFunc) purple_theme_manager_is_theme_type,
type);
}/* only free if given registered loader */
@@ -244,95 +219,71 @@ PurpleTheme *
}
PurpleTheme *
-purple_theme_manager_find_theme(PurpleThemeManager *self,
- const gchar *name,
+purple_theme_manager_find_theme(const gchar *name,
const gchar *type)
{
- PurpleThemeManagerPrivate *priv = NULL;
- g_return_val_if_fail(PURPLE_IS_THEME_MANAGER(self), NULL);
g_return_val_if_fail(name, NULL);
g_return_val_if_fail(type, NULL);
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
- return g_hash_table_lookup (priv->theme_table,
+ return g_hash_table_lookup (theme_table,
purple_theme_manager_make_key(name, type));
}
void
-purple_theme_manager_add_theme(PurpleThemeManager *self,
- PurpleTheme *theme)
+purple_theme_manager_add_theme(PurpleTheme *theme)
{
- PurpleThemeManagerPrivate *priv;
gchar *key;
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
g_return_if_fail(PURPLE_IS_THEME(theme));
-
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
key = purple_theme_manager_make_key(purple_theme_get_name(theme),
- purple_theme_get_type_string(theme));
+ purple_theme_get_type_string(theme));
g_return_if_fail(key);
/* if something is already there do nothing */
- if(! g_hash_table_lookup (priv->theme_table, key))
- g_hash_table_insert(priv->theme_table, key, theme);
+ if(! g_hash_table_lookup (theme_table, key))
+ g_hash_table_insert(theme_table, key, theme);
g_free(key);
}
void
-purple_theme_manager_remove_theme(PurpleThemeManager *self,
- PurpleTheme *theme)
+purple_theme_manager_remove_theme(PurpleTheme *theme)
{
- PurpleThemeManagerPrivate *priv = NULL;
gchar *key;
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
g_return_if_fail(PURPLE_IS_THEME(theme));
-
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
key = purple_theme_manager_make_key(purple_theme_get_name(theme),
- purple_theme_get_type_string(theme));
+ purple_theme_get_type_string(theme));
g_return_if_fail(key);
- g_hash_table_remove(priv->theme_table, key);
+ g_hash_table_remove(theme_table, key);
g_free(key);
}
void
-purple_theme_manager_rebuild(PurpleThemeManager *self)
+purple_theme_manager_refresh()
{
- PurpleThemeManagerPrivate *priv;
-
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
-
- g_hash_table_foreach_remove (priv->theme_table,
+ g_hash_table_foreach_remove (theme_table,
(GHRFunc) purple_theme_manager_is_theme,
NULL);
/* TODO: this also needs to be fixed the same as new */
- purple_theme_manager_build(self, NULL);
+ purple_theme_manager_build(NULL);
}
void
-purple_theme_manager_for_each_theme(PurpleThemeManager *self, PTFunc func)
+purple_theme_manager_for_each_theme(PTFunc func)
{
- PurpleThemeManagerPrivate *priv;
-
- g_return_if_fail(PURPLE_IS_THEME_MANAGER(self));
g_return_if_fail(func);
- priv = PURPLE_THEME_MANAGER_GET_PRIVATE(self);
-
- g_hash_table_foreach(priv->theme_table,
+ g_hash_table_foreach(theme_table,
(GHFunc) purple_theme_manager_function_wrapper,
func);
}
============================================================
--- libpurple/theme-manager.h 0bb2b69f79597cb8e387533b2741db21128798d4
+++ libpurple/theme-manager.h e19134f3c98b17287b34ae900579640260d12162
@@ -45,7 +45,6 @@ struct _PurpleThemeManager {
struct _PurpleThemeManager {
GObject parent;
- gpointer priv;
};
struct _PurpleThemeManagerClass {
@@ -69,7 +68,7 @@ GType purple_theme_manager_get_type (voi
*
* @returns a new ThemeManager object
*/
-PurpleThemeManager* purple_theme_manager_new (PurpleThemeLoader *loader1, ...);
+void purple_theme_manager_init (PurpleThemeLoader *loader1, ...);
/**
* Finds the PurpleTheme object stored by the theme manager
@@ -79,44 +78,44 @@ PurpleThemeManager* purple_theme_manager
*
* @returns The PurpleTheme or NULL if it wasn't found
*/
-PurpleTheme *purple_theme_manager_find_theme(PurpleThemeManager *self, const gchar *name, const gchar *type);
+PurpleTheme *purple_theme_manager_find_theme(const gchar *name, const gchar *type);
/**
* Adds a PurpleTheme to the theme manager, if the theme already exits it does nothing
*
* @param theme the PurpleTheme to add to the manager
*/
-void purple_theme_manager_add_theme(PurpleThemeManager *self, PurpleTheme *theme);
+void purple_theme_manager_add_theme(PurpleTheme *theme);
/**
* Removes a PurpleTheme from the theme manager, and frees the theme
* @param theme the PurpleTheme to remove from the manager
*/
-void purple_theme_manager_remove_theme(PurpleThemeManager *self, PurpleTheme *theme);
+void purple_theme_manager_remove_theme(PurpleTheme *theme);
/**
* Addes a Loader to the theme manager so it knows how to build themes
* @param loader the PurpleThemeLoader to add
*/
-void purple_theme_manager_register_type(PurpleThemeManager *self, PurpleThemeLoader *loader);
+void purple_theme_manager_register_type(PurpleThemeLoader *loader);
/**
* Removes the loader and all themes of the same type from the loader
* @param loader the PurpleThemeLoader to be removed
*/
-void purple_theme_manager_unregister_type(PurpleThemeManager *self, PurpleThemeLoader *loader);
+void purple_theme_manager_unregister_type(PurpleThemeLoader *loader);
/**
* Rebuilds all the themes in the theme manaer
*/
-void purple_theme_manager_rebuild(PurpleThemeManager *self);
+void purple_theme_manager_refresh(void);
/**
* Calles the given function on each purple theme
*
* @param func the PTFunc to be applied to each theme
*/
-void purple_theme_manager_for_each_theme(PurpleThemeManager *self, PTFunc func);
+void purple_theme_manager_for_each_theme(PTFunc func);
G_END_DECLS
#endif /* __PURPLE_THEME_MANAGER_H__ */
More information about the Commits
mailing list