1 /* GTK - The GIMP Toolkit
2 * gtkrecentchooserwidget.c: embeddable recently used resources chooser widget
3 * Copyright (C) 2006 Emmanuele Bassi
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "config.h"
20
21 #include "gtkrecentchooserwidget.h"
22 #include "gtkrecentchooserdefault.h"
23 #include "gtkrecentchooserutils.h"
24 #include "gtkorientable.h"
25 #include "gtktypebuiltins.h"
26
27 /**
28 * SECTION:gtkrecentchooserwidget
29 * @Short_description: Displays recently used files
30 * @Title: GtkRecentChooserWidget
31 * @See_also:#GtkRecentChooser, #GtkRecentChooserDialog
32 *
33 * #GtkRecentChooserWidget is a widget suitable for selecting recently used
34 * files. It is the main building block of a #GtkRecentChooserDialog. Most
35 * applications will only need to use the latter; you can use
36 * #GtkRecentChooserWidget as part of a larger window if you have special needs.
37 *
38 * Note that #GtkRecentChooserWidget does not have any methods of its own.
39 * Instead, you should use the functions that work on a #GtkRecentChooser.
40 *
41 * Recently used files are supported since GTK+ 2.10.
42 */
43
44
45 struct _GtkRecentChooserWidgetPrivate
46 {
47 GtkRecentManager *manager;
48
49 GtkWidget *chooser;
50 };
51
52 static void gtk_recent_chooser_widget_set_property (GObject *object,
53 guint prop_id,
54 const GValue *value,
55 GParamSpec *pspec);
56 static void gtk_recent_chooser_widget_get_property (GObject *object,
57 guint prop_id,
58 GValue *value,
59 GParamSpec *pspec);
60 static void gtk_recent_chooser_widget_finalize (GObject *object);
61
62
G_DEFINE_TYPE_WITH_CODE(GtkRecentChooserWidget,gtk_recent_chooser_widget,GTK_TYPE_BOX,G_ADD_PRIVATE (GtkRecentChooserWidget)G_IMPLEMENT_INTERFACE (GTK_TYPE_RECENT_CHOOSER,_gtk_recent_chooser_delegate_iface_init))63 G_DEFINE_TYPE_WITH_CODE (GtkRecentChooserWidget,
64 gtk_recent_chooser_widget,
65 GTK_TYPE_BOX,
66 G_ADD_PRIVATE (GtkRecentChooserWidget)
67 G_IMPLEMENT_INTERFACE (GTK_TYPE_RECENT_CHOOSER,
68 _gtk_recent_chooser_delegate_iface_init))
69
70 static void
71 gtk_recent_chooser_widget_constructed (GObject *gobject)
72 {
73 GtkRecentChooserWidget *self = GTK_RECENT_CHOOSER_WIDGET (gobject);
74
75 self->priv->chooser = _gtk_recent_chooser_default_new (self->priv->manager);
76
77 gtk_container_add (GTK_CONTAINER (self), self->priv->chooser);
78 gtk_widget_show (self->priv->chooser);
79 _gtk_recent_chooser_set_delegate (GTK_RECENT_CHOOSER (self),
80 GTK_RECENT_CHOOSER (self->priv->chooser));
81 }
82
83 static void
gtk_recent_chooser_widget_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec)84 gtk_recent_chooser_widget_set_property (GObject *object,
85 guint prop_id,
86 const GValue *value,
87 GParamSpec *pspec)
88 {
89 GtkRecentChooserWidgetPrivate *priv;
90
91 priv = gtk_recent_chooser_widget_get_instance_private (GTK_RECENT_CHOOSER_WIDGET (object));
92
93 switch (prop_id)
94 {
95 case GTK_RECENT_CHOOSER_PROP_RECENT_MANAGER:
96 priv->manager = g_value_get_object (value);
97 break;
98 default:
99 g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value);
100 break;
101 }
102 }
103
104 static void
gtk_recent_chooser_widget_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec)105 gtk_recent_chooser_widget_get_property (GObject *object,
106 guint prop_id,
107 GValue *value,
108 GParamSpec *pspec)
109 {
110 GtkRecentChooserWidgetPrivate *priv;
111
112 priv = gtk_recent_chooser_widget_get_instance_private (GTK_RECENT_CHOOSER_WIDGET (object));
113
114 g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value);
115 }
116
117 static void
gtk_recent_chooser_widget_finalize(GObject * object)118 gtk_recent_chooser_widget_finalize (GObject *object)
119 {
120 GtkRecentChooserWidget *self = GTK_RECENT_CHOOSER_WIDGET (object);
121
122 self->priv->manager = NULL;
123
124 G_OBJECT_CLASS (gtk_recent_chooser_widget_parent_class)->finalize (object);
125 }
126
127 static void
gtk_recent_chooser_widget_class_init(GtkRecentChooserWidgetClass * klass)128 gtk_recent_chooser_widget_class_init (GtkRecentChooserWidgetClass *klass)
129 {
130 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
131
132 gobject_class->constructed = gtk_recent_chooser_widget_constructed;
133 gobject_class->set_property = gtk_recent_chooser_widget_set_property;
134 gobject_class->get_property = gtk_recent_chooser_widget_get_property;
135 gobject_class->finalize = gtk_recent_chooser_widget_finalize;
136
137 _gtk_recent_chooser_install_properties (gobject_class);
138 }
139
140 static void
gtk_recent_chooser_widget_init(GtkRecentChooserWidget * widget)141 gtk_recent_chooser_widget_init (GtkRecentChooserWidget *widget)
142 {
143 widget->priv = gtk_recent_chooser_widget_get_instance_private (widget);
144
145 gtk_orientable_set_orientation (GTK_ORIENTABLE (widget),
146 GTK_ORIENTATION_VERTICAL);
147 }
148
149 /*
150 * Public API
151 */
152
153 /**
154 * gtk_recent_chooser_widget_new:
155 *
156 * Creates a new #GtkRecentChooserWidget object. This is an embeddable widget
157 * used to access the recently used resources list.
158 *
159 * Returns: a new #GtkRecentChooserWidget
160 *
161 * Since: 2.10
162 */
163 GtkWidget *
gtk_recent_chooser_widget_new(void)164 gtk_recent_chooser_widget_new (void)
165 {
166 return g_object_new (GTK_TYPE_RECENT_CHOOSER_WIDGET, NULL);
167 }
168
169 /**
170 * gtk_recent_chooser_widget_new_for_manager:
171 * @manager: a #GtkRecentManager
172 *
173 * Creates a new #GtkRecentChooserWidget with a specified recent manager.
174 *
175 * This is useful if you have implemented your own recent manager, or if you
176 * have a customized instance of a #GtkRecentManager object.
177 *
178 * Returns: a new #GtkRecentChooserWidget
179 *
180 * Since: 2.10
181 */
182 GtkWidget *
gtk_recent_chooser_widget_new_for_manager(GtkRecentManager * manager)183 gtk_recent_chooser_widget_new_for_manager (GtkRecentManager *manager)
184 {
185 g_return_val_if_fail (manager == NULL || GTK_IS_RECENT_MANAGER (manager), NULL);
186
187 return g_object_new (GTK_TYPE_RECENT_CHOOSER_WIDGET,
188 "recent-manager", manager,
189 NULL);
190 }
191