[gnome-photos/wip/rishi/collection: 3/24] application, item-manager: Clarify state changes due to search provider
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/collection: 3/24] application, item-manager: Clarify state changes due to search provider
- Date: Sun, 21 Jan 2018 18:54:41 +0000 (UTC)
commit de603e2baeb0afb7839457ced1ed8748b4741b83
Author: Debarshi Ray <debarshir gnome org>
Date: Sun Jan 21 18:05:15 2018 +0100
application, item-manager: Clarify state changes due to search provider
The guiding principle is to ignore ActivateResult and LaunchSearch if
the application is in EDIT or PREVIEW. Being in one of those two modes
implies that the user is focused on a specific BaseItem, and shouldn't
be interfered with from a different context. The mode can only change
if the user explicitly requests it from the application.
The presence of a separate mode for viewing the contents of a
collection removes the need to unset the active collection before a
collection BaseItem can be added to the ItemManager.
src/photos-application.c | 106 +++++++++++++++++++++++++++++++++++++++++++++-
src/photos-item-manager.c | 16 ++-----
2 files changed, 108 insertions(+), 14 deletions(-)
---
diff --git a/src/photos-application.c b/src/photos-application.c
index 7f419c06..b5082673 100644
--- a/src/photos-application.c
+++ b/src/photos-application.c
@@ -694,9 +694,64 @@ photos_application_create_window (PhotosApplication *self)
static void
photos_application_activate_item (PhotosApplication *self, GObject *item)
{
+ PhotosWindowMode mode;
+ gboolean can_activate;
+
+ mode = photos_mode_controller_get_window_mode (self->state->mode_cntrlr);
+
+ switch (mode)
+ {
+ case PHOTOS_WINDOW_MODE_NONE:
+ case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
+ case PHOTOS_WINDOW_MODE_COLLECTIONS:
+ case PHOTOS_WINDOW_MODE_FAVORITES:
+ case PHOTOS_WINDOW_MODE_OVERVIEW:
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ can_activate = TRUE;
+ break;
+
+ case PHOTOS_WINDOW_MODE_EDIT:
+ case PHOTOS_WINDOW_MODE_PREVIEW:
+ can_activate = FALSE;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (!can_activate)
+ {
+ g_return_if_fail (PHOTOS_IS_MAIN_WINDOW (self->main_window));
+ return;
+ }
+
if (!photos_application_create_window (self))
return;
+ switch (mode)
+ {
+ case PHOTOS_WINDOW_MODE_NONE:
+ photos_mode_controller_set_window_mode (self->state->mode_cntrlr, PHOTOS_WINDOW_MODE_OVERVIEW);
+ break;
+
+ case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
+ photos_mode_controller_go_back (self->state->mode_cntrlr);
+ break;
+
+ case PHOTOS_WINDOW_MODE_COLLECTIONS:
+ case PHOTOS_WINDOW_MODE_FAVORITES:
+ case PHOTOS_WINDOW_MODE_OVERVIEW:
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ break;
+
+ case PHOTOS_WINDOW_MODE_EDIT:
+ case PHOTOS_WINDOW_MODE_PREVIEW:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
photos_base_manager_set_active_object (self->state->item_mngr, item);
g_application_activate (G_APPLICATION (self));
@@ -914,14 +969,63 @@ static void
photos_application_launch_search (PhotosApplication *self, const gchar* const *terms, guint timestamp)
{
GVariant *state;
+ PhotosWindowMode mode;
+ gboolean can_launch;
g_autofree gchar *str = NULL;
photos_debug (PHOTOS_DEBUG_APPLICATION, "PhotosApplication::launch_search");
+ mode = photos_mode_controller_get_window_mode (self->state->mode_cntrlr);
+
+ switch (mode)
+ {
+ case PHOTOS_WINDOW_MODE_NONE:
+ case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
+ case PHOTOS_WINDOW_MODE_COLLECTIONS:
+ case PHOTOS_WINDOW_MODE_FAVORITES:
+ case PHOTOS_WINDOW_MODE_OVERVIEW:
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ can_launch = TRUE;
+ break;
+
+ case PHOTOS_WINDOW_MODE_EDIT:
+ case PHOTOS_WINDOW_MODE_PREVIEW:
+ can_launch = FALSE;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (!can_launch)
+ {
+ g_return_if_fail (PHOTOS_IS_MAIN_WINDOW (self->main_window));
+ return;
+ }
+
if (!photos_application_create_window (self))
return;
- photos_mode_controller_set_window_mode (self->state->mode_cntrlr, PHOTOS_WINDOW_MODE_OVERVIEW);
+ switch (mode)
+ {
+ case PHOTOS_WINDOW_MODE_NONE:
+ photos_mode_controller_set_window_mode (self->state->mode_cntrlr, PHOTOS_WINDOW_MODE_OVERVIEW);
+ break;
+
+ case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
+ case PHOTOS_WINDOW_MODE_COLLECTIONS:
+ case PHOTOS_WINDOW_MODE_FAVORITES:
+ case PHOTOS_WINDOW_MODE_OVERVIEW:
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ break;
+
+ case PHOTOS_WINDOW_MODE_EDIT:
+ case PHOTOS_WINDOW_MODE_PREVIEW:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
str = g_strjoinv (" ", (gchar **) terms);
photos_search_controller_set_string (self->state->srch_cntrlr, str);
diff --git a/src/photos-item-manager.c b/src/photos-item-manager.c
index eb6d210c..b7dc3b2f 100644
--- a/src/photos-item-manager.c
+++ b/src/photos-item-manager.c
@@ -668,6 +668,7 @@ photos_item_manager_set_active_object (PhotosBaseManager *manager, GObject *obje
g_return_val_if_fail (object != NULL, FALSE);
g_return_val_if_fail (PHOTOS_IS_BASE_ITEM (object), FALSE);
+ g_return_val_if_fail (self->mode != PHOTOS_WINDOW_MODE_EDIT, FALSE);
is_collection = photos_base_item_is_collection (PHOTOS_BASE_ITEM (object));
if (is_collection)
@@ -971,11 +972,7 @@ photos_item_manager_add_item (PhotosItemManager *self, TrackerSparqlCursor *curs
if (photos_item_manager_cursor_is_collection (cursor))
{
- if (self->active_collection != NULL && force)
- photos_mode_controller_go_back (self);
-
- if (self->active_collection == NULL)
- photos_item_manager_add_cursor_for_mode (self, cursor, PHOTOS_WINDOW_MODE_COLLECTIONS, force);
+ photos_item_manager_add_cursor_for_mode (self, cursor, PHOTOS_WINDOW_MODE_COLLECTIONS, force);
}
else
{
@@ -1321,14 +1318,6 @@ photos_mode_controller_go_back (PhotosModeController *self)
g_return_if_fail (!g_queue_is_empty (self->history));
old_mode = (PhotosWindowMode) GPOINTER_TO_INT (g_queue_peek_head (self->history));
-
- /* Always go back to the overview when activated from the search
- * provider. It is easier to special case it here instead of all
- * over the code.
- */
- if (self->mode == PHOTOS_WINDOW_MODE_PREVIEW && old_mode == PHOTOS_WINDOW_MODE_NONE)
- old_mode = PHOTOS_WINDOW_MODE_OVERVIEW;
-
g_return_if_fail (old_mode != PHOTOS_WINDOW_MODE_NONE);
switch (self->mode)
@@ -1465,6 +1454,7 @@ photos_mode_controller_set_window_mode (PhotosModeController *self, PhotosWindow
}
else
{
+ g_return_if_fail (self->mode != PHOTOS_WINDOW_MODE_EDIT);
g_return_if_fail (self->mode != PHOTOS_WINDOW_MODE_PREVIEW);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]