X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-metadata-manager.c;h=7acf6a14c456a9a89f12a84a8976601abf53f3bf;hb=b0083a8f9bb4ef2d2fd9bed4106ce61e042f7c5c;hp=bbf5f762db200d770e74acf333bceab0929c2c10;hpb=d0e4d9279d7aa4be1ddec50c2a87c63638632712;p=evince.git diff --git a/shell/ev-metadata-manager.c b/shell/ev-metadata-manager.c index bbf5f762..7acf6a14 100644 --- a/shell/ev-metadata-manager.c +++ b/shell/ev-metadata-manager.c @@ -43,7 +43,7 @@ #define MAX_ITEMS 50 -typedef struct _GeditMetadataManager GeditMetadataManager; +typedef struct _EvMetadataManager EvMetadataManager; typedef struct _Item Item; @@ -54,7 +54,7 @@ struct _Item GHashTable *values; }; -struct _GeditMetadataManager +struct _EvMetadataManager { gboolean values_loaded; /* It is true if the file has been read */ @@ -67,10 +67,10 @@ struct _GeditMetadataManager GHashTable *items; }; -static void ev_metadata_manager_save (gpointer data); +static gboolean ev_metadata_manager_save (gpointer data); -static GeditMetadataManager *ev_metadata_manager = NULL; +static EvMetadataManager *ev_metadata_manager = NULL; static void item_free (gpointer data) @@ -87,13 +87,10 @@ item_free (gpointer data) g_free (item); } -static gboolean +void ev_metadata_manager_init (void) { - if (ev_metadata_manager != NULL) - return TRUE; - - ev_metadata_manager = g_new0 (GeditMetadataManager, 1); + ev_metadata_manager = g_new0 (EvMetadataManager, 1); ev_metadata_manager->values_loaded = FALSE; ev_metadata_manager->modified = FALSE; @@ -110,8 +107,6 @@ ev_metadata_manager_init (void) (GSourceFunc)ev_metadata_manager_save, NULL, NULL); - - return TRUE; } /* This function must be called before exiting ev */ @@ -149,6 +144,12 @@ parse_value (xmlChar *value, xmlChar *type) case G_TYPE_INT: g_value_set_int (ret, atoi ((char *)value)); break; + case G_TYPE_DOUBLE: + g_value_set_double (ret, atof ((char *)value)); + break; + case G_TYPE_BOOLEAN: + g_value_set_boolean (ret, atoi ((char *)value)); + break; } return ret; @@ -297,7 +298,7 @@ ev_metadata_manager_get (const gchar *uri, g_return_val_if_fail (key != NULL, FALSE); if (ev_metadata_manager == NULL) - ev_metadata_manager_init (); + return FALSE; if (!ev_metadata_manager->values_loaded) { @@ -352,7 +353,7 @@ ev_metadata_manager_set (const gchar *uri, g_return_if_fail (key != NULL); if (ev_metadata_manager == NULL) - ev_metadata_manager_init (); + return; if (!ev_metadata_manager->values_loaded) { @@ -426,6 +427,12 @@ save_values (const gchar *key, GValue *value, xmlNodePtr parent) case G_TYPE_INT: string_value = g_strdup_printf ("%d", g_value_get_int (value)); break; + case G_TYPE_DOUBLE: + string_value = g_strdup_printf ("%f", g_value_get_double (value)); + break; + case G_TYPE_BOOLEAN: + string_value = g_strdup_printf ("%d", g_value_get_boolean (value)); + break; default: string_value = NULL; g_assert_not_reached (); @@ -504,7 +511,7 @@ resize_items () } } -static void +static gboolean ev_metadata_manager_save (gpointer data) { xmlDocPtr doc; @@ -512,7 +519,7 @@ ev_metadata_manager_save (gpointer data) gchar *file_name; if (!ev_metadata_manager->modified) - return; + return TRUE; resize_items (); @@ -520,7 +527,7 @@ ev_metadata_manager_save (gpointer data) doc = xmlNewDoc ((const xmlChar *)"1.0"); if (doc == NULL) - return; + return TRUE; /* Create metadata root */ root = xmlNewDocNode (doc, NULL, (const xmlChar *)"metadata", NULL); @@ -537,6 +544,8 @@ ev_metadata_manager_save (gpointer data) xmlFreeDoc (doc); ev_metadata_manager->modified = FALSE; + + return TRUE; } void @@ -548,4 +557,45 @@ ev_metadata_manager_set_int (const gchar *uri, const gchar *key, int value) g_value_set_int (&val, value); ev_metadata_manager_set (uri, key, &val); + + g_value_unset (&val); +} + +void +ev_metadata_manager_set_double (const gchar *uri, const gchar *key, double value) +{ + GValue val = { 0, }; + + g_value_init (&val, G_TYPE_DOUBLE); + g_value_set_double (&val, value); + + ev_metadata_manager_set (uri, key, &val); + + g_value_unset (&val); +} + +void +ev_metadata_manager_set_string (const gchar *uri, const gchar *key, const gchar *value) +{ + GValue val = { 0, }; + + g_value_init (&val, G_TYPE_STRING); + g_value_set_string (&val, value); + + ev_metadata_manager_set (uri, key, &val); + + g_value_unset (&val); +} + +void +ev_metadata_manager_set_boolean (const gchar *uri, const gchar *key, gboolean value) +{ + GValue val = { 0, }; + + g_value_init (&val, G_TYPE_BOOLEAN); + g_value_set_boolean (&val, value); + + ev_metadata_manager_set (uri, key, &val); + + g_value_unset (&val); }