[gtk+] file chooser dialog: Add a search button to the header
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] file chooser dialog: Add a search button to the header
- Date: Wed, 28 Jan 2015 21:32:26 +0000 (UTC)
commit 7c51e60b8647f8dfcc3b1c30eb8ed8e5b21489ef
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jan 28 15:36:57 2015 -0500
file chooser dialog: Add a search button to the header
This is where we put similar search buttons in applications
and in other dialogs, such as the GtkAppChooserDialog.
gtk/gtkfilechooserdialog.c | 42 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 41 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c
index b1295ab..169e6a1 100644
--- a/gtk/gtkfilechooserdialog.c
+++ b/gtk/gtkfilechooserdialog.c
@@ -30,6 +30,9 @@
#include "gtktypebuiltins.h"
#include "gtkintl.h"
#include "gtksettings.h"
+#include "gtktogglebutton.h"
+#include "gtkstylecontext.h"
+#include "gtkheaderbar.h"
#include "gtkdialogprivate.h"
#include <stdarg.h>
@@ -200,6 +203,7 @@ struct _GtkFileChooserDialogPrivate
/* for use with GtkFileChooserEmbed */
gboolean response_requested;
+ gboolean search_setup;
};
static void gtk_file_chooser_dialog_set_property (GObject *object,
@@ -470,6 +474,41 @@ gtk_file_chooser_dialog_get_property (GObject *object,
}
static void
+setup_search (GtkFileChooserDialog *dialog)
+{
+ gboolean use_header;
+
+ if (dialog->priv->search_setup)
+ return;
+
+ dialog->priv->search_setup = TRUE;
+
+ g_object_get (dialog, "use-header-bar", &use_header, NULL);
+ if (use_header)
+ {
+ GtkWidget *button;
+ GtkWidget *image;
+ GtkWidget *header;
+
+ button = gtk_toggle_button_new ();
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ image = gtk_image_new_from_icon_name ("edit-find-symbolic", GTK_ICON_SIZE_MENU);
+ gtk_container_add (GTK_CONTAINER (button), image);
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "image-button");
+ gtk_style_context_remove_class (gtk_widget_get_style_context (button), "text-button");
+ gtk_widget_show (image);
+ gtk_widget_show (button);
+
+ header = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
+
+ g_object_bind_property (button, "active",
+ dialog->priv->widget, "search-mode",
+ G_BINDING_BIDIRECTIONAL);
+ }
+}
+
+static void
ensure_default_response (GtkFileChooserDialog *dialog)
{
GtkWidget *widget;
@@ -486,6 +525,7 @@ gtk_file_chooser_dialog_map (GtkWidget *widget)
GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget);
GtkFileChooserDialogPrivate *priv = dialog->priv;
+ setup_search (dialog);
ensure_default_response (dialog);
_gtk_file_chooser_embed_initial_focus (GTK_FILE_CHOOSER_EMBED (priv->widget));
@@ -599,7 +639,7 @@ gtk_file_chooser_dialog_new (const gchar *title,
{
GtkWidget *result;
va_list varargs;
-
+
va_start (varargs, first_button_text);
result = gtk_file_chooser_dialog_new_valist (title, parent, action,
first_button_text,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]