1 /* GTK - The GIMP Toolkit
2 * gtkfilechooserwidget.c: Embeddable file selector widget
3 * Copyright (C) 2003, Red Hat, Inc.
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.
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.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
23 #include "gtkfilechooserwidget.h"
24 #include "gtkfilechooserdefault.h"
25 #include "gtkfilechooserutils.h"
26 #include "gtktypebuiltins.h"
27 #include "gtkfilechooserembed.h"
29 struct _GtkFileChooserWidgetPrivate
36 #define GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE(o) (GTK_FILE_CHOOSER_WIDGET (o)->priv)
38 static void gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class);
39 static void gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget);
40 static void gtk_file_chooser_widget_finalize (GObject *object);
42 static GObject* gtk_file_chooser_widget_constructor (GType type,
43 guint n_construct_properties,
44 GObjectConstructParam *construct_params);
45 static void gtk_file_chooser_widget_set_property (GObject *object,
49 static void gtk_file_chooser_widget_get_property (GObject *object,
54 static GObjectClass *parent_class;
57 gtk_file_chooser_widget_get_type (void)
59 static GType file_chooser_widget_type = 0;
61 if (!file_chooser_widget_type)
63 static const GTypeInfo file_chooser_widget_info =
65 sizeof (GtkFileChooserWidgetClass),
67 NULL, /* base_finalize */
68 (GClassInitFunc) gtk_file_chooser_widget_class_init,
69 NULL, /* class_finalize */
70 NULL, /* class_data */
71 sizeof (GtkFileChooserWidget),
73 (GInstanceInitFunc) gtk_file_chooser_widget_init,
76 static const GInterfaceInfo file_chooser_info =
78 (GInterfaceInitFunc) _gtk_file_chooser_delegate_iface_init, /* interface_init */
79 NULL, /* interface_finalize */
80 NULL /* interface_data */
83 static const GInterfaceInfo file_chooser_embed_info =
85 (GInterfaceInitFunc) _gtk_file_chooser_embed_delegate_iface_init, /* interface_init */
86 NULL, /* interface_finalize */
87 NULL /* interface_data */
90 file_chooser_widget_type = g_type_register_static (GTK_TYPE_VBOX, "GtkFileChooserWidget",
91 &file_chooser_widget_info, 0);
93 g_type_add_interface_static (file_chooser_widget_type,
94 GTK_TYPE_FILE_CHOOSER,
96 g_type_add_interface_static (file_chooser_widget_type,
97 GTK_TYPE_FILE_CHOOSER_EMBED,
98 &file_chooser_embed_info);
101 return file_chooser_widget_type;
105 gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
107 GObjectClass *gobject_class = G_OBJECT_CLASS (class);
109 parent_class = g_type_class_peek_parent (class);
111 gobject_class->constructor = gtk_file_chooser_widget_constructor;
112 gobject_class->set_property = gtk_file_chooser_widget_set_property;
113 gobject_class->get_property = gtk_file_chooser_widget_get_property;
114 gobject_class->finalize = gtk_file_chooser_widget_finalize;
116 _gtk_file_chooser_install_properties (gobject_class);
118 g_type_class_add_private (class, sizeof (GtkFileChooserWidgetPrivate));
122 gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget)
124 GtkFileChooserWidgetPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser_widget,
125 GTK_TYPE_FILE_CHOOSER_WIDGET,
126 GtkFileChooserWidgetPrivate);
127 chooser_widget->priv = priv;
131 gtk_file_chooser_widget_finalize (GObject *object)
133 GtkFileChooserWidget *chooser = GTK_FILE_CHOOSER_WIDGET (object);
135 g_free (chooser->priv->file_system);
137 G_OBJECT_CLASS (parent_class)->finalize (object);
141 gtk_file_chooser_widget_constructor (GType type,
142 guint n_construct_properties,
143 GObjectConstructParam *construct_params)
145 GtkFileChooserWidgetPrivate *priv;
147 gchar *current_folder;
149 object = parent_class->constructor (type,
150 n_construct_properties,
152 priv = GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE (object);
154 gtk_widget_push_composite_child ();
156 priv->impl = _gtk_file_chooser_default_new (priv->file_system);
158 gtk_box_pack_start (GTK_BOX (object), priv->impl, TRUE, TRUE, 0);
159 gtk_widget_show (priv->impl);
161 current_folder = g_get_current_dir ();
162 gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->impl), current_folder);
163 g_free (current_folder);
165 _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (object),
166 GTK_FILE_CHOOSER (priv->impl));
168 _gtk_file_chooser_embed_set_delegate (GTK_FILE_CHOOSER_EMBED (object),
169 GTK_FILE_CHOOSER_EMBED (priv->impl));
171 gtk_widget_pop_composite_child ();
177 gtk_file_chooser_widget_set_property (GObject *object,
182 GtkFileChooserWidgetPrivate *priv = GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE (object);
186 case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND:
187 g_free (priv->file_system);
188 priv->file_system = g_value_dup_string (value);
191 g_object_set_property (G_OBJECT (priv->impl), pspec->name, value);
197 gtk_file_chooser_widget_get_property (GObject *object,
202 GtkFileChooserWidgetPrivate *priv = GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE (object);
204 g_object_get_property (G_OBJECT (priv->impl), pspec->name, value);
208 * gtk_file_chooser_widget_new:
209 * @action: Open or save mode for the widget
211 * Creates a new #GtkFileChooserWidget. This is a file chooser widget that can
212 * be embedded in custom windows, and it is the same widget that is used by
213 * #GtkFileChooserDialog.
215 * Return value: a new #GtkFileChooserWidget
220 gtk_file_chooser_widget_new (GtkFileChooserAction action)
222 return g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET,
228 * gtk_file_chooser_widget_new_with_backend:
229 * @action: Open or save mode for the widget
230 * @backend: The name of the specific filesystem backend to use.
232 * Creates a new #GtkFileChooserWidget with a specified backend. This is
233 * especially useful if you use gtk_file_chooser_set_local_only() to allow
234 * non-local files. This is a file chooser widget that can be embedded in
235 * custom windows and it is the same widget that is used by
236 * #GtkFileChooserDialog.
238 * Return value: a new #GtkFileChooserWidget
243 gtk_file_chooser_widget_new_with_backend (GtkFileChooserAction action,
244 const gchar *backend)
246 return g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET,
248 "file-system-backend", backend,