diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-01-15 00:18:20 -0600 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-01-15 00:18:20 -0600 |
commit | 9f47ad19d08daff67ad8f5bb8c0e1738499d6904 (patch) | |
tree | 255514132cc15371651fe58822b527ae6fe751dc | |
parent | 639f0ad87c807a95d3af177fed7b4fe17a820efb (diff) | |
download | dconf-9f47ad19d08daff67ad8f5bb8c0e1738499d6904.tar.gz |
Add set to default button
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | editor/Makefile.am | 6 | ||||
-rw-r--r-- | editor/dconf-editor.ui | 6 | ||||
-rw-r--r-- | editor/dconf-editor.vala | 71 | ||||
-rw-r--r-- | editor/dconf-model.vala | 47 |
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() |