From 96e8be8dab8832f7d190b65fa9038d25da90b87e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Sat, 25 Mar 2017 20:36:10 +0100 Subject: [PATCH] filechooserwidget: Inherit from GtkWidget --- gtk/gtkfilechooserwidget.c | 53 ++- gtk/gtkfilechooserwidget.h | 4 +- gtk/ui/gtkfilechooserdialog.ui | 1 - gtk/ui/gtkfilechooserwidget.ui | 610 +++++++++++++++++---------------- 4 files changed, 361 insertions(+), 307 deletions(-) diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 7627744a78..ce2df3b0ba 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -215,6 +215,8 @@ struct _GtkFileChooserWidgetPrivate { GtkFileSystem *file_system; + GtkWidget *box; + /* Save mode widgets */ GtkWidget *save_widgets; GtkWidget *save_widgets_table; @@ -612,7 +614,7 @@ static void switch_to_home_dir (GtkFileChooserWidget *impl); -G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidget, gtk_file_chooser_widget, GTK_TYPE_BOX, +G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidget, gtk_file_chooser_widget, GTK_TYPE_WIDGET, G_ADD_PRIVATE (GtkFileChooserWidget) G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER, gtk_file_chooser_widget_iface_init) @@ -3652,6 +3654,12 @@ gtk_file_chooser_widget_dispose (GObject *object) priv->external_entry = NULL; } + if (priv->box) + { + gtk_widget_unparent (priv->box); + priv->box = NULL; + } + g_clear_object (&priv->long_press_gesture); G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->dispose (object); @@ -8062,6 +8070,43 @@ add_normal_and_shifted_binding (GtkBindingSet *binding_set, signal_name, 0); } +static void +gtk_file_chooser_widget_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + GtkFileChooserWidget *self = GTK_FILE_CHOOSER_WIDGET (widget); + GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (self); + + gtk_widget_measure (priv->box, orientation, for_size, + minimum, natural, + minimum_baseline, natural_baseline); +} + +static void +gtk_file_chooser_widget_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + GtkFileChooserWidget *self = GTK_FILE_CHOOSER_WIDGET (widget); + GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (self); + + gtk_widget_snapshot_child (widget, priv->box, snapshot); +} + +static void +gtk_file_chooser_widget_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + GtkFileChooserWidget *self = GTK_FILE_CHOOSER_WIDGET (widget); + GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (self); + + gtk_widget_size_allocate (priv->box, allocation); +} + static void gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) { @@ -8086,6 +8131,9 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) widget_class->style_updated = gtk_file_chooser_widget_style_updated; widget_class->screen_changed = gtk_file_chooser_widget_screen_changed; widget_class->key_press_event = gtk_file_chooser_widget_key_press_event; + widget_class->measure = gtk_file_chooser_widget_measure; + widget_class->size_allocate = gtk_file_chooser_widget_size_allocate; + widget_class->snapshot = gtk_file_chooser_widget_snapshot; /* * Signals @@ -8478,6 +8526,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_error_label); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_popover); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, remote_warning_bar); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, box); /* And a *lot* of callbacks to bind ... */ gtk_widget_class_bind_template_callback (widget_class, browse_files_key_press_event_cb); @@ -8607,6 +8656,8 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl) impl->priv = gtk_file_chooser_widget_get_instance_private (impl); priv = impl->priv; + gtk_widget_set_has_window (GTK_WIDGET (impl), FALSE); + priv->local_only = FALSE; priv->preview_widget_active = TRUE; priv->use_preview_label = TRUE; diff --git a/gtk/gtkfilechooserwidget.h b/gtk/gtkfilechooserwidget.h index 617cfd3e93..df29d2bad6 100644 --- a/gtk/gtkfilechooserwidget.h +++ b/gtk/gtkfilechooserwidget.h @@ -41,7 +41,7 @@ typedef struct _GtkFileChooserWidgetClass GtkFileChooserWidgetClass; struct _GtkFileChooserWidget { - GtkBox parent_instance; + GtkWidget parent_instance; GtkFileChooserWidgetPrivate *priv; }; @@ -52,7 +52,7 @@ struct _GtkFileChooserWidget */ struct _GtkFileChooserWidgetClass { - GtkBoxClass parent_class; + GtkWidgetClass parent_class; /*< private >*/ diff --git a/gtk/ui/gtkfilechooserdialog.ui b/gtk/ui/gtkfilechooserdialog.ui index 56bbc339e1..5c59f4822d 100644 --- a/gtk/ui/gtkfilechooserdialog.ui +++ b/gtk/ui/gtkfilechooserdialog.ui @@ -20,7 +20,6 @@ - vertical diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index 5f57f1cd53..8f2936e036 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -2,385 +2,389 @@ -