summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2011-01-15 00:18:20 -0600
committerRobert Ancell <robert.ancell@canonical.com>2011-01-15 00:18:20 -0600
commit9f47ad19d08daff67ad8f5bb8c0e1738499d6904 (patch)
tree255514132cc15371651fe58822b527ae6fe751dc
parent639f0ad87c807a95d3af177fed7b4fe17a820efb (diff)
downloaddconf-9f47ad19d08daff67ad8f5bb8c0e1738499d6904.tar.gz
Add set to default button
-rw-r--r--configure.ac1
-rw-r--r--editor/Makefile.am6
-rw-r--r--editor/dconf-editor.ui6
-rw-r--r--editor/dconf-editor.vala71
-rw-r--r--editor/dconf-model.vala47
5 files changed, 97 insertions, 34 deletions
diff --git a/configure.ac b/configure.ac
index da1af8d..e399f6f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -29,6 +29,7 @@ AM_CONDITIONAL(ENABLE_EDITOR, test "x$enable_editor" != "xno")
if test "x$enable_editor" != "xno"; then
PKG_CHECK_MODULES(gtk, gtk+-3.0)
+ PKG_CHECK_MODULES(gmodule, gmodule-2.0)
PKG_CHECK_MODULES(libxml, libxml-2.0)
fi
diff --git a/editor/Makefile.am b/editor/Makefile.am
index d6fb60f..18e7d60 100644
--- a/editor/Makefile.am
+++ b/editor/Makefile.am
@@ -1,9 +1,9 @@
bin_PROGRAMS = dconf-editor
-AM_CFLAGS = $(gtk_CFLAGS) $(libxml_CFLAGS) -I$(top_srcdir)/common -I$(top_srcdir)/client -DPKGDATADIR=\"@datadir@/dconf-editor\"
-AM_VALAFLAGS = --vapidir ../client --pkg gtk+-3.0 --pkg libxml-2.0 --pkg dconf
+AM_CFLAGS = $(gtk_CFLAGS) $(gmodule_CFLAGS) $(libxml_CFLAGS) -I$(top_srcdir)/common -I$(top_srcdir)/client -DPKGDATADIR=\"@datadir@/dconf-editor\"
+AM_VALAFLAGS = --vapidir ../client --pkg gtk+-3.0 --pkg gmodule-2.0 --pkg libxml-2.0 --pkg dconf
CFLAGS += -Wno-error
-dconf_editor_LDADD = ../client/libdconf.so.0 $(gtk_LIBS) $(gee_LIBS) $(libxml_LIBS)
+dconf_editor_LDADD = ../client/libdconf.so.0 $(gtk_LIBS) $(gmodule_LIBS) $(gee_LIBS) $(libxml_LIBS)
dconf_editor_SOURCES = config.vapi dconf-editor.vala dconf-model.vala dconf-schema.vala dconf-view.vala
desktopdir = $(datadir)/applications
diff --git a/editor/dconf-editor.ui b/editor/dconf-editor.ui
index a0be4e2..84ea5c5 100644
--- a/editor/dconf-editor.ui
+++ b/editor/dconf-editor.ui
@@ -3,7 +3,8 @@
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkAction" id="set_default_action">
- <property name="label" translatable="yes">Set as Default</property>
+ <property name="label" translatable="yes">Set to Default</property>
+ <property name="sensitive">False</property>
<signal name="activate" handler="set_default_cb" swapped="no"/>
</object>
<object class="GtkWindow" id="main_window">
@@ -39,8 +40,9 @@
<property name="can_focus">False</property>
<property name="spacing">6</property>
<child>
- <object class="GtkTable" id="table1">
+ <object class="GtkTable" id="key_info_table">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="n_rows">5</property>
<property name="n_columns">2</property>
diff --git a/editor/dconf-editor.vala b/editor/dconf-editor.vala
index 5a94320..d3b1e63 100644
--- a/editor/dconf-editor.vala
+++ b/editor/dconf-editor.vala
@@ -6,11 +6,15 @@ class ConfigurationEditor
private Gtk.Window window;
private Gtk.TreeView dir_tree_view;
private Gtk.TreeView key_tree_view;
+ private Gtk.Table key_info_table;
private Gtk.Label schema_label;
private Gtk.Label summary_label;
private Gtk.Label description_label;
private Gtk.Label type_label;
private Gtk.Label default_label;
+ private Gtk.Action set_default_action;
+
+ private Key? selected_key;
public ConfigurationEditor()
{
@@ -25,6 +29,7 @@ class ConfigurationEditor
{
critical("Failed to load UI: %s", e.message);
}
+ ui.connect_signals(this);
window = (Gtk.Window)ui.get_object("main_window");
window.destroy.connect(Gtk.main_quit);
@@ -41,11 +46,13 @@ class ConfigurationEditor
scroll = (Gtk.ScrolledWindow)ui.get_object("key_scrolledwindow");
scroll.add(key_tree_view);
+ key_info_table = (Gtk.Table)ui.get_object("key_info_table");
schema_label = (Gtk.Label)ui.get_object("schema_label");
summary_label = (Gtk.Label)ui.get_object("summary_label");
description_label = (Gtk.Label)ui.get_object("description_label");
type_label = (Gtk.Label)ui.get_object("type_label");
default_label = (Gtk.Label)ui.get_object("default_label");
+ set_default_action = (Gtk.Action)ui.get_object("set_default_action");
/* Always select something */
Gtk.TreeIter iter;
@@ -73,19 +80,6 @@ class ConfigurationEditor
key_tree_view.get_selection().select_iter(iter);
}
- private Key? get_selected_key()
- {
- Gtk.TreeIter iter;
- Gtk.TreeModel model;
- if (key_tree_view.get_selection().get_selected(out model, out iter))
- {
- var key_model = (KeyModel) model;
- return key_model.get_key(iter);
- }
- else
- return null;
- }
-
private string type_to_description(string type)
{
switch(type)
@@ -105,20 +99,38 @@ class ConfigurationEditor
private void key_selected_cb()
{
- var key = get_selected_key();
+ if(selected_key != null)
+ selected_key.value_changed.disconnect(key_changed_cb);
+
+ Gtk.TreeIter iter;
+ Gtk.TreeModel model;
+ if (key_tree_view.get_selection().get_selected(out model, out iter))
+ {
+ var key_model = (KeyModel) model;
+ selected_key = key_model.get_key(iter);
+ }
+ else
+ selected_key = null;
+
+ if(selected_key != null)
+ selected_key.value_changed.connect(key_changed_cb);
+
+ key_info_table.sensitive = selected_key != null;
+ set_default_action.sensitive = selected_key != null && !selected_key.is_default;
+
string schema_name = "", summary = "", description = "", type = "", default_value = "";
- if (key != null)
+ if (selected_key != null)
{
- if (key.schema != null)
+ if (selected_key.schema != null)
{
- schema_name = key.schema.schema.id;
- if (key.schema.summary != null)
- summary = key.schema.summary;
- if (key.schema.description != null)
- description = key.schema.description;
- type = type_to_description(key.schema.type);
- default_value = key.schema.default_value.print(false);
+ schema_name = selected_key.schema.schema.id;
+ if (selected_key.schema.summary != null)
+ summary = selected_key.schema.summary;
+ if (selected_key.schema.description != null)
+ description = selected_key.schema.description;
+ type = type_to_description(selected_key.schema.type);
+ default_value = selected_key.schema.default_value.print(false);
}
else
{
@@ -133,6 +145,19 @@ class ConfigurationEditor
default_label.set_text(default_value);
}
+ private void key_changed_cb(Key key)
+ {
+ set_default_action.sensitive = selected_key != null && !selected_key.is_default;
+ }
+
+ [CCode (cname = "G_MODULE_EXPORT set_default_cb", instance_pos = -1)]
+ public void set_default_cb (Gtk.Action action)
+ {
+ if (selected_key == null)
+ return;
+ selected_key.set_to_default();
+ }
+
public static int main(string[] args)
{
Gtk.init(ref args);
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index 3cb3745..d731fdd 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -11,13 +11,12 @@ public class Key : GLib.Object
public bool has_schema
{
- private set {}
- public get { return schema != null; }
+ get { return schema != null; }
}
public int index
{
- get { return parent.keys.index (this); }
+ get { return parent.keys.index (this); }
}
public string type_string
@@ -58,15 +57,17 @@ public class Key : GLib.Object
catch (GLib.Error e)
{
}
+ value_changed();
}
}
-
+
public bool is_default
{
- private set {}
- public get { update_value(); return _value == null; }
+ get { update_value(); return _value == null; }
}
+ public signal void value_changed();
+
public Key(SettingsModel model, Directory parent, string name, string full_name)
{
this.model = model;
@@ -76,6 +77,22 @@ public class Key : GLib.Object
this.schema = model.schemas.keys.lookup(full_name);
}
+ public void set_to_default()
+ {
+ if (!has_schema)
+ return;
+
+ _value = null;
+ try
+ {
+ model.client.write(full_name, null);
+ }
+ catch (GLib.Error e)
+ {
+ }
+ value_changed();
+ }
+
private void update_value()
{
_value = model.client.read(full_name);
@@ -215,6 +232,24 @@ public class KeyModel: GLib.Object, Gtk.TreeModel
public KeyModel(Directory directory)
{
this.directory = directory;
+ foreach (var key in directory.keys)
+ key.value_changed.connect(key_changed_cb); // FIXME: Need to delete this callbacks
+ }
+
+ private void key_changed_cb(Key key)
+ {
+ Gtk.TreeIter iter;
+ if (!get_iter_first(out iter))
+ return;
+
+ do
+ {
+ if(get_key(iter) == key)
+ {
+ row_changed(get_path(iter), iter);
+ return;
+ }
+ } while(iter_next(ref iter));
}
public Gtk.TreeModelFlags get_flags()