[gnome-builder/wip/chergert/perspective] search: auto-select the first row
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/perspective] search: auto-select the first row
- Date: Sun, 13 Dec 2015 00:24:32 +0000 (UTC)
commit b28bb822ef9e8ff6925f5dfac24ee54241a7266a
Author: Christian Hergert <chergert redhat com>
Date: Sat Dec 12 16:24:23 2015 -0800
search: auto-select the first row
libide/search/ide-omni-search-display.c | 71 +++++++------------------------
libide/search/ide-omni-search-group.c | 8 ++--
libide/search/ide-omni-search-group.h | 18 ++++----
3 files changed, 28 insertions(+), 69 deletions(-)
---
diff --git a/libide/search/ide-omni-search-display.c b/libide/search/ide-omni-search-display.c
index 52b96c5..8596181 100644
--- a/libide/search/ide-omni-search-display.c
+++ b/libide/search/ide-omni-search-display.c
@@ -29,6 +29,8 @@ struct _IdeOmniSearchDisplay
IdeSearchContext *context;
GPtrArray *providers;
+
+ guint do_autoselect : 1;
};
typedef struct
@@ -142,6 +144,8 @@ ide_omni_search_display_move_next_result (IdeOmniSearchDisplay *self)
g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
+ self->do_autoselect = FALSE;
+
for (i = 0; i < self->providers->len; i++)
{
ProviderEntry *ptr = g_ptr_array_index (self->providers, i);
@@ -181,6 +185,8 @@ ide_omni_search_display_move_previous_result (IdeOmniSearchDisplay *self)
g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
+ self->do_autoselect = FALSE;
+
for (i = self->providers->len - 1; i >= 0; i--)
{
ProviderEntry *ptr = g_ptr_array_index (self->providers, i);
@@ -212,57 +218,6 @@ ide_omni_search_display_move_previous_result (IdeOmniSearchDisplay *self)
}
}
-static gboolean
-ide_omni_search_display_keynav_failed (IdeOmniSearchDisplay *self,
- GtkDirectionType dir,
- IdeOmniSearchGroup *group)
-{
- GList *list = NULL;
- GList *iter;
- gint position = -1;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self), FALSE);
- g_return_val_if_fail (IDE_IS_OMNI_SEARCH_GROUP (group), FALSE);
-
- gtk_container_child_get (GTK_CONTAINER (self), GTK_WIDGET (group),
- "position", &position,
- NULL);
-
- if (dir == GTK_DIR_DOWN)
- {
- list = gtk_container_get_children (GTK_CONTAINER (self));
- iter = g_list_nth (list, position + 1);
- for (; iter; iter = iter->next)
- {
- if (ide_omni_search_group_get_first (iter->data))
- {
- ide_omni_search_group_unselect (group);
- ide_omni_search_group_focus_first (iter->data);
- ret = TRUE;
- }
- }
- }
- else if (dir == GTK_DIR_UP && position > 0)
- {
- list = gtk_container_get_children (GTK_CONTAINER (self));
- iter = g_list_nth (list, position - 1);
- for (; iter; iter = iter->prev)
- {
- if (ide_omni_search_group_get_first (iter->data))
- {
- ide_omni_search_group_unselect (group);
- ide_omni_search_group_focus_last (iter->data);
- ret = TRUE;
- }
- }
- }
-
- g_list_free (list);
-
- return ret;
-}
-
static void
ide_omni_search_display_activate (IdeOmniSearchDisplay *self)
{
@@ -332,11 +287,6 @@ ide_omni_search_display_add_provider (IdeOmniSearchDisplay *self,
G_CALLBACK (ide_omni_search_display_result_selected),
self,
G_CONNECT_SWAPPED);
- g_signal_connect_object (entry->group,
- "keynav-failed",
- G_CALLBACK (ide_omni_search_display_keynav_failed),
- self,
- G_CONNECT_SWAPPED);
g_ptr_array_add (self->providers, entry);
g_ptr_array_sort (self->providers, provider_entry_sort);
@@ -415,6 +365,13 @@ ide_omni_search_display_result_added (IdeOmniSearchDisplay *self,
{
ide_omni_search_group_add_result (ptr->group, result);
gtk_widget_show (GTK_WIDGET (ptr->group));
+
+ /*
+ * If this is the first group and we are still auto-selecting
+ * the first row, we might need to update the selection.
+ */
+ if ((i == 0) && self->do_autoselect)
+ ide_omni_search_group_select_first (ptr->group);
}
break;
}
@@ -488,6 +445,8 @@ ide_omni_search_display_connect_context (IdeOmniSearchDisplay *self,
g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
g_return_if_fail (IDE_IS_SEARCH_CONTEXT (context));
+ self->do_autoselect = TRUE;
+
providers = ide_search_context_get_providers (context);
for (iter = providers; iter; iter = iter->next)
diff --git a/libide/search/ide-omni-search-group.c b/libide/search/ide-omni-search-group.c
index a89ed46..187361b 100644
--- a/libide/search/ide-omni-search-group.c
+++ b/libide/search/ide-omni-search-group.c
@@ -236,23 +236,23 @@ ide_omni_search_group_row_selected (IdeOmniSearchGroup *self,
}
void
-ide_omni_search_group_focus_first (IdeOmniSearchGroup *self)
+ide_omni_search_group_select_first (IdeOmniSearchGroup *self)
{
GtkListBoxRow *row;
g_return_if_fail (IDE_IS_OMNI_SEARCH_GROUP (self));
- row = gtk_list_box_get_row_at_y (self->rows, 1);
+ row = gtk_list_box_get_row_at_index (self->rows, 0);
if (row)
{
gtk_list_box_unselect_all (self->rows);
- gtk_widget_child_focus (GTK_WIDGET (self->rows), GTK_DIR_DOWN);
+ gtk_list_box_select_row (self->rows, row);
}
}
void
-ide_omni_search_group_focus_last (IdeOmniSearchGroup *self)
+ide_omni_search_group_select_last (IdeOmniSearchGroup *self)
{
GtkAllocation alloc;
GtkListBoxRow *row;
diff --git a/libide/search/ide-omni-search-group.h b/libide/search/ide-omni-search-group.h
index 730c002..e612ae7 100644
--- a/libide/search/ide-omni-search-group.h
+++ b/libide/search/ide-omni-search-group.h
@@ -28,17 +28,17 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeOmniSearchGroup, ide_omni_search_group, IDE, OMNI_SEARCH_GROUP, GtkBox)
-void ide_omni_search_group_clear (IdeOmniSearchGroup *group);
-IdeSearchProvider *ide_omni_search_group_get_provider (IdeOmniSearchGroup *group);
-void ide_omni_search_group_add_result (IdeOmniSearchGroup *group,
+void ide_omni_search_group_clear (IdeOmniSearchGroup *self);
+IdeSearchProvider *ide_omni_search_group_get_provider (IdeOmniSearchGroup *self);
+void ide_omni_search_group_add_result (IdeOmniSearchGroup *self,
IdeSearchResult *result);
-void ide_omni_search_group_remove_result (IdeOmniSearchGroup *group,
+void ide_omni_search_group_remove_result (IdeOmniSearchGroup *self,
IdeSearchResult *result);
-void ide_omni_search_group_unselect (IdeOmniSearchGroup *group);
-void ide_omni_search_group_focus_first (IdeOmniSearchGroup *group);
-void ide_omni_search_group_focus_last (IdeOmniSearchGroup *group);
-IdeSearchResult *ide_omni_search_group_get_first (IdeOmniSearchGroup *group);
-gboolean ide_omni_search_group_activate (IdeOmniSearchGroup *group);
+void ide_omni_search_group_unselect (IdeOmniSearchGroup *self);
+void ide_omni_search_group_select_first (IdeOmniSearchGroup *self);
+void ide_omni_search_group_select_last (IdeOmniSearchGroup *self);
+IdeSearchResult *ide_omni_search_group_get_first (IdeOmniSearchGroup *self);
+gboolean ide_omni_search_group_activate (IdeOmniSearchGroup *self);
guint64 ide_omni_search_group_get_count (IdeOmniSearchGroup *self);
gboolean ide_omni_search_group_has_selection (IdeOmniSearchGroup *self);
gboolean ide_omni_search_group_move_next (IdeOmniSearchGroup *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]