I#1916 - Allow to search in "Describe Filters"

Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1916
This commit is contained in:
Milan Crha
2022-05-26 12:49:24 +02:00
parent 18a6e47fe7
commit ff89a99599
3 changed files with 68 additions and 2 deletions

View File

@ -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");
}

View File

@ -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

View File

@ -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));