aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-state.c56
-rw-r--r--lib/ephy-state.h4
2 files changed, 59 insertions, 1 deletions
diff --git a/lib/ephy-state.c b/lib/ephy-state.c
index 33edb87a5..fb214775f 100644
--- a/lib/ephy-state.c
+++ b/lib/ephy-state.c
@@ -27,6 +27,7 @@
#include <string.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkpaned.h>
+#include <gtk/gtkexpander.h>
#define EPHY_STATES_XML_FILE "states.xml"
#define EPHY_STATES_XML_ROOT "ephy_states"
@@ -41,7 +42,8 @@ enum
EPHY_NODE_STATE_PROP_POSITION_X = 6,
EPHY_NODE_STATE_PROP_POSITION_Y = 7,
EPHY_NODE_STATE_PROP_SIZE = 8,
- EPHY_NODE_STATE_PROP_POSITION = 9
+ EPHY_NODE_STATE_PROP_POSITION = 9,
+ EPHY_NODE_STATE_PROP_EXPANDED = 10
};
static EphyNode *states = NULL;
@@ -433,6 +435,58 @@ ephy_state_add_paned (GtkWidget *paned,
G_CALLBACK (paned_size_allocate_cb), node);
}
+static void
+expander_activate_cb (GtkExpander *expander,
+ EphyNode *node)
+{
+ GValue value = { 0, };
+
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, gtk_expander_get_expanded (expander));
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_EXPANDED, &value);
+ g_value_unset (&value);
+}
+
+void
+ephy_state_add_expander (GtkWidget *expander,
+ const char *name,
+ gboolean default_state)
+{
+ EphyNode *node;
+ gboolean expanded;
+
+ ensure_states ();
+
+ node = find_by_name (name);
+ if (node == NULL)
+ {
+ GValue value = { 0, };
+
+ node = ephy_node_new (states_db);
+ ephy_node_add_child (states, node);
+
+ 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);
+
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, default_state);
+ ephy_node_set_property
+ (node, EPHY_NODE_STATE_PROP_EXPANDED, &value);
+ g_value_unset (&value);
+ }
+
+ expanded = ephy_node_get_property_boolean
+ (node, EPHY_NODE_STATE_PROP_EXPANDED);
+
+ gtk_expander_set_expanded (GTK_EXPANDER (expander), expanded);
+
+ g_signal_connect (expander, "activate",
+ G_CALLBACK (expander_activate_cb), node);
+}
+
void
ephy_state_save (void)
{
diff --git a/lib/ephy-state.h b/lib/ephy-state.h
index 55cd4fa5a..bc01e2eea 100644
--- a/lib/ephy-state.h
+++ b/lib/ephy-state.h
@@ -43,6 +43,10 @@ void ephy_state_add_paned (GtkWidget *paned,
const char *name,
int default_width);
+void ephy_state_add_expander (GtkWidget *expander,
+ const char *name,
+ gboolean default_state);
+
void ephy_state_save (void);
G_END_DECLS