]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-metadata-manager.c
Use common toolbar and recent models for all windows. Patch by Nickolay V.
[evince.git] / shell / ev-metadata-manager.c
index bbf5f762db200d770e74acf333bceab0929c2c10..2bbd291580362bd9ab04f33adf2a80cbad2c2bf5 100644 (file)
@@ -67,7 +67,7 @@ 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;
@@ -87,12 +87,9 @@ 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->values_loaded = 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);
 }