static void
ide_omni_search_display_result_removed (IdeOmniSearchDisplay *self,
                                        IdeSearchProvider    *provider,
                                        IdeSearchResult      *result,
                                        IdeSearchContext     *context)
{
  guint i;

  g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (IDE_IS_SEARCH_RESULT (result));
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (context));

  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          if (ptr->group != NULL)
            ide_omni_search_group_remove_result (ptr->group, result);
          break;
        }
    }
}
static void
ide_omni_search_display_count_set (IdeOmniSearchDisplay *self,
                                   IdeSearchProvider    *provider,
                                   guint64               count,
                                   IdeSearchContext     *context)
{
#if 0
  guint i;

  g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (context));

  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          if (ptr->group != NULL)
            ide_omni_search_group_set_count (ptr->group, count);
          break;
        }
    }
#endif
}
static void
ide_omni_search_display_remove_provider (IdeOmniSearchDisplay *self,
                                         IdeSearchProvider    *provider)
{
  guint i;

  g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));

  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          IdeOmniSearchGroup *group = ptr->group;

          if (group)
            gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (group));
          g_ptr_array_remove_index (self->providers, i);
          return;
        }
    }

  g_warning (_("The provider could not be found."));
}
/**
 * ide_search_provider_search_finish:
 * @self: a #IdeSearchProvider
 * @result: a #GAsyncResult
 * @error: a location for a #GError, or %NULL
 *
 * Completes a request to a search provider.
 *
 * Returns: (transfer full) (element-type IdeSearchResult): a #GPtrArray
 *    of #IdeSearchResult elements.
 *
 * Since: 3.32
 */
GPtrArray *
ide_search_provider_search_finish (IdeSearchProvider  *self,
                                   GAsyncResult       *result,
                                   GError            **error)
{
  g_return_val_if_fail (IDE_IS_SEARCH_PROVIDER (self), NULL);
  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);

  return IDE_SEARCH_PROVIDER_GET_IFACE (self)->search_finish (self, result, error);
}
static GPtrArray *
ide_search_provider_real_search_finish (IdeSearchProvider  *self,
                                        GAsyncResult       *result,
                                        GError            **error)
{
  g_assert (IDE_IS_SEARCH_PROVIDER (self));
  g_assert (IDE_IS_TASK (result));

  return ide_task_propagate_pointer (IDE_TASK (result), error);
}
void
ide_search_context_set_provider_count (IdeSearchContext  *self,
                                       IdeSearchProvider *provider,
                                       guint64            count)
{
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));

  g_signal_emit (self, gSignals [COUNT_SET], 0, provider, count);
}
void
ide_search_context_remove_result (IdeSearchContext  *self,
                                  IdeSearchProvider *provider,
                                  IdeSearchResult   *result)
{
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (IDE_IS_SEARCH_RESULT (result));

  g_signal_emit (self, gSignals [RESULT_REMOVED], 0, provider, result);
}
void
ide_search_context_provider_completed (IdeSearchContext  *self,
                                       IdeSearchProvider *provider)
{
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (g_list_find (self->providers, provider));

  if (--self->in_progress == 0)
    g_signal_emit (self, gSignals [COMPLETED], 0);
}
void
_ide_search_context_add_provider (IdeSearchContext  *self,
                                  IdeSearchProvider *provider,
                                  gsize              max_results)
{
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (!self->executed);

  self->providers = g_list_append (self->providers, g_object_ref (provider));
}
Example #10
0
void
ide_search_provider_search_async (IdeSearchProvider   *self,
                                  const gchar         *query,
                                  guint                max_results,
                                  GCancellable        *cancellable,
                                  GAsyncReadyCallback  callback,
                                  gpointer             user_data)
{
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (self));
  g_return_if_fail (query != NULL);
  g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));

  IDE_SEARCH_PROVIDER_GET_IFACE (self)->search_async (self, query, max_results, cancellable, callback, user_data);
}
Example #11
0
static void
ide_search_provider_real_search_async (IdeSearchProvider   *self,
                                       const gchar         *query,
                                       guint                max_results,
                                       GCancellable        *cancellable,
                                       GAsyncReadyCallback  callback,
                                       gpointer             user_data)
{
  g_autoptr(IdeTask) task = NULL;

  g_assert (IDE_IS_SEARCH_PROVIDER (self));
  g_assert (query != NULL);

  task = ide_task_new (self, cancellable, callback, user_data);
  ide_task_return_new_error (task,
                             G_IO_ERROR,
                             G_IO_ERROR_NOT_SUPPORTED,
                             "search not implemented");
}
static void
ide_omni_search_display_result_added (IdeOmniSearchDisplay *self,
                                      IdeSearchProvider    *provider,
                                      IdeSearchResult      *result,
                                      IdeSearchContext     *context)
{
  guint i;

  g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));
  g_return_if_fail (IDE_IS_SEARCH_RESULT (result));
  g_return_if_fail (IDE_IS_SEARCH_CONTEXT (context));

  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          if (ptr->group != NULL)
            {
              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;
        }
    }
}
static void
ide_omni_search_display_add_provider (IdeOmniSearchDisplay *self,
                                      IdeSearchProvider    *provider)
{
  ProviderEntry *entry;
  guint i;

  g_return_if_fail (IDE_IS_OMNI_SEARCH_DISPLAY (self));
  g_return_if_fail (IDE_IS_SEARCH_PROVIDER (provider));

  /*
   * Make sure we don't add an item twice. Probably can assert here, but
   * warning will do for now.
   */
  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          g_warning (_("Cannot add provider more than once."));
          return;
        }
    }

  /*
   * Add the entry to our array and sort the array to determine our target
   * widget packing position.
   */
  entry = g_new0 (ProviderEntry, 1);
  entry->provider = g_object_ref (provider);
  entry->group = g_object_new (IDE_TYPE_OMNI_SEARCH_GROUP,
                               "provider", provider,
                               "visible", FALSE,
                               NULL);
  g_object_add_weak_pointer (G_OBJECT (entry->group), (gpointer *)&entry->group);
  g_signal_connect_object (entry->group,
                           "result-activated",
                           G_CALLBACK (ide_omni_search_display_result_activated),
                           self,
                           G_CONNECT_SWAPPED);
  g_signal_connect_object (entry->group,
                           "result-selected",
                           G_CALLBACK (ide_omni_search_display_result_selected),
                           self,
                           G_CONNECT_SWAPPED);
  g_ptr_array_add (self->providers, entry);
  g_ptr_array_sort (self->providers, provider_entry_sort);

  /*
   * Find the location of the entry and use the index to pack the display
   * group widget.
   */
  for (i = 0; i < self->providers->len; i++)
    {
      ProviderEntry *ptr;

      ptr = g_ptr_array_index (self->providers, i);

      if (ptr->provider == provider)
        {
          gtk_container_add_with_properties (GTK_CONTAINER (self),
                                             GTK_WIDGET (entry->group),
                                             "position", i,
                                             NULL);
          break;
        }
    }
}