'everything'

- theme: allow smaller popup size, cleanups
- free items from history. needs some more testing
  to let the history not grow too large


SVN revision: 42119
This commit is contained in:
Hannes Janetzek 2009-08-31 09:21:51 +00:00
parent e09444abd0
commit 25b3f68249
3 changed files with 55 additions and 41 deletions

View File

@ -26598,11 +26598,11 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
type: RECT;
description { state: "default" 0.0;
visible: 0;
min: 436 118;
min: 386 118;
}
description { state: "composite" 0.0;
visible: 0;
min: 536 218;
min: 486 218;
}
}
part { name: "frame";
@ -26661,23 +26661,8 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
}
}
}
/* part { name: "clip";
* type: RECT;
* description { state: "default" 0.0;
* color: 255 255 255 255;
* rel1 {
* offset: 8 1;
* to: "bg";
* }
* rel2 {
* offset: -9 -2;
* to: "bg";
* }
* }
* } */
part { name: "selector_frame";
type: RECT;
/* clip_to: "clip"; */
description { state: "default" 0.0;
color: 255 255 255 255;
rel1 {
@ -27057,9 +27042,9 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
}
/* offset to main popup */
data.item: "offset_y" "-2";
data.item: "offset_x" "20";
data.item: "offset_x" "16";
data.item: "offset_composite_y" "-52";
data.item: "offset_composite_x" "20";
data.item: "offset_composite_x" "16";
data.item: "shaped" "1";
parts {

View File

@ -1,6 +1,16 @@
#include "e_mod_main.h"
#define HISTORY_VERSION 1
#define HISTORY_VERSION 2
#define SEVEN_DAYS 604800.0
#define THIRTY_DAYS 2592000.0
typedef struct _Cleanup_Data Cleanup_Data;
struct _Cleanup_Data
{
double time;
Eina_List *keys;
};
static E_Config_DD *hist_entry_edd = NULL;
static E_Config_DD *hist_item_edd = NULL;
@ -64,13 +74,15 @@ static Eina_Bool
_hist_cleanup_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata)
{
History_Entry *he = data;
Cleanup_Data *d = fdata;
History_Item *hi;
Eina_List *l, *ll, **keys = fdata;
Eina_List *l, *ll;
EINA_LIST_FOREACH_SAFE(he->items, l, ll, hi)
{
/* item is transient */
if (!hi->count)
/* item is transient or too old */
if ((!hi->count) ||
(hi->last_used + (SEVEN_DAYS * (hi->count - 1)) < d->time))
{
if (hi->input)
eina_stringshare_del(hi->input);
@ -87,7 +99,7 @@ _hist_cleanup_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata
if (!he->items)
{
E_FREE(he);
*keys = eina_list_append(*keys, key);
d->keys = eina_list_append(d->keys, key);
}
return 1;
@ -96,20 +108,30 @@ _hist_cleanup_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata
void
evry_history_free(void)
{
Eina_List *keys = NULL;
Cleanup_Data *d;
char *key;
evry_hist = e_config_domain_load("module.everything.history", hist_edd);
if (evry_hist)
{
eina_hash_foreach(evry_hist->subjects, _hist_cleanup_cb, &keys);
EINA_LIST_FREE(keys, key)
eina_hash_del_by_key(evry_hist->subjects, key);
d = E_NEW(Cleanup_Data, 1);
d->time = ecore_time_get() - THIRTY_DAYS;
eina_hash_foreach(evry_hist->actions, _hist_cleanup_cb, &keys);
EINA_LIST_FREE(keys, key)
eina_hash_del_by_key(evry_hist->actions, key);
if (evry_hist->subjects)
{
eina_hash_foreach(evry_hist->subjects, _hist_cleanup_cb, d);
EINA_LIST_FREE(d->keys, key)
eina_hash_del_by_key(evry_hist->subjects, key);
}
if (evry_hist->subjects)
{
eina_hash_foreach(evry_hist->actions, _hist_cleanup_cb, d);
EINA_LIST_FREE(d->keys, key)
eina_hash_del_by_key(evry_hist->actions, key);
}
E_FREE(d);
evry_history_unload();
}
@ -200,9 +222,9 @@ evry_history_add(Eina_Hash *hist, Evry_State *s)
if (!s->input || !strncmp (hi->input, s->input, strlen(s->input)))
{
/* s->input matches hi->input and is equal or shorter */
hi->count++;
hi->last_used /= 4.0;
hi->last_used += ecore_time_get();
hi->last_used = ecore_time_get();
if (!it->transient)
hi->count++;
}
else if (s->input)
{
@ -239,8 +261,10 @@ evry_history_add(Eina_Hash *hist, Evry_State *s)
hi = E_NEW(History_Item, 1);
hi->plugin = eina_stringshare_ref(it->plugin->name);
hi->last_used = ecore_time_get();
if (!it->transient)
hi->count = 1;
if (s->input)
hi->input = eina_stringshare_add(s->input);
@ -257,6 +281,7 @@ evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input)
Eina_List *l;
int cnt = 1;
int matched;
double now = ecore_time_get();
if (it->id)
id = it->id;
@ -274,10 +299,11 @@ evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input)
if ((!input[0]) || (!input[0] && !hi->input))
{
cnt++;
it->usage += hi->last_used;
it->usage = hi->last_used;
}
else
{
/* double priority for exact matches */
matched = 0;
if (!strncmp(input, hi->input, strlen(input)))
{
@ -289,13 +315,16 @@ evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input)
matched = 1;
it->usage += hi->last_used;
}
if (matched) cnt++;
}
it->usage += (double) hi->count * (hi->last_used / now);
}
}
if (it->usage)
{
it->usage /= (double)cnt;
it->usage /= (double) cnt;
return 1;
}
}

View File

@ -20,7 +20,8 @@ _cb_border_remove(void *data, int type, void *event)
if (it->data == ev->border)
{
p->items = eina_list_remove(p->items, it);
eina_hash_del_by_key(border_hash, ev->border);
if (border_hash)
eina_hash_del_by_key(border_hash, ev->border);
evry_item_free(it);
evry_plugin_async_update(p, EVRY_ASYNC_UPDATE_ADD);
break;
@ -52,15 +53,14 @@ static void
_cleanup(Evry_Plugin *p)
{
Ecore_Event_Handler *h;
EINA_LIST_FREE(handlers, h)
ecore_event_handler_del(h);
if (border_hash) eina_hash_free(border_hash);
border_hash = NULL;
EVRY_PLUGIN_ITEMS_CLEAR(p);
EINA_LIST_FREE(handlers, h)
ecore_event_handler_del(h);
}
static void