Commit 9b2d8cd8 authored by Debarshi Ray's avatar Debarshi Ray
Browse files

Simplify Searchbar handling and don't show it on key presses in PREVIEW

Whenever the selection or window modes changed, if the app.search
GAction's state was FALSE, the Searchbar used to be removed from the
MainToolbar. It would be added back if the new mode supported search.
The photos_searchbar_handle_event method used the presence of a parent
container to decide whether it's supposed to handle keyboard events
for a given mode.

This hinges on the app.search GAction having the right state before the
MainToolbar handles the mode change. However, that's not the case when
going from SEARCH (without an active collection) to PREVIEW. The
GAction is toggled in photos_embed_prepare_for_preview when the search
state is saved. That's after the application has entered PREVIEW.
Therefore, pressing a key when previewing a search result will show the
Searchbar, which it is not supposed to.

The second problem arises if the Searchbar is removed and added while
it was animating away. It shows a grey bar, without any entry, once it
is added back to the MainToolbar. Supposedly the remove/add cycle in
the middle of the animation confuses GTK+.

This isn't observed in practice because commit 77036628
prevents the Searchbar from being hidden during mode changes. It's
only hidden when viewing a collection, which doesn't use the same code
path as selection or window mode changes. However, that's going to be
a problem once the faulty behaviour introduced by commit
77036628 is fixed in a subsequent patch.

All that can be addressed, and the code simplified, if the Searchbar is
never removed from MainToolbar. Instead of relying on the presence of a
parent, it can use the GAction's enabled property to decide whether to
handle keyboard events or not.

As a result, this reverts commit fa26cf48 and keeps the code in
sync with gnome-documents.

https://bugzilla.gnome.org/show_bug.cgi?id=786936
parent 3d039d4f
......@@ -360,6 +360,7 @@ photos_application_actions_update (PhotosApplication *self)
|| mode == PHOTOS_WINDOW_MODE_FAVORITES
|| mode == PHOTOS_WINDOW_MODE_OVERVIEW
|| mode == PHOTOS_WINDOW_MODE_SEARCH);
g_simple_action_set_enabled (self->search_action, enable);
g_simple_action_set_enabled (self->search_match_action, enable);
g_simple_action_set_enabled (self->search_source_action, enable);
g_simple_action_set_enabled (self->search_type_action, enable);
......
......@@ -36,9 +36,9 @@
#include "photos-icons.h"
#include "photos-item-manager.h"
#include "photos-main-toolbar.h"
#include "photos-overview-searchbar.h"
#include "photos-remote-display-manager.h"
#include "photos-search-context.h"
#include "photos-searchbar.h"
#include "photos-selection-controller.h"
#include "photos-utils.h"
......@@ -381,17 +381,6 @@ photos_main_toolbar_clear_state_data (PhotosMainToolbar *self)
g_clear_pointer (&self->remote_display_button, (GDestroyNotify) gtk_widget_destroy);
g_clear_pointer (&self->selection_button, (GDestroyNotify) gtk_widget_destroy);
if (self->searchbar != NULL && gtk_widget_get_parent (self->searchbar) == GTK_WIDGET (self))
{
GVariant *state;
state = g_action_get_state (self->search);
if (!g_variant_get_boolean (state))
gtk_container_remove (GTK_CONTAINER (self), self->searchbar);
g_variant_unref (state);
}
if (self->item_mngr != NULL)
{
g_signal_handlers_disconnect_by_func (self->item_mngr, photos_main_toolbar_col_active_changed, self);
......@@ -495,9 +484,6 @@ photos_main_toolbar_populate_for_collections (PhotosMainToolbar *self)
self->selection_button = photos_main_toolbar_add_selection_button (self);
photos_main_toolbar_add_search_button (self);
if (gtk_widget_get_parent (self->searchbar) == NULL)
gtk_container_add (GTK_CONTAINER (self), self->searchbar);
collection = photos_item_manager_get_active_collection (PHOTOS_ITEM_MANAGER (self->item_mngr));
photos_main_toolbar_col_active_changed (self, collection);
}
......@@ -534,9 +520,6 @@ photos_main_toolbar_populate_for_favorites (PhotosMainToolbar *self)
self->selection_button = photos_main_toolbar_add_selection_button (self);
photos_main_toolbar_add_search_button (self);
if (gtk_widget_get_parent (self->searchbar) == NULL)
gtk_container_add (GTK_CONTAINER (self), self->searchbar);
collection = photos_item_manager_get_active_collection (PHOTOS_ITEM_MANAGER (self->item_mngr));
photos_main_toolbar_col_active_changed (self, collection);
}
......@@ -552,9 +535,6 @@ photos_main_toolbar_populate_for_overview (PhotosMainToolbar *self)
self->selection_button = photos_main_toolbar_add_selection_button (self);
photos_main_toolbar_add_search_button (self);
if (gtk_widget_get_parent (self->searchbar) == NULL)
gtk_container_add (GTK_CONTAINER (self), self->searchbar);
collection = photos_item_manager_get_active_collection (PHOTOS_ITEM_MANAGER (self->item_mngr));
photos_main_toolbar_col_active_changed (self, collection);
}
......@@ -635,9 +615,6 @@ photos_main_toolbar_populate_for_search (PhotosMainToolbar *self)
self->selection_button = photos_main_toolbar_add_selection_button (self);
photos_main_toolbar_add_search_button (self);
if (gtk_widget_get_parent (self->searchbar) == NULL)
gtk_container_add (GTK_CONTAINER (self), self->searchbar);
collection = photos_item_manager_get_active_collection (PHOTOS_ITEM_MANAGER (self->item_mngr));
photos_main_toolbar_col_active_changed (self, collection);
}
......@@ -661,9 +638,6 @@ photos_main_toolbar_populate_for_selection_mode (PhotosMainToolbar *self)
G_CONNECT_SWAPPED);
photos_main_toolbar_add_search_button (self);
if (gtk_widget_get_parent (self->searchbar) == NULL)
gtk_container_add (GTK_CONTAINER (self), self->searchbar);
}
......@@ -674,7 +648,6 @@ photos_main_toolbar_constructed (GObject *object)
G_OBJECT_CLASS (photos_main_toolbar_parent_class)->constructed (object);
self->searchbar = g_object_ref_sink (photos_overview_searchbar_new ());
photos_main_toolbar_reset_toolbar_mode (self);
}
......@@ -686,7 +659,6 @@ photos_main_toolbar_dispose (GObject *object)
photos_main_toolbar_clear_state_data (self);
g_clear_object (&self->searchbar);
g_clear_object (&self->item_mngr);
g_clear_object (&self->mode_cntrlr);
g_clear_object (&self->remote_mngr);
......@@ -819,6 +791,7 @@ photos_main_toolbar_class_init (PhotosMainToolbarClass *class)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Photos/main-toolbar.ui");
gtk_widget_class_bind_template_child (widget_class, PhotosMainToolbar, header_bar);
gtk_widget_class_bind_template_child (widget_class, PhotosMainToolbar, searchbar);
}
......@@ -841,7 +814,12 @@ photos_main_toolbar_handle_event (PhotosMainToolbar *self, GdkEventKey *event)
{
gboolean ret_val = FALSE;
if (!g_action_get_enabled (self->search))
goto out;
ret_val = photos_searchbar_handle_event (PHOTOS_SEARCHBAR (self->searchbar), event);
out:
return ret_val;
}
......
......@@ -2,6 +2,7 @@
<!--
Photos - access, organize and share your photos on GNOME
Copyright © 2017 Alessandro Bono
Copyright © 2017 Red Hat, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
......@@ -27,5 +28,8 @@
<property name="visible">1</property>
</object>
</child>
<child>
<object class="PhotosOverviewSearchbar" id="searchbar"/>
</child>
</template>
</interface>
......@@ -244,9 +244,6 @@ photos_searchbar_handle_event (PhotosSearchbar *self, GdkEventKey *event)
priv = photos_searchbar_get_instance_private (self);
if (gtk_widget_get_parent (GTK_WIDGET (self)) == NULL)
goto out;
search_mode_enabled = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (self));
/* Skip if the search bar is shown and the focus is elsewhere */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment