'everything' apps shift/ctrl+tab insert appname + space now

SVN revision: 48022
This commit is contained in:
Hannes Janetzek 2010-04-15 15:46:12 +00:00
parent aa81c1f503
commit d0fbe9424e
5 changed files with 68 additions and 7 deletions

View File

@ -664,6 +664,30 @@ _fetch(Evry_Plugin *plugin, const char *input)
return 1;
}
static int
_complete(Evry_Plugin *plugin, const Evry_Item *it, char **input)
{
ITEM_APP(app, it);
char buf[128];
if (app->desktop)
{
char *space = strchr(app->desktop->exec, ' ');
snprintf(buf, sizeof(buf), "%s ", app->desktop->exec);
if (space)
buf[1 + space - app->desktop->exec] = '\0';
}
else
snprintf(buf, sizeof(buf), "%s ", app->file);
*input = strdup(buf);
return EVRY_COMPLETE_INPUT;
}
static Evas_Object *
_icon_get(Evry_Plugin *p __UNUSED__, const Evry_Item *it, Evas *e)
{
@ -887,7 +911,8 @@ module_init(void)
p1 = E_NEW(Plugin, 1);
evry_plugin_new(EVRY_PLUGIN(p1), "Applications", type_subject, "", "APPLICATION", 0, NULL, NULL,
_begin, _cleanup, _fetch, NULL, _icon_get, _free_plugin);
EVRY_PLUGIN(p1)->complete = &_complete;
p2 = E_NEW(Plugin, 1);
evry_plugin_new(EVRY_PLUGIN(p2), "Open With...", type_action, "FILE", "", 0, NULL, NULL,
_begin_open_with, _cleanup, _fetch, _open_with_action,

View File

@ -3,7 +3,7 @@
#include "e.h"
#define EVRY_API_VERSION 1
#define EVRY_API_VERSION 2
#define EVRY_ACTION_OTHER 0
@ -14,6 +14,10 @@
#define EVRY_ASYNC_UPDATE_CLEAR 1
#define EVRY_ASYNC_UPDATE_REFRESH 2
#define EVRY_COMPLETE_NONE 0
#define EVRY_COMPLETE_INPUT 1
#define EVRY_COMPLETE_BROWSE 2
#define VIEW_MODE_LIST 0
#define VIEW_MODE_DETAIL 1
#define VIEW_MODE_THUMB 2
@ -184,7 +188,10 @@ struct _Evry_Plugin
/* only used when plugin is of type_action */
int (*action) (Evry_Plugin *p, const Evry_Item *item);
/* int (*complete) (Evry_Plugin *p, const Evry_Item *item, char *input); */
/* try to complete current item:
return: EVRY_COMPLETE_INPUT when input was changed
return: EVRY_COMPLETE_BROWSE to browse item */
int (*complete) (Evry_Plugin *p, const Evry_Item *item, char **input);
/* handle key events: return 1 when key is handled by plugin */
int (*cb_key_down) (Evry_Plugin *p, const Ecore_Event_Key *ev);

View File

@ -1373,11 +1373,28 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
(ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)) &&
(!strcmp(key, "Tab")))))
{
/* int action = 0;
* if (s->plugin->complete)
* action = s->plugin->complete(s->plugin, s->cur_item, &s->input); */
int action = 0;
char *input = NULL;
Evry_Item *it = s->cur_item;
evry_browse_item(selector);
evry_item_ref(it);
if (it->plugin->complete)
action = it->plugin->complete(it->plugin, it, &input);
else
evry_browse_item(selector);
if (action == EVRY_COMPLETE_INPUT)
{
snprintf(s->input, INPUTLEN, "%s", input);
_evry_update_text_label(s);
_evry_cb_update_timer(selector);
evry_item_select(s, it);
}
E_FREE(input);
evry_item_free(it);
}
else if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
(!strcmp(key, "Delete") || !strcmp(key, "Insert")))

View File

@ -50,6 +50,11 @@ _cb_sort(const void *data1, const void *data2)
const Evry_Item *it1 = data1;
const Evry_Item *it2 = data2;
if (it1->selected)
return -1;
if (it2->selected)
return 1;
if (it1->usage && it2->usage)
return (it1->usage > it2->usage ? -1 : 1);
if (it1->usage && !it2->usage)

View File

@ -194,6 +194,13 @@ evry_fuzzy_match(const char *str, const char *match)
}
}
if (sum > 0)
{
/* exact match ? */
if (strlen(str) != m_len)
sum += 10;
}
return sum;
}