X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkfilechooserwidget.c;h=27ef3f6119ee69a29e848ae150d3e026f35465ed;hb=32aa7f0582febb614c41e4130ad34ac44ef6efd2;hp=cb7e8edc68328e98c3f863233588ef402c314d12;hpb=7e54248bc3c4890aabdde5da3a929bca425a6649;p=~andy%2Fgtk diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index cb7e8edc6..27ef3f611 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -13,28 +13,42 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ +#include "config.h" +#include "gtkfilechooserprivate.h" + #include "gtkfilechooserwidget.h" -#include "gtkfilechooserimpldefault.h" -#include "gtkfilechooserenums.h" +#include "gtkfilechooserdefault.h" #include "gtkfilechooserutils.h" -#include "gtkfilesystemunix.h" +#include "gtktypebuiltins.h" +#include "gtkfilechooserembed.h" +#include "gtkorientable.h" +#include "gtkintl.h" -struct _GtkFileChooserWidgetPrivate -{ - GtkWidget *impl; - GtkFileSystem *file_system; -}; +/** + * SECTION:gtkfilechooserwidget + * @Short_description: File chooser widget that can be embedded in other widgets + * @Title: GtkFileChooserWidget + * @See_also: #GtkFileChooser, #GtkFileChooserDialog + * + * #GtkFileChooserWidget is a widget suitable for selecting files. + * It is the main building block of a #GtkFileChooserDialog. Most + * applications will only need to use the latter; you can use + * #GtkFileChooserWidget as part of a larger window if you have + * special needs. + * + * Note that #GtkFileChooserWidget does not have any methods of its + * own. Instead, you should use the functions that work on a + * #GtkFileChooser. + */ + #define GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE(o) (GTK_FILE_CHOOSER_WIDGET (o)->priv) -static void gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class); -static void gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget); +static void gtk_file_chooser_widget_finalize (GObject *object); static GObject* gtk_file_chooser_widget_constructor (GType type, guint n_construct_properties, @@ -48,55 +62,21 @@ static void gtk_file_chooser_widget_get_property (GObject *obj GValue *value, GParamSpec *pspec); -static GObjectClass *parent_class; - -GType -gtk_file_chooser_widget_get_type (void) -{ - static GType file_chooser_widget_type = 0; - - if (!file_chooser_widget_type) - { - static const GTypeInfo file_chooser_widget_info = - { - sizeof (GtkFileChooserWidgetClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) gtk_file_chooser_widget_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkFileChooserWidget), - 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_file_chooser_widget_init, - }; - - static const GInterfaceInfo file_chooser_info = - { - (GInterfaceInitFunc) _gtk_file_chooser_delegate_iface_init, /* interface_init */ - NULL, /* interface_finalize */ - NULL /* interface_data */ - }; - - file_chooser_widget_type = g_type_register_static (GTK_TYPE_VBOX, "GtkFileChooserWidget", - &file_chooser_widget_info, 0); - g_type_add_interface_static (file_chooser_widget_type, - GTK_TYPE_FILE_CHOOSER, - &file_chooser_info); - } - - return file_chooser_widget_type; -} +G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidget, gtk_file_chooser_widget, GTK_TYPE_BOX, + G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER, + _gtk_file_chooser_delegate_iface_init) + G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER_EMBED, + _gtk_file_chooser_embed_delegate_iface_init)) static void gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS (class); - parent_class = g_type_class_peek_parent (class); - gobject_class->constructor = gtk_file_chooser_widget_constructor; gobject_class->set_property = gtk_file_chooser_widget_set_property; gobject_class->get_property = gtk_file_chooser_widget_get_property; + gobject_class->finalize = gtk_file_chooser_widget_finalize; _gtk_file_chooser_install_properties (gobject_class); @@ -110,6 +90,18 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget) GTK_TYPE_FILE_CHOOSER_WIDGET, GtkFileChooserWidgetPrivate); chooser_widget->priv = priv; + gtk_orientable_set_orientation (GTK_ORIENTABLE (chooser_widget), + GTK_ORIENTATION_VERTICAL); +} + +static void +gtk_file_chooser_widget_finalize (GObject *object) +{ + GtkFileChooserWidget *chooser = GTK_FILE_CHOOSER_WIDGET (object); + + g_free (chooser->priv->file_system); + + G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->finalize (object); } static GObject* @@ -119,34 +111,24 @@ gtk_file_chooser_widget_constructor (GType type, { GtkFileChooserWidgetPrivate *priv; GObject *object; - gchar *current_folder; - gchar *current_folder_uri; - object = parent_class->constructor (type, - n_construct_properties, - construct_params); + object = G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->constructor (type, + n_construct_properties, + construct_params); priv = GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE (object); gtk_widget_push_composite_child (); - if (!priv->file_system) - priv->file_system = gtk_file_system_unix_new (); - - priv->impl = _gtk_file_chooser_impl_default_new (priv->file_system); + priv->impl = _gtk_file_chooser_default_new (); + gtk_box_pack_start (GTK_BOX (object), priv->impl, TRUE, TRUE, 0); gtk_widget_show (priv->impl); - current_folder = g_get_current_dir (); - current_folder_uri = g_filename_to_uri (current_folder, NULL, NULL); - if (current_folder_uri) - { - gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (priv->impl), current_folder_uri); - g_free (current_folder_uri); - } - g_free (current_folder); - _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (object), GTK_FILE_CHOOSER (priv->impl)); + + _gtk_file_chooser_embed_set_delegate (GTK_FILE_CHOOSER_EMBED (object), + GTK_FILE_CHOOSER_EMBED (priv->impl)); gtk_widget_pop_composite_child (); @@ -163,19 +145,6 @@ gtk_file_chooser_widget_set_property (GObject *object, switch (prop_id) { - case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM: - { - GtkFileSystem *file_system = g_value_get_object (value); - if (priv->file_system != file_system) - { - if (priv->file_system) - g_object_unref (priv->file_system); - priv->file_system = file_system; - if (priv->file_system) - g_object_ref (priv->file_system); - } - } - break; default: g_object_set_property (G_OBJECT (priv->impl), pspec->name, value); break; @@ -193,6 +162,18 @@ gtk_file_chooser_widget_get_property (GObject *object, g_object_get_property (G_OBJECT (priv->impl), pspec->name, value); } +/** + * gtk_file_chooser_widget_new: + * @action: Open or save mode for the widget + * + * Creates a new #GtkFileChooserWidget. This is a file chooser widget that can + * be embedded in custom windows, and it is the same widget that is used by + * #GtkFileChooserDialog. + * + * Return value: a new #GtkFileChooserWidget + * + * Since: 2.4 + **/ GtkWidget * gtk_file_chooser_widget_new (GtkFileChooserAction action) {