aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-state.c83
1 files changed, 60 insertions, 23 deletions
diff --git a/lib/ephy-state.c b/lib/ephy-state.c
index 482cbde9b..58c2c8d37 100644
--- a/lib/ephy-state.c
+++ b/lib/ephy-state.c
@@ -46,12 +46,15 @@ enum
static EphyNode *states = NULL;
static EphyNodeDb *states_db = NULL;
+#define EPHY_STATES_XML_VERSION "0.1"
+
static void
ephy_states_load (void)
{
xmlDocPtr doc;
xmlNodePtr root, child;
char *xml_file;
+ char *tmp;
xml_file = g_build_filename (ephy_dot_dir (),
STATES_FILE,
@@ -65,7 +68,19 @@ ephy_states_load (void)
root = xmlDocGetRootElement (doc);
- for (child = root->children; child != NULL; child = child->next)
+ tmp = xmlGetProp (root, "version");
+ if (tmp != NULL && strcmp (tmp, EPHY_STATES_XML_VERSION) == 0)
+ {
+ child = root->children;
+ }
+ else
+ {
+ g_warning ("Old version of states.xml discarded");
+ child = NULL;
+ }
+ g_free (tmp);
+
+ for (; child != NULL; child = child->next)
{
EphyNode *node;
@@ -96,7 +111,8 @@ ephy_states_save (void)
xmlIndentTreeOutput = TRUE;
doc = xmlNewDoc ("1.0");
- root = xmlNewDocNode (doc, NULL, "ephy_bookmarks", NULL);
+ root = xmlNewDocNode (doc, NULL, "ephy_states", NULL);
+ xmlSetProp (root, "version", EPHY_STATES_XML_VERSION);
xmlDocSetRootElement (doc, root);
children = ephy_node_get_children (states);
@@ -337,28 +353,35 @@ window_state_event_cb (GtkWidget *widget,
return FALSE;
}
-void
-ephy_state_add_window (GtkWidget *window,
- const char *name,
- int default_width,
- int default_height,
- EphyStateWindowFlags flags)
+static EphyNode *
+create_window_node (const char *name,
+ int default_width,
+ int default_height,
+ EphyStateWindowFlags flags)
{
EphyNode *node;
+ GValue value = { 0, };
- ensure_states ();
+ node = ephy_node_new (states_db);
+ ephy_node_add_child (states, node);
- node = find_by_name (name);
- if (node == NULL)
- {
- GValue value = { 0, };
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, name);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_NAME,
+ &value);
+ g_value_unset (&value);
- node = ephy_node_new (states_db);
- ephy_node_add_child (states, node);
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, FALSE);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_MAXIMIZE,
+ &value);
+ g_value_unset (&value);
- g_value_init (&value, G_TYPE_STRING);
- g_value_set_string (&value, name);
- ephy_node_set_property (node, EPHY_NODE_STATE_PROP_NAME,
+ if (flags & EPHY_STATE_WINDOW_SAVE_SIZE)
+ {
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, TRUE);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_SIZE,
&value);
g_value_unset (&value);
@@ -373,12 +396,26 @@ ephy_state_add_window (GtkWidget *window,
ephy_node_set_property (node, EPHY_NODE_STATE_PROP_HEIGHT,
&value);
g_value_unset (&value);
+ }
- g_value_init (&value, G_TYPE_BOOLEAN);
- g_value_set_boolean (&value, FALSE);
- ephy_node_set_property (node, EPHY_NODE_STATE_PROP_MAXIMIZE,
- &value);
- g_value_unset (&value);
+ return node;
+}
+
+void
+ephy_state_add_window (GtkWidget *window,
+ const char *name,
+ int default_width,
+ int default_height,
+ EphyStateWindowFlags flags)
+{
+ EphyNode *node;
+
+ ensure_states ();
+
+ node = find_by_name (name);
+ if (node == NULL)
+ {
+ node = create_window_node (name, default_width, default_height, flags);
}
ephy_state_window_set_size (window, node);