[dconf] Add set to default button



commit 9f47ad19d08daff67ad8f5bb8c0e1738499d6904
Author: Robert Ancell <robert ancell canonical com>
Date:   Sat Jan 15 00:18:20 2011 -0600

    Add set to default button

 configure.ac             |    1 +
 editor/Makefile.am       |    6 ++--
 editor/dconf-editor.ui   |    6 ++-
 editor/dconf-editor.vala |   71 +++++++++++++++++++++++++++++++---------------
 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()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]