[evolution] I#1916 - Allow to search in "Describe Filters"



commit ff89a99599586ef10bc050539f20b321292c1842
Author: Milan Crha <mcrha redhat com>
Date:   Thu May 26 12:49:24 2022 +0200

    I#1916 - Allow to search in "Describe Filters"
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1916

 src/e-util/e-search-bar.c   | 57 ++++++++++++++++++++++++++++++++++++++++++++-
 src/e-util/e-search-bar.h   |  3 +++
 src/mail/em-filter-editor.c | 10 +++++++-
 3 files changed, 68 insertions(+), 2 deletions(-)
---
diff --git a/src/e-util/e-search-bar.c b/src/e-util/e-search-bar.c
index a3101d25d9..60319f31bc 100644
--- a/src/e-util/e-search-bar.c
+++ b/src/e-util/e-search-bar.c
@@ -34,6 +34,7 @@
 
 struct _ESearchBarPrivate {
        EWebView *web_view;
+       GtkWidget *hide_button;
        GtkWidget *entry;
        GtkWidget *case_sensitive_button;
        GtkWidget *wrapped_next_box;
@@ -47,12 +48,14 @@ struct _ESearchBarPrivate {
        gchar *active_search;
 
        gboolean search_forward;
+       gboolean can_hide;
 };
 
 enum {
        PROP_0,
        PROP_ACTIVE_SEARCH,
        PROP_CASE_SENSITIVE,
+       PROP_CAN_HIDE,
        PROP_TEXT,
        PROP_WEB_VIEW
 };
@@ -307,6 +310,12 @@ search_bar_set_property (GObject *object,
                          GParamSpec *pspec)
 {
        switch (property_id) {
+               case PROP_CAN_HIDE:
+                       e_search_bar_set_can_hide (
+                               E_SEARCH_BAR (object),
+                               g_value_get_boolean (value));
+                       return;
+
                case PROP_CASE_SENSITIVE:
                        e_search_bar_set_case_sensitive (
                                E_SEARCH_BAR (object),
@@ -342,6 +351,12 @@ search_bar_get_property (GObject *object,
                                E_SEARCH_BAR (object)));
                        return;
 
+               case PROP_CAN_HIDE:
+                       g_value_set_boolean (
+                               value, e_search_bar_get_can_hide (
+                               E_SEARCH_BAR (object)));
+                       return;
+
                case PROP_CASE_SENSITIVE:
                        g_value_set_boolean (
                                value, e_search_bar_get_case_sensitive (
@@ -378,6 +393,7 @@ search_bar_dispose (GObject *object)
                priv->web_view = NULL;
        }
 
+       g_clear_object (&priv->hide_button);
        g_clear_object (&priv->entry);
        g_clear_object (&priv->case_sensitive_button);
        g_clear_object (&priv->prev_button);
@@ -459,7 +475,8 @@ search_bar_key_press_event (GtkWidget *widget,
 {
        GtkWidgetClass *widget_class;
 
-       if (event->keyval == GDK_KEY_Escape) {
+       if (event->keyval == GDK_KEY_Escape &&
+           e_search_bar_get_can_hide (E_SEARCH_BAR (widget))) {
                gtk_widget_hide (widget);
                return TRUE;
        }
@@ -518,6 +535,16 @@ e_search_bar_class_init (ESearchBarClass *class)
                        FALSE,
                        G_PARAM_READABLE));
 
+       g_object_class_install_property (
+               object_class,
+               PROP_CAN_HIDE,
+               g_param_spec_boolean (
+                       "can-hide",
+                       "Can Hide",
+                       NULL,
+                       TRUE,
+                       G_PARAM_READWRITE));
+
        g_object_class_install_property (
                object_class,
                PROP_CASE_SENSITIVE,
@@ -576,6 +603,7 @@ e_search_bar_init (ESearchBar *search_bar)
        GtkWidget *container;
 
        search_bar->priv = E_SEARCH_BAR_GET_PRIVATE (search_bar);
+       search_bar->priv->can_hide = TRUE;
 
        gtk_box_set_spacing (GTK_BOX (search_bar), 12);
        gtk_container_set_border_width (GTK_CONTAINER (search_bar), 6);
@@ -596,6 +624,7 @@ e_search_bar_init (ESearchBar *search_bar)
        gtk_button_set_relief (GTK_BUTTON (widget), GTK_RELIEF_NONE);
        gtk_widget_set_tooltip_text (widget, _("Close the find bar"));
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+       search_bar->priv->hide_button = g_object_ref (widget);
        gtk_widget_show (widget);
 
        g_signal_connect_swapped (
@@ -825,3 +854,29 @@ e_search_bar_set_text (ESearchBar *search_bar,
        /* This will trigger a "notify::text" signal. */
        gtk_entry_set_text (entry, text);
 }
+
+gboolean
+e_search_bar_get_can_hide (ESearchBar *search_bar)
+{
+       g_return_val_if_fail (E_IS_SEARCH_BAR (search_bar), FALSE);
+
+       return search_bar->priv->can_hide;
+}
+
+void
+e_search_bar_set_can_hide (ESearchBar *search_bar,
+                          gboolean can_hide)
+{
+       g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
+
+       if (!search_bar->priv->can_hide == !can_hide)
+               return;
+
+       search_bar->priv->can_hide = can_hide;
+
+       gtk_widget_set_visible (search_bar->priv->hide_button, can_hide);
+       if (!can_hide)
+               gtk_widget_show (GTK_WIDGET (search_bar));
+
+       g_object_notify (G_OBJECT (search_bar), "can-hide");
+}
diff --git a/src/e-util/e-search-bar.h b/src/e-util/e-search-bar.h
index 2fbc32fe17..9fd9551c83 100644
--- a/src/e-util/e-search-bar.h
+++ b/src/e-util/e-search-bar.h
@@ -79,6 +79,9 @@ void          e_search_bar_set_case_sensitive (ESearchBar *search_bar,
 gchar *                e_search_bar_get_text           (ESearchBar *search_bar);
 void           e_search_bar_set_text           (ESearchBar *search_bar,
                                                 const gchar *text);
+gboolean       e_search_bar_get_can_hide       (ESearchBar *search_bar);
+void           e_search_bar_set_can_hide       (ESearchBar *search_bar,
+                                                gboolean can_hide);
 
 G_END_DECLS
 
diff --git a/src/mail/em-filter-editor.c b/src/mail/em-filter-editor.c
index b2c07cb533..e88a7ee000 100644
--- a/src/mail/em-filter-editor.c
+++ b/src/mail/em-filter-editor.c
@@ -38,7 +38,7 @@ static void
 emfe_show_html (GtkWindow *parent,
                const gchar *html)
 {
-       GtkWidget *dialog, *widget, *container;
+       GtkWidget *dialog, *widget, *container, *searchbar;
 
        dialog = gtk_dialog_new_with_buttons (_("Description of Filters"), parent,
                GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -71,6 +71,14 @@ emfe_show_html (GtkWindow *parent,
                NULL);
        gtk_container_add (GTK_CONTAINER (container), widget);
 
+       container = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+       searchbar = e_search_bar_new (E_WEB_VIEW (widget));
+       g_object_set (G_OBJECT (searchbar),
+               "can-hide", FALSE,
+               "visible", TRUE,
+               NULL);
+       gtk_container_add (GTK_CONTAINER (container), searchbar);
+
        e_web_view_load_string (E_WEB_VIEW (widget), html);
 
        gtk_dialog_run (GTK_DIALOG (dialog));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]