diff options
author | Tristan Van Berkom <tristanvb@openismus.com> | 2013-03-25 21:49:49 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristanvb@openismus.com> | 2013-04-08 21:19:28 +0900 |
commit | b537e1baddcc54963a01327ba47159749ec1452f (patch) | |
tree | 80da675c9c45e3657257b072d9cca23a73d1367c /gtk/gtkfilechooserdialog.c | |
parent | bf909f56157311174d5d9089bdec954e7def8873 (diff) | |
download | gtk+-b537e1baddcc54963a01327ba47159749ec1452f.tar.gz |
GtkFileChooserDialog: Define children with a GtkBuilder template
Diffstat (limited to 'gtk/gtkfilechooserdialog.c')
-rw-r--r-- | gtk/gtkfilechooserdialog.c | 105 |
1 files changed, 25 insertions, 80 deletions
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c index 6ed41b68f3..6d32a98ba4 100644 --- a/gtk/gtkfilechooserdialog.c +++ b/gtk/gtkfilechooserdialog.c @@ -195,11 +195,6 @@ #define GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE(o) (GTK_FILE_CHOOSER_DIALOG (o)->priv) -static void gtk_file_chooser_dialog_finalize (GObject *object); - -static GObject* gtk_file_chooser_dialog_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_params); static void gtk_file_chooser_dialog_set_property (GObject *object, guint prop_id, const GValue *value, @@ -211,6 +206,12 @@ static void gtk_file_chooser_dialog_get_property (GObject *obj static void gtk_file_chooser_dialog_map (GtkWidget *widget); static void gtk_file_chooser_dialog_unmap (GtkWidget *widget); +static void file_chooser_widget_file_activated (GtkFileChooser *chooser, + GtkFileChooserDialog *dialog); +static void file_chooser_widget_default_size_changed (GtkWidget *widget, + GtkFileChooserDialog *dialog); +static void file_chooser_widget_response_requested (GtkWidget *widget, + GtkFileChooserDialog *dialog); static void response_cb (GtkDialog *dialog, gint response_id); @@ -225,10 +226,8 @@ gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class) GObjectClass *gobject_class = G_OBJECT_CLASS (class); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); - gobject_class->constructor = gtk_file_chooser_dialog_constructor; gobject_class->set_property = gtk_file_chooser_dialog_set_property; gobject_class->get_property = gtk_file_chooser_dialog_get_property; - gobject_class->finalize = gtk_file_chooser_dialog_finalize; widget_class->map = gtk_file_chooser_dialog_map; widget_class->unmap = gtk_file_chooser_dialog_unmap; @@ -237,47 +236,33 @@ gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class) _gtk_file_chooser_install_properties (gobject_class); + /* Bind class to template + */ + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gtk/libgtk/gtkfilechooserdialog.ui"); + + gtk_widget_class_bind_child (widget_class, GtkFileChooserDialogPrivate, widget); + gtk_widget_class_bind_callback (widget_class, response_cb); + gtk_widget_class_bind_callback (widget_class, file_chooser_widget_file_activated); + gtk_widget_class_bind_callback (widget_class, file_chooser_widget_default_size_changed); + gtk_widget_class_bind_callback (widget_class, file_chooser_widget_response_requested); + g_type_class_add_private (class, sizeof (GtkFileChooserDialogPrivate)); } static void gtk_file_chooser_dialog_init (GtkFileChooserDialog *dialog) { - GtkWidget *action_area, *content_area; GtkFileChooserDialogPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (dialog, GTK_TYPE_FILE_CHOOSER_DIALOG, GtkFileChooserDialogPrivate); - GtkDialog *fc_dialog = GTK_DIALOG (dialog); - dialog->priv = priv; dialog->priv->response_requested = FALSE; - content_area = gtk_dialog_get_content_area (fc_dialog); - action_area = gtk_dialog_get_action_area (fc_dialog); - - gtk_container_set_border_width (GTK_CONTAINER (fc_dialog), 5); - gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */ - gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); - - gtk_window_set_role (GTK_WINDOW (dialog), "GtkFileChooserDialog"); + gtk_widget_init_template (GTK_WIDGET (dialog)); - /* We do a signal connection here rather than overriding the method in - * class_init because GtkDialog::response is a RUN_LAST signal. We want *our* - * handler to be run *first*, regardless of whether the user installs response - * handlers of his own. - */ - g_signal_connect (dialog, "response", - G_CALLBACK (response_cb), NULL); -} - -static void -gtk_file_chooser_dialog_finalize (GObject *object) -{ - GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (object); - - g_free (dialog->priv->file_system); - - G_OBJECT_CLASS (gtk_file_chooser_dialog_parent_class)->finalize (object); + _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (dialog), + GTK_FILE_CHOOSER (priv->widget)); } static gboolean @@ -429,50 +414,6 @@ file_chooser_widget_response_requested (GtkWidget *widget, g_list_free (children); } - -static GObject* -gtk_file_chooser_dialog_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_params) -{ - GtkFileChooserDialogPrivate *priv; - GtkWidget *content_area; - GObject *object; - - object = G_OBJECT_CLASS (gtk_file_chooser_dialog_parent_class)->constructor (type, - n_construct_properties, - construct_params); - priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (object); - - gtk_widget_push_composite_child (); - - if (priv->file_system) - priv->widget = g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET, - NULL); - else - priv->widget = g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET, NULL); - - g_signal_connect (priv->widget, "file-activated", - G_CALLBACK (file_chooser_widget_file_activated), object); - g_signal_connect (priv->widget, "default-size-changed", - G_CALLBACK (file_chooser_widget_default_size_changed), object); - g_signal_connect (priv->widget, "response-requested", - G_CALLBACK (file_chooser_widget_response_requested), object); - - content_area = gtk_dialog_get_content_area (GTK_DIALOG (object)); - - gtk_container_set_border_width (GTK_CONTAINER (priv->widget), 5); - gtk_box_pack_start (GTK_BOX (content_area), priv->widget, TRUE, TRUE, 0); - - gtk_widget_show (priv->widget); - - _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (object), - GTK_FILE_CHOOSER (priv->widget)); - - gtk_widget_pop_composite_child (); - - return object; -} static void gtk_file_chooser_dialog_set_property (GObject *object, @@ -568,7 +509,11 @@ gtk_file_chooser_dialog_unmap (GtkWidget *widget) GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->unmap (widget); } -/* GtkDialog::response handler */ +/* We do a signal connection here rather than overriding the method in + * class_init because GtkDialog::response is a RUN_LAST signal. We want *our* + * handler to be run *first*, regardless of whether the user installs response + * handlers of his own. + */ static void response_cb (GtkDialog *dialog, gint response_id) |