[gedit] Add limit property to open tool button



commit 4819d3845a94819f362aaa1669e42e428470e9de
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Thu May 2 17:06:11 2013 +0200

    Add limit property to open tool button

 gedit/gedit-open-tool-button.c |   74 +++++++++++++++++++++++++++++++++-------
 gedit/gedit-window.c           |    5 +++
 2 files changed, 66 insertions(+), 13 deletions(-)
---
diff --git a/gedit/gedit-open-tool-button.c b/gedit/gedit-open-tool-button.c
index 6dc03b9..5f849c5 100644
--- a/gedit/gedit-open-tool-button.c
+++ b/gedit/gedit-open-tool-button.c
@@ -25,12 +25,17 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include "gedit-settings.h"
 #include "gedit-open-tool-button.h"
 
 struct _GeditOpenToolButtonPrivate
 {
-       GSettings *ui_settings;
+       gint limit;
+};
+
+enum
+{
+       PROP_0,
+       PROP_LIMIT
 };
 
 G_DEFINE_TYPE (GeditOpenToolButton, gedit_open_tool_button, GTK_TYPE_MENU_TOOL_BUTTON)
@@ -50,11 +55,9 @@ set_recent_menu (GeditOpenToolButton *button)
        gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (recent_menu),
                                          GTK_RECENT_SORT_MRU);
 
-       g_settings_bind (button->priv->ui_settings,
-                        GEDIT_SETTINGS_MAX_RECENTS,
-                        GTK_RECENT_CHOOSER (recent_menu),
-                        "limit",
-                        G_SETTINGS_BIND_GET);
+       g_object_bind_property (button, "limit",
+                               recent_menu, "limit",
+                               G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
 
        filter = gtk_recent_filter_new ();
        gtk_recent_filter_add_group (filter, "gedit");
@@ -68,11 +71,45 @@ set_recent_menu (GeditOpenToolButton *button)
 static void
 gedit_open_tool_button_dispose (GObject *object)
 {
+       G_OBJECT_CLASS (gedit_open_tool_button_parent_class)->dispose (object);
+}
+
+static void
+gedit_open_tool_button_get_property (GObject    *object,
+                                     guint       prop_id,
+                                     GValue     *value,
+                                     GParamSpec *pspec)
+{
        GeditOpenToolButton *button = GEDIT_OPEN_TOOL_BUTTON (object);
 
-       g_clear_object (&button->priv->ui_settings);
+       switch (prop_id)
+       {
+               case PROP_LIMIT:
+                       g_value_set_int (value, button->priv->limit);
+                       break;
+               default:
+                       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                       break;
+       }
+}
 
-       G_OBJECT_CLASS (gedit_open_tool_button_parent_class)->dispose (object);
+static void
+gedit_open_tool_button_set_property (GObject      *object,
+                                     guint         prop_id,
+                                     const GValue *value,
+                                     GParamSpec   *pspec)
+{
+       GeditOpenToolButton *button = GEDIT_OPEN_TOOL_BUTTON (object);
+
+       switch (prop_id)
+       {
+               case PROP_LIMIT:
+                       button->priv->limit = g_value_get_int (value);
+                       break;
+               default:
+                       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                       break;
+       }
 }
 
 static void
@@ -86,8 +123,7 @@ gedit_open_tool_button_constructed (GObject *object)
        gtk_menu_tool_button_set_arrow_tooltip_text (GTK_MENU_TOOL_BUTTON (button),
                                                     _("Open a recently used file"));
 
-       if (G_OBJECT_CLASS (gedit_open_tool_button_parent_class)->constructed != NULL)
-               G_OBJECT_CLASS (gedit_open_tool_button_parent_class)->constructed (object);
+       G_OBJECT_CLASS (gedit_open_tool_button_parent_class)->constructed (object);
 }
 
 static void
@@ -97,7 +133,7 @@ gedit_open_tool_button_init (GeditOpenToolButton *button)
                                                    GEDIT_TYPE_OPEN_TOOL_BUTTON,
                                                    GeditOpenToolButtonPrivate);
 
-       button->priv->ui_settings = g_settings_new ("org.gnome.gedit.preferences.ui");
+       button->priv->limit = 10;
 }
 
 static void
@@ -106,13 +142,25 @@ gedit_open_tool_button_class_init (GeditOpenToolButtonClass *klass)
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
        object_class->dispose = gedit_open_tool_button_dispose;
+       object_class->get_property = gedit_open_tool_button_get_property;
+       object_class->set_property = gedit_open_tool_button_set_property;
        object_class->constructed = gedit_open_tool_button_constructed;
 
+       g_object_class_install_property (object_class, PROP_LIMIT,
+                                        g_param_spec_int ("limit",
+                                                          "Limit",
+                                                          "The maximum number of recently used documents.",
+                                                          0,
+                                                          G_MAXINT,
+                                                          10,
+                                                          G_PARAM_READWRITE |
+                                                          G_PARAM_STATIC_STRINGS));
+
        g_type_class_add_private (object_class, sizeof (GeditOpenToolButtonPrivate));
 }
 
 GtkToolItem *
-gedit_open_tool_button_new ()
+gedit_open_tool_button_new (void)
 {
        GeditOpenToolButton *button;
 
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index a5fe832..2708514 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -1456,6 +1456,11 @@ setup_toolbar_open_button (GeditWindow *window,
        GtkAction *action;
 
        open_button = gedit_open_tool_button_new ();
+       g_settings_bind (window->priv->ui_settings,
+                        GEDIT_SETTINGS_MAX_RECENTS,
+                        open_button,
+                        "limit",
+                        G_SETTINGS_BIND_GET);
 
        recent_menu = gtk_menu_tool_button_get_menu (GTK_MENU_TOOL_BUTTON (open_button));
 


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