Ejemplo n.º 1
0
void ViCommandMode::execute(const Glib::ustring &cmd)
{
    add_history( cmd );

    char ch = cmd[0];
    Glib::ustring rest = cmd.substr(1);

    if (ch == '/')
    {
        //
        //  Forward search
        //
        execute_search(rest, ch);
    }
    else if (ch == '?')
    {
        //
        //  Backward search
        //
        execute_search(rest, ch);
    }
    else if (ch == ':')
    {
        execute_command(rest);
    }
}
static void
schedule_search (GcalShellSearchProvider *search_provider,
                 GDBusMethodInvocation   *invocation,
                 gchar                  **terms)
{
  GcalShellSearchProviderPrivate *priv = search_provider->priv;

  /* don't attempt searches for a single character */
  if (g_strv_length (terms) == 1 && g_utf8_strlen (terms[0], -1) == 1)
    {
      g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL));
      return;
    }

  if (priv->pending_search != NULL)
    {
      g_object_unref (priv->pending_search->invocation);
      g_strfreev (priv->pending_search->terms);

      if (priv->scheduled_search_id == 0)
        g_application_release (g_application_get_default ());
    }
  else
    {
      priv->pending_search = g_new0 (PendingSearch, 1);
    }

  if (priv->scheduled_search_id != 0)
    {
      g_source_remove (priv->scheduled_search_id);
      priv->scheduled_search_id = 0;
    }

  priv->pending_search->invocation = g_object_ref (invocation);
  priv->pending_search->terms = g_strdupv (terms);

  if (!gcal_manager_load_completed (priv->manager))
    {
      priv->scheduled_search_id = g_timeout_add_seconds (1, (GSourceFunc) execute_search, search_provider);
      return;
    }

  execute_search (search_provider);
  return;
}