X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkfilechooserwidget.c;h=27ef3f6119ee69a29e848ae150d3e026f35465ed;hb=0db32f0632ef4675bfcfc9ec201f7af157a48ab0;hp=3a168bbbe553342526b959a7a6aecbb9f13906dd;hpb=e3849905a9f6945ab664a026a2af78958d02641f;p=~andy%2Fgtk diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 3a168bbbe..27ef3f611 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -13,79 +13,70 @@ * 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; -}; -#define GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE(o) (GTK_FILE_CHOOSER_WIDGET (o)->priv) +/** + * 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. + */ -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_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gtk_file_chooser_widget_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -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); - } +#define GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE(o) (GTK_FILE_CHOOSER_WIDGET (o)->priv) - return file_chooser_widget_type; -} +static void gtk_file_chooser_widget_finalize (GObject *object); + +static GObject* gtk_file_chooser_widget_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params); +static void gtk_file_chooser_widget_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void gtk_file_chooser_widget_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +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); + 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); @@ -98,30 +89,50 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget) GtkFileChooserWidgetPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser_widget, GTK_TYPE_FILE_CHOOSER_WIDGET, GtkFileChooserWidgetPrivate); - gchar *current_folder; - gchar *current_folder_uri; - 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* +gtk_file_chooser_widget_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GtkFileChooserWidgetPrivate *priv; + GObject *object; + 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 (); - priv->impl = _gtk_file_chooser_impl_default_new (g_object_new (GTK_TYPE_FILE_SYSTEM_UNIX, NULL)); - gtk_box_pack_start (GTK_BOX (chooser_widget), priv->impl, TRUE, TRUE, 0); + 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 (chooser_widget), + _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 (); + + return object; } static void @@ -131,8 +142,13 @@ gtk_file_chooser_widget_set_property (GObject *object, GParamSpec *pspec) { GtkFileChooserWidgetPrivate *priv = GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE (object); - - g_object_set_property (G_OBJECT (priv->impl), pspec->name, value); + + switch (prop_id) + { + default: + g_object_set_property (G_OBJECT (priv->impl), pspec->name, value); + break; + } } static void @@ -146,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) {