AC_SUBST(LOCALE_DIR)
AC_SUBST(PACKAGE_SYSCONF_DIR)
+#######################################
+## Simple X11 build/link
+
+AC_ARG_ENABLE(simple-x11,
+ AC_HELP_STRING([--enable-simple-x11], [enable simple x11 linking]),
+ [ want_evas_simple_x11=$enableval ]
+)
+
x_dir=""
x_cflags=""
x_libs=""
AC_PATH_XTRA
AC_CHECK_HEADER(X11/X.h,
[
- x_dir=${x_dir:-/usr/X11R6}
- x_cflags=${x_cflags:--I${x_includes:-$x_dir/include}}
- x_libs="${x_libs:--L${x_libraries:-$x_dir/lib}} -lX11 -lXext"
+ if test "x$want_evas_simple_x11" = "xyes"; then
+ x_libs="${x_libs} -lX11 -lXext"
+ else
+ x_dir=${x_dir:-/usr/X11R6}
+ x_cflags=${x_cflags:--I${x_includes:-$x_dir/include}}
+ x_libs="${x_libs:--L${x_libraries:-$x_dir/lib}} -lX11 -lXext"
+ fi
],[
AC_MSG_ERROR([Cannot find X headers and libraries.])
]
}
group {
- name: "e/widgets/pager/popup";
+ name: "e/modules/pager/popup";
parts {
part {
name: "base";
}
}
part {
- name: "text";
+ name: "e.text.label";
type: TEXT;
effect: SOFT_SHADOW;
mouse_events: 0;
rel1 {
relative: 0.0 0.0;
offset: 16 -7;
- to_y: "text";
+ to_y: "e.text.label";
}
rel2 {
relative: 1.0 1.0;
offset: -17 6;
- to_y: "text";
+ to_y: "e.text.label";
}
image {
normal: "e17_ibar_over_h.png";
}
}
part {
- name: "pager";
+ name: "e.swallow.content";
type: SWALLOW;
clip_to: "items_clip";
description {
}
}
part {
- name: "items";
+ name: "e.swallow.content";
type: SWALLOW;
clip_to: "clip";
description {
}
}
part {
- name: "icon";
+ name: "e.swallow.icon";
type: SWALLOW;
description {
state: "default" 0.0;
e_config_data.h \
e_intl_data.h \
e_toolbar.h \
-e_int_toolbar_config.h
+e_int_toolbar_config.h \
+e_powersave.h
enlightenment_src = \
e_user.c \
e_fm_custom.c \
e_toolbar.c \
e_int_toolbar_config.c \
+e_powersave.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \
static int _e_border_move_end(E_Border *bd);
static void _e_border_move_update(E_Border *bd);
-static int _e_border_cb_ping_timer(void *data);
+static int _e_border_cb_ping_poller(void *data);
static int _e_border_cb_kill_timer(void *data);
static void _e_border_pointer_resize_begin(E_Border *bd);
bd->ping_ok = 0;
ecore_x_netwm_ping_send(bd->client.win);
bd->ping = ecore_time_get();
- if (bd->ping_timer) ecore_timer_del(bd->ping_timer);
- bd->ping_timer = ecore_timer_add(e_config->ping_clients_wait,
- _e_border_cb_ping_timer, bd);
+ if (bd->ping_poller) ecore_poller_del(bd->ping_poller);
+ bd->ping_poller = ecore_poller_add(ECORE_POLLER_CORE,
+ e_config->ping_clients_interval,
+ _e_border_cb_ping_poller, bd);
}
EAPI void
ecore_timer_del(bd->kill_timer);
bd->kill_timer = NULL;
}
- if (bd->ping_timer)
+ if (bd->ping_poller)
{
- ecore_timer_del(bd->ping_timer);
- bd->ping_timer = NULL;
+ ecore_poller_del(bd->ping_poller);
+ bd->ping_poller = NULL;
}
while (bd->pending_move_resize)
{
e_border_ping(bd);
else
{
- if (bd->ping_timer) ecore_timer_del(bd->ping_timer);
- bd->ping_timer = NULL;
+ if (bd->ping_poller) ecore_timer_del(bd->ping_poller);
+ bd->ping_poller = NULL;
}
bd->client.icccm.fetch.protocol = 0;
}
if ((bd->shaded) && (!bd->shading))
{
evas_obscured_clear(bd->bg_evas);
- if (0)
- {
- if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
- bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
- bd);
- bd->post_move = 1;
- bd->post_resize = 1;
- }
- else
+// if (0)
+// {
+// if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+// bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
+// bd);
+// bd->post_move = 1;
+// bd->post_resize = 1;
+// }
+// else
{
ecore_x_window_move_resize(bd->win,
bd->x + bd->fx.x,
bd->client_inset.l, bd->client_inset.t,
bd->w - (bd->client_inset.l + bd->client_inset.r),
bd->h - (bd->client_inset.t + bd->client_inset.b));
- if (0)
- {
- if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
- bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
- bd);
- bd->post_move = 1;
- bd->post_resize = 1;
- }
- else
+// if (0)
+// {
+// if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
+// bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
+// bd);
+// bd->post_move = 1;
+// bd->post_resize = 1;
+// }
+// else
{
ecore_x_window_move_resize(bd->win,
bd->x + bd->fx.x,
}
static int
-_e_border_cb_ping_timer(void *data)
+_e_border_cb_ping_poller(void *data)
{
E_Border *bd;
e_border_act_kill_begin(bd);
}
}
- bd->ping_timer = NULL;
+ bd->ping_poller = NULL;
e_border_ping(bd);
return 0;
}
unsigned int layer;
E_Action *cur_mouse_action;
Ecore_Timer *raise_timer;
- Ecore_Timer *ping_timer;
+ Ecore_Timer *ping_poller;
Ecore_Timer *kill_timer;
int shape_rects_num;
Ecore_X_Rectangle *shape_rects;
/* local subsystem globals */
static Evas_List *_e_canvases = NULL;
-static Ecore_Timer *_e_canvas_cache_flush_timer = NULL;
+static Ecore_Poller *_e_canvas_cache_flush_poller = NULL;
/* externally accessible functions */
EAPI void
}
edje_file_cache_set(e_config->edje_cache);
edje_collection_cache_set(e_config->edje_collection_cache);
- if (_e_canvas_cache_flush_timer)
+ if (_e_canvas_cache_flush_poller)
{
- ecore_timer_del(_e_canvas_cache_flush_timer);
- _e_canvas_cache_flush_timer = NULL;
+ ecore_poller_del(_e_canvas_cache_flush_poller);
+ _e_canvas_cache_flush_poller = NULL;
}
- if (e_config->cache_flush_interval > 0.0)
+ if (e_config->cache_flush_poll_interval > 0)
{
- _e_canvas_cache_flush_timer =
- ecore_timer_add(e_config->cache_flush_interval, _e_canvas_cb_flush,
- NULL);
+ _e_canvas_cache_flush_poller =
+ ecore_poller_add(ECORE_POLLER_CORE,
+ e_config->cache_flush_poll_interval,
+ _e_canvas_cb_flush, NULL);
}
}
}
edje_file_cache_flush();
edje_collection_cache_flush();
+ printf("...caches flushed.\n");
}
EAPI void
}
EAPI void
+e_canvas_idle_flush(void)
+{
+ Evas_List *l;
+
+ for (l = _e_canvases; l; l = l->next)
+ {
+ Ecore_Evas *ee;
+ Evas *e;
+
+ ee = l->data;
+ e = ecore_evas_get(ee);
+ evas_render_idle_flush(e);
+ }
+}
+
+EAPI void
e_canvas_rehint(void)
{
Evas_List *l;
EAPI void e_canvas_recache(void);
EAPI void e_canvas_cache_flush(void);
EAPI void e_canvas_cache_reload(void);
+EAPI void e_canvas_idle_flush(void);
EAPI void e_canvas_rehint(void);
EAPI Ecore_Evas *e_canvas_new(int engine_hint, Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret, Ecore_X_Window *subwin_ret);
EAPI E_Config *e_config = NULL;
/* local subsystem functions */
-static int _e_config_save_cb(void *data);
+static void _e_config_save_cb(void *data);
static void _e_config_free(void);
static int _e_config_cb_timer(void *data);
static int _e_config_eet_close_handle(Eet_File *ef, char *file);
/* local subsystem globals */
static int _e_config_save_block = 0;
-static Ecore_Timer *_e_config_save_timer = NULL;
+static E_Powersave_Deferred_Action *_e_config_save_defer = NULL;
static char *_e_config_profile = NULL;
static E_Config_DD *_e_config_edd = NULL;
}
else
_e_config_profile = strdup("default");
+ e_util_env_set("E_CONF_PROFILE", _e_config_profile);
}
else
_e_config_profile = strdup(_e_config_profile);
E_CONFIG_VAL(D, T, font_cache, INT); /**/
E_CONFIG_VAL(D, T, edje_cache, INT); /**/
E_CONFIG_VAL(D, T, edje_collection_cache, INT); /**/
- E_CONFIG_VAL(D, T, cache_flush_interval, DOUBLE); /**/
E_CONFIG_VAL(D, T, zone_desks_x_count, INT); /**/
E_CONFIG_VAL(D, T, zone_desks_y_count, INT); /**/
E_CONFIG_VAL(D, T, use_virtual_roots, INT); /* should not make this a config option (for now) */
E_CONFIG_VAL(D, T, kill_process, INT); /**/
E_CONFIG_VAL(D, T, kill_timer_wait, DOUBLE); /**/
E_CONFIG_VAL(D, T, ping_clients, INT); /**/
- E_CONFIG_VAL(D, T, ping_clients_wait, DOUBLE); /**/
E_CONFIG_VAL(D, T, transition_start, STR); /**/
E_CONFIG_VAL(D, T, transition_desk, STR); /**/
E_CONFIG_VAL(D, T, transition_change, STR); /**/
E_CONFIG_VAL(D, T, menu_favorites_show, INT);
E_CONFIG_VAL(D, T, menu_apps_show, INT);
+ E_CONFIG_VAL(D, T, ping_clients_interval, INT);
+ E_CONFIG_VAL(D, T, cache_flush_poll_interval, INT);
+
e_config = e_config_domain_load("e", _e_config_edd);
if (e_config)
{
e_config->font_cache = 512;
e_config->edje_cache = 32;
e_config->edje_collection_cache = 64;
- e_config->cache_flush_interval = 60.0;
e_config->zone_desks_x_count = 4;
e_config->zone_desks_y_count = 1;
e_config->use_virtual_roots = 0;
e_config->kill_process = 1;
e_config->kill_timer_wait = 10.0;
e_config->ping_clients = 1;
- e_config->ping_clients_wait = 10.0;
e_config->transition_start = NULL;
e_config->transition_desk = evas_stringshare_add("vswipe");
e_config->transition_change = evas_stringshare_add("crossfade");
e_config->show_desktop_icons = 1;
IFCFGEND;
+ IFCFG(0x0123);
+ e_config->ping_clients_interval = 128;
+ e_config->cache_flush_poll_interval = 512;
+ IFCFGEND;
+
e_config->config_version = E_CONFIG_FILE_VERSION;
#if 0 /* example of new config */
E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
E_CONFIG_LIMIT(e_config->edje_cache, 0, 256);
E_CONFIG_LIMIT(e_config->edje_collection_cache, 0, 512);
- E_CONFIG_LIMIT(e_config->cache_flush_interval, 0.0, 600.0);
+ E_CONFIG_LIMIT(e_config->cache_flush_poll_interval, 8, 32768);
E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64);
E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64);
E_CONFIG_LIMIT(e_config->show_desktop_icons, 0, 1);
E_CONFIG_LIMIT(e_config->kill_process, 0, 1);
E_CONFIG_LIMIT(e_config->kill_timer_wait, 0.0, 120.0);
E_CONFIG_LIMIT(e_config->ping_clients, 0, 1);
- E_CONFIG_LIMIT(e_config->ping_clients_wait, 0.0, 120.0);
E_CONFIG_LIMIT(e_config->move_info_follows, 0, 1);
E_CONFIG_LIMIT(e_config->resize_info_follows, 0, 1);
E_CONFIG_LIMIT(e_config->move_info_visible, 0, 1);
E_CONFIG_LIMIT(e_config->menu_favorites_show, 0, 1);
E_CONFIG_LIMIT(e_config->menu_apps_show, 0, 1);
+
+ E_CONFIG_LIMIT(e_config->ping_clients_interval, 4, 1024);
/* FIXME: disabled auto apply because it causes problems */
e_config->cfgdlg_auto_apply = 0;
EAPI int
e_config_save(void)
{
- if (_e_config_save_timer)
+ if (_e_config_save_defer)
{
- ecore_timer_del(_e_config_save_timer);
- _e_config_save_timer = NULL;
+ e_powersave_deferred_action_del(_e_config_save_defer);
+ _e_config_save_defer = NULL;
}
_e_config_save_cb(NULL);
return e_config_domain_save("e", _e_config_edd, e_config);
EAPI void
e_config_save_flush(void)
{
- if (_e_config_save_timer)
+ if (_e_config_save_defer)
{
- ecore_timer_del(_e_config_save_timer);
- _e_config_save_timer = NULL;
+ e_powersave_deferred_action_del(_e_config_save_defer);
+ _e_config_save_defer = NULL;
_e_config_save_cb(NULL);
}
}
EAPI void
e_config_save_queue(void)
{
- if (_e_config_save_timer) ecore_timer_del(_e_config_save_timer);
- _e_config_save_timer = ecore_timer_add(0.25, _e_config_save_cb, NULL);
+ if (_e_config_save_defer)
+ e_powersave_deferred_action_del(_e_config_save_defer);
+ _e_config_save_defer = e_powersave_deferred_action_add(_e_config_save_cb,
+ NULL);
}
EAPI char *
{
E_FREE(_e_config_profile);
_e_config_profile = strdup(prof);
+ e_util_env_set("E_CONF_PROFILE", _e_config_profile);
}
EAPI Evas_List *
}
/* local subsystem functions */
-static int
+static void
_e_config_save_cb(void *data)
{
e_config_profile_save();
e_module_save_all();
e_config_domain_save("e", _e_config_edd, e_config);
- _e_config_save_timer = NULL;
- return 0;
+ _e_config_save_defer = NULL;
}
static void
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
-#define E_CONFIG_FILE_GENERATION 0x0122
+#define E_CONFIG_FILE_GENERATION 0x0123
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
int font_cache; // GUI
int edje_cache; // GUI
int edje_collection_cache; // GUI
- double cache_flush_interval; // GUI
int zone_desks_x_count; // GUI
int zone_desks_y_count; // GUI
int use_virtual_roots; // NO GUI - maybe remove?
int kill_process;
double kill_timer_wait;
int ping_clients;
- double ping_clients_wait;
const char *transition_start; // GUI
const char *transition_desk; // GUI
const char *transition_change; // GUI
int desk_auto_switch; // GUI;
int thumb_nice;
+
+ int ping_clients_interval;
+ int cache_flush_poll_interval; // GUI
};
struct _E_Config_Module
#endif
static Ecore_Exe *_e_custom_desklock_exe = NULL;
static Ecore_Event_Handler *_e_custom_desklock_exe_handler = NULL;
-static Ecore_Timer *_e_desklock_idle_timer = NULL;
+static Ecore_Poller *_e_desklock_idle_poller = NULL;
static int _e_desklock_user_idle = 0;
/***********************************************************************/
static int _e_desklock_cb_mouse_wheel(void *data, int type, void *event);
static int _e_desklock_cb_mouse_move(void *data, int type, void *event);
static int _e_desklock_cb_custom_desklock_exit(void *data, int type, void *event);
-static int _e_desklock_cb_idle_timer(void *data);
+static int _e_desklock_cb_idle_poller(void *data);
static void _e_desklock_passwd_update(void);
static void _e_desklock_backspace(void);
EAPI int
e_desklock_init(void)
{
- /* A timer to tick every second, watching for an idle user */
- _e_desklock_idle_timer = ecore_timer_add(1.0,
- _e_desklock_cb_idle_timer, NULL);
+ /* A poller to tick every 256 ticks, watching for an idle user */
+ _e_desklock_idle_poller = ecore_poller_add(ECORE_POLLER_CORE, 256,
+ _e_desklock_cb_idle_poller, NULL);
if (e_config->desklock_background)
e_filereg_register(e_config->desklock_background);
}
static int
-_e_desklock_cb_idle_timer(void *data)
+_e_desklock_cb_idle_poller(void *data)
{
if (e_config->desklock_autolock_idle)
{
_e_desklock_user_idle = 0;
}
- /* Make sure our timer persists. */
+ /* Make sure our poller persists. */
return 1;
}
*/
#include "e.h"
-/* currently default bind is alt+` buf alt+space has been suggested */
-
/* local subsystem functions */
typedef struct _E_Exehist E_Exehist;
typedef struct _E_Exehist_Item E_Exehist_Item;
static void _e_exehist_clear(void);
static void _e_exehist_unload(void);
static void _e_exehist_limit(void);
-static int _e_exehist_cb_unload(void *data);
+static void _e_exehist_cb_unload(void *data);
/* local subsystem globals */
static E_Config_DD *_e_exehist_config_edd = NULL;
static E_Config_DD *_e_exehist_config_item_edd = NULL;
static E_Exehist *_e_exehist = NULL;
-static Ecore_Timer *_e_exehist_unload_timer = NULL;
+static E_Powersave_Deferred_Action *_e_exehist_unload_defer = NULL;
+static int _e_exehist_changes = 0;
/* externally accessible functions */
EAPI int
EAPI int
e_exehist_shutdown(void)
{
- _e_exehist_unload();
+ if (_e_exehist_unload_defer)
+ {
+ e_powersave_deferred_action_del(_e_exehist_unload_defer);
+ _e_exehist_unload_defer = NULL;
+ }
+ _e_exehist_cb_unload(NULL);
E_CONFIG_DD_FREE(_e_exehist_config_item_edd);
E_CONFIG_DD_FREE(_e_exehist_config_edd);
return 1;
ei->exetime = ecore_time_get();
_e_exehist->history = evas_list_append(_e_exehist->history, ei);
_e_exehist_limit();
- e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
+ _e_exehist_changes++;
_e_exehist_unload_queue();
}
_e_exehist_load();
if (!_e_exehist) return;
_e_exehist_clear();
- e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
+ _e_exehist_changes++;
_e_exehist_unload_queue();
}
ei = l->data;
if ((ei->exe) && (!strcmp(exe, ei->exe))) count++;
}
+ _e_exehist_unload_queue();
return count;
}
E_Exehist_Item *ei;
ei = l->data;
- if ((ei->exe) && (!strcmp(exe, ei->exe))) return ei->exetime;
+ if ((ei->exe) && (!strcmp(exe, ei->exe)))
+ {
+ _e_exehist_unload_queue();
+ }
+ return ei->exetime;
}
+ _e_exehist_unload_queue();
return 0.0;
}
}
if (count > max) break;
}
+ _e_exehist_unload_queue();
return list;
}
if (ei->launch_method) evas_stringshare_del(ei->launch_method);
free(ei);
_e_exehist->mimes = evas_list_remove_list(_e_exehist->mimes, l);
+ _e_exehist_changes++;
break;
}
}
ei->exetime = ecore_time_get();
_e_exehist->mimes = evas_list_append(_e_exehist->mimes, ei);
_e_exehist_limit();
- e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
+ _e_exehist_changes++;
_e_exehist_unload_queue();
}
static void
_e_exehist_unload_queue(void)
{
- if (_e_exehist_unload_timer) ecore_timer_del(_e_exehist_unload_timer);
- _e_exehist_unload_timer = ecore_timer_add(2.0, _e_exehist_cb_unload, NULL);
+ if (_e_exehist_unload_defer)
+ e_powersave_deferred_action_del(_e_exehist_unload_defer);
+ _e_exehist_unload_defer =
+ e_powersave_deferred_action_add(_e_exehist_cb_unload, NULL);
}
static void
}
}
-static int
+static void
_e_exehist_cb_unload(void *data)
{
+ if (_e_exehist_changes)
+ {
+ e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
+ _e_exehist_changes = 0;
+ }
_e_exehist_unload();
- _e_exehist_unload_timer = NULL;
- return 0;
+ _e_exehist_unload_defer = NULL;
}
static void _e_fm2_custom_file_info_load(void);
static void _e_fm2_custom_file_info_save(void);
static void _e_fm2_custom_file_info_free(void);
-static int _e_fm2_custom_file_cb_timer_save(void *data);
+static void _e_fm2_custom_file_cb_defer_save(void *data);
-static Ecore_Timer *_e_fm2_flush_timer = NULL;
+static E_Powersave_Deferred_Action*_e_fm2_flush_defer = NULL;
static Eet_File *_e_fm2_custom_file = NULL;
static Eet_Data_Descriptor *_e_fm2_custom_file_edd = NULL;
static Evas_Hash *_e_fm2_custom_hash = NULL;
{
_e_fm2_custom_file_info_save();
_e_fm2_custom_file_info_free();
- if (_e_fm2_flush_timer) ecore_timer_del(_e_fm2_flush_timer);
- _e_fm2_flush_timer = NULL;
+ if (_e_fm2_flush_defer) e_powersave_deferred_action_del(_e_fm2_flush_defer);
+ _e_fm2_flush_defer = NULL;
eet_data_descriptor_free(_e_fm2_custom_file_edd);
_e_fm2_custom_file_edd = NULL;
}
_e_fm2_custom_file_info_load();
if (!_e_fm2_custom_file) return NULL;
- if (_e_fm2_flush_timer) e_fm2_custom_file_flush();
+ if (_e_fm2_flush_defer) e_fm2_custom_file_flush();
cf = evas_hash_find(_e_fm2_custom_hash, path);
return cf;
}
{
_e_fm2_custom_file_info_load();
if (!_e_fm2_custom_file) return;
- if (_e_fm2_flush_timer) e_fm2_custom_file_flush();
+ if (_e_fm2_flush_defer) e_fm2_custom_file_flush();
if (evas_hash_find(_e_fm2_custom_hash, path) != cf)
{
E_Fm2_Custom_File *cf2;
_e_fm2_custom_file_info_load();
if (!_e_fm2_custom_file) return;
- if (_e_fm2_flush_timer) e_fm2_custom_file_flush();
+ if (_e_fm2_flush_defer) e_fm2_custom_file_flush();
list = _e_fm2_custom_hash_key_base_list(_e_fm2_custom_hash, path);
if (list)
_e_fm2_custom_file_info_load();
if (!_e_fm2_custom_file) return;
- if (_e_fm2_flush_timer) e_fm2_custom_file_flush();
+ if (_e_fm2_flush_defer) e_fm2_custom_file_flush();
cf2 = evas_hash_find(_e_fm2_custom_hash, path);
if (cf2)
{
e_fm2_custom_file_flush(void)
{
if (!_e_fm2_custom_file) return;
- if (_e_fm2_flush_timer) ecore_timer_del(_e_fm2_flush_timer);
- _e_fm2_flush_timer = ecore_timer_add(1.0, _e_fm2_custom_file_cb_timer_save, NULL);
+
+ if (_e_fm2_flush_defer)
+ e_powersave_deferred_action_del(_e_fm2_flush_defer);
+ _e_fm2_flush_defer =
+ e_powersave_deferred_action_add(_e_fm2_custom_file_cb_defer_save, NULL);
}
/**/
}
}
-static int
-_e_fm2_custom_file_cb_timer_save(void *data)
+static void
+_e_fm2_custom_file_cb_defer_save(void *data)
{
_e_fm2_custom_file_info_save();
_e_fm2_custom_file_info_free();
- _e_fm2_flush_timer = NULL;
- return 0;
+ _e_fm2_flush_defer = NULL;
}
ecore_list_first_goto(ret->strings);
while ((device = ecore_list_next(ret->strings)))
{
-// printf("DB INIT DEV+: %s\n", device);
+ printf("DB INIT DEV+: %s\n", device);
char *udi;
udi = device;
ecore_list_first_goto(ret->strings);
while ((device = ecore_list_next(ret->strings)))
{
-// printf("DB STORE+: %s\n", device);
+ printf("DB STORE+: %s\n", device);
e_storage_add(device);
}
}
ecore_list_first_goto(ret->strings);
while ((device = ecore_list_next(ret->strings)))
{
-// printf("DB VOL+: %s\n", device);
+ printf("DB VOL+: %s\n", device);
e_volume_add(device);
}
}
if (ret && ret->boolean)
{
-// printf("DB STORE IS+: %s\n", udi);
+ printf("DB STORE IS+: %s\n", udi);
e_storage_add(udi);
}
{
char *udi = user_data;
E_Hal_Device_Query_Capability_Return *ret = reply_data;
-
+
if (dbus_error_is_set(error))
{
dbus_error_free(error);
if (ret && ret->boolean)
{
-// printf("DB VOL IS+: %s\n", udi);
+ printf("DB VOL IS+: %s\n", udi);
e_volume_add(udi);
}
dbus_error_init(&err);
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
udi = strdup(udi);
-// printf("DB DEV+: %s\n", udi);
+ printf("DB DEV+: %s\n", udi);
ret = e_hal_device_query_capability(_e_dbus_conn, udi, "storage",
_e_dbus_cb_store_is, strdup(udi));
e_hal_device_query_capability(_e_dbus_conn, udi, "volume",
dbus_message_get_args(msg,
&err, DBUS_TYPE_STRING,
&udi, DBUS_TYPE_INVALID);
-// printf("DB DEV-: %s\n", udi);
+ printf("DB DEV-: %s\n", udi);
e_storage_del(udi);
e_volume_del(udi);
}
&capability, DBUS_TYPE_INVALID);
if (!strcmp(capability, "storage"))
{
-// printf("DB STORE CAP+: %s\n", udi);
+ printf("DB STORE CAP+: %s\n", udi);
e_storage_add(udi);
}
}
}
// printf("MOD %s %3.3f\n", path, ecore_time_get());
lnk = ecore_file_readlink(path);
+ memset(&st, 0, sizeof(struct stat));
if (stat(path, &st) == -1)
{
if ((path[0] == 0) || (lnk)) broken_lnk = 1;
char buf[PATH_MAX], buf2[PATH_MAX], *lnk;
fop = (E_Fop *)data;
+ memset(&st, 0, sizeof(struct stat));
if (!fop->data)
{
fd = calloc(1, sizeof(struct Fop_Data));
cf_gcc = l->data;
if ((cf_gcc->name) && (cc->name) &&
- (!strcmp(cf_gcc->name, cc->name)))
+ (!strcmp(cf_gcc->name, cc->name)) &&
+ (cf_gcc->id) && (cf_gcc->style))
{
E_Gadcon_Client *gcc;
#include "e_msgbus.h"
#include "e_toolbar.h"
#include "e_int_toolbar_config.h"
+#include "e_powersave.h"
E_Menu *all_apps;
E_Menu *desktops;
E_Menu *clients;
+ E_Menu *enlightenment;
E_Menu *config;
E_Menu *lost_clients;
E_Menu *sys;
if (l) _e_int_menus_augmentation_add(m, l);
subm = e_menu_new();
+ dat->enlightenment = subm;
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Enlightenment"));
e_util_menu_item_edje_icon_set(mi, "enlightenment/e");
if (dat->all_apps) e_object_del(E_OBJECT(dat->all_apps));
e_object_del(E_OBJECT(dat->desktops));
e_object_del(E_OBJECT(dat->clients));
+ e_object_del(E_OBJECT(dat->enlightenment));
e_object_del(E_OBJECT(dat->config));
if (dat->lost_clients) e_object_del(E_OBJECT(dat->lost_clients));
e_object_del(E_OBJECT(dat->sys));
static void
_e_int_menus_main_lock(void *data, E_Menu *m, E_Menu_Item *mi)
{
+ /* this is correct - should be after other idle enteres have run - i.e.
+ * after e_menu's idler_enterer has been run */
ecore_idle_enterer_add(_e_int_menus_main_lock_defer_cb, m->zone);
}
#undef HDL
/****************************************************************************/
-#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_SET
-#if (TYPE == E_REMOTE_OPTIONS)
- OP("-cache-flush-interval-set", 1, "Set the cache flush interval (sec) (0.0 = off)", 0, HDL)
-#elif (TYPE == E_REMOTE_OUT)
- REQ_DOUBLE(atof(params[0]), HDL);
-#elif (TYPE == E_WM_IN)
- START_DOUBLE(dbl, HDL);
- e_config->cache_flush_interval = dbl;
- E_CONFIG_LIMIT(e_config->cache_flush_interval, 0.0, 600.0);
- e_canvas_recache();
- SAVE;
- END_DOUBLE;
-#elif (TYPE == E_REMOTE_IN)
-#endif
-#undef HDL
-
-/****************************************************************************/
-#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET
-#if (TYPE == E_REMOTE_OPTIONS)
- OP("-cache-flush-interval-get", 0, "Get the interval between cache flushed (sec)", 1, HDL)
-#elif (TYPE == E_REMOTE_OUT)
- REQ_NULL(HDL);
-#elif (TYPE == E_WM_IN)
- SEND_DOUBLE(e_config->cache_flush_interval, E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY, HDL);
-#elif (TYPE == E_REMOTE_IN)
-#endif
-#undef HDL
-
-/****************************************************************************/
-#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY
-#if (TYPE == E_REMOTE_OPTIONS)
-#elif (TYPE == E_REMOTE_OUT)
-#elif (TYPE == E_WM_IN)
-#elif (TYPE == E_REMOTE_IN)
- START_DOUBLE(fint, HDL);
- printf("REPLY: %3.3f\n", fint);
- END_DOUBLE;
-#endif
-#undef HDL
-
-/****************************************************************************/
#define HDL E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_SET
#if (TYPE == E_REMOTE_OPTIONS)
OP("-menus-fast-move-threshold-set", 1, "Set the mouse speed (pixels/second) that is considered a 'fast move'", 0, HDL)
#undef HDL
/****************************************************************************/
-#define HDL E_IPC_OP_PING_CLIENTS_WAIT_SET
-#if (TYPE == E_REMOTE_OPTIONS)
- OP("-ping-clients-wait-set", 1, "Set client ping interval (0.0-120.0)", 0, HDL)
-#elif (TYPE == E_REMOTE_OUT)
- REQ_DOUBLE(atof(params[0]), HDL);
-#elif (TYPE == E_WM_IN)
- START_DOUBLE(val, HDL);
- e_config->ping_clients_wait = val;
- E_CONFIG_LIMIT(e_config->ping_clients_wait, 0.0, 120.0);
- SAVE;
- END_DOUBLE;
-#elif (TYPE == E_REMOTE_IN)
-#endif
-#undef HDL
-
-/****************************************************************************/
-#define HDL E_IPC_OP_PING_CLIENTS_WAIT_GET
-#if (TYPE == E_REMOTE_OPTIONS)
- OP("-ping-clients-wait-get", 0, "Get client ping interval", 1, HDL)
-#elif (TYPE == E_REMOTE_OUT)
- REQ_NULL(HDL);
-#elif (TYPE == E_WM_IN)
- SEND_DOUBLE(e_config->ping_clients_wait, E_IPC_OP_PING_CLIENTS_WAIT_GET_REPLY, HDL);
-#elif (TYPE == E_REMOTE_IN)
-#endif
-#undef HDL
-
-/****************************************************************************/
-#define HDL E_IPC_OP_PING_CLIENTS_WAIT_GET_REPLY
-#if (TYPE == E_REMOTE_OPTIONS)
-#elif (TYPE == E_REMOTE_OUT)
-#elif (TYPE == E_WM_IN)
-#elif (TYPE == E_REMOTE_IN)
- START_DOUBLE(val, HDL);
- printf("REPLY: %3.3f\n", val);
- END_DOUBLE;
-#endif
-#undef HDL
-
-/****************************************************************************/
#define HDL E_IPC_OP_TRANSITION_START_SET
#if (TYPE == E_REMOTE_OPTIONS)
OP("-transition-start-set", 1, "Get the background transition used when E starts", 0, HDL)
}
/* an idle enterer to be called before all others */
- _e_main_idle_enterer_before = ecore_idle_enterer_add(_e_main_cb_idler_before, NULL);
+ _e_main_idle_enterer_before = ecore_idle_enterer_before_add(_e_main_cb_idler_before, NULL);
TS("x connect");
/* init x */
}
_e_main_shutdown_push(e_order_shutdown);
+ e_init_status_set(_("Set Up Powersave modes"));
+ TS("powersave");
+ if (!e_powersave_init())
+ {
+ e_error_message_show(_("Enlightenment cannot set up its powersave modes."));
+ _e_main_shutdown(-1);
+ }
+ _e_main_shutdown_push(e_powersave_shutdown);
+
TS("add idle enterers");
- /* add in a handler that just before we go idle we flush x */
+ /* add in a handler that just before we go idle we flush x - will happen after ecore_evas's idle rendering as it's after ecore_evas_init() */
_e_main_idle_enterer_flusher = ecore_idle_enterer_add(_e_main_cb_x_flusher, NULL);
e_managers_keys_grab();
starting = 0;
/* start our main loop */
ecore_main_loop_begin();
+
+ e_canvas_idle_flush();
stopping = 1;
/* ask all modules to save their config and then shutdown */
static int _e_menu_cb_mouse_up (void *data, int type, void *event);
static int _e_menu_cb_mouse_move (void *data, int type, void *event);
static int _e_menu_cb_mouse_wheel (void *data, int type, void *event);
-static int _e_menu_cb_scroll_timer (void *data);
+static int _e_menu_cb_scroll_animator (void *data);
static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev);
static void _e_menu_cb_item_submenu_post_default (void *data, E_Menu *m, E_Menu_Item *mi);
static int _e_menu_activate_floating = 0;
static int _e_menu_activate_maybe_drag = 0;
static int _e_menu_activate_dragging = 0;
-static Ecore_Timer *_e_menu_scroll_timer = NULL;
+static Ecore_Animator *_e_menu_scroll_animator = NULL;
static double _e_menu_scroll_start = 0.0;
static int _e_menu_x = 0;
static int _e_menu_y = 0;
_e_menu_autoscroll_x = autoscroll_x;
_e_menu_autoscroll_y = autoscroll_y;
if ((!autoscroll_x) && (!autoscroll_y)) return;
- if (_e_menu_scroll_timer) return;
- _e_menu_scroll_timer = ecore_timer_add(1.0 / 60.0,
- _e_menu_cb_scroll_timer, NULL);
+ if (_e_menu_scroll_animator) return;
+ _e_menu_scroll_animator = ecore_animator_add(_e_menu_cb_scroll_animator,
+ NULL);
_e_menu_scroll_start = ecore_time_get();
}
}
static int
-_e_menu_cb_scroll_timer(void *data)
+_e_menu_cb_scroll_animator(void *data)
{
double t, dt;
double dx, dy;
_e_menu_mouse_autoscroll_check();
if ((_e_menu_autoscroll_x == 0) && (_e_menu_autoscroll_y == 0))
{
- _e_menu_scroll_timer = NULL;
+ _e_menu_scroll_animator = NULL;
return 0;
}
return 1;
if ((*ry + h) > zone->h) *ry = zone->h - h;
if (*ry < 0) *ry = 0;
- printf("0 - PLACE %i %i | %ix%i\n", *rx, *ry, w, h);
+// printf("0 - PLACE %i %i | %ix%i\n", *rx, *ry, w, h);
*rx += zone->x;
*ry += zone->y;
static int _e_pointer_cb_mouse_move(void *data, int type, void *event);
static int _e_pointer_cb_mouse_wheel(void *data, int type, void *event);
static int _e_pointer_cb_idle_timer_pre(void *data);
-static int _e_pointer_cb_idle_timer(void *data);
+static int _e_pointer_cb_idle_timer_wait(void *data);
+static int _e_pointer_cb_idle_poller(void *data);
/* externally accessible functions */
EAPI int
if (p->type) evas_stringshare_del(p->type);
if (p->idle_timer) ecore_timer_del(p->idle_timer);
+ if (p->idle_poller) ecore_poller_del(p->idle_poller);
free(p);
}
/* we got some mouse event - if there was an idle timer emit an active
* signal as we WERE idle, NOW we are active */
if (p->idle_timer) ecore_timer_del(p->idle_timer);
+ if (p->idle_poller)
+ {
+ ecore_poller_del(p->idle_poller);
+ p->idle_poller = NULL;
+ }
if (p->idle)
{
if (p->pointer_object)
ecore_x_pointer_xy_get(p->win, &x, &y);
p->x = x;
p->y = y;
- p->idle_timer = ecore_timer_add(4.0, _e_pointer_cb_idle_timer, p);
+ p->idle_timer = ecore_timer_add(4.0, _e_pointer_cb_idle_timer_wait, p);
+ return 0;
+}
+
+static int
+_e_pointer_cb_idle_timer_wait(void *data)
+{
+ E_Pointer *p;
+
+ p = data;
+ if (!p->idle_poller)
+ p->idle_poller = ecore_poller_add(ECORE_POLLER_CORE, 64,
+ _e_pointer_cb_idle_poller, p);
+ p->idle_timer = NULL;
return 0;
}
static int
-_e_pointer_cb_idle_timer(void *data)
+_e_pointer_cb_idle_poller(void *data)
{
E_Pointer *p;
int x, y;
edje_object_signal_emit(p->pointer_object, "e,state,mouse,active", "e");
p->idle = 0;
}
+ /* use poller to check from now on */
return 1;
}
/* we are idle - report it if not idle before */
edje_object_signal_emit(p->pointer_object, "e,state,mouse,idle", "e");
p->idle = 1;
}
- /* and check again in 4 seconds */
return 1;
}
Ecore_X_Window win;
int w, h;
Ecore_Timer *idle_timer;
+ Ecore_Poller *idle_poller;
int x, y;
const char *type;
pop->zone->x + pop->x, pop->zone->y + pop->y, pop->w, pop->h, 1, 1,
&(pop->evas_win), NULL);
/* avoid excess exposes when shaped - set damage avoid to 1 */
- ecore_evas_avoid_damage_set(pop->ecore_evas, 1);
+// ecore_evas_avoid_damage_set(pop->ecore_evas, 1);
e_canvas_add(pop->ecore_evas);
pop->shape = e_container_shape_add(pop->zone->container);
--- /dev/null
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#include "e.h"
+
+struct _E_Powersave_Deferred_Action
+{
+ void (*func) (void *data);
+ const void *data;
+ unsigned char delete_me : 1;
+};
+
+/* local subsystem functions */
+static int _e_powersave_cb_deferred_timer(void *data);
+static void _e_powersave_mode_eval(void);
+
+/* local subsystem globals */
+static int walking_deferred_actions = 0;
+static Evas_List *deferred_actions = NULL;
+static Ecore_Timer *deferred_timer = NULL;
+static E_Powersave_Mode powersave_mode_min = E_POWERSAVE_MODE_NONE;
+static E_Powersave_Mode powersave_mode_max = E_POWERSAVE_MODE_EXTREME;
+static E_Powersave_Mode powersave_mode = E_POWERSAVE_MODE_LOW;
+static double defer_time = 5.0;
+
+/* externally accessible functions */
+EAPI int
+e_powersave_init(void)
+{
+ _e_powersave_mode_eval();
+ return 1;
+}
+
+EAPI int
+e_powersave_shutdown(void)
+{
+ return 1;
+}
+
+EAPI E_Powersave_Deferred_Action *
+e_powersave_deferred_action_add(void (*func) (void *data), const void *data)
+{
+ E_Powersave_Deferred_Action *pa;
+
+ pa = calloc(1, sizeof(E_Powersave_Deferred_Action));
+ if (!pa) return NULL;
+ if (deferred_timer) ecore_timer_del(deferred_timer);
+ deferred_timer = ecore_timer_add(defer_time,
+ _e_powersave_cb_deferred_timer,
+ NULL);
+ pa->func = func;
+ pa->data = data;
+ deferred_actions = evas_list_append(deferred_actions, pa);
+ return pa;
+}
+
+EAPI void
+e_powersave_deferred_action_del(E_Powersave_Deferred_Action *pa)
+{
+ if (walking_deferred_actions)
+ {
+ pa->delete_me = 1;
+ return;
+ }
+ else
+ {
+ deferred_actions = evas_list_remove(deferred_actions, pa);
+ free(pa);
+ if (!deferred_actions)
+ {
+ if (deferred_timer)
+ {
+ ecore_timer_del(deferred_timer);
+ deferred_timer = NULL;
+ }
+ }
+ }
+}
+
+EAPI void
+e_powersave_mode_min_set(E_Powersave_Mode mode)
+{
+ powersave_mode_min = mode;
+ e_powersave_mode_set(powersave_mode);
+}
+
+EAPI void
+e_powersave_mode_max_set(E_Powersave_Mode mode)
+{
+ powersave_mode_max = mode;
+ e_powersave_mode_set(powersave_mode);
+}
+
+EAPI void
+e_powersave_mode_set(E_Powersave_Mode mode)
+{
+ if (mode < powersave_mode_min) mode = powersave_mode_min;
+ else if (mode > powersave_mode_max) mode = powersave_mode_max;
+ powersave_mode = mode;
+ _e_powersave_mode_eval();
+}
+
+EAPI E_Powersave_Mode
+e_powersave_mode_min_get(void)
+{
+ return powersave_mode_min;
+}
+
+EAPI E_Powersave_Mode
+e_powersave_mode_max_get(void)
+{
+ return powersave_mode_max;
+}
+
+EAPI E_Powersave_Mode
+e_powersave_mode_get(void)
+{
+ return powersave_mode;
+}
+
+/* local subsystem functions */
+
+static int
+_e_powersave_cb_deferred_timer(void *data)
+{
+ walking_deferred_actions++;
+ while (deferred_actions)
+ {
+ E_Powersave_Deferred_Action *pa;
+
+ pa = deferred_actions->data;
+ deferred_actions = evas_list_remove_list(deferred_actions, deferred_actions);
+ if (!pa->delete_me) pa->func((void *)pa->data);
+ free(pa);
+ }
+ walking_deferred_actions--;
+ if (!deferred_actions) deferred_timer = NULL;
+ return 0;
+}
+
+static void
+_e_powersave_mode_eval(void)
+{
+ double t = 0.0;
+
+ switch (powersave_mode)
+ {
+ /* FIXME: these values are hardcoded - shoudl be configurable */
+ case E_POWERSAVE_MODE_NONE:
+ t = 0.25; /* time to defer "power expensive" activities */
+ break;
+ case E_POWERSAVE_MODE_LOW:
+ t = 5.0;
+ break;
+ case E_POWERSAVE_MODE_MEDIUM:
+ t = 60.0;
+ break;
+ case E_POWERSAVE_MODE_HIGH:
+ t = 300.0;
+ break;
+ case E_POWERSAVE_MODE_EXTREME:
+ t = 1200.0;
+ break;
+ default:
+ return;
+ break;
+ }
+ if (t != defer_time)
+ {
+ if (deferred_timer) ecore_timer_del(deferred_timer);
+ deferred_timer = ecore_timer_add(defer_time,
+ _e_powersave_cb_deferred_timer,
+ NULL);
+ }
+}
--- /dev/null
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#ifdef E_TYPEDEFS
+
+typedef enum _E_Powersave_Mode
+{
+ E_POWERSAVE_MODE_NONE,
+ E_POWERSAVE_MODE_LOW,
+ E_POWERSAVE_MODE_MEDIUM,
+ E_POWERSAVE_MODE_HIGH,
+ E_POWERSAVE_MODE_EXTREME
+} E_Powersave_Mode;
+
+typedef struct _E_Powersave_Deferred_Action E_Powersave_Deferred_Action;
+
+#else
+#ifndef E_POWERSAVE_H
+#define E_POWERSAVE_H
+
+EAPI int e_powersave_init(void);
+EAPI int e_powersave_shutdown(void);
+
+EAPI E_Powersave_Deferred_Action *e_powersave_deferred_action_add(void (*func) (void *data), const void *data);
+EAPI void e_powersave_deferred_action_del(E_Powersave_Deferred_Action *pa);
+EAPI void e_powersave_mode_min_set(E_Powersave_Mode mode);
+EAPI void e_powersave_mode_max_set(E_Powersave_Mode mode);
+EAPI void e_powersave_mode_set(E_Powersave_Mode mode);
+EAPI E_Powersave_Mode e_powersave_mode_min_get(void);
+EAPI E_Powersave_Mode e_powersave_mode_max_get(void);
+EAPI E_Powersave_Mode e_powersave_mode_get(void);
+
+/* FIXME: in the powersave system add things like pre-loading entire files
+ * int memory for pre-caching to avoid disk spinup, when in an appropriate
+ * powersave mode */
+
+/* FIXME: in powersave mode also add the ability to reduce framerate when
+ * at a particular powersave mode */
+
+/* FIXME: in powersave mode also add the ability to change screenblanker
+ * preferences when in powersave mode as well as check in the screensaver
+ * has kicked in */
+
+/* FIXME: in powersave mode also if screenblanker has kicked in be able to
+ * auto-suspend etc. etc. */
+
+#endif
+#endif
if (stopping)
e_object_del(obj);
else
- ecore_idle_enterer_add(_e_util_cb_delayed_del, obj);
+ ecore_idle_enterer_before_add(_e_util_cb_delayed_del, obj);
}
EAPI const char *
struct _E_Config_Dialog_Data
{
int show_alert;
- double poll_time;
+ int poll_interval;
int alarm_time;
int alarm_percent;
};
if (!battery_config) return;
cfdata->alarm_time = battery_config->alarm;
cfdata->alarm_percent = battery_config->alarm_p;
- cfdata->poll_time = battery_config->poll_time;
+ cfdata->poll_interval = battery_config->poll_interval;
if (cfdata->alarm_time > 0 || cfdata->alarm_percent > 0)
cfdata->show_alert = 1;
else
ob = e_widget_label_add(evas, _("Check battery every:"));
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.5, 900.0, 0.5, 0, &(cfdata->poll_time), NULL, 200);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0, NULL, &(cfdata->poll_interval), 200);
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
ob = e_widget_check_add(evas, _("Show alert when battery is low"), &(cfdata->show_alert));
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if (!battery_config) return 0;
- battery_config->poll_time = cfdata->poll_time;
+ battery_config->poll_interval = cfdata->poll_interval;
if (cfdata->show_alert)
{
battery_config->alarm = cfdata->alarm_time;
/* Error reading status */
if (battery_config->battery_prev_battery != -2)
edje_object_signal_emit(inst->o_battery, "e,state,unknown", "e");
- edje_object_part_text_set(inst->o_battery, "e.text.reading", _("NO INFO"));
+ edje_object_part_text_set(inst->o_battery, "e.text.reading", _("ERROR"));
edje_object_part_text_set(inst->o_battery, "e.text.time", "--:--");
_battery_face_level_set(inst, (double)(rand() & 0xff) / 255.0);
battery_config->battery_prev_battery = -2;
int level_unknown = 0;
int hours, minutes;
Status *stat;
+ static double last_poll_time = 0.0;
+ double poll_time, t;
stat = E_NEW(Status, 1);
if (!stat) return NULL;
+ t = ecore_time_get();
+ poll_time = t - last_poll_time;
+ last_poll_time = t;
+
/* Read some information on first run. */
bats = ecore_file_ls("/proc/acpi/battery");
if (bats)
}
if ((rate_unknown) && (bat_level != battery_config->battery_prev_level) &&
- (battery_config->battery_prev_level >= 0))
+ (battery_config->battery_prev_level >= 0) && (poll_time > 0.0))
{
bat_drain =
((bat_level - battery_config->battery_prev_level) * 60 * 60) /
- battery_config->poll_time;
+ poll_time;
if (bat_drain < 0) bat_drain = -bat_drain;
if (bat_drain == 0) bat_drain = 1;
rate_unknown = 0;
{
stat->has_battery = 0;
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup(_("NO BAT"));
+ stat->reading = strdup(_("N/A"));
stat->time = strdup("--:--");
stat->level = 1.0;
}
{
stat->has_battery = 0;
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup("NO BAT");
+ stat->reading = strdup("N/A");
stat->time = strdup("--:--");
stat->level = 1.0;
return stat;
{
stat->has_battery = 0;
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup(_("NO BAT"));
+ stat->reading = strdup(_("N/A"));
stat->time = strdup("--:--");
stat->level = 1.0;
}
{
stat->has_battery = 0;
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup(_("NO BAT"));
+ stat->reading = strdup(_("N/A"));
stat->time = strdup("--:--");
stat->level = 1.0;
}
{
stat->has_battery = 0;
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup("NO BAT");
+ stat->reading = strdup("N/A");
stat->time = strdup("--:--");
stat->level = 1.0;
return stat;
CFRelease(sources);
CFRelease(blob);
stat->state = BATTERY_STATE_NONE;
- stat->reading = strdup("NO BAT");
+ stat->reading = strdup("N/A");
stat->time = strdup("--:--");
stat->level = 1.0;
return stat;
_battery_config_updated(void)
{
if (!battery_config) return;
- ecore_timer_del(battery_config->battery_check_timer);
- battery_config->battery_check_timer = ecore_timer_add(battery_config->poll_time,
- _battery_cb_check, NULL);
+ ecore_poller_del(battery_config->battery_check_poller);
+ battery_config->battery_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, battery_config->poll_interval,
+ _battery_cb_check, NULL);
_battery_cb_check(NULL);
}
#undef D
#define T Config
#define D conf_edd
- E_CONFIG_VAL(D, T, poll_time, DOUBLE);
+ E_CONFIG_VAL(D, T, poll_interval, INT);
E_CONFIG_VAL(D, T, alarm, INT);
E_CONFIG_VAL(D, T, alarm_p, INT);
if (!battery_config)
{
battery_config = E_NEW(Config, 1);
- battery_config->poll_time = 30.0;
+ battery_config->poll_interval = 256;
battery_config->alarm = 30;
battery_config->alarm_p = 10;
}
- E_CONFIG_LIMIT(battery_config->poll_time, 0.5, 1000.0);
+ E_CONFIG_LIMIT(battery_config->poll_interval, 1, 1024);
E_CONFIG_LIMIT(battery_config->alarm, 0, 60);
E_CONFIG_LIMIT(battery_config->alarm_p, 0, 100);
battery_config->battery_prev_drain = 1;
battery_config->battery_prev_ac = -1;
battery_config->battery_prev_battery = -1;
- battery_config->battery_check_timer = ecore_timer_add(battery_config->poll_time,
- _battery_cb_check, NULL);
+ battery_config->battery_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, battery_config->poll_interval,
+ _battery_cb_check, NULL);
battery_config->module = m;
e_gadcon_provider_register(&_gadcon_class);
if (battery_config->config_dialog)
e_object_del(E_OBJECT(battery_config->config_dialog));
- if (battery_config->battery_check_timer)
- ecore_timer_del(battery_config->battery_check_timer);
+ if (battery_config->battery_check_poller)
+ ecore_poller_del(battery_config->battery_check_poller);
if (battery_config->menu)
{
e_menu_post_deactivate_callback_set(battery_config->menu, NULL, NULL);
struct _Config
{
/* saved * loaded config values */
- double poll_time;
+ int poll_interval;
int alarm; /* Alarm on minutes remaining */
int alarm_p; /* Alarm on percentage remaining */
/* just config state */
E_Menu *menu;
int alarm_triggered;
int battery_check_mode;
- Ecore_Timer *battery_check_timer;
+ Ecore_Poller *battery_check_poller;
int battery_prev_drain;
int battery_prev_ac;
int battery_prev_battery;
double framerate;
/* Advanced */
- double cache_flush_interval;
+ int cache_flush_poll_interval;
double font_cache;
double image_cache;
int edje_cache;
cfdata->image_cache = ((double)e_config->image_cache / 1024);
cfdata->edje_cache = e_config->edje_cache;
cfdata->edje_collection_cache = e_config->edje_collection_cache;
- cfdata->cache_flush_interval = e_config->cache_flush_interval;
+ cfdata->cache_flush_poll_interval = e_config->cache_flush_poll_interval;
}
static void *
if (cfdata->framerate <= 0.0) cfdata->framerate = 1.0;
e_config->framerate = cfdata->framerate;
edje_frametime_set(1.0 / e_config->framerate);
+ e_canvas_recache();
e_config_save_queue();
return 1;
}
{
if (cfdata->framerate <= 0.0) cfdata->framerate = 1.0;
e_config->framerate = cfdata->framerate;
- e_config->cache_flush_interval = cfdata->cache_flush_interval;
+ e_config->cache_flush_poll_interval = cfdata->cache_flush_poll_interval;
e_config->font_cache = (cfdata->font_cache * 1024);
e_config->image_cache = (cfdata->image_cache * 1024);
e_config->edje_cache = cfdata->edje_cache;
e_config->edje_collection_cache = cfdata->edje_collection_cache;
edje_frametime_set(1.0 / e_config->framerate);
+ e_canvas_recache();
e_config_save_queue();
return 1;
}
of = e_widget_framelist_add(evas, _("General Settings"), 0);
ob = e_widget_label_add(evas, _("Framerate"));
e_widget_framelist_object_append(of, ob);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.0f fps"), 5.0, 200.0, 5.0, 0, &(cfdata->framerate), NULL, 150);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f fps"), 5.0, 240.0, 1.0, 0, &(cfdata->framerate), NULL, 150);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Cache Settings"), 0);
ob = e_widget_label_add(evas, _("Cache Flush Interval"));
e_widget_framelist_object_append(of, ob);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"), 0.0, 600.0, 1.0, 0, &(cfdata->cache_flush_interval), NULL, 150);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 8, 4096, 8, 0, NULL, &(cfdata->cache_flush_poll_interval), 150);
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Size Of Font Cache"));
cpufreq_config->menu_poll = mn;
mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Fast (0.5 sec)"));
+ e_menu_item_label_set(mi, _("Fast (4 ticks)"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
- if (cpufreq_config->poll_time <= 0.5) e_menu_item_toggle_set(mi, 1);
+ if (cpufreq_config->poll_interval <= 4) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _cpufreq_menu_fast, NULL);
mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Medium (1 sec)"));
+ e_menu_item_label_set(mi, _("Medium (8 ticks)"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
- if (cpufreq_config->poll_time > 0.5) e_menu_item_toggle_set(mi, 1);
+ if (cpufreq_config->poll_interval > 4) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _cpufreq_menu_medium, NULL);
mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Normal (2 sec)"));
+ e_menu_item_label_set(mi, _("Normal (32 ticks)"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
- if (cpufreq_config->poll_time >= 2.0) e_menu_item_toggle_set(mi, 1);
+ if (cpufreq_config->poll_interval >= 32) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _cpufreq_menu_normal, NULL);
mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Slow (5 sec)"));
+ e_menu_item_label_set(mi, _("Slow (64 ticks)"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
- if (cpufreq_config->poll_time >= 5.0) e_menu_item_toggle_set(mi, 1);
+ if (cpufreq_config->poll_interval >= 64) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _cpufreq_menu_slow, NULL);
mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Very Slow (30 sec)"));
+ e_menu_item_label_set(mi, _("Very Slow (256 ticks)"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
- if (cpufreq_config->poll_time >= 30.0) e_menu_item_toggle_set(mi, 1);
+ if (cpufreq_config->poll_interval >= 128) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _cpufreq_menu_very_slow, NULL);
if (cpufreq_config->status->governors)
static void
_cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
{
- cpufreq_config->poll_time = 0.5;
- ecore_timer_del(cpufreq_config->frequency_check_timer);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ cpufreq_config->poll_interval = 4;
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
_cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi)
{
- cpufreq_config->poll_time = 1.0;
- ecore_timer_del(cpufreq_config->frequency_check_timer);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ cpufreq_config->poll_interval = 8;
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
_cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi)
{
- cpufreq_config->poll_time = 2.0;
- ecore_timer_del(cpufreq_config->frequency_check_timer);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ cpufreq_config->poll_interval = 32;
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
_cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
- cpufreq_config->poll_time = 5.0;
- ecore_timer_del(cpufreq_config->frequency_check_timer);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ cpufreq_config->poll_interval = 64;
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
_cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
- cpufreq_config->poll_time = 30.0;
- ecore_timer_del(cpufreq_config->frequency_check_timer);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ cpufreq_config->poll_interval = 256;
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE, cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
e_config_save_queue();
}
#undef D
#define T Config
#define D conf_edd
- E_CONFIG_VAL(D, T, poll_time, DOUBLE);
+ E_CONFIG_VAL(D, T, poll_interval, INT);
E_CONFIG_VAL(D, T, restore_governor, INT);
E_CONFIG_VAL(D, T, governor, STR);
if (!cpufreq_config)
{
cpufreq_config = E_NEW(Config, 1);
- cpufreq_config->poll_time = 2.0;
+ cpufreq_config->poll_interval = 32;
cpufreq_config->restore_governor = 0;
cpufreq_config->governor = NULL;
}
- E_CONFIG_LIMIT(cpufreq_config->poll_time, 0.5, 60.0);
+ E_CONFIG_LIMIT(cpufreq_config->poll_interval, 1, 1024);
snprintf(buf, sizeof(buf), "%s/%s/freqset",
e_module_dir_get(m), MODULE_ARCH);
cpufreq_config->set_exe_path = strdup(buf);
- cpufreq_config->frequency_check_timer = ecore_timer_add(cpufreq_config->poll_time,
- _cpufreq_cb_check, NULL);
+ cpufreq_config->frequency_check_poller =
+ ecore_poller_add(ECORE_POLLER_CORE,
+ cpufreq_config->poll_interval,
+ _cpufreq_cb_check, NULL);
cpufreq_config->status = _cpufreq_status_new();
_cpufreq_status_check_available(cpufreq_config->status);
{
e_gadcon_provider_unregister(&_gadcon_class);
- if (cpufreq_config->frequency_check_timer)
- ecore_timer_del(cpufreq_config->frequency_check_timer);
+ if (cpufreq_config->frequency_check_poller)
+ ecore_poller_del(cpufreq_config->frequency_check_poller);
if (cpufreq_config->menu)
{
e_menu_post_deactivate_callback_set(cpufreq_config->menu, NULL, NULL);
struct _Config
{
/* saved * loaded config values */
- double poll_time;
- int restore_governor;
- const char *governor;
+ int poll_interval;
+ int restore_governor;
+ const char *governor;
/* just config state */
- E_Module *module;
- Evas_List *instances;
- E_Menu *menu;
- E_Menu *menu_poll;
- E_Menu *menu_governor;
- E_Menu *menu_frequency;
- Status *status;
- char *set_exe_path;
- Ecore_Timer *frequency_check_timer;
+ E_Module *module;
+ Evas_List *instances;
+ E_Menu *menu;
+ E_Menu *menu_poll;
+ E_Menu *menu_governor;
+ E_Menu *menu_frequency;
+ Status *status;
+ char *set_exe_path;
+ Ecore_Poller *frequency_check_poller;
};
EAPI extern E_Module_Api e_modapi;
#endif
seteuid(-1);
+ return -1;
}
static int
int height;
int act_height;
} popup;
- int drag_resist, flip_desk;
+ int drag_resist, flip_desk, show_desk_names;
struct
{
unsigned int drag, noplace, desk;
cfdata->popup.urgent_show = pager_config->popup_urgent;
cfdata->popup.urgent_stick = pager_config->popup_urgent_stick;
cfdata->popup.urgent_speed = pager_config->popup_urgent_speed;
+ cfdata->show_desk_names = pager_config->show_desk_names;
cfdata->popup.height = pager_config->popup_height;
cfdata->popup.act_height = pager_config->popup_act_height;
cfdata->drag_resist = pager_config->drag_resist;
ow = e_widget_check_add(evas, _("Flip desktop on mouse wheel"),
&(cfdata->flip_desk));
e_widget_framelist_object_append(of, ow);
+ ow = e_widget_check_add(evas, _("Show desktop names"),
+ &(cfdata->show_desk_names));
+ e_widget_framelist_object_append(of, ow);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Popup Settings"), 0);
{
pager_config->popup = cfdata->popup.show;
pager_config->flip_desk = cfdata->flip_desk;
+ pager_config->show_desk_names = cfdata->show_desk_names;
pager_config->popup_urgent = cfdata->popup.urgent_show;
+ /* FIXME: update gui with desk names */
e_config_save_queue();
return 1;
}
ow = e_widget_check_add(evas, _("Flip desktop on mouse wheel"),
&(cfdata->flip_desk));
e_widget_frametable_object_append(of, ow, 0, 0, 2, 1, 1, 0, 1, 0);
+ ow = e_widget_check_add(evas, _("Show desktop names"),
+ &(cfdata->show_desk_names));
+ e_widget_frametable_object_append(of, ow, 0, 1, 2, 1, 1, 0, 1, 0);
ow = e_widget_label_add(evas, _("Select and Slide button"));
- e_widget_frametable_object_append(of, ow, 0, 1, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 0, 2, 1, 1, 1, 0, 1, 0);
ow = e_widget_button_add(evas, _("Click to set"), NULL,
_grab_wnd_show, (void *)BUTTON_DRAG, cfdata);
cfdata->gui.o_btn1 = ow;
- e_widget_frametable_object_append(of, ow, 1, 1, 1, 1, 0, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 1, 2, 1, 1, 0, 0, 1, 0);
ow = e_widget_label_add(evas, _("Drag and Drop button"));
- e_widget_frametable_object_append(of, ow, 0, 2, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 0, 3, 1, 1, 1, 0, 1, 0);
ow = e_widget_button_add(evas, _("Click to set"), NULL,
_grab_wnd_show, (void *)BUTTON_NOPLACE, cfdata);
cfdata->gui.o_btn2 = ow;
- e_widget_frametable_object_append(of, ow, 1, 2, 1, 1, 0, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 1, 3, 1, 1, 0, 0, 1, 0);
ow = e_widget_label_add(evas, _("Drag whole desktop"));
- e_widget_frametable_object_append(of, ow, 0, 3, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 0, 4, 1, 1, 1, 0, 1, 0);
ow = e_widget_button_add(evas, _("Click to set"), NULL,
_grab_wnd_show, (void *)BUTTON_DESK, cfdata);
cfdata->gui.o_btn3 = ow;
- e_widget_frametable_object_append(of, ow, 1, 3, 1, 1, 0, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 1, 4, 1, 1, 0, 0, 1, 0);
_adv_update_btn_lbl(cfdata);
/* TODO find better name */
ow = e_widget_label_add(evas, _("Keyaction popup height"));
- e_widget_frametable_object_append(of, ow, 0, 4, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 0, 5, 1, 1, 1, 0, 1, 0);
ow = e_widget_slider_add(evas, 1, 0, _("%.0f px"), 20.0, 200.0, 1.0, 0, NULL,
&(cfdata->popup.act_height), 100);
- e_widget_frametable_object_append(of, ow, 1, 4, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 1, 5, 1, 1, 1, 0, 1, 0);
ow = e_widget_label_add(evas, _("Resistance to dragging"));
- e_widget_frametable_object_append(of, ow, 0, 5, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 0, 6, 1, 1, 1, 0, 1, 0);
ow = e_widget_slider_add(evas, 1, 0, _("%.0f px"), 0.0, 10.0, 1.0, 0, NULL,
&(cfdata->drag_resist), 100);
- e_widget_frametable_object_append(of, ow, 1, 5, 1, 1, 1, 0, 1, 0);
+ e_widget_frametable_object_append(of, ow, 1, 6, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_frametable_add(evas, _("Popup Settings"), 0);
pager_config->popup_urgent = cfdata->popup.urgent_show;
pager_config->popup_urgent_stick = cfdata->popup.urgent_stick;
pager_config->popup_urgent_speed = cfdata->popup.urgent_speed;
+ pager_config->show_desk_names = cfdata->show_desk_names;
pager_config->popup_height = cfdata->popup.height;
pager_config->popup_act_height = cfdata->popup.act_height;
pager_config->drag_resist = cfdata->drag_resist;
pager_config->btn_drag = cfdata->btn.drag;
pager_config->btn_noplace = cfdata->btn.noplace;
pager_config->btn_desk = cfdata->btn.desk;
+ /* FIXME: update gui with desk names */
e_config_save_queue();
return 1;
}
static int _pager_cb_event_border_stack(void *data, int type, void *event);
static int _pager_cb_event_border_icon_change(void *data, int type, void *event);
static int _pager_cb_event_border_urgent_change(void *data, int type, void *event);
+static int _pager_cb_event_border_focus_in(void *data, int type, void *event);
+static int _pager_cb_event_border_focus_out(void *data, int type, void *event);
static int _pager_cb_event_border_property(void *data, int type, void *event);
static int _pager_cb_event_zone_desk_count_set(void *data, int type, void *event);
static int _pager_cb_event_desk_show(void *data, int type, void *event);
pd->o_desk = o;
e_theme_edje_object_set(o, "base/theme/modules/pager",
"e/modules/pager/desk");
- edje_object_part_text_set(o, "label", desk->name);
+ if (pager_config->show_desk_names)
+ edje_object_part_text_set(o, "e.text.label", desk->name);
e_table_pack(p->o_table, o, xpos, ypos, 1, 1);
e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_desk_cb_mouse_down, pd);
pd->o_layout = o;
e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h);
- edje_object_part_swallow(pd->o_desk, "items", pd->o_layout);
+ edje_object_part_swallow(pd->o_desk, "e.swallow.content", pd->o_layout);
evas_object_show(o);
bl = e_container_border_list_first(desk->zone->container);
{
pw->o_icon = o;
evas_object_show(o);
- edje_object_part_swallow(pw->o_window, "icon", o);
+ edje_object_part_swallow(pw->o_window, "e.swallow.icon", o);
}
if (border->client.icccm.urgent)
pp->o_bg = edje_object_add(pp->popup->evas);
e_theme_edje_object_set(pp->o_bg,
"base/theme/modules/pager",
- "e/widgets/pager/popup");
+ "e/modules/pager/popup");
desk = e_desk_current_get(zone);
if (desk)
- edje_object_part_text_set(pp->o_bg, "text", desk->name);
+ edje_object_part_text_set(pp->o_bg, "e.text.label", desk->name);
evas_object_show(pp->o_bg);
edje_extern_object_min_size_set(pp->pager->o_table, width, height);
- edje_object_part_swallow(pp->o_bg, "pager", pp->pager->o_table);
+ edje_object_part_swallow(pp->o_bg, "e.swallow.content", pp->pager->o_table);
edje_object_size_min_calc(pp->o_bg, &w, &h);
evas_object_move(pp->o_bg, 0, 0);
{
pw->o_icon = o;
evas_object_show(o);
- edje_object_part_swallow(pw->o_window, "icon", o);
+ edje_object_part_swallow(pw->o_window, "e.swallow.icon", o);
}
}
}
}
static int
+_pager_cb_event_border_focus_in(void *data, int type, void *event)
+{
+ E_Event_Border_Focus_In *ev;
+ Evas_List *l, *l2;
+ Pager_Popup *pp;
+ E_Zone *zone;
+
+ ev = event;
+ zone = ev->border->zone;
+
+ for (l = pager_config->instances; l; l = l->next)
+ {
+ Instance *inst;
+
+ inst = l->data;
+ if (inst->pager->zone != zone) continue;
+ for (l2 = inst->pager->desks; l2; l2 = l2->next)
+ {
+ Pager_Desk *pd;
+ Pager_Win *pw;
+
+ pd = l2->data;
+ pw = _pager_desk_window_find(pd, ev->border);
+ if (pw)
+ {
+ edje_object_signal_emit(pw->o_window,
+ "e,state,focused", "e");
+ break;
+ }
+ }
+ }
+
+ pp = _pager_popup_find(zone);
+ if (!pp) return;
+ for (l = pp->pager->desks; l; l = l->next)
+ {
+ Pager_Desk *pd;
+ Pager_Win *pw;
+
+ pd = l->data;
+ pw = _pager_desk_window_find(pd, ev->border);
+ if (pw)
+ {
+ edje_object_signal_emit(pw->o_window,
+ "e,state,focused", "e");
+ break;
+ }
+ }
+ return 1;
+}
+
+static int
+_pager_cb_event_border_focus_out(void *data, int type, void *event)
+{
+ E_Event_Border_Focus_Out *ev;
+ Evas_List *l, *l2;
+ Pager_Popup *pp;
+ E_Zone *zone;
+
+ ev = event;
+ zone = ev->border->zone;
+
+ for (l = pager_config->instances; l; l = l->next)
+ {
+ Instance *inst;
+
+ inst = l->data;
+ if (inst->pager->zone != zone) continue;
+ for (l2 = inst->pager->desks; l2; l2 = l2->next)
+ {
+ Pager_Desk *pd;
+ Pager_Win *pw;
+
+ pd = l2->data;
+ pw = _pager_desk_window_find(pd, ev->border);
+ if (pw)
+ {
+ edje_object_signal_emit(pw->o_window,
+ "e,state,unfocused", "e");
+ break;
+ }
+ }
+ }
+
+ pp = _pager_popup_find(zone);
+ if (!pp) return;
+ for (l = pp->pager->desks; l; l = l->next)
+ {
+ Pager_Desk *pd;
+ Pager_Win *pw;
+
+ pd = l->data;
+ pw = _pager_desk_window_find(pd, ev->border);
+ if (pw)
+ {
+ edje_object_signal_emit(pw->o_window,
+ "e,state,unfocused", "e");
+ break;
+ }
+ }
+ return 1;
+}
+
+static int
_pager_cb_event_border_property(void *data, int type, void *event)
{
E_Event_Border_Property *ev;
_pager_popup_cb_timeout, pp);
pd = _pager_desk_find(pp->pager, ev->desk);
-
- if (pd) _pager_desk_select(pd);
-
- edje_object_part_text_set(pp->o_bg, "text", ev->desk->name);
+ if (pd)
+ {
+ _pager_desk_select(pd);
+ edje_object_part_text_set(pp->o_bg, "e.text.label",
+ ev->desk->name);
+ }
+ ecore_timer_del(pp->timer);
+ pp->timer = ecore_timer_add(pager_config->popup_speed,
+ _pager_popup_cb_timeout, pp);
}
}
return 1;
p = l->data;
if (p->zone != ev->desk->zone) continue;
pd = _pager_desk_find(p, ev->desk);
- if (pd)
- edje_object_part_text_set(pd->o_desk, "label", ev->desk->name);
+ if (pager_config->show_desk_names)
+ {
+ if (pd)
+ edje_object_part_text_set(pd->o_desk, "e.text.label", ev->desk->name);
+ }
}
return 1;
}
if (oo)
{
evas_object_show(oo);
- edje_object_part_swallow(o, "icon", oo);
+ edje_object_part_swallow(o, "e.swallow.icon", oo);
}
e_drag_object_set(drag, o);
/* and redraw is content */
oo = e_layout_add(drag->evas);
e_layout_virtual_size_set(oo, pd->pager->zone->w, pd->pager->zone->h);
- edje_object_part_swallow(o, "items", oo);
+ edje_object_part_swallow(o, "e.swallow.content", oo);
evas_object_show(oo);
for (l = pd->wins; l; l = l->next)
if ((o_icon = e_border_icon_add(pw->border, drag->evas)))
{
evas_object_show(o_icon);
- edje_object_part_swallow(o, "icon", o_icon);
+ edje_object_part_swallow(o, "e.swallow.icon", o_icon);
}
}
e_drag_resize(drag, w, h);
E_CONFIG_VAL(D, T, popup_urgent, UINT);
E_CONFIG_VAL(D, T, popup_urgent_stick, UINT);
E_CONFIG_VAL(D, T, popup_urgent_speed, DOUBLE);
+ E_CONFIG_VAL(D, T, show_desk_names, UINT);
E_CONFIG_VAL(D, T, popup_height, INT);
E_CONFIG_VAL(D, T, popup_act_height, INT);
E_CONFIG_VAL(D, T, drag_resist, UINT);
pager_config->popup_urgent = 0;
pager_config->popup_urgent_stick = 0;
pager_config->popup_urgent_speed = 1.5;
+ pager_config->show_desk_names = 1;
pager_config->popup_height = 60;
pager_config->popup_act_height = 60;
pager_config->drag_resist = 3;
E_CONFIG_LIMIT(pager_config->popup_urgent, 0, 1);
E_CONFIG_LIMIT(pager_config->popup_urgent_stick, 0, 1);
E_CONFIG_LIMIT(pager_config->popup_urgent_speed, 0.1, 10.0);
+ E_CONFIG_LIMIT(pager_config->show_desk_names, 0, 1);
E_CONFIG_LIMIT(pager_config->popup_height, 20, 200);
E_CONFIG_LIMIT(pager_config->popup_act_height, 20, 200);
E_CONFIG_LIMIT(pager_config->drag_resist, 0, 50);
(E_EVENT_BORDER_URGENT_CHANGE, _pager_cb_event_border_urgent_change, NULL));
pager_config->handlers = evas_list_append
(pager_config->handlers, ecore_event_handler_add
+ (E_EVENT_BORDER_FOCUS_IN,
+ _pager_cb_event_border_focus_in, NULL));
+ pager_config->handlers = evas_list_append
+ (pager_config->handlers, ecore_event_handler_add
+ (E_EVENT_BORDER_FOCUS_OUT,
+ _pager_cb_event_border_focus_out, NULL));
+ pager_config->handlers = evas_list_append
+ (pager_config->handlers, ecore_event_handler_add
(E_EVENT_BORDER_PROPERTY, _pager_cb_event_border_property, NULL));
pager_config->handlers = evas_list_append
(pager_config->handlers, ecore_event_handler_add
unsigned int popup_urgent;
unsigned int popup_urgent_stick;
double popup_urgent_speed;
+ unsigned int show_desk_names;
int popup_act_height; /*keyaction popup */
int popup_height; /* urgent/on-deskswitch popup*/
unsigned int drag_resist;
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h
+tempgetdir = $(pkgdir)
+tempget_DATA = \
+tempget$(EXEEXT)
+
+x_mode = a=rx,u+x
+install-data-hook:
+ @chmod $(x_mode) $(DESTDIR)$(tempgetdir)/tempget$(EXEEXT) || true
+
+noinst_PROGRAMS = tempget
+tempget_SOURCES = tempget.c
+tempget_LDFLAGS = @e_libs@
+
uninstall:
rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE)
struct _E_Config_Dialog_Data
{
int poll_method;
- double poll_time;
+ int poll_interval;
int unit_method;
Unit units;
_fill_data(E_Config_Dialog_Data *cfdata)
{
double p;
+ int pi;
Ecore_List *therms;
char *name;
char path[PATH_MAX];
else
cfdata->unit_method = 1;
- p = cfdata->inst->poll_time;
- cfdata->poll_time = p;
- if ((p >= 0) && (p <= 5))
- cfdata->poll_method = 1; /* Fast */
- else if ((p > 5) && (p <= 10))
- cfdata->poll_method = 10; /* Normal */
- else if ((p > 10) && (p <= 30))
- cfdata->poll_method = 30; /* Slow */
- else if (p > 30)
- cfdata->poll_method = 60; /* Very Slow */
+ pi = cfdata->inst->poll_interval;
+ cfdata->poll_interval = pi;
+ if ((pi >= 1) && (pi <= 64))
+ cfdata->poll_method = 4; /* Fast */
+ else if ((pi > 64) && (pi <= 128))
+ cfdata->poll_method = 128; /* Normal */
+ else if ((pi > 128) && (pi <= 256))
+ cfdata->poll_method = 256; /* Slow */
+ else if (pi > 256)
+ cfdata->poll_method = 512; /* Very Slow */
p = cfdata->inst->low;
if (cfdata->units == FAHRENHEIT)
of = e_widget_framelist_add(evas, _("Check Interval"), 0);
rg = e_widget_radio_group_new(&(cfdata->poll_method));
- ob = e_widget_radio_add(evas, _("Fast"), 1, rg);
+ ob = e_widget_radio_add(evas, _("Fast"), 4, rg);
e_widget_framelist_object_append(of, ob);
- ob = e_widget_radio_add(evas, _("Normal"), 10, rg);
+ ob = e_widget_radio_add(evas, _("Normal"), 128, rg);
e_widget_framelist_object_append(of, ob);
- ob = e_widget_radio_add(evas, _("Slow"), 30, rg);
+ ob = e_widget_radio_add(evas, _("Slow"), 256, rg);
e_widget_framelist_object_append(of, ob);
- ob = e_widget_radio_add(evas, _("Very Slow"), 60, rg);
+ ob = e_widget_radio_add(evas, _("Very Slow"), 512, rg);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
cfdata->inst->units = CELCIUS;
else
cfdata->inst->units = FAHRENHEIT;
- cfdata->inst->poll_time = (double)cfdata->poll_method;
+ cfdata->inst->poll_interval = cfdata->poll_method;
if (cfdata->inst->units == FAHRENHEIT)
{
cfdata->inst->low = CEL_2_FAR(cfdata->low_method);
}
of = e_widget_framelist_add(evas, _("Check Interval"), 0);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.5, 1000.0, 0.5, 0, &(cfdata->poll_time), NULL, 200);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0, NULL, &(cfdata->poll_interval), 200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
cfdata->inst->units = CELCIUS;
else
cfdata->inst->units = FAHRENHEIT;
- cfdata->inst->poll_time = cfdata->poll_time;
+ cfdata->inst->poll_interval = cfdata->poll_interval;
cfdata->inst->low = cfdata->low_temp;
cfdata->inst->high = cfdata->high_temp;
if (cfdata->inst->sensor_name)
/**/
/* actual module specifics */
+static int _temperature_cb_exe_data(void *data, int type, void *event);
+static int _temperature_cb_exe_del(void *data, int type, void *event);
static void _temperature_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _temperature_face_cb_post_menu(void *data, E_Menu *m);
-static void _temperature_sensor_init(Config_Face *inst);
-static int _temperature_cb_check(void *data);
static void _temperature_face_level_set(Config_Face *inst, double level);
static void _temperature_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
Evas_Object *o;
E_Gadcon_Client *gcc;
Config_Face *inst;
+ char buf[PATH_MAX];
inst = evas_hash_find(temperature_config->faces, id);
if (!inst)
{
inst = E_NEW(Config_Face, 1);
inst->id = evas_stringshare_add(id);
- inst->poll_time = 10.0;
+ inst->poll_interval = 128;
inst->low = 30;
inst->high = 80;
inst->sensor_type = SENSOR_TYPE_NONE;
inst->sensor_name = NULL;
- inst->sensor_path = NULL;
inst->units = CELCIUS;
temperature_config->faces = evas_hash_direct_add(temperature_config->faces, inst->id, inst);
}
if (!inst->id) evas_stringshare_add(id);
- E_CONFIG_LIMIT(inst->poll_time, 0.5, 1000.0);
+ E_CONFIG_LIMIT(inst->poll_interval, 1, 1024);
E_CONFIG_LIMIT(inst->low, 0, 100);
E_CONFIG_LIMIT(inst->high, 0, 220);
E_CONFIG_LIMIT(inst->units, CELCIUS, FAHRENHEIT);
inst->o_temp = o;
inst->module = temperature_config->module;
inst->have_temp = -1;
- inst->temperature_check_timer =
- ecore_timer_add(inst->poll_time, _temperature_cb_check, inst);
-
+ snprintf(buf, sizeof(buf),
+ "%s/%s/tempget %i \"%s\" %i",
+ e_module_dir_get(temperature_config->module), MODULE_ARCH,
+ inst->sensor_type,
+ (inst->sensor_name != NULL ? inst->sensor_name : "(null)"),
+ inst->poll_interval);
+ inst->tempget_exe = ecore_exe_pipe_run(buf,
+ ECORE_EXE_PIPE_READ |
+ ECORE_EXE_PIPE_READ_LINE_BUFFERED,
+ inst);
+ inst->tempget_data_handler =
+ ecore_event_handler_add(ECORE_EXE_EVENT_DATA,
+ _temperature_cb_exe_data,
+ inst);
+ inst->tempget_del_handler =
+ ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
+ _temperature_cb_exe_del,
+ inst);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_temperature_face_cb_mouse_down, inst);
- _temperature_sensor_init(inst);
- _temperature_cb_check(inst);
return gcc;
}
Config_Face *inst;
inst = gcc->data;
- if (inst->temperature_check_timer) ecore_timer_del(inst->temperature_check_timer);
- inst->temperature_check_timer = NULL;
+ if (inst->tempget_exe)
+ {
+ ecore_exe_terminate(inst->tempget_exe);
+ ecore_exe_free(inst->tempget_exe);
+ inst->tempget_exe = NULL;
+ }
+ if (inst->tempget_data_handler)
+ {
+ ecore_event_handler_del(inst->tempget_data_handler);
+ inst->tempget_data_handler = NULL;
+ }
+ if (inst->tempget_del_handler)
+ {
+ ecore_event_handler_del(inst->tempget_del_handler);
+ inst->tempget_del_handler = NULL;
+ }
if (inst->o_temp) evas_object_del(inst->o_temp);
inst->o_temp = NULL;
if (inst->config_dialog) e_object_del(E_OBJECT(inst->config_dialog));
inst = E_NEW(Config_Face, 1);
inst->id = evas_stringshare_add(id);
- inst->poll_time = 10.0;
+ inst->poll_interval = 128;
inst->low = 30;
inst->high = 80;
inst->sensor_type = SENSOR_TYPE_NONE;
inst->sensor_name = NULL;
- inst->sensor_path = NULL;
inst->units = CELCIUS;
temperature_config->faces = evas_hash_direct_add(temperature_config->faces, inst->id, inst);
return inst->id;
{
temperature_config->faces = evas_hash_del(temperature_config->faces, id, inst);
if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
- if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
free(inst);
}
}
/***************************************************************************/
/**/
+static int
+_temperature_cb_exe_data(void *data, int type, void *event)
+{
+ Ecore_Exe_Event_Data *ev;
+ Config_Face *inst;
+ int temp;
+
+ ev = event;
+ inst = data;
+ if (ev->exe != inst->tempget_exe) return 1;
+ temp = -999;
+ if ((ev->lines) && (ev->lines[0].line))
+ {
+ int i;
+
+ for (i = 0; ev->lines[i].line; i++)
+ {
+ if (!strcmp(ev->lines[i].line, "ERROR"))
+ temp = -999;
+ else
+ temp = atoi(ev->lines[i].line);
+ }
+ }
+ if (temp != -999)
+ {
+ char *utf8;
+ char buf[256];
+
+ if (inst->units == FAHRENHEIT)
+ temp = (temp * 9.0 / 5.0) + 32;
+
+ if (inst->have_temp != 1)
+ {
+ /* enable therm object */
+ edje_object_signal_emit(inst->o_temp, "e,state,known", "");
+ inst->have_temp = 1;
+ }
+
+ if (inst->units == FAHRENHEIT)
+ snprintf(buf, sizeof(buf), "%i°F", temp);
+ else
+ snprintf(buf, sizeof(buf), "%i°C", temp);
+ utf8 = ecore_txt_convert("iso-8859-1", "utf-8", buf);
+
+ _temperature_face_level_set(inst,
+ (double)(temp - inst->low) /
+ (double)(inst->high - inst->low));
+ edje_object_part_text_set(inst->o_temp, "e.text.reading", utf8);
+ free(utf8);
+ }
+ else
+ {
+ if (inst->have_temp != 0)
+ {
+ /* disable therm object */
+ edje_object_signal_emit(inst->o_temp, "e,state,unknown", "");
+ edje_object_part_text_set(inst->o_temp, "e.text.reading", "N/A");
+ _temperature_face_level_set(inst, 0.5);
+ inst->have_temp = 0;
+ }
+ }
+ return 0;
+}
+
+static int
+_temperature_cb_exe_del(void *data, int type, void *event)
+{
+ Ecore_Exe_Event_Del *ev;
+ Config_Face *inst;
+
+ ev = event;
+ inst = data;
+ if (ev->exe != inst->tempget_exe) return 1;
+ inst->tempget_exe = NULL;
+ return 0;
+}
+
static void
_temperature_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
}
static void
-_temperature_sensor_init(Config_Face *inst)
-{
- Ecore_List *therms;
- char path[PATH_MAX];
-#ifdef __FreeBSD__
- int len;
-#endif
-
- if ((!inst->sensor_type) || (!inst->sensor_name))
- {
- if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
- if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
- inst->sensor_path = NULL;
-#ifdef __FreeBSD__
- /* TODO: FreeBSD can also have more temperature sensors! */
- inst->sensor_type = SENSOR_TYPE_FREEBSD;
- inst->sensor_name = evas_stringshare_add("tz0");
-#else
- therms = ecore_file_ls("/proc/acpi/thermal_zone");
- if ((therms) && (!ecore_list_empty_is(therms)))
- {
- char *name;
-
- name = ecore_list_next(therms);
- inst->sensor_type = SENSOR_TYPE_LINUX_ACPI;
- inst->sensor_name = evas_stringshare_add(name);
-
- ecore_list_destroy(therms);
- }
- else
- {
- if (therms) ecore_list_destroy(therms);
-
- if (ecore_file_exists("/proc/omnibook/temperature"))
- {
- inst->sensor_type = SENSOR_TYPE_OMNIBOOK;
- inst->sensor_name = evas_stringshare_add("dummy");
- }
- else if (ecore_file_exists("/sys/devices/temperatures/sensor1_temperature"))
- {
- inst->sensor_type = SENSOR_TYPE_LINUX_PBOOK;
- inst->sensor_name = evas_stringshare_add("dummy");
- }
- else if (ecore_file_exists("/sys/devices/temperatures/cpu_temperature"))
- {
- inst->sensor_type = SENSOR_TYPE_LINUX_MACMINI;
- inst->sensor_name = evas_stringshare_add("dummy");
- }
- else if (ecore_file_exists("/sys/devices/platform/coretemp.0/temp1_input"))
- {
- inst->sensor_type = SENSOR_TYPE_LINUX_INTELCORETEMP;
- inst->sensor_name = evas_stringshare_add("dummy");
- }
- else
- {
- therms = temperature_get_i2c_files();
- if (therms)
- {
- char *name;
-
- if ((name = ecore_list_next(therms)))
- {
- if (ecore_file_exists(name))
- {
- int len;
-
- sprintf(path, "%s", ecore_file_file_get(name));
- len = strlen(path);
- if (len > 6)
- path[len - 6] = '\0';
- inst->sensor_type = SENSOR_TYPE_LINUX_I2C;
- inst->sensor_path = evas_stringshare_add(name);
- inst->sensor_name = evas_stringshare_add(path);
- }
- }
- ecore_list_destroy(therms);
- }
- }
- }
-#endif
- }
- if ((inst->sensor_type) &&
- (inst->sensor_name) &&
- (!inst->sensor_path))
- {
- switch (inst->sensor_type)
- {
- case SENSOR_TYPE_NONE:
- break;
- case SENSOR_TYPE_FREEBSD:
-#ifdef __FreeBSD__
- snprintf(path, sizeof(path), "hw.acpi.thermal.%s.temperature",
- inst->sensor_name);
- inst->sensor_path = evas_stringshare_add(path);
-
- len = 5;
- sysctlnametomib(inst->sensor_path, inst->mib, &len);
-#endif
- break;
- case SENSOR_TYPE_OMNIBOOK:
- inst->sensor_path = evas_stringshare_add("/proc/omnibook/temperature");
- break;
- case SENSOR_TYPE_LINUX_MACMINI:
- inst->sensor_path = evas_stringshare_add("/sys/devices/temperatures/cpu_temperature");
- break;
- case SENSOR_TYPE_LINUX_PBOOK:
- inst->sensor_path = evas_stringshare_add("/sys/devices/temperatures/sensor1_temperature");
- break;
- case SENSOR_TYPE_LINUX_INTELCORETEMP:
- inst->sensor_path = evas_stringshare_add("/sys/devices/platform/coretemp.0/temp1_input");
- break;
- case SENSOR_TYPE_LINUX_I2C:
- therms = ecore_file_ls("/sys/bus/i2c/devices");
- if (therms)
- {
- char *name;
-
- while ((name = ecore_list_next(therms)))
- {
- sprintf(path, "/sys/bus/i2c/devices/%s/%s_input",
- name, inst->sensor_name);
- if (ecore_file_exists(path))
- {
- inst->sensor_path = evas_stringshare_add(path);
- /* We really only care about the first one for the default. */
- break;
- }
- }
- ecore_list_destroy(therms);
- }
- break;
- case SENSOR_TYPE_LINUX_ACPI:
- snprintf(path, sizeof(path), "/proc/acpi/thermal_zone/%s/temperature",
- inst->sensor_name);
- inst->sensor_path = evas_stringshare_add(path);
- break;
- }
- }
-}
-
-static int
-_temperature_cb_check(void *data)
-{
- FILE *f;
- int ret = 0;
- Config_Face *inst;
- int temp = 0;
- char buf[4096];
-#ifdef __FreeBSD__
- int len;
-#endif
-
- inst = data;
-
- /* TODO: Make standard parser. Seems to be two types of temperature string:
- * - Somename: <temp> C
- * - <temp>
- */
- switch (inst->sensor_type)
- {
- case SENSOR_TYPE_NONE:
- /* TODO: Slow down timer? */
- break;
- case SENSOR_TYPE_FREEBSD:
-#ifdef __FreeBSD__
- len = sizeof(temp);
- if (sysctl(inst->mib, 5, &temp, &len, NULL, 0) != -1)
- {
- temp = (temp - 2732) / 10;
- ret = 1;
- }
- else
- goto error;
-#endif
- break;
- case SENSOR_TYPE_OMNIBOOK:
- f = fopen(inst->sensor_path, "r");
- if (f)
- {
- char dummy[4096];
-
- fgets(buf, sizeof(buf), f); buf[sizeof(buf) - 1] = 0;
- if (sscanf(buf, "%s %s %i", dummy, dummy, &temp) == 3)
- ret = 1;
- else
- goto error;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_MACMINI:
- case SENSOR_TYPE_LINUX_PBOOK:
- f = fopen(inst->sensor_path, "rb");
- if (f)
- {
- fgets(buf, sizeof(buf), f); buf[sizeof(buf) - 1] = 0;
- if (sscanf(buf, "%i", &temp) == 1)
- ret = 1;
- else
- goto error;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_INTELCORETEMP:
- case SENSOR_TYPE_LINUX_I2C:
- f = fopen(inst->sensor_path, "r");
- if (f)
- {
- fgets(buf, sizeof(buf), f);
- buf[sizeof(buf) - 1] = 0;
-
- /* actuallty read the temp */
- if (sscanf(buf, "%i", &temp) == 1)
- ret = 1;
- else
- goto error;
- /* Hack for temp */
- temp = temp / 1000;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_ACPI:
- f = fopen(inst->sensor_path, "r");
- if (f)
- {
- char *p, *q;
- fgets(buf, sizeof(buf), f); buf[sizeof(buf) - 1] = 0;
- fclose(f);
- p = strchr(buf, ':');
- if (p)
- {
- p++;
- while (*p == ' ') p++;
- q = strchr(p, ' ');
- if (q) *q = 0;
- temp = atoi(p);
- ret = 1;
- }
- else
- goto error;
- }
- else
- goto error;
- break;
- }
-
- if (inst->units == FAHRENHEIT)
- temp = (temp * 9.0 / 5.0) + 32;
-
- if (ret)
- {
- char *utf8;
-
- if (inst->have_temp != 1)
- {
- /* enable therm object */
- edje_object_signal_emit(inst->o_temp, "e,state,known", "");
- inst->have_temp = 1;
- }
-
- if (inst->units == FAHRENHEIT)
- snprintf(buf, sizeof(buf), "%i°F", temp);
- else
- snprintf(buf, sizeof(buf), "%i°C", temp);
- utf8 = ecore_txt_convert("iso-8859-1", "utf-8", buf);
-
- _temperature_face_level_set(inst,
- (double)(temp - inst->low) /
- (double)(inst->high - inst->low));
- edje_object_part_text_set(inst->o_temp, "e.text.reading", utf8);
- free(utf8);
- }
- else
- {
- if (inst->have_temp != 0)
- {
- /* disable therm object */
- edje_object_signal_emit(inst->o_temp, "e,state,unknown", "");
- edje_object_part_text_set(inst->o_temp, "e.text.reading", "NO TEMP");
- _temperature_face_level_set(inst, 0.5);
- inst->have_temp = 0;
- }
- }
- return 1;
-
-error:
- /* TODO: Error count? Might be a temporary problem */
- /* TODO: Error dialog */
- /* TODO: This should be further up, so that it will affect the gadcon */
- inst->sensor_type = SENSOR_TYPE_NONE;
- if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
- inst->sensor_name = NULL;
- if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
- inst->sensor_path = NULL;
- return 1;
-}
-
-static void
_temperature_face_level_set(Config_Face *inst, double level)
{
Edje_Message_Float msg;
inst = hdata;
if (inst->sensor_name) evas_stringshare_del(inst->sensor_name);
- if (inst->sensor_path) evas_stringshare_del(inst->sensor_path);
if (inst->id) evas_stringshare_del(inst->id);
free(inst);
return 1;
void
temperature_face_update_config(Config_Face *inst)
{
- if (inst->sensor_path)
- evas_stringshare_del(inst->sensor_path);
- inst->sensor_path = NULL;
-
- _temperature_sensor_init(inst);
-
- if (inst->temperature_check_timer) ecore_timer_del(inst->temperature_check_timer);
- inst->temperature_check_timer =
- ecore_timer_add(inst->poll_time, _temperature_cb_check, inst);
+ char buf[PATH_MAX];
+
+ ecore_exe_terminate(inst->tempget_exe);
+ ecore_exe_free(inst->tempget_exe);
+ inst->tempget_exe = NULL;
+ snprintf(buf, sizeof(buf),
+ "%s/%s/tempget %i \"%s\" %i",
+ e_module_dir_get(temperature_config->module), MODULE_ARCH,
+ inst->sensor_type,
+ (inst->sensor_name != NULL ? inst->sensor_name : "(null)"),
+ inst->poll_interval);
+ inst->tempget_exe = ecore_exe_pipe_run(buf,
+ ECORE_EXE_PIPE_READ |
+ ECORE_EXE_PIPE_READ_LINE_BUFFERED,
+ inst);
}
Ecore_List *
#define T Config_Face
#define D conf_face_edd
E_CONFIG_VAL(D, T, id, STR);
- E_CONFIG_VAL(D, T, poll_time, DOUBLE);
+ E_CONFIG_VAL(D, T, poll_interval, INT);
E_CONFIG_VAL(D, T, low, INT);
E_CONFIG_VAL(D, T, high, INT);
E_CONFIG_VAL(D, T, sensor_type, INT);
{
const char *id;
/* saved * loaded config values */
- double poll_time;
+ int poll_interval;
int low, high;
- Sensor_Type sensor_type;
+ int sensor_type;
const char *sensor_name;
- const char *sensor_path;
Unit units;
/* config state */
E_Gadcon_Client *gcc;
E_Config_Dialog *config_dialog;
E_Menu *menu;
- Ecore_Timer *temperature_check_timer;
+ Ecore_Exe *tempget_exe;
+ Ecore_Event_Handler *tempget_data_handler;
+ Ecore_Event_Handler *tempget_del_handler;
+
+// Ecore_Poller *temperature_check_poller;
unsigned char have_temp;
#ifdef __FreeBSD__
int mib[5];