Пример #1
0
static gboolean _completion_match_func(GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter,
                                       gpointer user_data)
{
  gboolean res = FALSE;
  char *tag = NULL;
  GtkTreeModel *model = gtk_entry_completion_get_model(completion);
  int column = gtk_entry_completion_get_text_column(completion);

  if(gtk_tree_model_get_column_type(model, column) != G_TYPE_STRING) return FALSE;

  gtk_tree_model_get(model, iter, column, &tag, -1);

  if(tag)
  {
    char *normalized = g_utf8_normalize(tag, -1, G_NORMALIZE_ALL);
    if(normalized)
    {
      char *casefold = g_utf8_casefold(normalized, -1);
      if(casefold)
      {
        res = g_strstr_len(casefold, -1, key) != NULL;
      }
      g_free(casefold);
    }
    g_free(normalized);
    g_free(tag);
  }

  return res;
}
Пример #2
0
int
clip_GTK_ENTRYCOMPLETIONGETTEXTCOLUMN(ClipMachine * ClipMachineMemory)
{
   C_object *ccompletion = _fetch_co_arg(ClipMachineMemory);

   gint      column;

   CHECKCOBJ(ccompletion, GTK_IS_ENTRY_COMPLETION(ccompletion->object));

   column = gtk_entry_completion_get_text_column(GTK_ENTRY_COMPLETION(ccompletion->object));
   column++;

   _clip_retni(ClipMachineMemory, column);

   return 0;
 err:
   return 1;
}
Пример #3
0
void
completion_populate_entry_completion(const gchar *filename, GtkEntryCompletion *completion)
{
	GtkTreeModel *model;
	GtkTreeIter iter;
	char *path;
	GFile *file;
	GFileInputStream *stream;
	gint column;
	GError *err = NULL;
	gchar buffer[block_size];
	const gchar *ptr;
	gssize size;

	g_assert(filename != NULL);
	g_assert(GTK_IS_ENTRY_COMPLETION(completion));

	model = gtk_entry_completion_get_model(GTK_ENTRY_COMPLETION(completion));
	column = gtk_entry_completion_get_text_column(GTK_ENTRY_COMPLETION(completion));

	path = g_build_filename(pathbuilder_get_user_application_directory(), G_DIR_SEPARATOR_S, filename, NULL);
	file = g_file_new_for_path(path);

	/* load strings from file & append entries to GtkEntryCompletion's model */
	g_debug("Trying to load strings list from: \"%s\"", path);

	if(g_file_query_exists(file, NULL))
	{
		g_debug("Found file, reading content...");

		if((stream = g_file_read(file, NULL, &err)))
		{
			model = gtk_entry_completion_get_model(GTK_ENTRY_COMPLETION(completion));

			do
			{
				if((size = g_input_stream_read(G_INPUT_STREAM(stream), buffer, block_size, NULL, &err)) == block_size)
				{
					ptr = buffer + COMPLETION_COUNTER_SIZE;
					g_debug("Found text: \"%s\"", ptr);

					if(GTK_IS_LIST_STORE(model))
					{
						gtk_list_store_append(GTK_LIST_STORE(model), &iter);
						gtk_list_store_set(GTK_LIST_STORE(model), &iter, column, ptr, -1);
					}
					else
					{
						g_warning("gtk_entry_completion_get_model() is not GTK_LIST_STORE");
					}
				}
				else
				{
					if(size)
					{
						g_warning("Invalid block size: %d", size);
					}

					break;
				}
			} while(!err && size);

			g_debug("Closing file: \"%s\"", path);
			g_input_stream_close(G_INPUT_STREAM(stream), NULL, &err);
			g_object_unref(stream);
		}
		else
		{
			g_warning("Couldn't read file: \"%s\"", path);
		}
	}

	if(err)
	{
		g_warning("%s", err->message);
		g_error_free(err);
	}

	g_object_unref(file);
	g_free(path);
}