shell: Include panel "keywords" in the row data
This way GtkListBox filter functions can use the "keywords" in order to provide accurate search results. https://bugzilla.gnome.org/show_bug.cgi?id=790755
This commit is contained in:
parent
5d32d8548c
commit
aaabf05ae6
3 changed files with 20 additions and 4 deletions
|
@ -18,6 +18,8 @@
|
||||||
* Author: Georges Basile Stavracas Neto <gbsneto@gnome.org>
|
* Author: Georges Basile Stavracas Neto <gbsneto@gnome.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "cc-panel-list.h"
|
#include "cc-panel-list.h"
|
||||||
#include "cc-util.h"
|
#include "cc-util.h"
|
||||||
|
|
||||||
|
@ -29,6 +31,7 @@ typedef struct
|
||||||
gchar *id;
|
gchar *id;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gchar *description;
|
gchar *description;
|
||||||
|
gchar **keywords;
|
||||||
} RowData;
|
} RowData;
|
||||||
|
|
||||||
struct _CcPanelList
|
struct _CcPanelList
|
||||||
|
@ -148,6 +151,7 @@ update_search (CcPanelList *self)
|
||||||
static void
|
static void
|
||||||
row_data_free (RowData *data)
|
row_data_free (RowData *data)
|
||||||
{
|
{
|
||||||
|
g_strfreev (data->keywords);
|
||||||
g_free (data->description);
|
g_free (data->description);
|
||||||
g_free (data->name);
|
g_free (data->name);
|
||||||
g_free (data->id);
|
g_free (data->id);
|
||||||
|
@ -159,6 +163,7 @@ row_data_new (CcPanelCategory category,
|
||||||
const gchar *id,
|
const gchar *id,
|
||||||
const gchar *name,
|
const gchar *name,
|
||||||
const gchar *description,
|
const gchar *description,
|
||||||
|
gchar **keywords,
|
||||||
const gchar *icon)
|
const gchar *icon)
|
||||||
{
|
{
|
||||||
GtkWidget *label, *grid, *image;
|
GtkWidget *label, *grid, *image;
|
||||||
|
@ -170,6 +175,7 @@ row_data_new (CcPanelCategory category,
|
||||||
data->id = g_strdup (id);
|
data->id = g_strdup (id);
|
||||||
data->name = g_strdup (name);
|
data->name = g_strdup (name);
|
||||||
data->description = g_strdup (description);
|
data->description = g_strdup (description);
|
||||||
|
data->keywords = g_strdupv (keywords);
|
||||||
|
|
||||||
/* Setup the row */
|
/* Setup the row */
|
||||||
grid = g_object_new (GTK_TYPE_GRID,
|
grid = g_object_new (GTK_TYPE_GRID,
|
||||||
|
@ -229,7 +235,8 @@ filter_func (GtkListBoxRow *row,
|
||||||
CcPanelList *self;
|
CcPanelList *self;
|
||||||
RowData *data;
|
RowData *data;
|
||||||
gchar *search_text, *panel_text, *panel_description;
|
gchar *search_text, *panel_text, *panel_description;
|
||||||
gboolean retval;
|
gboolean retval = FALSE;
|
||||||
|
gint i;
|
||||||
|
|
||||||
self = CC_PANEL_LIST (user_data);
|
self = CC_PANEL_LIST (user_data);
|
||||||
data = g_object_get_data (G_OBJECT (row), "data");
|
data = g_object_get_data (G_OBJECT (row), "data");
|
||||||
|
@ -251,7 +258,10 @@ filter_func (GtkListBoxRow *row,
|
||||||
*/
|
*/
|
||||||
gtk_widget_set_visible (data->description_label, self->view == CC_PANEL_LIST_SEARCH);
|
gtk_widget_set_visible (data->description_label, self->view == CC_PANEL_LIST_SEARCH);
|
||||||
|
|
||||||
retval = g_strstr_len (panel_text, -1, search_text) != NULL ||
|
for (i = 0; !retval && data->keywords[i] != NULL; i++)
|
||||||
|
retval = (strstr (data->keywords[i], search_text) == data->keywords[i]);
|
||||||
|
|
||||||
|
retval = retval || g_strstr_len (panel_text, -1, search_text) != NULL ||
|
||||||
g_strstr_len (panel_description, -1, search_text) != NULL;
|
g_strstr_len (panel_description, -1, search_text) != NULL;
|
||||||
|
|
||||||
g_free (panel_text);
|
g_free (panel_text);
|
||||||
|
@ -859,6 +869,7 @@ cc_panel_list_add_panel (CcPanelList *self,
|
||||||
const gchar *id,
|
const gchar *id,
|
||||||
const gchar *title,
|
const gchar *title,
|
||||||
const gchar *description,
|
const gchar *description,
|
||||||
|
gchar **keywords,
|
||||||
const gchar *icon)
|
const gchar *icon)
|
||||||
{
|
{
|
||||||
GtkWidget *listbox;
|
GtkWidget *listbox;
|
||||||
|
@ -867,7 +878,7 @@ cc_panel_list_add_panel (CcPanelList *self,
|
||||||
g_return_if_fail (CC_IS_PANEL_LIST (self));
|
g_return_if_fail (CC_IS_PANEL_LIST (self));
|
||||||
|
|
||||||
/* Add the panel to the proper listbox */
|
/* Add the panel to the proper listbox */
|
||||||
data = row_data_new (category, id, title, description, icon);
|
data = row_data_new (category, id, title, description, keywords, icon);
|
||||||
|
|
||||||
switch (category)
|
switch (category)
|
||||||
{
|
{
|
||||||
|
@ -887,7 +898,7 @@ cc_panel_list_add_panel (CcPanelList *self,
|
||||||
gtk_container_add (GTK_CONTAINER (listbox), data->row);
|
gtk_container_add (GTK_CONTAINER (listbox), data->row);
|
||||||
|
|
||||||
/* And add to the search listbox too */
|
/* And add to the search listbox too */
|
||||||
search_data = row_data_new (category, id, title, description, icon);
|
search_data = row_data_new (category, id, title, description, keywords, icon);
|
||||||
gtk_container_add (GTK_CONTAINER (self->search_listbox), search_data->row);
|
gtk_container_add (GTK_CONTAINER (self->search_listbox), search_data->row);
|
||||||
|
|
||||||
g_hash_table_insert (self->id_to_data, data->id, data);
|
g_hash_table_insert (self->id_to_data, data->id, data);
|
||||||
|
|
|
@ -59,6 +59,7 @@ void cc_panel_list_add_panel (CcPanelList
|
||||||
const gchar *id,
|
const gchar *id,
|
||||||
const gchar *title,
|
const gchar *title,
|
||||||
const gchar *description,
|
const gchar *description,
|
||||||
|
gchar **keywords,
|
||||||
const gchar *icon);
|
const gchar *icon);
|
||||||
|
|
||||||
void cc_panel_list_set_active_panel (CcPanelList *self,
|
void cc_panel_list_set_active_panel (CcPanelList *self,
|
||||||
|
|
|
@ -308,6 +308,7 @@ setup_model (CcWindow *shell)
|
||||||
GIcon *icon;
|
GIcon *icon;
|
||||||
gchar *name, *description, *id, *symbolic_icon;
|
gchar *name, *description, *id, *symbolic_icon;
|
||||||
const gchar *icon_name;
|
const gchar *icon_name;
|
||||||
|
gchar **keywords;
|
||||||
|
|
||||||
gtk_tree_model_get (model, &iter,
|
gtk_tree_model_get (model, &iter,
|
||||||
COL_CATEGORY, &category,
|
COL_CATEGORY, &category,
|
||||||
|
@ -315,6 +316,7 @@ setup_model (CcWindow *shell)
|
||||||
COL_GICON, &icon,
|
COL_GICON, &icon,
|
||||||
COL_ID, &id,
|
COL_ID, &id,
|
||||||
COL_NAME, &name,
|
COL_NAME, &name,
|
||||||
|
COL_KEYWORDS, &keywords,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
icon_name = get_icon_name_from_g_icon (icon);
|
icon_name = get_icon_name_from_g_icon (icon);
|
||||||
|
@ -325,11 +327,13 @@ setup_model (CcWindow *shell)
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
|
keywords,
|
||||||
symbolic_icon);
|
symbolic_icon);
|
||||||
|
|
||||||
valid = gtk_tree_model_iter_next (model, &iter);
|
valid = gtk_tree_model_iter_next (model, &iter);
|
||||||
|
|
||||||
g_clear_pointer (&symbolic_icon, g_free);
|
g_clear_pointer (&symbolic_icon, g_free);
|
||||||
|
g_clear_pointer (&keywords, g_strfreev);
|
||||||
g_clear_pointer (&description, g_free);
|
g_clear_pointer (&description, g_free);
|
||||||
g_clear_pointer (&name, g_free);
|
g_clear_pointer (&name, g_free);
|
||||||
g_clear_pointer (&id, g_free);
|
g_clear_pointer (&id, g_free);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue