diff --git a/meson_options.txt b/meson_options.txt index 2f2732b24..016dd8124 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -163,10 +163,6 @@ option('polkit', type: 'boolean', value: true, description: 'enable polkit module: (default=true)') -option('luncher', - type: 'boolean', - value: true, - description: 'enable luncher module: (default=true)') option('mixer', type: 'boolean', value: true, @@ -191,10 +187,6 @@ option('pager', type: 'boolean', value: true, description: 'enable pager module: (default=true)') -option('pager-plain', - type: 'boolean', - value: true, - description: 'enable pager_plain module: (default=true)') option('quickaccess', type: 'boolean', value: true, @@ -211,10 +203,6 @@ option('syscon', type: 'boolean', value: true, description: 'enable syscon module: (default=true)') -option('sysinfo', - type: 'boolean', - value: true, - description: 'enable sysinfo module: (default=true)') option('systray', type: 'boolean', value: true, @@ -223,10 +211,6 @@ option('tasks', type: 'boolean', value: true, description: 'enable tasks module: (default=true)') -option('teamwork', - type: 'boolean', - value: true, - description: 'enable teamwork module: (default=true)') option('temperature', type: 'boolean', value: true, @@ -235,18 +219,10 @@ option('tiling', type: 'boolean', value: true, description: 'enable tiling module: (default=true)') -option('time', - type: 'boolean', - value: true, - description: 'enable time module: (default=true)') option('winlist', type: 'boolean', value: true, description: 'enable winlist module: (default=true)') -option('wireless', - type: 'boolean', - value: true, - description: 'enable wireless module: (default=true)') option('wizard', type: 'boolean', value: true, diff --git a/src/bin/e_bryce.c b/src/bin/e_bryce.c deleted file mode 100644 index e242686d2..000000000 --- a/src/bin/e_bryce.c +++ /dev/null @@ -1,1488 +0,0 @@ -#include "e.h" - -#define DEFAULT_LAYER E_LAYER_CLIENT_ABOVE -#define E_BRYCE_TYPE 0xE31338 - -static unsigned int bryce_version = 2; - -typedef struct Bryce -{ - E_Object *e_obj_inherit; - Eina_Stringshare *name; - - Evas_Object *bryce; - Evas_Object *events; - Evas_Object *layout; - Evas_Object *site; - Evas_Object *scroller; - Evas_Object *autohide_event; - Eina_List *zone_obstacles; - Eina_List *spacers; - - Evas_Object *parent; //comp_object is not an elm widget - Eina_Stringshare *style; - int size; - int x, y; - int last_w, last_h; - int autohide_size; - E_Layer layer; - unsigned int zone; - E_Gadget_Site_Orient orient; - E_Gadget_Site_Anchor anchor; - - Ecore_Job *calc_job; - Ecore_Timer *save_timer; - Ecore_Timer *autohide_timer; - unsigned int autohide_blocked; - Eina_List *popups; - void *event_info; - unsigned int last_timestamp; - - E_Menu *menu; - - /* config: do not bitfield! */ - Eina_Bool autosize; - Eina_Bool autohide; - unsigned int version; - - Eina_Bool hidden E_BITFIELD; - Eina_Bool animating E_BITFIELD; - Eina_Bool mouse_in E_BITFIELD; - Eina_Bool noshadow E_BITFIELD; - Eina_Bool size_changed E_BITFIELD; - Eina_Bool editing E_BITFIELD; -} Bryce; - -typedef struct Bryces -{ - Eina_List *bryces; -} Bryces; - -static E_Config_DD *edd_bryces; -static E_Config_DD *edd_bryce; -static Bryces *bryces; -static E_Action *resize_act; -static Eina_List *handlers; - - -static void _bryce_menu(Bryce *b, Evas_Object *g); - -#define BRYCE_GET(obj) \ - Bryce *b; \ - b = evas_object_data_get((obj), "__bryce"); \ - if (!b) abort() - -static void -_bryce_obstacle_del(void *obs) -{ - Bryce *b = e_object_data_get(obs); - - b->zone_obstacles = eina_list_remove(b->zone_obstacles, obs); -} - -static void -_bryce_autohide_end(void *data, E_Efx_Map_Data *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED) -{ - Bryce *b = data; - - b->animating = 0; -} - -static void -_bryce_autohide_coords(Bryce *b, int *x, int *y) -{ - int ox, oy, ow, oh; - E_Gadget_Site_Anchor an; - - if (b->parent == e_comp->elm) - { - E_Zone *zone; - - zone = e_comp_zone_number_get(b->zone); - ox = zone->x, oy = zone->y, ow = zone->w, oh = zone->h; - } - else - evas_object_geometry_get(b->parent, &ox, &oy, &ow, &oh); - an = e_gadget_site_anchor_get(b->site); - - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - *x = b->x; - - if (an & E_GADGET_SITE_ANCHOR_TOP) - *y = oy - lround(e_scale * b->size) + lround(e_scale * b->autohide_size); - if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - *y = oy + oh - lround(e_scale * b->autohide_size); - } - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - { - *y = b->y; - - if (an & E_GADGET_SITE_ANCHOR_LEFT) - *x = ox - lround(e_scale * b->size) + lround(e_scale * b->autohide_size); - if (an & E_GADGET_SITE_ANCHOR_RIGHT) - *x = ox + ow - lround(e_scale * b->autohide_size); - } -} - -static void -_bryce_position(Bryce *b, int w, int h, int *nx, int *ny) -{ - int ox, oy, ow, oh; - int x, y; - E_Gadget_Site_Anchor an; - - if (b->parent == e_comp->elm) - { - E_Zone *zone; - - zone = e_comp_zone_number_get(b->zone); - ox = zone->x, oy = zone->y, ow = zone->w, oh = zone->h; - if (starting) - { - E_Zone *zone2; - - zone2 = e_comp_object_util_zone_get(b->bryce); - if (zone != zone2) - evas_object_move(b->bryce, ox, oy); - } - } - else - evas_object_geometry_get(b->parent, &ox, &oy, &ow, &oh); - x = ox + (ow - w) / 2; - x = E_CLAMP(x, ox, ox + ow / 2); - y = oy + (oh - h) / 2; - y = E_CLAMP(y, oy, oy + oh / 2); - an = e_gadget_site_anchor_get(b->site); - if (an & E_GADGET_SITE_ANCHOR_LEFT) - x = ox; - if (an & E_GADGET_SITE_ANCHOR_TOP) - y = oy; - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - if (an & E_GADGET_SITE_ANCHOR_RIGHT) - x = ox + ow - w; - if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - y = oy + oh - lround(e_scale * b->size); - if (!b->autosize) - x = ox; - } - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - { - if (an & E_GADGET_SITE_ANCHOR_RIGHT) - x = ox + ow - lround(e_scale * b->size); - if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - y = oy + oh - h; - if (!b->autosize) - y = oy; - } - b->x = x, b->y = y; - if (b->animating) - { - if (b->hidden) - { - _bryce_autohide_coords(b, &x, &y); - e_efx_move(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), 0.5, _bryce_autohide_end, b); - } - else - e_efx_move(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), 0.5, _bryce_autohide_end, b); - } - else if (b->hidden) - _bryce_autohide_coords(b, &x, &y); - - if (nx && ny) - *nx = x, *ny = y; - else - evas_object_move(b->bryce, x, y); -} - -static void -_bryce_autosize(Bryce *b) -{ - int lw, lh, sw, sh, maxw, maxh, x, y, w, h; - - E_FREE_FUNC(b->calc_job, ecore_job_del); - if (!b->autosize) - { - if (b->parent == e_comp->elm) - { - w = e_comp_zone_number_get(b->zone)->w; - if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_zone_useful_geometry_get(e_comp_zone_number_get(b->zone), NULL, NULL, NULL, &h); - else - h = e_comp_zone_number_get(b->zone)->h; - } - else - evas_object_geometry_get(b->parent, NULL, NULL, &w, &h); - if (b->size_changed) - elm_object_content_unset(b->scroller); - _bryce_position(b, w, h, &x, &y); - evas_object_move(b->bryce, x, y); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - e_efx_resize(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), w, lround(b->size * e_scale), 0.1, NULL, NULL); - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_efx_resize(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), lround(b->size * e_scale), h, 0.1, NULL, NULL); - evas_object_smart_need_recalculate_set(b->site, 1); - evas_object_size_hint_min_set(b->site, -1, -1); - if (b->size_changed) - elm_object_content_set(b->scroller, b->site); - b->size_changed = 0; - return; - } - if (b->parent == e_comp->elm) //screen-based bryce - { - E_Zone *zone; - - zone = e_comp_zone_number_get(b->zone); - if (zone) - { - maxw = zone->w; - if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_zone_useful_geometry_get(e_comp_zone_number_get(b->zone), NULL, NULL, NULL, &maxh); - else - maxh = zone->h; - } - else return; - } - else - evas_object_geometry_get(b->parent, NULL, NULL, &maxw, &maxh); - do - { - if (b->size_changed) - { - evas_object_geometry_get(b->bryce, NULL, NULL, &w, &h); - elm_object_content_unset(b->scroller); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - if (!h) h = 1; - evas_object_resize(b->bryce, w * lround(b->size * e_scale) / h, lround(b->size * e_scale)); - evas_object_resize(b->site, w * lround(b->size * e_scale) / h, lround(b->size * e_scale)); - } - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - { - if (!w) w = 1; - evas_object_resize(b->bryce, lround(b->size * e_scale), h * lround(b->size * e_scale) / w); - evas_object_resize(b->site, lround(b->size * e_scale), h * lround(b->size * e_scale) / w); - } - evas_object_smart_need_recalculate_set(b->site, 1); - evas_object_size_hint_min_set(b->site, -1, -1); - evas_object_smart_calculate(b->site); - elm_object_content_set(b->scroller, b->site); - } - evas_object_size_hint_min_get(b->site, &sw, &sh); - if ((!sw) && (!sh)) b->size_changed = 1; - } - while ((!sw) && (!sh)); - edje_object_size_min_calc(elm_layout_edje_get(b->layout), &lw, &lh); - _bryce_position(b, lw + sw, lh + sh, &x, &y); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - w = MIN(MAX(lw + sw, lround(b->size * e_scale)), maxw), h = lround(b->size * e_scale); - else if (b->orient == E_GADGET_SITE_ORIENT_VERTICAL) - w = lround(b->size * e_scale), h = MIN(MAX(lh + sh, lround(b->size * e_scale)), maxh); - evas_object_move(b->bryce, x, y); - e_efx_resize(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), w, h, 0.1, NULL, NULL); - b->size_changed = 0; -} - -static Eina_Bool -_bryce_autohide_timeout(Bryce *b) -{ - int x = 0, y = 0; - - b->autohide_timer = NULL; - b->hidden = b->animating = 1; - _bryce_autohide_coords(b, &x, &y); - e_efx_move(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(x, y), 0.5, _bryce_autohide_end, b); - return EINA_FALSE; -} - -static void -_bryce_autohide_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - int x, y, w, h; - - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_geometry_set(b->autohide_event, x, y, w, h); -} - -static void -_bryce_autohide_show(Bryce *b) -{ - E_FREE_FUNC(b->autohide_timer, ecore_timer_del); - if (b->animating && (!b->hidden)) return; - e_efx_move(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(b->x, b->y), 0.5, _bryce_autohide_end, b); - b->animating = 1; - b->hidden = 0; -} - -static void -_bryce_autohide_hide(Bryce *b) -{ - if (b->autohide_blocked) return; - if (b->autohide_timer) - ecore_timer_loop_reset(b->autohide_timer); - else - b->autohide_timer = ecore_timer_loop_add(1.0, (Ecore_Task_Cb)_bryce_autohide_timeout, b); -} - -static void -_bryce_autohide_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - _bryce_autohide_hide(b); - b->mouse_in = 0; -} - -static void -_bryce_autohide_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - b->mouse_in = 1; - _bryce_autohide_show(b); -} - -static void -_bryce_autohide_setup(Bryce *b) -{ - int x, y, w, h; - - if (!b->autohide) return; - b->autohide_event = evas_object_rectangle_add(evas_object_evas_get(b->bryce)); - evas_object_geometry_get(b->bryce, &x, &y, &w, &h); - evas_object_geometry_set(b->autohide_event, x, y, w, h); - evas_object_color_set(b->autohide_event, 0, 0, 0, 0); - evas_object_repeat_events_set(b->autohide_event, 1); - evas_object_layer_set(b->autohide_event, b->layer + 1); - evas_object_show(b->autohide_event); - evas_object_event_callback_add(b->autohide_event, EVAS_CALLBACK_MOUSE_IN, _bryce_autohide_mouse_in, b); - evas_object_event_callback_add(b->autohide_event, EVAS_CALLBACK_MOUSE_OUT, _bryce_autohide_mouse_out, b); - evas_object_event_callback_add(b->bryce, EVAS_CALLBACK_MOVE, _bryce_autohide_moveresize, b); - evas_object_event_callback_add(b->bryce, EVAS_CALLBACK_RESIZE, _bryce_autohide_moveresize, b); - ecore_evas_pointer_xy_get(e_comp->ee, &x, &y); - if (!E_INSIDE(x, y, b->x, b->y, w, h)) - _bryce_autohide_hide(b); -} - -static void -_bryce_style(Evas_Object *site, Eina_Stringshare *name, Evas_Object *g) -{ - Evas_Object *ly, *prev; - char buf[1024]; - - BRYCE_GET(site); - - ly = elm_layout_add(b->site); - snprintf(buf, sizeof(buf), "e/bryce/%s/%s", b->style ?: "default", name ?: "plain"); - if (!e_theme_edje_object_set(ly, NULL, buf)) - { - evas_object_del(ly); - return; - } - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - elm_layout_signal_emit(ly, "e,state,orient,horizontal", "e"); - else - elm_layout_signal_emit(ly, "e,state,orient,vertical", "e"); - edje_object_message_signal_process(elm_layout_edje_get(ly)); - prev = e_gadget_util_layout_style_init(g, ly); - elm_object_part_content_set(ly, "e.swallow.content", g); - evas_object_smart_callback_call(g, "gadget_reparent", ly); - evas_object_del(prev); -} - -static void -_bryce_site_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - int w, h; - - evas_object_size_hint_min_get(obj, &w, &h); - if ((w < 0) || (h < 0)) return; - if (b->autosize && (!b->calc_job)) - b->calc_job = ecore_job_add((Ecore_Cb)_bryce_autosize, b); -} - -static E_Comp_Object_Type -_bryce_shadow_type(const Bryce *b) -{ - if ((b->layer == E_LAYER_DESKTOP_TOP) || b->noshadow) - return E_COMP_OBJECT_TYPE_NONE; - return E_COMP_OBJECT_TYPE_POPUP; -} - -static void -_bryce_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - E_Layer layer; - - layer = evas_object_layer_get(obj); - if (layer > DEFAULT_LAYER) return; - b->layer = layer; - if ((!b->noshadow) && (layer != b->layer)) - e_comp_object_util_type_set(b->bryce, _bryce_shadow_type(b)); -} - -static Eina_Bool -_bryce_moveresize_save(void *data) -{ - Bryce *b = data; - int w, h; - int size; - - b->save_timer = NULL; - evas_object_geometry_get(b->bryce, NULL, NULL, &w, &h); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - size = h; - else - size = w; - size = lround(size / e_scale); - if (b->size == size) return EINA_FALSE; - e_config_save_queue(); - b->size = size; - return EINA_FALSE; -} - -static void -_bryce_zone_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - e_object_del(E_OBJECT(b->e_obj_inherit)); -} - -static void -_bryce_zone_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - if (!b->calc_job) - b->calc_job = ecore_job_add((Ecore_Cb)_bryce_autosize, b); -} - -static void -_bryce_zone_setup(Bryce *b) -{ - Evas_Object *zone_clip; - - zone_clip = evas_object_clip_get(b->bryce); - if (zone_clip) - { - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); - } - zone_clip = e_comp_zone_number_get(b->zone)->bg_clip_object; - evas_object_clip_set(b->bryce, zone_clip); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); -} - -static void -_bryce_rename(Bryce *b, int num) -{ - char buf[1024], buf2[1024], *name, *p; - - name = strdup(b->name); - if (b->version >= 2) - { - p = strrchr(name, '_'); - p[0] = 0; - } - snprintf(buf, sizeof(buf), "__bryce%s", name); - snprintf(buf2, sizeof(buf2), "__bryce%s_%d", name, num); - e_gadget_site_rename(buf, buf2); - if (b->version >= 2) - { - snprintf(buf, sizeof(buf), "%s_%u", name, num); - eina_stringshare_replace(&b->name, buf); - } - free(name); -} - -static void -_bryce_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - int x, y, w, h; - E_Zone *zone; - int size; - - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_geometry_set(b->events, x, y, w, h); - if (b->autohide) - { - E_FREE_LIST(b->zone_obstacles, e_object_del); - return; - } - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - size = h; - else - size = w; - if (((b->orient == E_GADGET_SITE_ORIENT_VERTICAL) && (w != b->last_w)) || - ((b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) && (h != b->last_h))) - { - evas_object_smart_need_recalculate_set(b->site, 1); - evas_object_size_hint_min_set(b->site, -1, -1); - } - b->last_w = w, b->last_h = h; - - if (size && (b->size != size)) - { - if (b->save_timer) - ecore_timer_loop_reset(b->save_timer); - else - b->save_timer = ecore_timer_loop_add(0.5, _bryce_moveresize_save, b); - } - - if (starting) return; - zone = e_comp_object_util_zone_get(obj); - if (zone) - { - Eina_Bool vertical = b->orient == E_GADGET_SITE_ORIENT_VERTICAL; - if (b->zone_obstacles) - { - Eina_List *l; - E_Zone_Obstacle *obs; - - EINA_LIST_FOREACH(b->zone_obstacles, l, obs) - e_zone_obstacle_modify(obs, &(Eina_Rectangle){b->x, b->y, w, h}, vertical); - } - else - { - void *obs; - - obs = e_zone_obstacle_add(e_comp_object_util_zone_get(obj), NULL, - &(Eina_Rectangle){b->x, b->y, w, h}, vertical); - e_object_data_set(obs, b); - E_OBJECT_DEL_SET(obs, _bryce_obstacle_del); - b->zone_obstacles = eina_list_append(b->zone_obstacles, obs); - } - } - else - { - /* determine "closest" zone: - * calculate size of rect between bryce and zone - * smallest rect = closest zone - */ - Eina_List *l; - E_Zone *lz; - size = 0; - - E_FREE_LIST(b->zone_obstacles, e_object_del); - EINA_LIST_FOREACH(e_comp->zones, l, lz) - { - int cw, ch; - - if (x < lz->x) - cw = lz->x + lz->w - x; - else - cw = x + w - lz->x; - if (y < lz->y) - ch = lz->y + lz->h - y; - else - ch = y + h - lz->y; - if (size >= cw * ch) continue; - size = cw * ch; - zone = lz; - } - } - if (!zone) return; - if (b->zone == zone->num) return; - e_config_save_queue(); - _bryce_rename(b, zone->num); - b->zone = zone->num; - _bryce_zone_setup(b); - _bryce_autosize(b); -} - -static void -_bryce_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Bryce *b = data; - Evas_Event_Mouse_Wheel *ev = event_info; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (e_bindings_wheel_evas_event_handle(E_BINDING_CONTEXT_ANY, b->e_obj_inherit, ev)) - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; -} - -static void -_bryce_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - b->autohide_blocked--; - b->popups = eina_list_remove(b->popups, obj); - if (!b->autohide) return; - if (!b->mouse_in) - _bryce_autohide_hide(b); -} - -static void -_bryce_popup(Bryce *b, Evas_Object *popup) -{ - evas_object_event_callback_add(popup, EVAS_CALLBACK_HIDE, _bryce_popup_hide, b); - b->autohide_blocked++; - b->popups = eina_list_append(b->popups, popup); - if (b->autohide) - _bryce_autohide_show(b); -} - -static void -_bryce_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - Evas_Object *p; - Evas_Object *zone_clip; - void *obs; - - if (b->menu) - { - e_menu_deactivate(b->menu); - e_object_del(E_OBJECT(b->menu)); - b->menu = NULL; - } - EINA_LIST_FREE(b->zone_obstacles, obs) - { - E_OBJECT_DEL_SET(obs, NULL); - e_object_del(obs); - } - evas_object_del(b->autohide_event); - E_FREE_FUNC(b->events, evas_object_del); - E_FREE_FUNC(b->calc_job, ecore_job_del); - E_FREE_FUNC(b->autohide_timer, ecore_timer_del); - ecore_timer_del(b->save_timer); - EINA_LIST_FREE(b->popups, p) - evas_object_event_callback_del(p, EVAS_CALLBACK_HIDE, _bryce_popup_hide); - zone_clip = evas_object_clip_get(b->bryce); - if (zone_clip) - { - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); - evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); - } - E_FREE(b->e_obj_inherit); - b->bryce = NULL; - b->site = NULL; -} - -static void -_bryce_object_free(E_Object *eobj) -{ - Bryce *b = e_object_data_get(eobj); - evas_object_hide(b->bryce); - evas_object_del(b->bryce); -} - -static void -_bryce_style_menu(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Bryce *b = data; - char buf[1024]; - - snprintf(buf, sizeof(buf), "e/bryce/%s", b->style ?: "default"); - e_object_data_set(event_info, e_theme_collection_items_find(NULL, buf)); -} - -static void -_bryce_gadgets_menu_close(void *data, Evas_Object *obj) -{ - Bryce *b = data; - - b->autohide_blocked--; - b->editing = 0; - evas_object_layer_set(b->bryce, b->layer); - evas_object_hide(obj); - evas_object_del(obj); - if (b->autohide && (!b->mouse_in)) - _bryce_autohide_hide(b); -} - -static void -_bryce_gadgets_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Bryce *b = data; - Evas_Object *comp_object; - - b->autohide_blocked++; - b->editing = 1; - comp_object = e_gadget_site_edit(b->site); - evas_object_layer_set(b->bryce, E_LAYER_POPUP); - e_comp_object_util_autoclose(comp_object, _bryce_gadgets_menu_close, e_comp_object_util_autoclose_on_escape, b); -} - -static void -_bryce_autosize_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Bryce *b = data; - - e_bryce_autosize_set(b->bryce, !b->autosize); -} - -static void -_bryce_autohide_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Bryce *b = data; - - e_bryce_autohide_set(b->bryce, !b->autohide); -} - -static void -_bryce_remove_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Bryce *b = data; - bryces->bryces = eina_list_remove(bryces->bryces, data); - e_gadget_site_del(b->site); - eina_stringshare_del(b->name); - eina_stringshare_del(b->style); - evas_object_hide(b->bryce); - evas_object_del(b->bryce); - e_config_save_queue(); -} - -static void -_bryce_wizard_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Bryce *b = data; - Evas_Object *editor; - - editor = e_bryce_edit(b->bryce); - _bryce_popup(b, editor); -} - -static void -_bryce_gadget_settings_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Evas_Object *g = data; - e_gadget_configure(g); -} - -static void -_bryce_gadget_remove_menu(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Evas_Object *g = data; - e_gadget_del(g); - e_config_save_queue(); -} - -static void -_bryce_menu_post_cb(void *data, E_Menu *m) -{ - Bryce *b = data; - if (b->menu != m) return; - b->menu = NULL; -} - -static void -_bryce_menu_populate(Bryce *b, E_Menu *m, Evas_Object *g) -{ - E_Menu_Item *mi; - const char *s = NULL; - - if (g) s = e_gadget_type_get(g); - if (s) e_menu_title_set(m, e_gadget_type_get(g)); - else e_menu_title_set(m, _("Gadget Bar")); - - if (g) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Settings")); - e_util_menu_item_theme_icon_set(mi, "preferences-system"); - e_menu_item_callback_set(mi, _bryce_gadget_settings_menu, g); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Delete")); - e_util_menu_item_theme_icon_set(mi, "list-remove"); - e_menu_item_callback_set(mi, _bryce_gadget_remove_menu, g); - - e_gadget_menu_populate(g, m); - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Autosize")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, b->autosize); - e_menu_item_callback_set(mi, _bryce_autosize_menu, b); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Autohide")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, b->autohide); - e_menu_item_callback_set(mi, _bryce_autohide_menu, b); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Bar Settings")); - e_menu_item_callback_set(mi, _bryce_wizard_menu, b); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Add Gadget")); - e_menu_item_callback_set(mi, _bryce_gadgets_menu, b); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Delete Bar")); - e_util_menu_item_theme_icon_set(mi, "list-remove"); - e_menu_item_callback_set(mi, _bryce_remove_menu, b); - - if (b->menu) - { - e_menu_deactivate(b->menu); - e_object_del(E_OBJECT(b->menu)); - } - b->menu = m; - e_menu_post_deactivate_callback_set(m, _bryce_menu_post_cb, b); -} - -static void -_bryce_owner_menu(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Bryce *b = data; - E_Menu_Item *mi = event_info; - E_Menu *subm; - - e_menu_item_label_set(mi, _("Gadget Bar")); - - subm = e_menu_new(); - e_menu_hold_mode_set(subm, EINA_FALSE); - e_menu_item_submenu_set(mi, subm); - e_object_unref(E_OBJECT(subm)); - - _bryce_menu_populate(b, subm, NULL); -} - -static void -_bryce_gadget_popup(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - _bryce_popup(data, event_info); -} - -static void -_bryce_gadget_locked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - b->autohide_blocked++; - if (b->autohide) - _bryce_autohide_show(b); -} - -static void -_bryce_gadget_unlocked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - b->autohide_blocked--; - if (b->autohide && (!b->mouse_in)) - _bryce_autohide_hide(b); -} - -static void -_bryce_site_anchor(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - e_bryce_orient(b->bryce, e_gadget_site_orient_get(obj), e_gadget_site_anchor_get(obj)); -} - -static void -_bryce_gadget_size_request(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Coord_Size *size = event_info; - Bryce *b = data; - - edje_object_part_geometry_get(elm_layout_edje_get(b->layout), "e.swallow.content", NULL, NULL, &size->w, &size->h); -} - -static void -_bryce_context(Evas_Object *site, Evas_Object *g, unsigned int timestamp) -{ - Bryce *b = evas_object_data_get(site, "__bryce"); - if (b) - { - b->last_timestamp = timestamp; - _bryce_menu(b, g); - } -} - -static void -_bryce_context_cancel(Evas_Object *site, Evas_Object *g EINA_UNUSED, unsigned int timestamp) -{ - Bryce *b = evas_object_data_get(site, "__bryce"); - if (b) - { - b->last_timestamp = timestamp; - if (b->menu) - { - e_menu_deactivate(b->menu); - e_object_del(E_OBJECT(b->menu)); - b->menu = NULL; - } - } -} - -static void -_bryce_orient(Bryce *b) -{ - char buf[1024]; - - evas_object_del(b->site); - - snprintf(buf, sizeof(buf), "__bryce%s", b->name); - b->site = e_gadget_site_add(b->orient, buf); - E_EXPAND(b->site); - E_FILL(b->site); - evas_object_data_set(b->site, "__bryce", b); - elm_object_content_set(b->scroller, b->site); - e_gadget_site_owner_setup(b->site, b->anchor, _bryce_style, _bryce_context, _bryce_context_cancel); - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - elm_layout_signal_emit(b->layout, "e,state,orient,horizontal", "e"); - elm_layout_signal_emit(b->scroller, "e,state,orient,horizontal", "e"); - elm_scroller_policy_set(b->scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF); - } - else - { - elm_layout_signal_emit(b->layout, "e,state,orient,vertical", "e"); - elm_layout_signal_emit(b->scroller, "e,state,orient,vertical", "e"); - elm_scroller_policy_set(b->scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - } - evas_object_event_callback_add(b->site, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _bryce_site_hints, b); - evas_object_smart_callback_add(b->site, "gadget_site_anchor", _bryce_site_anchor, b); - evas_object_smart_callback_add(b->site, "gadget_site_style_menu", _bryce_style_menu, b); - evas_object_smart_callback_add(b->site, "gadget_site_owner_menu", _bryce_owner_menu, b); - evas_object_smart_callback_add(b->site, "gadget_site_popup", _bryce_gadget_popup, b); - evas_object_smart_callback_add(b->site, "gadget_site_locked", _bryce_gadget_locked, b); - evas_object_smart_callback_add(b->site, "gadget_site_unlocked", _bryce_gadget_unlocked, b); - evas_object_smart_callback_add(b->site, "gadget_site_parent_size_request", _bryce_gadget_size_request, b); -} - -static void -_bryce_style_apply(Bryce *b) -{ - char buf[1024]; - Eina_Bool noshadow; - - snprintf(buf, sizeof(buf), "e/bryce/%s/base", b->style ?: "default"); - e_theme_edje_object_set(b->layout, NULL, buf); - noshadow = b->noshadow; - b->noshadow = !!elm_layout_data_get(b->layout, "noshadow"); - if (b->bryce && (noshadow != b->noshadow)) - e_comp_object_util_type_set(b->bryce, _bryce_shadow_type(b)); -} - -static void -_bryce_create(Bryce *b, Evas_Object *parent) -{ - Evas_Object *ly, *bryce, *scr; - - b->e_obj_inherit = E_OBJECT_ALLOC(E_Object, E_BRYCE_TYPE, _bryce_object_free); - b->events = evas_object_rectangle_add(e_comp->evas); - evas_object_repeat_events_set(b->events, EINA_TRUE); - evas_object_color_set(b->events, 0, 0, 0, 0); - evas_object_name_set(b->events, "b->events"); - evas_object_show(b->events); - e_object_data_set(b->e_obj_inherit, b); - b->layout = ly = elm_layout_add(parent); - _bryce_style_apply(b); - - b->scroller = scr = elm_scroller_add(ly); - elm_scroller_bounce_set(scr, 0, 0); - elm_object_style_set(scr, "bryce"); - _bryce_orient(b); - elm_object_part_content_set(ly, "e.swallow.content", scr); - evas_object_show(ly); - b->bryce = bryce = e_comp_object_util_add(ly, _bryce_shadow_type(b)); -// evas_object_repeat_events_set(evas_object_smart_parent_get(ly), 1); - evas_object_smart_member_add(b->events, bryce); - evas_object_raise(b->events); - evas_object_data_set(bryce, "comp_skip", (void*)1); - evas_object_layer_set(bryce, b->layer); - evas_object_lower(bryce); - - b->parent = parent; - { - const char *str; - - str = elm_layout_data_get(ly, "hidden_state_size"); - if (str && str[0]) - b->autohide_size = strtol(str, NULL, 10); - } - evas_object_data_set(bryce, "__bryce", b); - evas_object_event_callback_add(bryce, EVAS_CALLBACK_DEL, _bryce_del, b); - evas_object_event_callback_add(bryce, EVAS_CALLBACK_RESTACK, _bryce_restack, b); - evas_object_event_callback_add(bryce, EVAS_CALLBACK_MOVE, _bryce_moveresize, b); - evas_object_event_callback_add(bryce, EVAS_CALLBACK_RESIZE, _bryce_moveresize, b); - evas_object_event_callback_add(b->events, EVAS_CALLBACK_MOUSE_WHEEL, _bryce_mouse_wheel, b); - - _bryce_zone_setup(b); - _bryce_autohide_setup(b); - _bryce_autosize(b); -} - -static Eina_Bool -_bryce_act_resize(E_Object *obj, const char *params, E_Binding_Event_Wheel *ev) -{ - Bryce *b; - int size, step = 4; - char buf[64]; - - if (obj->type != E_BRYCE_TYPE) return EINA_FALSE; - if (params && params[0]) - { - step = strtol(params, NULL, 10); - step = MAX(step, 4); - } - b = e_object_data_get(obj); - size = b->size; - if (ev->z < 0)//up - b->size += step; - else - b->size -= step; - b->size = E_CLAMP(b->size, 20, 256); - if (dblequal(e_scale, 1.0)) - snprintf(buf, sizeof(buf), "%dpx", b->size); - else - snprintf(buf, sizeof(buf), "%dpx (%ldpx scaled)", b->size, lround(b->size * e_scale)); - elm_object_part_text_set(b->layout, "e.text", buf); - elm_object_signal_emit(b->layout, "e,action,resize", "e"); - e_config_save_queue(); - if (size == b->size) return EINA_TRUE; - b->size_changed = 1; - if (!b->calc_job) - b->calc_job = ecore_job_add((Ecore_Cb)_bryce_autosize, b); - return EINA_TRUE; -} - -static void -_bryce_menu(Bryce *b, Evas_Object *g) -{ - E_Menu *m; - int x = 0, y = 0, w = 1, h = 1; - - m = e_menu_new(); - e_menu_hold_mode_set(m, EINA_FALSE); - _bryce_menu_populate(b, m, g); - if (g) - evas_object_geometry_get(g, &x, &y, &w, &h); - else - evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); - e_menu_activate_mouse(m, e_zone_current_get(), x, y, w, h, - E_MENU_POP_DIRECTION_AUTO, b->last_timestamp); - _bryce_popup(b, m->comp_object); -} - -static Eina_Bool -_bryce_zone_useful_geometry_changed(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Zone_Move_Resize *ev) -{ - Eina_List *l; - Bryce *b; - - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (b->bryce && (b->zone == ev->zone->num) && - (b->orient == E_GADGET_SITE_ORIENT_VERTICAL)) - _bryce_autosize(b); - } - return ECORE_CALLBACK_RENEW; -} - -static void -_bryce_comp_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Eina_List *l; - Bryce *b; - - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (e_comp_zone_number_get(b->zone)) - { - if (b->bryce) continue; - _bryce_create(b, e_comp->elm); - evas_object_show(b->bryce); - } - } -} - -E_API Evas_Object * -e_bryce_add(Evas_Object *parent, const char *name, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an) -{ - Bryce *b; - const char *z; - - b = E_NEW(Bryce, 1); - b->size = 48; - b->name = eina_stringshare_add(name); - z = strrchr(name, '_'); - b->zone = strtoul(z + 1, NULL, 10); - b->anchor = an; - b->orient = orient; - b->layer = DEFAULT_LAYER; - b->version = bryce_version; - _bryce_create(b, parent); - bryces->bryces = eina_list_append(bryces->bryces, b); - e_config_save_queue(); - return b->bryce; -} - -E_API void -e_bryce_orient(Evas_Object *bryce, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an) -{ - const char *loc = NULL, *loc2 = NULL; - char buf[1024], buf2[1024]; - - BRYCE_GET(bryce); - if ((b->orient == orient) && (b->anchor == an)) return; - if (an & E_GADGET_SITE_ANCHOR_TOP) - loc = "top"; - else if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - loc = "bottom"; - else if (an & E_GADGET_SITE_ANCHOR_LEFT) - loc = "left"; - else if (an & E_GADGET_SITE_ANCHOR_RIGHT) - loc = "right"; - if (an & E_GADGET_SITE_ANCHOR_RIGHT) - loc2 = "right"; - else if (an & E_GADGET_SITE_ANCHOR_LEFT) - loc2 = "left"; - else if (an & E_GADGET_SITE_ANCHOR_TOP) - loc2 = "top"; - else if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - loc2 = "bottom"; - - snprintf(buf, sizeof(buf), "__bryce%s", b->name); - snprintf(buf2, sizeof(buf2), "__brycebryce_%s_%s_%d", loc, loc2, b->zone); - e_gadget_site_rename(buf, buf2); - b->orient = orient; - b->anchor = an; - snprintf(buf2, sizeof(buf2), "bryce_%s_%s_%d", loc, loc2, b->zone); - eina_stringshare_replace(&b->name, buf2); - _bryce_orient(b); - _bryce_autosize(b); -} - -E_API Evas_Object * -e_bryce_site_get(Evas_Object *bryce) -{ - BRYCE_GET(bryce); - - return b->site; -} - -E_API Eina_Bool -e_bryce_autosize_get(Evas_Object *bryce) -{ - BRYCE_GET(bryce); - return b->autosize; -} - -E_API void -e_bryce_autosize_set(Evas_Object *bryce, Eina_Bool set) -{ - BRYCE_GET(bryce); - set = !!set; - - if (b->autosize == set) return; - b->autosize = set; - if (set) - { - while (b->spacers) - e_gadget_del(eina_list_data_get(b->spacers)); - } - e_config_save_queue(); - _bryce_autosize(b); -} - -E_API Eina_Bool -e_bryce_autohide_get(Evas_Object *bryce) -{ - BRYCE_GET(bryce); - return b->autohide; -} - -E_API void -e_bryce_autohide_set(Evas_Object *bryce, Eina_Bool set) -{ - BRYCE_GET(bryce); - set = !!set; - - if (b->autohide == set) return; - b->autohide = set; - - if (set) - _bryce_autohide_setup(b); - else - { - E_FREE_FUNC(b->autohide_event, evas_object_del); - evas_object_event_callback_del_full(bryce, EVAS_CALLBACK_MOVE, _bryce_autohide_moveresize, b); - evas_object_event_callback_del_full(bryce, EVAS_CALLBACK_RESIZE, _bryce_autohide_moveresize, b); - if (!b->hidden) return; - e_efx_move(b->bryce, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(b->x, b->y), 0.5, _bryce_autohide_end, b); - b->animating = 1; - b->hidden = 0; - } - e_config_save_queue(); -} - -E_API Eina_List * -e_bryce_list(Evas_Object *parent) -{ - Eina_List *l, *ret = NULL; - Bryce *b; - - if (!parent) parent = e_comp->elm; - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (!b->bryce) continue; - if (parent == b->parent) - ret = eina_list_append(ret, b->bryce); - } - return ret; -} - -E_API Eina_Bool -e_bryce_exists(Evas_Object *parent, Evas_Object *bryce, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an) -{ - Eina_List *l; - Bryce *b; - int zone = -1; - - if (!parent) parent = e_comp->elm; - if (parent == e_comp->elm) - { - E_Shelf *es; - E_Zone *z; - - z = e_zone_current_get(); - zone = z->num; - /* FIXME: remove shelf block once shelves are dead */ - l = e_shelf_list_all(); - EINA_LIST_FREE(l, es) - { - if (es->zone != z) continue; - switch (es->cfg->orient) - { -#define ORIENT_CHECK(ORIENT, ANCHOR1, ANCHOR2) \ - if ((orient == E_GADGET_SITE_ORIENT_##ORIENT) && \ - ((an == (E_GADGET_SITE_ANCHOR_##ANCHOR1)) || \ - ((an & E_GADGET_SITE_ANCHOR_##ANCHOR2) && (!es->cfg->fit_along)))) \ - return EINA_TRUE; \ - break - default: break; - case E_GADCON_ORIENT_LEFT: - ORIENT_CHECK(VERTICAL, LEFT, LEFT); - case E_GADCON_ORIENT_RIGHT: - ORIENT_CHECK(VERTICAL, RIGHT, RIGHT); - case E_GADCON_ORIENT_TOP: - ORIENT_CHECK(HORIZONTAL, TOP, TOP); - case E_GADCON_ORIENT_BOTTOM: - ORIENT_CHECK(HORIZONTAL, BOTTOM, BOTTOM); - case E_GADCON_ORIENT_CORNER_TL: - ORIENT_CHECK(HORIZONTAL, TOP | E_GADGET_SITE_ANCHOR_LEFT, TOP); - case E_GADCON_ORIENT_CORNER_TR: - ORIENT_CHECK(HORIZONTAL, TOP | E_GADGET_SITE_ANCHOR_RIGHT, TOP); - case E_GADCON_ORIENT_CORNER_BL: - ORIENT_CHECK(HORIZONTAL, BOTTOM | E_GADGET_SITE_ANCHOR_LEFT, BOTTOM); - case E_GADCON_ORIENT_CORNER_BR: - ORIENT_CHECK(HORIZONTAL, BOTTOM | E_GADGET_SITE_ANCHOR_RIGHT, BOTTOM); - case E_GADCON_ORIENT_CORNER_LT: - ORIENT_CHECK(VERTICAL, LEFT | E_GADGET_SITE_ANCHOR_TOP, LEFT); - case E_GADCON_ORIENT_CORNER_RT: - ORIENT_CHECK(VERTICAL, RIGHT | E_GADGET_SITE_ANCHOR_TOP, RIGHT); - case E_GADCON_ORIENT_CORNER_LB: - ORIENT_CHECK(VERTICAL, LEFT | E_GADGET_SITE_ANCHOR_BOTTOM, LEFT); - case E_GADCON_ORIENT_CORNER_RB: - ORIENT_CHECK(VERTICAL, RIGHT | E_GADGET_SITE_ANCHOR_BOTTOM, RIGHT); -#undef ORIENT_CHECK - } - } - /* end FIXME */ - } - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (!b->bryce) continue; - if (b->bryce == bryce) return EINA_FALSE; - if (parent != b->parent) continue; - if (b->orient != orient) continue; - if ((zone >= 0) && ((int)b->zone != zone)) continue; - if ((b->anchor & an) == an) return EINA_TRUE; - if (b->autosize) continue; - if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - if ((b->anchor & E_GADGET_SITE_ANCHOR_BOTTOM) && (an & E_GADGET_SITE_ANCHOR_BOTTOM)) - return EINA_TRUE; - if ((b->anchor & E_GADGET_SITE_ANCHOR_TOP) && (an & E_GADGET_SITE_ANCHOR_TOP)) - return EINA_TRUE; - } - else - { - if ((b->anchor & E_GADGET_SITE_ANCHOR_LEFT) && (an & E_GADGET_SITE_ANCHOR_LEFT)) - return EINA_TRUE; - if ((b->anchor & E_GADGET_SITE_ANCHOR_RIGHT) && (an & E_GADGET_SITE_ANCHOR_RIGHT)) - return EINA_TRUE; - } - } - return EINA_FALSE; -} - -E_API void -e_bryce_style_set(Evas_Object *bryce, const char *style) -{ - BRYCE_GET(bryce); - - eina_stringshare_replace(&b->style, style); - _bryce_style_apply(b); - e_config_save_queue(); - evas_object_smart_callback_call(b->site, "gadget_site_style", NULL); -} - -/* FIXME */ -EINTERN void -e_bryce_save(void) -{ - e_config_domain_save("e_bryces", edd_bryces, bryces); -} - -static void -bryce_spacer_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - - b->spacers = eina_list_remove(b->spacers, obj); -} - -static Evas_Object * -bryce_spacer_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Bryce *b; - Eina_List *l; - Evas_Object *r; - - if (!orient) return NULL; - - /* only allow on bryces */ - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (b->editing || (parent == b->site)) break; - } - if (!b) return NULL; - if (b->autosize) return NULL; - r = evas_object_rectangle_add(e_comp->evas); - evas_object_event_callback_add(r, EVAS_CALLBACK_DEL, bryce_spacer_del, b); - b->spacers = eina_list_append(b->spacers, r); - E_EXPAND(r); - E_FILL(r); - /* FIXME: this should be better for demo gadgets... */ - if (*id < 0) - { - evas_object_size_hint_aspect_set(r, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - evas_object_color_set(r, 255, 0, 0, 255); - } - else - evas_object_color_set(r, 0, 0, 0, 0); - return r; -} - -EINTERN void -e_bryce_init(void) -{ - resize_act = e_action_add("bryce_resize"); - e_action_predef_name_set(_("Bryces"), _("Resize Gadget Bar"), "bryce_resize", NULL, "syntax: step, example: 4", 1); - resize_act->func.go_wheel = _bryce_act_resize; - - edd_bryce = E_CONFIG_DD_NEW("Bryce", Bryce); - E_CONFIG_VAL(edd_bryce, Bryce, name, STR); - E_CONFIG_VAL(edd_bryce, Bryce, style, STR); - E_CONFIG_VAL(edd_bryce, Bryce, zone, UINT); - E_CONFIG_VAL(edd_bryce, Bryce, size, INT); - E_CONFIG_VAL(edd_bryce, Bryce, layer, UINT); - E_CONFIG_VAL(edd_bryce, Bryce, autosize, UCHAR); - E_CONFIG_VAL(edd_bryce, Bryce, autohide, UCHAR); - E_CONFIG_VAL(edd_bryce, Bryce, orient, UINT); - E_CONFIG_VAL(edd_bryce, Bryce, anchor, UINT); - E_CONFIG_VAL(edd_bryce, Bryce, version, UINT); - - edd_bryces = E_CONFIG_DD_NEW("Bryces", Bryces); - E_CONFIG_LIST(edd_bryces, Bryces, bryces, edd_bryce); - bryces = e_config_domain_load("e_bryces", edd_bryces); - - if (bryces) - { - Eina_List *l; - Bryce *b; - - EINA_LIST_FOREACH(bryces->bryces, l, b) - { - if (b->version < 2) - { - /* I broke this the first time by forgetting the __bryce prefix :( - */ - _bryce_rename(b, b->zone); - if (b->version < 1) - { - char buf[1024]; - - snprintf(buf, sizeof(buf), "%s_%u", b->name, b->zone); - eina_stringshare_replace(&b->name, buf); - } - } - b->version = bryce_version; - if (!e_comp_zone_number_get(b->zone)) continue; - b->layer = E_CLAMP(b->layer, E_LAYER_DESKTOP_TOP, E_LAYER_CLIENT_ABOVE); - _bryce_create(b, e_comp->elm); - evas_object_show(b->bryce); - } - } - else - bryces = E_NEW(Bryces, 1); - - evas_object_event_callback_add(e_comp->canvas->resize_object, EVAS_CALLBACK_RESIZE, _bryce_comp_resize, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_USEFUL_GEOMETRY_CHANGED, _bryce_zone_useful_geometry_changed, NULL); - e_gadget_type_add("Spacer Bar", bryce_spacer_create, NULL); -} - -EINTERN void -e_bryce_shutdown(void) -{ - Bryce *b; - - E_CONFIG_DD_FREE(edd_bryce); - E_CONFIG_DD_FREE(edd_bryces); - EINA_LIST_FREE(bryces->bryces, b) - { - E_Zone *zone; - void *obs; - - EINA_LIST_FREE(b->zone_obstacles, obs) - { - E_OBJECT_DEL_SET(obs, NULL); - e_object_del(obs); - } - evas_object_event_callback_del(b->bryce, EVAS_CALLBACK_DEL, _bryce_del); - EINA_LIST_FREE(b->popups, obs) - evas_object_event_callback_del(obs, EVAS_CALLBACK_HIDE, _bryce_popup_hide); - evas_object_hide(b->bryce); - evas_object_del(b->bryce); - evas_object_del(b->autohide_event); - eina_stringshare_del(b->name); - eina_stringshare_del(b->style); - ecore_job_del(b->calc_job); - ecore_timer_del(b->save_timer); - ecore_timer_del(b->autohide_timer); - zone = e_comp_zone_number_get(b->zone); - if (zone) - { - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_DEL, _bryce_zone_del); - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize); - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize); - } - free(b->e_obj_inherit); - free(b); - } - E_FREE_LIST(handlers, ecore_event_handler_del); - E_FREE(bryces); - e_gadget_type_del("Spacer Bar"); -} diff --git a/src/bin/e_bryce.h b/src/bin/e_bryce.h deleted file mode 100644 index 3f575a2d8..000000000 --- a/src/bin/e_bryce.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef E_TYPEDEFS -#ifndef E_BRYCE_H -# define E_BRYCE_H - -EINTERN void e_bryce_init(void); -EINTERN void e_bryce_shutdown(void); - -E_API Evas_Object *e_bryce_add(Evas_Object *parent, const char *name, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an); -E_API void e_bryce_orient(Evas_Object *bryce, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an); -E_API Evas_Object *e_bryce_site_get(Evas_Object *bryce); -E_API Eina_Bool e_bryce_autosize_get(Evas_Object *bryce); -E_API void e_bryce_autosize_set(Evas_Object *bryce, Eina_Bool set); -E_API Eina_Bool e_bryce_autohide_get(Evas_Object *bryce); -E_API void e_bryce_autohide_set(Evas_Object *bryce, Eina_Bool set); -E_API Eina_Bool e_bryce_exists(Evas_Object *parent, Evas_Object *bryce, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an); -E_API Eina_List *e_bryce_list(Evas_Object *parent); -E_API void e_bryce_style_set(Evas_Object *bryce, const char *style); - -E_API Evas_Object *e_bryce_editor_add(Evas_Object *parent, Evas_Object *bryce); -E_API Evas_Object *e_bryce_edit(Evas_Object *bryce); -#endif -#endif diff --git a/src/bin/e_bryce_editor.c b/src/bin/e_bryce_editor.c deleted file mode 100644 index 63db0718a..000000000 --- a/src/bin/e_bryce_editor.c +++ /dev/null @@ -1,444 +0,0 @@ -#include "e.h" - -#define DEFAULT_AUTOSIZE EINA_TRUE -#define DEFAULT_AUTOHIDE EINA_FALSE -#define DEFAULT_LAYER E_LAYER_CLIENT_EDGE - -typedef struct Bryce_Info -{ - E_Gadget_Site_Anchor anchor; - E_Gadget_Site_Orient orient; - Eina_Stringshare *style; - Eina_Bool stack_under; - Eina_Bool autohide; - Eina_Bool autosize; -} Bryce_Info; - - -static void _editor_add_bottom(void *data, Evas_Object *obj, const char *sig, const char *src); -static void _editor_add_top(void *data, Evas_Object *obj, const char *sig, const char *src); -static void _editor_add_left(void *data, Evas_Object *obj, const char *sig, const char *src); -static void _editor_add_right(void *data, Evas_Object *obj, const char *sig, const char *src); - -static void -setup_exists(Evas_Object *bryce, Evas_Object *editor, Evas_Object *parent, E_Gadget_Site_Anchor an) -{ - if ((an != E_GADGET_SITE_ANCHOR_TOP) && - e_bryce_exists(parent, bryce, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_BOTTOM | an)) - elm_object_signal_emit(editor, "e,bryce,exists,bottom", "e"); - if ((an != E_GADGET_SITE_ANCHOR_BOTTOM) && - e_bryce_exists(parent, bryce, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_TOP | an)) - elm_object_signal_emit(editor, "e,bryce,exists,top", "e"); - if ((an != E_GADGET_SITE_ANCHOR_RIGHT) && - e_bryce_exists(parent, bryce, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_LEFT | an)) - elm_object_signal_emit(editor, "e,bryce,exists,left", "e"); - if ((an != E_GADGET_SITE_ANCHOR_LEFT) && - e_bryce_exists(parent, bryce, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_RIGHT | an)) - elm_object_signal_emit(editor, "e,bryce,exists,right", "e"); -} - -static void -_editor_bryce_add(Evas_Object *obj) -{ - Evas_Object *b, *site; - char buf[1024]; - const char *loc = "", *loc2 = ""; - Bryce_Info *bi; - E_Zone *zone; - E_Gadget_Site_Gravity gravity = E_GADGET_SITE_GRAVITY_CENTER; - - bi = evas_object_data_get(obj, "__bryce_info"); - b = evas_object_data_get(obj, "__bryce_editor_bryce"); - if (bi->anchor & E_GADGET_SITE_ANCHOR_TOP) - loc = "top"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - loc = "bottom"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_LEFT) - loc = "left"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - loc = "right"; - if (bi->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - loc2 = "right"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_LEFT) - loc2 = "left"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_TOP) - loc2 = "top"; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - loc2 = "bottom"; - - zone = e_comp_object_util_zone_get(obj); - if (!zone) zone = e_zone_current_get(); - snprintf(buf, sizeof(buf), "bryce_%s_%s_%d", loc, loc2, zone->num); - if (bi->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - if (bi->anchor & E_GADGET_SITE_ANCHOR_LEFT) - gravity = E_GADGET_SITE_GRAVITY_LEFT; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - gravity = E_GADGET_SITE_GRAVITY_RIGHT; - } - else - { - if (bi->anchor & E_GADGET_SITE_ANCHOR_TOP) - gravity = E_GADGET_SITE_GRAVITY_TOP; - else if (bi->anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - gravity = E_GADGET_SITE_GRAVITY_BOTTOM; - } - if (b) - { - e_bryce_orient(b, bi->orient, bi->anchor); - site = e_bryce_site_get(b); - } - else - { - b = e_bryce_add(e_comp->elm, buf, bi->orient, bi->anchor); - site = e_bryce_site_get(b); - - e_gadget_site_gadget_add(site, "Start", 0); - e_gadget_site_gadget_add(site, "Digital Clock", 0); - e_gadget_site_gadget_add(site, "Wireless", 0); - } - - e_gadget_site_gravity_set(site, gravity); - e_bryce_style_set(b, bi->style); - e_bryce_autohide_set(b, bi->autohide); - e_bryce_autosize_set(b, bi->autosize); - evas_object_layer_set(b, bi->stack_under ? E_LAYER_DESKTOP_TOP : E_LAYER_CLIENT_ABOVE); - evas_object_del(obj); -} - -static void -_editor_finish(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - _editor_bryce_add(data); -} - -static void -_editor_autosize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce_Info *bi = data; - - bi->autosize = !bi->autosize; -} - -static void -_editor_autohide(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce_Info *bi = data; - - bi->autohide = !bi->autohide; -} - -static void -_editor_stacking(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce_Info *bi = data; - - bi->stack_under = !bi->stack_under; -} - -static void -_editor_style_click(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - const char *g; - char style[1024] = {0}; - Bryce_Info *bi; - Evas_Object *ly, *box, *ck, *button, *bryce; - - ly = elm_object_part_content_get(obj, "e.swallow.content"); - elm_layout_file_get(ly, NULL, &g); - g += (sizeof("e/bryce/") - 1); - memcpy(style, g, MIN(sizeof(style) - 1, (size_t)(strchr(g, '/') - g))); - - bryce = evas_object_data_get(data, "__bryce_editor_bryce"); - bi = evas_object_data_get(data, "__bryce_info"); - bi->style = eina_stringshare_add(style); - e_theme_edje_object_set(data, NULL, "e/bryce/editor/finish"); - elm_object_part_text_set(data, "e.text", _("Finishing touches... (4/4)")); - box = elm_box_add(data); - elm_box_padding_set(box, 0, 20 * e_scale); - - ck = elm_check_add(box); - elm_object_focus_allow_set(ck, 0); - E_ALIGN(ck, 0, 0.5); - evas_object_show(ck); - elm_object_text_set(ck, _("Automatically size based on contents")); - evas_object_smart_callback_add(ck, "changed", _editor_autosize, bi); - if (bryce) - { - bi->autosize = e_bryce_autosize_get(bryce); - elm_check_state_set(ck, bi->autosize); - } - elm_box_pack_end(box, ck); - - ck = elm_check_add(box); - elm_object_focus_allow_set(ck, 0); - E_ALIGN(ck, 0, 0.5); - evas_object_show(ck); - elm_object_text_set(ck, _("Automatically hide")); - evas_object_smart_callback_add(ck, "changed", _editor_autohide, bi); - if (bryce) - { - bi->autohide = e_bryce_autohide_get(bryce); - elm_check_state_set(ck, bi->autohide); - } - elm_box_pack_end(box, ck); - - ck = elm_check_add(box); - elm_object_focus_allow_set(ck, 0); - E_ALIGN(ck, 0, 0.5); - evas_object_show(ck); - elm_object_text_set(ck, _("Do not stack above windows")); - evas_object_smart_callback_add(ck, "changed", _editor_stacking, bi); - if (bryce) - { - bi->stack_under = evas_object_layer_get(bryce) == E_LAYER_DESKTOP_TOP; - elm_check_state_set(ck, bi->stack_under); - } - elm_box_pack_end(box, ck); - - //ck = elm_check_add(box); - //elm_object_text_set(ck, _("Allow windows to overlap")); - //evas_object_smart_callback_add(ck, "changed", _editor_overlap, data); - //elm_box_pack_end(box, ck); - - button = elm_button_add(data); - evas_object_show(button); - elm_object_text_set(button, _("Finish!")); - evas_object_smart_callback_add(button, "clicked", _editor_finish, data); - elm_box_pack_end(box, button); - - elm_object_part_content_set(data, "e.swallow.content", box); -} - -static void -_editor_style(Evas_Object *obj) -{ - Eina_List *l; - Eina_Stringshare *style; - Evas_Object *box; - int w; - - evas_object_geometry_get(obj, NULL, NULL, &w, NULL); - box = elm_box_add(obj); - e_theme_edje_object_set(obj, NULL, "e/bryce/editor/style"); - elm_object_part_text_set(obj, "e.text", _("Choose style (3/4)")); - elm_box_homogeneous_set(box, 1); - elm_box_padding_set(box, 0, 20 * e_scale); - l = elm_theme_group_base_list(NULL, "e/bryce/"); - EINA_LIST_FREE(l, style) - { - Evas_Object *ly, *bryce; - char buf[1024] = {0}; - size_t len; - - if (!eina_str_has_suffix(style, "/base")) - { - eina_stringshare_del(style); - continue; - } - ly = elm_layout_add(box); - e_theme_edje_object_set(ly, NULL, "e/bryce/editor/style/item"); - bryce = edje_object_add(evas_object_evas_get(box)); - elm_object_part_content_set(ly, "e.swallow.content", bryce); - len = strlen(style); - strncpy(buf, style + sizeof("e/bryce/") - 1, - MIN(sizeof(buf) - 1, len - (sizeof("e/bryce/") - 1) - (sizeof("/base") - 1))); - buf[0] = toupper(buf[0]); - elm_object_part_text_set(ly, "e.text", buf); - e_comp_object_util_del_list_append(ly, bryce); - e_theme_edje_object_set(bryce, NULL, style); - evas_object_size_hint_min_set(bryce, w * 2 / 3, 48 * e_scale); - evas_object_show(ly); - evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, _editor_style_click, obj); - elm_box_pack_end(box, ly); - } - elm_object_part_content_set(obj, "e.swallow.content", box); -} - -static void -_editor_info_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce_Info *bi = data; - - eina_stringshare_del(bi->style); - free(bi); -} - -static void -_editor_add(Evas_Object *obj, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor an) -{ - char buf[1024]; - Bryce_Info *bi; - - bi = evas_object_data_get(obj, "__bryce_info"); - if (bi) - { - bi->anchor |= an; - _editor_style(obj); - } - else - { - bi = E_NEW(Bryce_Info, 1); - bi->anchor = an; - bi->orient = orient; - evas_object_data_set(obj, "__bryce_info", bi); - evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _editor_info_del, bi); - snprintf(buf, sizeof(buf), "e/bryce/editor/side/%s", - orient == E_GADGET_SITE_ORIENT_HORIZONTAL ? "horizontal" : "vertical"); - e_theme_edje_object_set(obj, NULL, buf); - elm_object_part_text_set(obj, "e.text", _("Choose position (2/4)")); - if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - elm_object_signal_emit(obj, "e,state,bottom", "e"); - else if (an & E_GADGET_SITE_ANCHOR_RIGHT) - elm_object_signal_emit(obj, "e,state,right", "e"); - setup_exists(evas_object_data_get(obj, "__bryce_editor_bryce"), obj, - evas_object_data_get(obj, "__bryce_editor_site"), an); - } -} - -static void -_editor_add_bottom(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - _editor_add(obj, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_BOTTOM); -} - -static void -_editor_add_top(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - _editor_add(obj, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_TOP); -} - -static void -_editor_add_left(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - _editor_add(obj, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_LEFT); -} - -static void -_editor_add_center(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - _editor_add(obj, E_GADGET_SITE_ORIENT_NONE, E_GADGET_SITE_ANCHOR_NONE); -} - -static void -_editor_add_right(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - _editor_add(obj, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_RIGHT); -} - -static void -_editor_dismiss(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - evas_object_del(obj); -} - -E_API Evas_Object * -e_bryce_editor_add(Evas_Object *parent, Evas_Object *bryce) -{ - Evas_Object *editor; - - editor = elm_layout_add(parent); - evas_object_data_set(editor, "__bryce_editor_site", parent); - evas_object_data_set(editor, "__bryce_editor_bryce", bryce); - e_theme_edje_object_set(editor, NULL, "e/bryce/editor/side"); - elm_object_part_text_set(editor, "e.text", _("Choose screen edge (1/4)")); - - setup_exists(bryce, editor, parent, 0); - - elm_object_signal_callback_add(editor, "e,action,dismiss", "e", _editor_dismiss, editor); - elm_object_signal_callback_add(editor, "e,bryce,add,bottom", "e", _editor_add_bottom, editor); - elm_object_signal_callback_add(editor, "e,bryce,add,top", "e", _editor_add_top, editor); - elm_object_signal_callback_add(editor, "e,bryce,add,left", "e", _editor_add_left, editor); - elm_object_signal_callback_add(editor, "e,bryce,add,right", "e", _editor_add_right, editor); - elm_object_signal_callback_add(editor, "e,bryce,add,center", "e", _editor_add_center, editor); - return editor; -} - -static Ecore_Event_Handler *handler; - -static void -_bryce_edit_key_location(Evas_Object *obj, Ecore_Event_Key *ev) -{ - if (eina_streq(ev->key, "Up")) - _editor_add(obj, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_TOP); - else if (eina_streq(ev->key, "Down")) - _editor_add(obj, E_GADGET_SITE_ORIENT_HORIZONTAL, E_GADGET_SITE_ANCHOR_BOTTOM); - else if (eina_streq(ev->key, "Left")) - _editor_add(obj, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_LEFT); - else if (eina_streq(ev->key, "Right")) - _editor_add(obj, E_GADGET_SITE_ORIENT_VERTICAL, E_GADGET_SITE_ANCHOR_RIGHT); -} - -static Eina_Bool -_bryce_edit_key_handler(void *data, int t EINA_UNUSED, Ecore_Event_Key *ev) -{ - if (eina_streq(ev->key, "Escape")) - { - elm_layout_signal_emit(data, "e,action,dismiss", "e"); - return ECORE_CALLBACK_RENEW; - } - if (evas_object_data_get(data, "__bryce_info")) - { - const char *grp; - - edje_object_file_get(data, NULL, &grp); - if (!strncmp(grp, "e/bryce/editor/side/", sizeof("e/bryce/editor/side/") - 1)) - _bryce_edit_key_location(data, ev); - else if (!strncmp(grp, "e/bryce/editor/style", sizeof("e/bryce/editor/style") - 1)) - { - Evas_Object *bx, *o; - Eina_List *l; - int n; - - bx = elm_object_part_content_get(data, "e.swallow.content"); - l = elm_box_children_get(bx); - n = strtol(ev->key, NULL, 10); - if (n > 0) - { - o = eina_list_nth(l, n - 1); - if (o) - _editor_style_click(data, NULL, o, NULL); - } - eina_list_free(l); - } - else if (eina_streq(ev->key, "Return") || eina_streq(ev->key, "KP_Enter")) - _editor_bryce_add(data); - } - else - _bryce_edit_key_location(data, ev); - return ECORE_CALLBACK_RENEW; -} - -static void -_bryce_edit_end(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - e_bindings_disabled_set(0); - e_comp_ungrab_input(1, 1); - evas_object_hide(data); - evas_object_del(data); - E_FREE_FUNC(handler, ecore_event_handler_del); -} - -E_API Evas_Object * -e_bryce_edit(Evas_Object *bryce) -{ - Evas_Object *editor, *comp_object; - E_Zone *zone; - int x, y, w, h; - - zone = e_zone_current_get(); - x = zone->x, y = zone->y, w = zone->w, h = zone->h; - e_bindings_disabled_set(1); - editor = e_bryce_editor_add(e_comp->elm, bryce); - - evas_object_geometry_set(editor, x, y, w, h); - comp_object = e_comp_object_util_add(editor, E_COMP_OBJECT_TYPE_NONE); - evas_object_event_callback_add(editor, EVAS_CALLBACK_DEL, _bryce_edit_end, comp_object); - evas_object_layer_set(comp_object, E_LAYER_POPUP); - evas_object_show(comp_object); - - e_comp_object_util_autoclose(comp_object, NULL, e_comp_object_util_autoclose_on_escape, NULL); - e_comp_grab_input(1, 1); - handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, (Ecore_Event_Handler_Cb)_bryce_edit_key_handler, editor); - return comp_object; -} diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 48abc692a..6c792d4f2 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -59,37 +59,6 @@ typedef struct _E_Color_Class int r3, g3, b3, a3; } E_Color_Class; -static void -_e_config_binding_mouse_add(E_Binding_Context ctxt, int button, E_Binding_Modifier mod, int any_mod, const char *action, const char *params) -{ - E_Config_Binding_Mouse *binding; - - binding = calloc(1, sizeof(E_Config_Binding_Mouse)); - binding->context = ctxt; - binding->button = button; - binding->modifiers = mod; - binding->any_mod = any_mod; - binding->action = eina_stringshare_add(action); - binding->params = eina_stringshare_add(params); - e_bindings->mouse_bindings = eina_list_append(e_bindings->mouse_bindings, binding); -} - -static void -_e_config_binding_wheel_add(E_Binding_Context ctxt, int direction, int z, E_Binding_Modifier mod, int any_mod, const char *action, const char *params) -{ - E_Config_Binding_Wheel *binding; - - binding = calloc(1, sizeof(E_Config_Binding_Wheel)); - binding->context = ctxt; - binding->direction = direction; - binding->z = z; - binding->modifiers = mod; - binding->any_mod = any_mod; - binding->action = eina_stringshare_add(action); - binding->params = eina_stringshare_add(params); - e_bindings->wheel_bindings = eina_list_append(e_bindings->wheel_bindings, binding); -} - static Eina_Bool _e_config_cb_efreet_cache_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED) { @@ -1384,53 +1353,8 @@ e_config_load(void) } CONFIG_VERSION_CHECK(20) { - Eina_List *l; - E_Config_Binding_Mouse *ebm; - E_Config_Module *em, *module; - CONFIG_VERSION_UPDATE_INFO(20); - - EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm) - { - if (eina_streq(ebm->action, "window_move")) - { - _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers, - ebm->any_mod, "gadget_move", NULL); - } - else if (eina_streq(ebm->action, "window_resize")) - { - _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers, - ebm->any_mod, "gadget_resize", NULL); - } - else if (eina_streq(ebm->action, "window_menu")) - { - _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers, - ebm->any_mod, "gadget_menu", NULL); - _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers, - ebm->any_mod, "bryce_menu", NULL); - } - } - _e_config_binding_wheel_add(E_BINDING_CONTEXT_ANY, 0, 1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL); - _e_config_binding_wheel_add(E_BINDING_CONTEXT_ANY, 0, -1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL); - - EINA_LIST_FOREACH(e_config->modules, l, em) - { - if (!em->enabled) continue; - if (eina_streq(em->name, "connman")) - { - module = E_NEW(E_Config_Module, 1); - module->name = eina_stringshare_add("wireless"); - module->enabled = 1; - e_config->modules = eina_list_append(e_config->modules, module); - } - else if (eina_streq(em->name, "clock")) - { - module = E_NEW(E_Config_Module, 1); - module->name = eina_stringshare_add("time"); - module->enabled = 1; - e_config->modules = eina_list_append(e_config->modules, module); - } - } + e_config_save_queue(); } CONFIG_VERSION_CHECK(21) @@ -1558,23 +1482,7 @@ e_config_load(void) } CONFIG_VERSION_CHECK(28) { - Eina_List *l, *ll; - E_Config_Binding_Mouse *ebm; - CONFIG_VERSION_UPDATE_INFO(28); - EINA_LIST_FOREACH_SAFE(e_bindings->mouse_bindings, l, ll, ebm) - { - if ((eina_streq(ebm->action, "gadget_menu")) || - (eina_streq(ebm->action, "bryce_menu"))) - { - e_bindings->mouse_bindings = - eina_list_remove_list - (e_bindings->mouse_bindings, l); - eina_stringshare_del(ebm->action); - eina_stringshare_del(ebm->params); - free(ebm); - } - } e_config_save_queue(); } CONFIG_VERSION_CHECK(29) @@ -2423,16 +2331,11 @@ e_config_bindings_free(E_Config_Bindings *ecb) static void _e_config_save_cb(void *data EINA_UNUSED) { - EINTERN void e_gadget_save(void); - EINTERN void e_bryce_save(void); - e_config_profile_save(); e_module_save_all(); elm_config_save(); e_config_domain_save("e", _e_config_edd, e_config); e_config_domain_save("e_bindings", _e_config_binding_edd, e_bindings); - e_gadget_save(); - e_bryce_save(); _e_config_save_defer = NULL; } diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c deleted file mode 100644 index de6d89cba..000000000 --- a/src/bin/e_gadget.c +++ /dev/null @@ -1,3535 +0,0 @@ -#include "e.h" - - -#ifdef HAVE_WAYLAND -EINTERN void e_gadget_runner_init(void); -EINTERN void e_gadget_runner_shutdown(void); -EINTERN void e_gadget_runner_save(void); -#endif - -#define SNAP_DISTANCE 5 -#define E_GADGET_TYPE 0xE31337 - -#define IS_HORIZ(orient) \ - ((orient) == E_GADGET_SITE_ORIENT_HORIZONTAL) - -#define IS_VERT(orient) \ - ((orient) == E_GADGET_SITE_ORIENT_VERTICAL) - -#define ZGS_GET(obj) \ - E_Gadget_Site *zgs; \ - zgs = evas_object_data_get((obj), "__e_gadget_site"); \ - if (!zgs) abort() - -typedef struct E_Gadget_Config E_Gadget_Config; - -typedef struct E_Gadget_Site -{ - Eina_Stringshare *name; - Eina_Bool autoadd; - E_Gadget_Site_Gravity gravity; - E_Gadget_Site_Orient orient; - E_Gadget_Site_Anchor anchor; - Eina_List *gadgets; - Eina_Inlist *gadget_list; - - Eina_Bool longpressed : 1; - Eina_Bool dragged : 1; - Evas_Coord down_1_x, down_1_y, down_3_x, down_3_y; - Ecore_Timer *down_timer; - - Evas_Object *layout; - Evas_Object *events; - E_Gadget_Style_Cb style_cb; - E_Gadget_Context_Cb context_cb; - E_Gadget_Context_Cb context_cancel_cb; - int cur_size; - Ecore_Job *calc_job; - - E_Gadget_Config *action; - Ecore_Event_Handler *move_handler; - Ecore_Event_Handler *mouse_up_handler; - - Evas_Object *editor; -} E_Gadget_Site; - - -struct E_Gadget_Config -{ - EINA_INLIST; - int id; - struct - { - Eina_Stringshare *domain; - Eina_Stringshare *type; - } external; - int zone; - Eina_Stringshare *type; - E_Object *e_obj_inherit; - Evas_Object *display; - Evas_Object *gadget; - struct - { - Evas_Object *obj; - int minw, minh; - Eina_Stringshare *name; - } style; - E_Gadget_Configure_Cb configure; - Evas_Object *cfg_object; - E_Gadget_Menu_Populate_Cb populate; - Eina_List *popups; - E_Gadget_Site *site; - E_Menu *menu; - - struct - { - Evas_Object *popup; - Evas_Smart_Cb allow; - Evas_Smart_Cb deny; - void *data; - } allow_deny; - - Eina_Hash *drop_handlers; - - double x, y; //fixed % positioning - double w, h; //fixed % sizing - Evas_Point offset; //offset from mouse down - Evas_Point down; //coords from mouse down - E_Gadget_Config *orig; //gadget is a copy of the original gadget during a move - E_Gadget_Site_Anchor resizing; - Eina_Bool moving E_BITFIELD; - Eina_Bool display_del E_BITFIELD; //deleted using ->display -}; - -typedef struct E_Gadget_Sites -{ - Eina_List *sites; -} E_Gadget_Sites; - -typedef struct E_Gadget_External_Type -{ - E_Gadget_External_Create_Cb cb; - E_Gadget_External_Wizard_Cb wizard; - E_Gadget_External_Name_Cb name; -} E_Gadget_External_Type; - -typedef struct E_Gadget_Type -{ - E_Gadget_Create_Cb cb; - E_Gadget_Wizard_Cb wizard; -} E_Gadget_Type; - -typedef struct Gadget_Item -{ - Evas_Object *box; - Evas_Object *editor; - Evas_Object *gadget; - Evas_Object *site; - Elm_Object_Item *it; -} Gadget_Item; - -#define DESKLOCK_DEMO_LAYER (E_LAYER_CLIENT_POPUP - 100) - -static Eina_List *desktop_handlers; -static Evas_Object *desktop_rect; -static Evas_Object *desktop_editor; -static Eina_Bool added; - -static Evas_Object *pointer_site; -static Eina_List *pointer_site_handlers; - -static Eina_Hash *gadget_external_domains; -static Eina_Hash *gadget_types; -static E_Gadget_Sites *sites; -static Eina_List *handlers; - -static Evas_Object *comp_site; - -static E_Action *move_act; -static E_Action *resize_act; -static E_Action *configure_act; - -static E_Config_DD *edd_sites; -static E_Config_DD *edd_site; -static E_Config_DD *edd_gadget; - -static void _gadget_object_finalize(E_Gadget_Config *zgc); -static Eina_Bool _gadget_object_create(E_Gadget_Config *zgc); -static void _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool ); -static void _gadget_drop_handler_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED); -static void _edit_site_del(void *data, Evas *e, Evas_Object *obj, void *event_info); - -static void -_site_recalc_job_cb(E_Gadget_Site *zgs) -{ - zgs->calc_job = NULL; - evas_object_smart_need_recalculate_set(zgs->layout, 1); -} - -static void -_site_recalc_job(E_Gadget_Site *zgs) -{ - if (zgs->calc_job) ecore_job_del(zgs->calc_job); - zgs->calc_job = ecore_job_add((Ecore_Cb)_site_recalc_job_cb, zgs); -} - -static E_Gadget_External_Type * -_gadget_external_type_get(const char *domain, const char *type) -{ - Eina_Hash *h; - if (!gadget_external_domains) return NULL; - h = eina_hash_find(gadget_external_domains, domain); - if (!h) return NULL; - return eina_hash_find(h, type); -} - -static Eina_Bool -_editor_site_visible(void) -{ - Eina_List *l; - E_Gadget_Site *zgs; - - if (desktop_editor) return evas_object_visible_get(desktop_editor); - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (zgs->editor && evas_object_visible_get(zgs->editor)) return EINA_TRUE; - return EINA_FALSE; -} - -static void -_comp_site_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Eina_List *l; - E_Gadget_Config *zgc; - - evas_object_resize(data, e_comp->w, e_comp->h); - ZGS_GET(comp_site); - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - { - if (!zgc->display) - _gadget_object_create(zgc); - else if (!e_comp_zone_number_get(zgc->zone)) - evas_object_del(zgc->display); - } -} - -static void -_gadget_free(E_Gadget_Config *zgc) -{ - if (zgc->menu) - { - e_menu_deactivate(zgc->menu); - e_object_del(E_OBJECT(zgc->menu)); - zgc->menu = NULL; - } - evas_object_del(zgc->display); - eina_stringshare_del(zgc->type); - eina_stringshare_del(zgc->external.type); - eina_stringshare_del(zgc->external.domain); - eina_stringshare_del(zgc->style.name); - free(zgc); -} - -static E_Gadget_Config * -_gadget_at_xy(E_Gadget_Site *zgs, int x, int y, E_Gadget_Config *exclude) -{ - Eina_List *l; - E_Gadget_Config *zgc, *saved = NULL; - - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - { - int ox, oy, ow, oh; - - if (!zgc->gadget) continue; - - evas_object_geometry_get(zgc->display, &ox, &oy, &ow, &oh); - if (E_INSIDE(x, y, ox, oy, ow, oh)) - { - if (zgc == exclude) saved = zgc; - else return zgc; - } - } - return saved; -} - -static void -_gravity_apply(E_Gadget_Site *zgs, E_Gadget_Site_Gravity gravity) -{ - double ax = 0.5, ay = 0.5; - - switch (gravity) - { - case E_GADGET_SITE_GRAVITY_LEFT: - ax = 0; - break; - case E_GADGET_SITE_GRAVITY_RIGHT: - ax = 1; - break; - default: break; - } - switch (gravity) - { - case E_GADGET_SITE_GRAVITY_TOP: - ay = 0; - break; - case E_GADGET_SITE_GRAVITY_BOTTOM: - ay = 1; - break; - default: break; - } - elm_box_align_set(zgs->layout, ax, ay); - evas_object_smart_callback_call(zgs->layout, "gadget_site_gravity", NULL); -} - -static void -_gadget_reparent(E_Gadget_Site *zgs, E_Gadget_Config *zgc) -{ - Eina_Inlist *l = EINA_INLIST_GET(zgc); - E_Gadget_Config *z; - - if (!zgs->orient) - { - evas_object_layer_set(zgc->display, evas_object_layer_get(zgs->layout)); - evas_object_stack_below(zgc->display, zgs->events); - if (evas_object_visible_get(zgs->events)) - evas_object_show(zgc->display); - return; - } - switch (zgs->gravity) - { - case E_GADGET_SITE_GRAVITY_NONE: - /* fake */ - break; - case E_GADGET_SITE_GRAVITY_LEFT: - case E_GADGET_SITE_GRAVITY_TOP: - for (l = l->prev; l; l = l->prev) - { - z = EINA_INLIST_CONTAINER_GET(l, E_Gadget_Config); - if (!z->display) continue; - elm_box_pack_after(zgs->layout, zgc->display, z->display); - return; - } - elm_box_pack_end(zgs->layout, zgc->display); - break; - default: - for (l = l->next; l; l = l->next) - { - z = EINA_INLIST_CONTAINER_GET(l, E_Gadget_Config); - if (!z->display) continue; - elm_box_pack_before(zgs->layout, zgc->display, z->display); - return; - } - /* right aligned: pack on left */ - elm_box_pack_start(zgs->layout, zgc->display); - } -} - -static void -_desktop_rect_obj_add(Evas_Object *obj) -{ - if (!desktop_rect) return; - evas_object_smart_member_add(obj, desktop_rect); - evas_object_propagate_events_set(obj, 0); - if (e_comp->autoclose.obj != obj) return; - evas_object_smart_member_add(e_comp->autoclose.rect, desktop_rect); - evas_object_propagate_events_set(e_comp->autoclose.rect, 0); -} - -static void -_gadget_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - if (desktop_editor) evas_object_show(desktop_editor); - zgc->popups = eina_list_remove(zgc->popups, event_info); -} - -static void -_gadget_popup(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - E_Gadget_Config *zgc = data; - E_Gadget_Site *zgs = zgc->site; - - if (event_info && elm_object_widget_check(event_info)) - elm_object_tree_focus_allow_set(event_info, 0); - if (event_info) _desktop_rect_obj_add(event_info); - evas_object_smart_callback_call(zgs->layout, "gadget_site_popup", event_info); - if (!event_info) return; - evas_object_event_callback_add(event_info, EVAS_CALLBACK_HIDE, _gadget_popup_hide, zgc); - if (desktop_editor) evas_object_hide(desktop_editor); - if (eina_list_data_find(zgc->popups, event_info)) - ERR("gadget_popup called multiple times for same popup"); - zgc->popups = eina_list_append(zgc->popups, event_info); -} - -static void -_gadget_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - zgc->display_del = obj == zgc->display; - if (!e_object_is_del(zgc->e_obj_inherit)) - e_object_del(zgc->e_obj_inherit); -} - -static void -_gadget_util_allow_deny_cleanup(E_Gadget_Config *zgc) -{ - zgc->allow_deny.allow = zgc->allow_deny.deny = NULL; - zgc->allow_deny.data = NULL; - evas_object_hide(zgc->allow_deny.popup); - E_FREE_FUNC(zgc->allow_deny.popup, evas_object_del); -} - -static void -_gadget_drop_handler_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - if (zgc->drop_handlers)//may be calling during object_free - eina_hash_del_by_key(zgc->drop_handlers, &obj); -} - -static void -_gadget_object_free(E_Object *eobj) -{ - E_Gadget_Config *zgc; - Evas_Object *g; - - g = e_object_data_get(eobj); - zgc = evas_object_data_get(g, "__e_gadget"); - evas_object_smart_callback_call(zgc->site->layout, "gadget_destroyed", zgc->gadget); - evas_object_event_callback_del_full(zgc->gadget, EVAS_CALLBACK_DEL, _gadget_del, zgc); - if (zgc->display_del || (zgc->gadget == zgc->display)) - zgc->display = NULL; - else - { - evas_object_event_callback_del_full(zgc->display, EVAS_CALLBACK_DEL, _gadget_del, zgc); - E_FREE_FUNC(zgc->display, evas_object_del); - } - zgc->gadget = NULL; - - if (zgc->drop_handlers) - { - Evas_Object **drop_object; - Eina_Iterator *it = eina_hash_iterator_key_new(zgc->drop_handlers); - - EINA_ITERATOR_FOREACH(it, drop_object) - { - evas_object_event_callback_del(*drop_object, EVAS_CALLBACK_MOVE, _gadget_drop_handler_moveresize); - evas_object_event_callback_del(*drop_object, EVAS_CALLBACK_RESIZE, _gadget_drop_handler_moveresize); - evas_object_event_callback_del(*drop_object, EVAS_CALLBACK_DEL, _gadget_drop_handler_del); - } - eina_iterator_free(it); - } - - E_FREE_FUNC(zgc->drop_handlers, eina_hash_free); - E_FREE_FUNC(zgc->gadget, evas_object_del); - E_FREE_FUNC(zgc->cfg_object, evas_object_del); - E_FREE_FUNC(zgc->style.obj, evas_object_del); - _gadget_util_allow_deny_cleanup(zgc); - E_FREE(zgc->e_obj_inherit); - zgc->configure = NULL; - zgc->display_del = zgc->moving = zgc->resizing = 0; - if (zgc->id == -1) _gadget_free(zgc); -} - -static void -_gadget_remove(E_Gadget_Config *zgc) -{ - int id = zgc->id; - evas_object_smart_callback_call(zgc->site->layout, "gadget_removed", zgc->gadget); - zgc->site->gadget_list = eina_inlist_remove(zgc->site->gadget_list, EINA_INLIST_GET(zgc)); - zgc->site->gadgets = eina_list_remove(zgc->site->gadgets, zgc); - if (id >= 0) - { - _gadget_free(zgc); - e_config_save_queue(); - } - else - evas_object_del(zgc->display); -} - -static void -_gadget_wizard_end(void *data, int id) -{ - E_Gadget_Config *zgc = data; - - zgc->id = id; - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_unlocked", NULL); - e_comp_ungrab_input(1, 1); - if (id > 0) - { - _gadget_object_finalize(zgc); - added = 0; - } - else - _gadget_remove(zgc); -} - -static void -_gadget_wizard_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - if (zgc->cfg_object == obj) zgc->cfg_object = NULL; - if (desktop_editor) evas_object_show(desktop_editor); -} - -static void -_gadget_object_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - _site_recalc_job(zgc->site); -} - -static Eina_Bool -_gadget_object_create(E_Gadget_Config *zgc) -{ - E_Gadget_Type *t = NULL; - E_Gadget_External_Type *te = NULL; - Evas_Object *g; - - if (zgc->external.domain) - { - te = _gadget_external_type_get(zgc->external.domain, zgc->external.type); - if (!te) return EINA_TRUE; //can't create yet - } - else - { - t = eina_hash_find(gadget_types, zgc->type); - if (!t) return EINA_TRUE; //can't create yet - } - - if (!zgc->id) - { - if ((t && t->wizard) || (te && te->wizard)) - { - if (t) - zgc->cfg_object = t->wizard(_gadget_wizard_end, zgc, zgc->site->layout); - else - zgc->cfg_object = te->wizard(_gadget_wizard_end, zgc, zgc->external.type, zgc->site->layout); - if (!zgc->cfg_object) - { - added = 1; - if (desktop_editor) evas_object_show(desktop_editor); - return EINA_FALSE; - } - e_comp_grab_input(1, 1); - evas_object_event_callback_add(zgc->cfg_object, EVAS_CALLBACK_DEL, _gadget_wizard_del, zgc); - _desktop_rect_obj_add(zgc->cfg_object); - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_popup", zgc->cfg_object); - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_locked", NULL); - return EINA_TRUE; - } - } - if (desktop_editor) evas_object_show(desktop_editor); - if ((zgc->zone >= 0) && (!e_comp_zone_number_get(zgc->zone))) return EINA_FALSE; - /* if id is < 0, gadget creates dummy config for demo use - * if id is 0, gadget creates new config and returns id - * otherwise, config of `id` is applied to created object - * - * a gadget should return NULL for any demo instance where it - * should not be shown - */ - if (t) - g = t->cb(zgc->site->layout, &zgc->id, zgc->site->orient); - else - g = te->cb(zgc->site->layout, zgc->external.type, &zgc->id, zgc->site->orient); - if (zgc->id < 0) - { - if (!g) return EINA_FALSE; - } - EINA_SAFETY_ON_NULL_RETURN_VAL(g, EINA_FALSE); - added = 1; - - zgc->e_obj_inherit = E_OBJECT_ALLOC(E_Object, E_GADGET_TYPE, _gadget_object_free); - e_object_data_set(zgc->e_obj_inherit, g); - zgc->gadget = zgc->display = g; - evas_object_event_callback_add(g, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _gadget_object_hints, zgc); - evas_object_smart_callback_add(g, "gadget_popup", _gadget_popup, zgc); - evas_object_data_set(g, "__e_gadget", zgc); - if (zgc->site->style_cb) - zgc->site->style_cb(zgc->site->layout, zgc->style.name, g); - - if (!zgc->site->orient) - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); - evas_object_event_callback_priority_add(g, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_AFTER, _gadget_del, zgc); - _gadget_reparent(zgc->site, zgc); - if (elm_object_widget_check(zgc->gadget)) - elm_object_tree_focus_allow_set(zgc->gadget, 0); - evas_object_raise(zgc->site->events); - - evas_object_smart_callback_call(zgc->site->layout, "gadget_created", g); - evas_object_show(zgc->display); - if (zgc->site->editor) _desktop_rect_obj_add(zgc->display); - return EINA_TRUE; -} - -static void -_gadget_object_finalize(E_Gadget_Config *zgc) -{ - zgc->moving = 0; - if (_gadget_object_create(zgc)) - { - if (!zgc->display) return; - evas_object_smart_callback_call(zgc->site->layout, "gadget_added", zgc->gadget); - e_config_save_queue(); - return; - } - zgc->site->gadgets = eina_list_remove(zgc->site->gadgets, zgc); - zgc->site->gadget_list = eina_inlist_remove(zgc->site->gadget_list, EINA_INLIST_GET(zgc)); - eina_stringshare_del(zgc->type); - eina_stringshare_del(zgc->external.type); - eina_stringshare_del(zgc->external.domain); - free(zgc); -} - -static void -_site_gadget_aspect(E_Gadget_Config *zgc, Evas_Coord *ww, Evas_Coord *hh, int ax, int ay, Evas_Aspect_Control aspect) -{ - if (aspect && ax && ay) - { - switch (aspect) - { - case EVAS_ASPECT_CONTROL_HORIZONTAL: - *hh = (*ww * (double)ay / ax) + 0.99999999; - break; - case EVAS_ASPECT_CONTROL_VERTICAL: - *ww = (*hh * (double)ax / ay) + 0.99999999; - break; - default: - if (IS_HORIZ(zgc->site->orient)) - *ww = (*hh * (double)ax / ay) + 0.99999999; - else if (IS_VERT(zgc->site->orient)) - *hh = (*ww * (double)ay / ax) + 0.99999999; - else if (aspect) - { - double ar = ax / (double) ay; - - if (ax == ay) - { - if (*ww > *hh) - *hh = *ww; - else - *ww = *hh; - } - else if (ar > 1.0) - *hh = (*ww * (double)ay / ax) + 0.99999999; - else - *ww = (*hh * (double)ax / ay) + 0.99999999; - } - } - } -} - -static Eina_Bool -_site_gadget_resize(Evas_Object *g, int w, int h, Evas_Coord *ww, Evas_Coord *hh, Evas_Coord *ow, Evas_Coord *oh) -{ - Evas_Coord mnw, mnh, mxw, mxh; - E_Gadget_Config *zgc; - Evas_Aspect_Control aspect; - int ax, ay; - double ex, ey; - Eina_Bool ret = EINA_FALSE; - - zgc = evas_object_data_get(g, "__e_gadget"); - w -= zgc->style.minw; - h -= zgc->style.minh; - - evas_object_size_hint_min_get(g, &mnw, &mnh); - evas_object_size_hint_max_get(g, &mxw, &mxh); - evas_object_size_hint_aspect_get(g, &aspect, &ax, &ay); - evas_object_size_hint_weight_get(g, &ex, &ey); - - if (IS_HORIZ(zgc->site->orient)) - { - *ww = mnw, *hh = h; - if (!(*ww)) *ww = *hh; - if (dblequal(ex, EVAS_HINT_EXPAND) && (!aspect)) ret = EINA_TRUE; - } - else if (IS_VERT(zgc->site->orient)) - { - *hh = mnh, *ww = w; - if (!(*hh)) *hh = *ww; - if (dblequal(ey, EVAS_HINT_EXPAND) && (!aspect)) ret = EINA_TRUE; - } - else - { - *ww = mnw, *hh = mnh; - if ((!(*ww)) || ((*ww) < w)) *ww = w; - if ((!(*hh)) || ((*hh) < h)) *hh = h; - } - _site_gadget_aspect(zgc, ww, hh, ax, ay, aspect); - *ww += zgc->style.minw; - *hh += zgc->style.minh; - *ow = *ww, *oh = *hh; - if ((!ax) && (!ay)) - { - if ((mxw >= 0) && (mxw < *ow)) *ow = mxw; - if ((mxh >= 0) && (mxh < *oh)) *oh = mxh; - } - if (!zgc->site->orient) - { - if ((w < (*ow)) || (h < (*oh))) - { - if (evas_smart_objects_calculating_get(e_comp->evas)) - _site_recalc_job(zgc->site); - else - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); - } - } - //fprintf(stderr, "%s: %dx%d\n", zgc->type, *ow, *oh); - evas_object_resize(zgc->display, *ow, *oh); - return ret; -} - -static void -_site_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int x, y, w, h; - E_Gadget_Site *zgs = data; - - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_geometry_set(zgs->events, x, y, w, h); - evas_object_raise(zgs->events); - if (!zgs->orient) - evas_object_smart_need_recalculate_set(zgs->layout, 1); -} - -static void -_site_layout_orient(Evas_Object *o, E_Gadget_Site *zgs) -{ - Evas_Coord x, y, w, h, xx, yy; - Eina_List *l; - double ax, ay; - E_Gadget_Config *zgc; - int mw, mh, sw, sh, rw, rh, bw, bh, prev_w = 0, prev_h = 0; - int groups = 0, avg; - Eina_Bool prev_ex = 0, after = 0; - struct Size - { - Evas_Coord_Size size; - Evas_Coord_Size clipped; - Evas_Coord_Size before; - Evas_Coord_Size after; - Eina_Bool expand; - Evas_Object *obj; - } *size, *psize = NULL; - Eina_List *expand = NULL, *gadgets = NULL; - Evas_Coord_Size parent_size; - - evas_object_geometry_get(o, &x, &y, &w, &h); - if ((!w) && (!h)) return; - parent_size.w = parent_size.h = -1; - evas_object_smart_callback_call(elm_object_parent_widget_get(zgs->layout), "gadget_site_parent_size_request", &parent_size); - if ((parent_size.w < 0) || (parent_size.h < 0)) - evas_object_geometry_get(elm_object_parent_widget_get(zgs->layout), NULL, NULL, &bw, &bh); - else - bw = parent_size.w, bh = parent_size.h; - rw = bw, rh = bh; - evas_object_size_hint_min_get(o, &mw, &mh); - evas_object_size_hint_min_get(zgs->layout, &sw, &sh); - evas_object_geometry_set(zgs->events, x, y, w, h); - - evas_object_box_align_get(o, &ax, &ay); - - xx = x; - yy = y; - - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - { - int ww, hh, ow, oh; - Eina_Bool ex; - - if (!zgc->display) continue; - ex = _site_gadget_resize(zgc->gadget, w, h, &ww, &hh, &ow, &oh); - if (ex && prev_ex) - { - /* multiple spacers */ - evas_object_resize(zgc->display, 0, 0); - continue; - } - size = E_NEW(struct Size, 1); - size->size.w = ww; - size->size.h = hh; - size->clipped.w = ow; - size->clipped.h = oh; - size->expand = ex; - if (ex) - { - if (psize) - { - psize->after.w = prev_w, psize->after.h = prev_h; - groups++; - } - psize = size; - size->before.w = prev_w; - size->before.h = prev_h; - prev_w = prev_h = 0; - } - size->obj = zgc->display; - prev_w += ow; - prev_h += oh; - prev_ex = ex; - gadgets = eina_list_append(gadgets, size); - if (ex) - { - expand = eina_list_append(expand, size); - continue; - } - if (IS_HORIZ(zgs->orient)) - rw = MAX(rw - ow, 0); - else if (IS_VERT(zgs->orient)) - rh = MAX(rh - oh, 0); - } - if (expand) - { - size = eina_list_last_data_get(expand); - psize = eina_list_last_data_get(gadgets); - if (size != psize) - { - if ((!size->after.w) && (!size->after.h)) - { - size->after.w = prev_w, size->after.h = prev_h; - groups++; - } - } - if (!groups) groups++; - - size = eina_list_data_get(expand); - if (IS_HORIZ(zgs->orient)) - { - after = !size->before.w; - avg = (bw - rw) / groups; - } - else - { - after = !size->before.h; - avg = (bh - rh) / groups; - } - } - EINA_LIST_FREE(expand, size) - { - if (IS_HORIZ(zgs->orient)) - { - if (rw) - { - size->size.w = size->clipped.w = rw / eina_list_count(expand); - if (eina_list_count(expand) > 1) - { - int gw; - if (after) - gw = size->after.w; - else - gw = size->before.w; - if (gw > avg) - size->size.w = size->clipped.w -= (gw - avg); - else - size->size.w = size->clipped.w += abs(gw - avg); - size->size.w = size->clipped.w -= size->after.w / 2; - size->size.w = size->clipped.w = MAX(size->size.w, 0); - rw -= size->size.w; - } - } - else - size->size.w = size->clipped.w = 0; - } - else if (IS_VERT(zgs->orient)) - { - if (rh) - { - size->size.h = size->clipped.h = rh / eina_list_count(expand); - if (eina_list_count(expand) > 1) - { - int gh; - if (after) - gh = size->after.h; - else - gh = size->before.h; - if (gh > avg) - size->size.h = size->clipped.h -= (gh - avg); - else - size->size.h = size->clipped.h += abs(gh - avg); - size->size.h = size->clipped.h -= size->after.h / 2; - size->size.h = size->clipped.h = MAX(size->size.h, 0); - rh -= size->size.h; - } - } - else - size->size.h = size->clipped.h = 0; - } - evas_object_resize(size->obj, size->clipped.w, size->clipped.h); - } - - if (zgs->gravity % 2)//left/top - { - EINA_LIST_FREE(gadgets, size) - { - Evas_Coord gx = xx, gy = yy; - - if (IS_HORIZ(zgs->orient)) - gx += (Evas_Coord)(((double)(size->size.w - size->clipped.w)) * 0.5), - gy += (h / 2) - (size->clipped.h / 2); - else if (IS_VERT(zgs->orient)) - gy += (Evas_Coord)(((double)(size->size.h - size->clipped.h)) * 0.5), - gx += (w / 2) - (size->clipped.w / 2); - evas_object_move(size->obj, gx, gy); - if (IS_HORIZ(zgs->orient)) - xx += size->clipped.w; - else - yy += size->clipped.h; - free(size); - } - } - else if (zgs->gravity) - { - if (IS_HORIZ(zgs->orient)) - xx += w; - else - yy += h; - - E_LIST_REVERSE_FREE(gadgets, size) - { - Evas_Coord gx = xx, gy = yy; - - if (IS_HORIZ(zgs->orient)) - gx -= (Evas_Coord)(((double)(size->size.w - size->clipped.w)) * 0.5) + size->clipped.w, - gy += (h / 2) - (size->clipped.h / 2); - else - gy -= (Evas_Coord)(((double)(size->size.h - size->clipped.h)) * 0.5) + size->clipped.h, - gx += (w / 2) - (size->clipped.w / 2); - evas_object_move(size->obj, gx, gy); - if (IS_HORIZ(zgs->orient)) - xx -= size->clipped.w; - else - yy -= size->clipped.h; - free(size); - } - } - - if (IS_HORIZ(zgs->orient)) - zgs->cur_size = abs(xx - x); - else if (IS_VERT(zgs->orient)) - zgs->cur_size = abs(yy - y); - - w = IS_HORIZ(zgs->orient) ? zgs->cur_size : w; - h = IS_VERT(zgs->orient) ? zgs->cur_size : h; - if ((w == mw) && (h == mh) && (sw == sh) && (sw == -1)) - { - /* FIXME: https://phab.enlightenment.org/T4747 */ - evas_object_size_hint_min_set(o, -1, -1); - } - evas_object_size_hint_min_set(o, w, h); -} - -static void -_site_layout(Evas_Object *o, Evas_Object_Box_Data *priv EINA_UNUSED, void *data) -{ - E_Gadget_Site *zgs = data; - Evas_Coord x, y, w, h;//, px, py; - Eina_List *l; - double ax, ay; - E_Gadget_Config *zgc; - - evas_object_geometry_get(o, &x, &y, &w, &h); - evas_object_geometry_set(zgs->events, x, y, w, h); - - evas_object_box_align_get(o, &ax, &ay); - - if (zgs->orient) - { - _site_layout_orient(o, zgs); - return; - } - if ((!w) || (!h)) return; - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - { - Evas_Coord gx = x, gy = y; - int ww, hh, ow, oh; - E_Zone *zone; - - if (!zgc->display) continue; - if (zgc->moving) - { - if (zgs->layout != pointer_site) continue; - _site_gadget_resize(zgc->gadget, w, h, &ww, &hh, &ow, &oh); - } - else - { - if (zgc->zone >= 0) - { - zone = e_comp_zone_number_get(zgc->zone); - x = gx = zone->x; - y = gy = zone->y; - w = zone->w; - h = zone->h; - } - - _site_gadget_resize(zgc->gadget, w * zgc->w, h * zgc->h, &ww, &hh, &ow, &oh); - if (zgc->x > -1.0) - { - gx = x + zgc->x * w; - gx += (Evas_Coord)(((double)(ww - ow)) * 0.5 * -ax); - } - if (zgc->y > -1.0) - { - gy = y + zgc->y * h; - gy += (Evas_Coord)(((double)(hh - oh)) * 0.5 * -ay); - } - } - if (zgs->gravity) - { -#if 0//FIXME - if (zgs->gravity % 2)//left/top - { - if (gx < px) gx = px; - } - else if () - { - if (gx > px) gx = px; - } - - if (zgs->gravity % 2)//left/top - { - if (gy < py) gy = py; - } - else - { - if (gy > py) gy = py; - } -#endif - } - - evas_object_move(zgc->display, gx, gy); -#if 0//FIXME - if (zgs->gravity is horizontal or something) - px = gx + (-ax * ow); - else - py = gy + (-ay * oh); -#endif - if (eina_list_count(zgs->gadgets) == 1) - { - int mw, mh, sw, sh; - - evas_object_size_hint_min_get(o, &mw, &mh); - evas_object_size_hint_min_get(zgs->layout, &sw, &sh); - if ((ow == mw) && (oh == mh) && (sw == sh) && (sw == -1)) - { - /* FIXME: https://phab.enlightenment.org/T4747 */ - evas_object_size_hint_min_set(o, -1, -1); - } - evas_object_size_hint_min_set(o, ow, oh); - } - } -} - -static Eina_Bool -_gadget_mouse_resize(E_Gadget_Config *zgc, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev) -{ - int x, y, w, h;//site geom - int ox, oy, ow, oh;//gadget geom - double gw, gh; - int dx, dy; - int ax, ay; - Evas_Aspect_Control aspect; - - evas_object_geometry_get(zgc->display, &ox, &oy, &ow, &oh); - evas_object_size_hint_aspect_get(zgc->gadget, &aspect, &ax, &ay); - if (zgc->zone >= 0) - { - E_Zone *zone; - - zone = e_comp_zone_number_get(zgc->zone); - x = zone->x, y = zone->y, w = zone->w, h = zone->h; - } - else - evas_object_geometry_get(zgc->site->layout, &x, &y, &w, &h); - /* restore screen-based geometry to canvas size */ - gw = zgc->w * w; - gh = zgc->h * h; - - /* apply mouse movement to canvas size */ - dx = ev->x - zgc->down.x, dy = ev->y - zgc->down.y; - if (zgc->resizing & E_GADGET_SITE_ANCHOR_LEFT) - gw -= dx; - else - gw += dx; - if (zgc->resizing & E_GADGET_SITE_ANCHOR_TOP) - gh -= dy; - else - gh += dy; - - /* apply aspect based on mouse position change */ - dx = abs(ev->x - zgc->down.x); - dy = abs(ev->y - zgc->down.y); - if (dx > dy) - { - /* use horizontal motion if most of event is horizontal */ - int ww = lround(gw), hh = lround(gh); - _site_gadget_aspect(zgc, &ww, &hh, ax, ay, EVAS_ASPECT_CONTROL_HORIZONTAL); - gh = hh; - } - else if (dy > dx) - { - /* use vertical motion if most of event is vertical */ - int ww = lround(gw), hh = lround(gh); - _site_gadget_aspect(zgc, &ww, &hh, ax, ay, EVAS_ASPECT_CONTROL_VERTICAL); - gw = ww; - } - else if ((dx == dy) && (ax != ay)) - { - /* use aspect values to calculate equal motion on both axes */ - int ww = lround(gw), hh = lround(gh); - if (ax > ay) - { - _site_gadget_aspect(zgc, &ww, &hh, ax, ay, EVAS_ASPECT_CONTROL_VERTICAL); - gw = ww; - } - else - { - _site_gadget_aspect(zgc, &ww, &hh, ax, ay, EVAS_ASPECT_CONTROL_HORIZONTAL); - gh = hh; - } - } - - /* calculate new position based on resize amount */ - dx = ev->x - zgc->down.x, dy = ev->y - zgc->down.y; - if (zgc->resizing & E_GADGET_SITE_ANCHOR_LEFT) - { - zgc->x = (((zgc->x + zgc->w) * (double)w) - gw) / (double)w; - } - if (zgc->resizing & E_GADGET_SITE_ANCHOR_TOP) - { - zgc->y = (((zgc->y + zgc->h) * (double)h) - gh) / (double)h; - } - - zgc->w = gw / w; - zgc->h = gh / h; - zgc->down.x = ev->x; - zgc->down.y = ev->y; - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); - e_config_save_queue(); - return ECORE_CALLBACK_RENEW; -} - -static void -_gadget_util_add(E_Gadget_Site *zgs, const char *domain, const char *type, int id) -{ - E_Gadget_Config *zgc; - - zgc = E_NEW(E_Gadget_Config, 1); - zgc->id = id; - if (domain) - { - zgc->external.domain = eina_stringshare_add(domain); - zgc->external.type = eina_stringshare_add(type); - } - else - zgc->type = eina_stringshare_add(type); - zgc->x = zgc->y = -1; - zgc->site = zgs; - zgc->zone = -1; - if (zgc->site->orient) - zgc->w = zgc->h = -1; - else - { - E_Zone *zone = e_zone_current_get(); - zgc->w = (96 * e_scale) / (double)zone->w; - zgc->h = (96 * e_scale) / (double)zone->h; - } - zgc->site->gadgets = eina_list_append(zgc->site->gadgets, zgc); - zgs->gadget_list = eina_inlist_append(zgs->gadget_list, EINA_INLIST_GET(zgc)); - _gadget_object_finalize(zgc); -} - -static Eina_Bool -_gadget_act_resize_end(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev EINA_UNUSED) -{ - E_Gadget_Config *zgc; - Evas_Object *g; - - if (obj->type != E_GADGET_TYPE) return EINA_FALSE; - g = e_object_data_get(obj); - zgc = evas_object_data_get(g, "__e_gadget"); - zgc->resizing = 0; - - E_FREE_FUNC(zgc->site->move_handler, ecore_event_handler_del); - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); - return EINA_TRUE; -} - -static void -_gadget_popups_clear(E_Gadget_Config *zgc) -{ - Eina_List *l, *ll; - Evas_Object *popup; - - EINA_LIST_FOREACH_SAFE(zgc->popups, l, ll, popup) - evas_object_del(popup); -} - -static Eina_Bool -_gadget_act_move(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev EINA_UNUSED) -{ - E_Gadget_Config *zgc, *z; - Evas_Object *g; - int w, h; - - if (obj->type != E_GADGET_TYPE) return EINA_FALSE; - - g = e_object_data_get(obj); - zgc = evas_object_data_get(g, "__e_gadget"); - zgc->moving = 1; - _editor_pointer_site_init(zgc->site->orient, NULL, NULL, 1); - e_gadget_site_owner_setup(pointer_site, zgc->site->anchor, NULL, NULL, NULL); - ZGS_GET(pointer_site); - if (zgc->external.domain) - _gadget_util_add(zgs, zgc->external.domain, zgc->external.type, zgc->id); - else - _gadget_util_add(zgs, NULL, zgc->type, zgc->id); - z = eina_list_data_get(zgs->gadgets); - if (!z) - { - E_FREE_FUNC(pointer_site, evas_object_del); - zgc->moving = 0; - return EINA_TRUE; - } - _gadget_popups_clear(zgc); - z->moving = 1; - evas_object_pass_events_set(zgc->site->layout, 1); - evas_object_geometry_get(g, NULL, NULL, &w, &h); - evas_object_resize(pointer_site, w, h); - eina_stringshare_refplace(&z->style.name, zgc->style.name); - z->orig = zgc; - return EINA_TRUE; -} - -static Eina_Bool -_gadget_act_resize(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev) -{ - E_Gadget_Config *zgc; - Evas_Object *g; - int x, y, w, h; - - if (obj->type != E_GADGET_TYPE) return EINA_FALSE; - - g = e_object_data_get(obj); - zgc = evas_object_data_get(g, "__e_gadget"); - if (zgc->site->orient) return EINA_FALSE; - _gadget_popups_clear(zgc); - evas_object_geometry_get(g, &x, &y, &w, &h); - if (ev->canvas.x < x + (w / 3)) - zgc->resizing = E_GADGET_SITE_ANCHOR_LEFT; - else if (ev->canvas.x > x + (w * 2 / 3)) - zgc->resizing = E_GADGET_SITE_ANCHOR_RIGHT; - if (ev->canvas.y < y + (h / 3)) - zgc->resizing |= E_GADGET_SITE_ANCHOR_TOP; - else if (ev->canvas.y > y + (h * 2 / 3)) - zgc->resizing |= E_GADGET_SITE_ANCHOR_BOTTOM; - if (!zgc->site->move_handler) - zgc->site->move_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, (Ecore_Event_Handler_Cb)_gadget_mouse_resize, zgc); - return EINA_TRUE; -} - -static void -_gadget_act_configure_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - zgc->cfg_object = NULL; -} - -static void -_gadget_configure(E_Gadget_Config *zgc) -{ - if (!zgc->configure) return; - if (zgc->cfg_object) - { - evas_object_raise(zgc->cfg_object); - evas_object_show(zgc->cfg_object); - return; - } - zgc->cfg_object = zgc->configure(zgc->gadget); - if (!zgc->cfg_object) return; - evas_object_event_callback_add(zgc->cfg_object, EVAS_CALLBACK_DEL, _gadget_act_configure_object_del, zgc); - evas_object_smart_callback_call(zgc->display, "gadget_popup", zgc->cfg_object); -} - -static void -_gadget_menu_populate(E_Gadget_Config *zgc, E_Menu *m) -{ - if (!zgc->populate) return; - zgc->populate(zgc->gadget, m); -} - -static Eina_Bool -_gadget_act_configure(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev EINA_UNUSED) -{ - E_Gadget_Config *zgc; - Evas_Object *g; - - if (obj->type != E_GADGET_TYPE) return EINA_FALSE; - - g = e_object_data_get(obj); - zgc = evas_object_data_get(g, "__e_gadget"); - _gadget_configure(zgc); - return EINA_TRUE; -} - -static void -_gadget_menu_remove(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - _gadget_remove(zgc); -} - -static void -_gadget_menu_configure(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - _gadget_configure(data); -} - -static void -_gadget_style_menu_item_del(void *mi) -{ - eina_stringshare_del(e_object_data_get(mi)); -} - -static void -_gadget_menu_style(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) -{ - E_Gadget_Config *zgc = data; - Eina_Stringshare *style = e_object_data_get(E_OBJECT(mi)); - - eina_stringshare_refplace(&zgc->style.name, style); - if (zgc->site->style_cb) - zgc->site->style_cb(zgc->site->layout, style, zgc->gadget); -} - -static void -_gadget_menu(Evas_Object *g, unsigned int timestamp) -{ - E_Gadget_Config *zgc; - E_Menu_Item *mi; - E_Menu *subm; - int x, y; - - zgc = evas_object_data_get(g, "__e_gadget"); - _gadget_popups_clear(zgc); - - zgc->menu = e_menu_new(); - e_menu_hold_mode_set(zgc->menu, EINA_FALSE); - if (zgc->type) - { - char buf[1024]; - - strncpy(buf, zgc->type, sizeof(buf) - 1); - buf[0] = toupper(buf[0]); - e_menu_title_set(zgc->menu, buf); - } - evas_object_smart_callback_call(g, "gadget_menu", zgc->menu); - if (zgc->configure) - { - mi = e_menu_item_new(zgc->menu); - e_menu_item_label_set(mi, _("Settings")); - e_util_menu_item_theme_icon_set(mi, "configure"); - e_menu_item_callback_set(mi, _gadget_menu_configure, zgc); - } - if (zgc->menu->items) - { - mi = e_menu_item_new(zgc->menu); - e_menu_item_separator_set(mi, 1); - } - subm = e_menu_new(); - e_menu_hold_mode_set(subm, EINA_FALSE); - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_style_menu", subm); - if (e_object_data_get(E_OBJECT(subm))) - { - Eina_List *styles = e_object_data_get(E_OBJECT(subm)); - Eina_Stringshare *style; - - mi = e_menu_item_new(zgc->menu); - e_menu_item_label_set(mi, _("Look")); - e_util_menu_item_theme_icon_set(mi, "preferences-look"); - e_menu_item_submenu_set(mi, subm); - e_object_unref(E_OBJECT(subm)); - - EINA_LIST_FREE(styles, style) - { - char buf[1024]; - - if (eina_streq(style, "base")) - { - eina_stringshare_del(style); - continue; - } - mi = e_menu_item_new(subm); - strncpy(buf, style, sizeof(buf) - 1); - buf[0] = toupper(buf[0]); - e_menu_item_label_set(mi, buf); - snprintf(buf, sizeof(buf), "enlightenment/%s", style); - e_util_menu_item_theme_icon_set(mi, buf); - e_menu_item_radio_group_set(mi, 1); - e_menu_item_radio_set(mi, 1); - e_menu_item_toggle_set(mi, style == zgc->style.name); - e_menu_item_disabled_set(mi, mi->toggle); - e_object_data_set(E_OBJECT(mi), style); - E_OBJECT_DEL_SET(mi, _gadget_style_menu_item_del); - e_menu_item_callback_set(mi, _gadget_menu_style, zgc); - } - } - else - e_object_del(E_OBJECT(subm)); - - - mi = e_menu_item_new(zgc->menu); - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_owner_menu", mi); - if (mi->label) - { - mi = e_menu_item_new(zgc->menu); - e_menu_item_separator_set(mi, 1); - } - else - e_object_del(E_OBJECT(mi)); - - mi = e_menu_item_new(zgc->menu); - e_menu_item_label_set(mi, _("Delete")); - e_util_menu_item_theme_icon_set(mi, "list-remove"); - e_menu_item_callback_set(mi, _gadget_menu_remove, zgc); - - evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); - e_menu_activate_mouse(zgc->menu, - e_zone_current_get(), - x, y, 1, 1, - E_MENU_POP_DIRECTION_AUTO, timestamp); - _desktop_rect_obj_add(zgc->menu->comp_object); - evas_object_smart_callback_call(zgc->site->layout, "gadget_site_popup", zgc->menu->comp_object); -} - -static void -_gadget_menu_cancel(Evas_Object *g, unsigned int timestamp EINA_UNUSED) -{ - E_Gadget_Config *zgc; - - zgc = evas_object_data_get(g, "__e_gadget"); - if (zgc->menu) - { - e_menu_deactivate(zgc->menu); - e_object_del(E_OBJECT(zgc->menu)); - zgc->menu = NULL; - } -} - -static Eina_Bool -_site_longpress_menu(void *data) -{ - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; - Evas_Object *g = NULL; - - zgs->down_timer = NULL; - zgs->longpressed = EINA_TRUE; - zgc = _gadget_at_xy(zgs, zgs->down_1_x, zgs->down_1_y, NULL); - if (zgc) g = zgc->gadget; - if (zgs->context_cb) zgs->context_cb(zgs->layout, g, ecore_loop_time_get() * 1000); - return EINA_FALSE; -} - -static Eina_Bool -_site_mouse_up_handle(E_Gadget_Site *zgs, int t EINA_UNUSED, Ecore_Event_Mouse_Button *ev) -{ - if (e_bindings_mouse_up_ecore_event_handle(E_BINDING_CONTEXT_ANY, zgs->action->e_obj_inherit, ev)) - { - evas_object_pointer_mode_set(zgs->events, EVAS_OBJECT_POINTER_MODE_NOGRAB); - zgs->action = NULL; - E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del); - } - return ECORE_CALLBACK_RENEW; -} - -static void -_site_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; - Evas_Event_Mouse_Down *ev = event_info; - E_Action *act; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - zgc = _gadget_at_xy(zgs, ev->output.x, ev->output.y, NULL); - if (zgc) - { - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - act = e_bindings_mouse_down_evas_event_handle(E_BINDING_CONTEXT_ANY, zgc->e_obj_inherit, event_info); - if (!act) ev->event_flags &= ~EVAS_EVENT_FLAG_ON_HOLD; - else if (act->func.end_mouse) - { - int x, y; - - evas_object_pointer_mode_set(obj, EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN); - zgs->action = zgc; - if (!zgs->mouse_up_handler) - zgs->mouse_up_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, (Ecore_Event_Handler_Cb)_site_mouse_up_handle, zgs); - - evas_object_geometry_get(zgc->display, &x, &y, NULL, NULL); - zgc->offset.x = ev->canvas.x - x; - zgc->offset.y = ev->canvas.y - y; - zgc->down.x = ev->canvas.x; - zgc->down.y = ev->canvas.y; - } - if (act) return; - } - if (ev->button == 1) - { - zgs->longpressed = EINA_FALSE; - zgs->dragged = EINA_FALSE; - zgs->down_1_x = ev->canvas.x; - zgs->down_1_y = ev->canvas.y; - E_FREE_FUNC(zgs->down_timer, ecore_timer_del); - zgs->down_timer = ecore_timer_add(1.0, _site_longpress_menu, zgs); - } - else if (ev->button == 3) - { - zgs->down_3_x = ev->canvas.x; - zgs->down_3_y = ev->canvas.y; - } -} - -static void -_site_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - E_Gadget_Site *zgs = data; - Evas_Event_Mouse_Up *ev = event_info; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - E_FREE_FUNC(zgs->down_timer, ecore_timer_del); - if ((zgs->longpressed) || (zgs->dragged)) - { - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - zgs->longpressed = EINA_FALSE; - zgs->dragged = EINA_FALSE; - } - } - else if (ev->button == 3) - { - if (!is_dragged(ev->canvas.x - zgs->down_3_x, - ev->canvas.y - zgs->down_3_y)) - { - E_Gadget_Config *zgc; - Evas_Object *g = NULL; - - zgc = _gadget_at_xy(zgs, zgs->down_3_x, zgs->down_3_y, NULL); - if (zgc) g = zgc->gadget; - if (zgs->context_cb) zgs->context_cb(zgs->layout, g, ev->timestamp); - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - } - } -} - -static void -_site_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - E_Gadget_Site *zgs = data; - Evas_Event_Mouse_Move *ev = event_info; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - - if ((zgs->down_timer) || (zgs->longpressed)) - { - if (is_dragged(ev->cur.canvas.x - zgs->down_1_x, - ev->cur.canvas.y - zgs->down_1_y)) - { - if (zgs->down_timer) - { - E_FREE_FUNC(zgs->down_timer, ecore_timer_del); - } - if (!zgs->dragged) - { - E_Gadget_Config *zgc; - Evas_Object *g = NULL; - - zgs->dragged = EINA_TRUE; - zgc = _gadget_at_xy(zgs, zgs->down_1_x, zgs->down_1_y, NULL); - if (zgc) g = zgc->gadget; - if (zgs->context_cancel_cb) zgs->context_cancel_cb(zgs->layout, g, ev->timestamp); - } - } - } -} - -static void -_site_drop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - E_Gadget_Site *zgs = data, *drop; - Eina_List *l; - E_Gadget_Config *zgc, *dzgc; - int mx, my; - int x, y, w, h; - - drop = evas_object_data_get(event_info, "__e_gadget_site"); - evas_pointer_canvas_xy_get(e_comp->evas, &mx, &my); - evas_object_geometry_get(zgs->layout, &x, &y, &w, &h); - if (!E_INSIDE(mx, my, x, y, w, h)) return; - - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - { - if (!zgc->display) continue; - - evas_object_geometry_get(zgc->display, &x, &y, &w, &h); - if (E_INSIDE(mx, my, x, y, w, h)) break; - } - if (zgc) - { - Eina_Bool pre = EINA_FALSE; - if (IS_HORIZ(zgs->orient)) - { - if (mx <= x + (w / 2)) - pre = EINA_TRUE; - } - else if (IS_VERT(zgs->orient)) - { - if (my <= y + (h / 2)) - pre = EINA_TRUE; - } - else {} //FIXME - if (zgs->orient) - { - Eina_List *ll; - - if (pre) - EINA_LIST_REVERSE_FOREACH(drop->gadgets, ll, dzgc) - { - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->gadget); - if (dzgc->id == -1) dzgc->id = 0; - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_prepend_relative(zgs->gadget_list, - EINA_INLIST_GET(dzgc), EINA_INLIST_GET(zgc)); - zgs->gadgets = eina_list_prepend_relative_list(zgs->gadgets, dzgc, l); - dzgc->site = zgs; - dzgc->zone = -1; - _gadget_object_finalize(dzgc); - } - else - EINA_LIST_REVERSE_FOREACH(drop->gadgets, ll, dzgc) - { - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->gadget); - if (dzgc->id == -1) dzgc->id = 0; - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_append_relative(zgs->gadget_list, - EINA_INLIST_GET(dzgc), EINA_INLIST_GET(zgc)); - zgs->gadgets = eina_list_append_relative_list(zgs->gadgets, dzgc, l); - dzgc->site = zgs; - dzgc->zone = -1; - _gadget_object_finalize(dzgc); - } - } - else - { - int dx, dy, dw, dh, gx, gy, gw, gh; - - /* FIXME: this should place _(around)_ the gadget that got dropped on */ - evas_object_geometry_get(drop->layout, &dx, &dy, &dw, &dh); - evas_object_geometry_get(zgs->layout, &x, &y, &w, &h); - EINA_LIST_FOREACH(drop->gadgets, l, dzgc) - { - E_Zone *zone; - /* calculate positioning offsets and normalize based on drop point */ - evas_object_geometry_get(dzgc->display, &gx, &gy, &gw, &gh); - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->display); - if ((w == e_comp->w) && (h == e_comp->h)) - { - zone = e_comp_object_util_zone_get(dzgc->display); - dzgc->zone = zone->num; - x = zone->x, y = zone->y, w = zone->w, h = zone->h; - } - else - dzgc->zone = -1; - if (dzgc->id == -1) dzgc->id = 0; - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_append(zgs->gadget_list, - EINA_INLIST_GET(dzgc)); - zgs->gadgets = eina_list_append(zgs->gadgets, dzgc); - dzgc->x = ((gx - dx) / (double)dw) + ((mx - x) / (double)w); - dzgc->y = ((gy - dy) / (double)dh) + ((my - y) / (double)h); - dzgc->w = gw / (double)w; - dzgc->h = gh / (double)h; - dzgc->site = zgs; - _gadget_object_finalize(dzgc); - } - } - } - else - { - if (zgs->orient) - { - if (mx >= x) //right of all exiting gadgets - { - EINA_LIST_FOREACH(drop->gadgets, l, dzgc) - { - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->gadget); - if (dzgc->id == -1) dzgc->id = 0; - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_append(zgs->gadget_list, - EINA_INLIST_GET(dzgc)); - zgs->gadgets = eina_list_append(zgs->gadgets, dzgc); - dzgc->site = zgs; - dzgc->zone = -1; - _gadget_object_finalize(dzgc); - } - } - else - { - EINA_LIST_REVERSE_FOREACH(drop->gadgets, l, dzgc) - { - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->gadget); - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_prepend(zgs->gadget_list, - EINA_INLIST_GET(dzgc)); - zgs->gadgets = eina_list_prepend(zgs->gadgets, dzgc); - dzgc->site = zgs; - if (dzgc->id == -1) dzgc->id = 0; - dzgc->zone = -1; - _gadget_object_finalize(dzgc); - } - } - } - else - { - int dx, dy, dw, dh, gx, gy, gw, gh; - - evas_object_geometry_get(drop->layout, &dx, &dy, &dw, &dh); - evas_object_geometry_get(zgs->layout, &x, &y, &w, &h); - EINA_LIST_FOREACH(drop->gadgets, l, dzgc) - { - E_Zone *zone; - /* calculate positioning offsets and normalize based on drop point */ - evas_object_geometry_get(dzgc->display, &gx, &gy, &gw, &gh); - evas_object_smart_callback_call(zgs->layout, "gadget_moved", dzgc->display); - if ((w == e_comp->w) && (h == e_comp->h)) - { - zone = e_comp_object_util_zone_get(dzgc->display); - dzgc->zone = zone->num; - x = zone->x, y = zone->y, w = zone->w, h = zone->h; - } - else - dzgc->zone = -1; - if (dzgc->id == -1) dzgc->id = 0; - evas_object_del(dzgc->gadget); - zgs->gadget_list = eina_inlist_append(zgs->gadget_list, - EINA_INLIST_GET(dzgc)); - zgs->gadgets = eina_list_append(zgs->gadgets, dzgc); - dzgc->x = ((gx - dx) / (double)dw) + ((mx - x - (mx - gx)) / (double)w); - dzgc->y = ((gy - dy) / (double)dh) + ((my - y - (my - gy)) / (double)h); - dzgc->w = gw / (double)w; - dzgc->h = gh / (double)h; - dzgc->site = zgs; - _gadget_object_finalize(dzgc); - } - } - } - drop->gadget_list = NULL; - drop->gadgets = eina_list_free(drop->gadgets); - evas_object_smart_need_recalculate_set(zgs->layout, 1); - e_config_save_queue(); -} - -static void -_site_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - - if (!evas_object_smart_parent_get(zgs->layout)) - { - Eina_List *l; - E_Gadget_Config *zgc; - int layer; - - layer = evas_object_layer_get(obj); - if (!zgs->orient) - { - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - if (zgc->display) - evas_object_layer_set(zgc->display, layer); - } - evas_object_layer_set(zgs->events, layer); - } - evas_object_raise(zgs->events); -} - -static void -_site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; - Eina_List *l, *ll; - - E_FREE_FUNC(zgs->events, evas_object_del); - E_FREE_FUNC(zgs->move_handler, ecore_event_handler_del); - E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del); - E_FREE_FUNC(zgs->calc_job, ecore_job_del); - EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc) - evas_object_del(zgc->display); - zgs->layout = NULL; - zgs->cur_size = 0; - zgs->action = NULL; - zgs->style_cb = NULL; - if (zgs->name) return; - eina_stringshare_del(zgs->name); - E_FREE_FUNC(zgs->down_timer, ecore_timer_del); - free(zgs); -} - -static void -_site_style(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; - Eina_List *l; - - if (!zgs->style_cb) return; - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - if (zgc->display) - zgc->site->style_cb(zgc->site->layout, zgc->style.name, zgc->gadget); -} - -static void -_site_visibility(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - E_Gadget_Config *zgc; - Eina_List *l; - Eina_Bool vis = evas_object_visible_get(obj); - - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - if (zgc->display) - { - if (vis) evas_object_show(zgc->display); - else evas_object_hide(zgc->display); - } -} - -static void -_site_create(E_Gadget_Site *zgs) -{ - zgs->layout = elm_box_add(e_comp->elm); - evas_object_name_set(zgs->layout, zgs->name); - elm_box_horizontal_set(zgs->layout, zgs->orient == E_GADGET_SITE_ORIENT_HORIZONTAL); - _gravity_apply(zgs, zgs->gravity); - if (!zgs->orient) - { - /* add dummy content to allow recalc to work */ - elm_box_pack_end(zgs->layout, elm_box_add(zgs->layout)); - } - elm_box_layout_set(zgs->layout, _site_layout, zgs, NULL); - evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_DEL, _site_del, zgs); - evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_RESTACK, _site_restack, zgs); - - zgs->events = evas_object_rectangle_add(e_comp->evas); - evas_object_name_set(zgs->events, "zgs->events"); - evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_MOVE, _site_move, zgs); - evas_object_smart_callback_add(zgs->layout, "gadget_site_dropped", _site_drop, zgs); - evas_object_smart_callback_add(zgs->layout, "gadget_site_style", _site_style, zgs); - evas_object_pointer_mode_set(zgs->events, EVAS_OBJECT_POINTER_MODE_NOGRAB); - evas_object_color_set(zgs->events, 0, 0, 0, 0); - evas_object_repeat_events_set(zgs->events, 1); - evas_object_show(zgs->events); - evas_object_event_callback_add(zgs->events, EVAS_CALLBACK_MOUSE_DOWN, _site_mouse_down, zgs); - evas_object_event_callback_add(zgs->events, EVAS_CALLBACK_MOUSE_UP, _site_mouse_up, zgs); - evas_object_event_callback_add(zgs->events, EVAS_CALLBACK_MOUSE_MOVE, _site_mouse_move, zgs); - if (!zgs->orient) - { - evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_SHOW, _site_visibility, zgs); - evas_object_event_callback_add(zgs->layout, EVAS_CALLBACK_HIDE, _site_visibility, zgs); - } - - evas_object_data_set(zgs->layout, "__e_gadget_site", zgs); - E_LIST_FOREACH(zgs->gadgets, _gadget_object_create); - evas_object_layer_set(zgs->events, evas_object_layer_get(zgs->layout)); - evas_object_raise(zgs->events); -} - -static void -_site_auto_add_comp_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - Eina_List *l, *ll; - E_Gadget_Config *zgc; - - /* prune unconfigured gadgets */ - EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc) - if (zgc->id <= 0) _gadget_remove(zgc); - e_config_save_queue(); - evas_object_del(zgs->layout); -} - -static void -_site_auto_add(E_Gadget_Site *zgs, Evas_Object *comp_object) -{ - int x, y, w, h; - - _site_create(zgs); - evas_object_event_callback_add(comp_object, EVAS_CALLBACK_DEL, _site_auto_add_comp_object_del, zgs); - evas_object_layer_set(zgs->layout, evas_object_layer_get(comp_object)); - evas_object_stack_above(zgs->layout, comp_object); - evas_object_geometry_get(comp_object, &x, &y, &w, &h); - evas_object_geometry_set(zgs->layout, x, y, w, h); -} - -static Eina_Bool -_site_auto_comp_object_handler(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Comp_Object *ev) -{ - const char *name; - Eina_List *l; - E_Gadget_Site *zgs; - - name = evas_object_name_get(ev->comp_object); - if (!name) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (zgs->autoadd && eina_streq(zgs->name, name)) - { - if (!zgs->layout) - _site_auto_add(zgs, ev->comp_object); - break; - } - return ECORE_CALLBACK_RENEW; -} - -static void -_site_zone_hover_update(Evas_Object *r, E_Zone *zone) -{ - int zx, zy, zw, zh; - - e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh); - evas_object_geometry_set(r, zx, zy, zw, zh); -} - -static void -_site_zone_hover_rect_new(E_Zone *zone) -{ - Evas_Object *r = elm_box_add(e_comp->elm); - _site_zone_hover_update(r, zone); - e_comp_object_util_del_list_append(zone->bg_event_object, r); - evas_object_data_set(zone->bg_event_object, "gadget_hover_rect", r); -} - -static Eina_Bool -_site_zones_update(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Zone_Move_Resize *ev) -{ - Evas_Object *r; - - r = evas_object_data_get(ev->zone->bg_event_object, "gadget_hover_rect"); - _site_zone_hover_update(r, ev->zone); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_site_auto_comp_update() -{ - E_Gadget_Site *zgs; - Eina_List *l; - Evas_Object *r; - E_Zone *zone; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - { - E_Gadget_Config *zgc = eina_list_data_get(zgs->gadgets); - - if (!zgc) continue; - if (zgc->zone == -1) continue; - evas_object_smart_need_recalculate_set(zgs->layout, 1); - } - EINA_LIST_FOREACH(e_comp->zones, l, zone) - { - r = evas_object_data_get(zone->bg_event_object, "gadget_hover_rect"); - if (!r) _site_zone_hover_rect_new(zone); - } - return ECORE_CALLBACK_RENEW; -} - -static Evas_Object * -_site_util_add(E_Gadget_Site_Orient orient, const char *name, Eina_Bool autoadd) -{ - E_Gadget_Site *zgs; - Eina_List *l; - Evas_Object *parent; - - if (name) - { - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (eina_streq(zgs->name, name)) - { - if (zgs->layout) return zgs->layout; - goto out; - } - } - zgs = E_NEW(E_Gadget_Site, 1); - - zgs->name = eina_stringshare_add(name); - zgs->autoadd = autoadd; - - if (name) - sites->sites = eina_list_append(sites->sites, zgs); -out: - zgs->orient = orient; - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - zgs->gravity = E_GADGET_SITE_GRAVITY_LEFT; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - zgs->gravity = E_GADGET_SITE_GRAVITY_TOP; - break; - default: break; - } - if (autoadd) - { - parent = evas_object_name_find(e_comp->evas, name); - if (parent) - _site_auto_add(zgs, parent); - } - else - _site_create(zgs); - - return zgs->layout; -} - -E_API Evas_Object * -e_gadget_site_add(E_Gadget_Site_Orient orient, const char *name) -{ - return _site_util_add(orient, name, 0); -} - -E_API Evas_Object * -e_gadget_site_auto_add(E_Gadget_Site_Orient orient, const char *name) -{ - return _site_util_add(orient, name, 1); -} - -E_API void -e_gadget_site_del(Evas_Object *obj) -{ - Eina_List *l, *ll; - E_Gadget_Config *zgc; - - ZGS_GET(obj); - - EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc) - _gadget_remove(zgc); - sites->sites = eina_list_remove(sites->sites, zgs); - evas_object_del(zgs->layout); - eina_stringshare_del(zgs->name); - free(zgs); -} - -E_API E_Gadget_Site_Anchor -e_gadget_site_anchor_get(Evas_Object *obj) -{ - ZGS_GET(obj); - - return zgs->anchor; -} - -E_API void -e_gadget_site_owner_setup(Evas_Object *obj, E_Gadget_Site_Anchor an, E_Gadget_Style_Cb cb, E_Gadget_Context_Cb context_cb, E_Gadget_Context_Cb context_cancel_cb) -{ - Evas_Object *parent; - ZGS_GET(obj); - - zgs->anchor = an; - zgs->style_cb = cb; - zgs->context_cb = context_cb; - zgs->context_cancel_cb = context_cancel_cb; - evas_object_smart_callback_call(zgs->layout, "gadget_site_anchor", NULL); - parent = evas_object_smart_parent_get(obj); - if (parent) - evas_object_smart_member_add(zgs->events, parent); - else - evas_object_smart_member_del(zgs->events); -} - -E_API E_Gadget_Site_Orient -e_gadget_site_orient_get(Evas_Object *obj) -{ - ZGS_GET(obj); - return zgs->orient; -} - -E_API E_Gadget_Site_Gravity -e_gadget_site_gravity_get(Evas_Object *obj) -{ - ZGS_GET(obj); - return zgs->gravity; -} - -E_API void -e_gadget_site_gravity_set(Evas_Object *obj, E_Gadget_Site_Gravity gravity) -{ - ZGS_GET(obj); - if (zgs->gravity == gravity) return; - zgs->gravity = gravity; - _gravity_apply(zgs, gravity); - evas_object_smart_need_recalculate_set(zgs->layout, 1); -} - -E_API Eina_List * -e_gadget_site_gadgets_list(Evas_Object *obj) -{ - Eina_List *l, *list = NULL; - E_Gadget_Config *zgc; - - ZGS_GET(obj); - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - if (zgc->display) - list = eina_list_append(list, zgc->gadget); - return list; -} - -E_API void -e_gadget_site_gadget_add(Evas_Object *obj, const char *type, Eina_Bool demo) -{ - int id = 0; - - demo = !!demo; - id -= demo; - EINA_SAFETY_ON_NULL_RETURN(gadget_types); - ZGS_GET(obj); - _gadget_util_add(zgs, NULL, type, id); -} - -E_API void -e_gadget_site_gadget_external_add(Evas_Object *obj, const char *domain, const char *type, Eina_Bool demo) -{ - int id = 0; - - demo = !!demo; - id -= demo; - EINA_SAFETY_ON_NULL_RETURN(gadget_types); - ZGS_GET(obj); - _gadget_util_add(zgs, domain, type, id); -} - -E_API Evas_Object * -e_gadget_site_get(Evas_Object *g) -{ - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL); - return zgc->site->layout; -} - -E_API Eina_Bool -e_gadget_site_is_desklock(Evas_Object *obj) -{ - const char *name; - ZGS_GET(obj); - name = evas_object_name_get(obj); - return name && strstr(name, "desklock"); -} - -E_API void -e_gadget_configure_cb_set(Evas_Object *g, E_Gadget_Configure_Cb cb) -{ - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - zgc->configure = cb; -} - -E_API void -e_gadget_configure(Evas_Object *g) -{ - E_Gadget_Config *zgc; - - if (e_desklock_state_get()) return; - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - _gadget_configure(zgc); -} - -E_API void -e_gadget_menu_populate_cb_set(Evas_Object *g, E_Gadget_Menu_Populate_Cb cb) -{ - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - zgc->populate = cb; -} - -E_API void -e_gadget_menu_populate(Evas_Object *g, E_Menu *m) -{ - E_Gadget_Config *zgc; - - if (e_desklock_state_get()) return; - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - _gadget_menu_populate(zgc, m); -} - -E_API Eina_Stringshare * -e_gadget_type_get(Evas_Object *g) -{ - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL); - return zgc->external.type ?: zgc->type; -} - -E_API void -e_gadget_type_add(const char *type, E_Gadget_Create_Cb callback, E_Gadget_Wizard_Cb wizard) -{ - E_Gadget_Type *t; - Eina_List *l, *ll; - E_Gadget_Site *zgs; - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_TRUE_RETURN(!!eina_hash_find(gadget_types, type)); - t = E_NEW(E_Gadget_Type, 1); - t->cb = callback; - t->wizard = wizard; - eina_hash_add(gadget_types, type, t); - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (zgs->layout) - EINA_LIST_FOREACH(zgs->gadgets, ll, zgc) - if (eina_streq(type, zgc->type)) - _gadget_object_create(zgc); -} - -E_API void -e_gadget_type_del(const char *type) -{ - Eina_List *l, *ll; - E_Gadget_Site *zgs; - E_Gadget_Config *zgc; - char buf[1024]; - - strncpy(buf, type, sizeof(buf) - 1); - - if (!gadget_types) return; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - { - EINA_LIST_FOREACH(zgs->gadgets, ll, zgc) - if (eina_streq(buf, zgc->type)) - evas_object_del(zgc->gadget); - } - eina_hash_del_by_key(gadget_types, type); -} - -E_API void -e_gadget_external_type_add(const char *domain, const char *type, E_Gadget_External_Create_Cb callback, E_Gadget_External_Wizard_Cb wizard) -{ - E_Gadget_External_Type *te; - Eina_List *l, *ll; - E_Gadget_Site *zgs; - E_Gadget_Config *zgc; - Eina_Hash *h = NULL; - - if (gadget_external_domains) - { - h = eina_hash_find(gadget_external_domains, domain); - if (h) - EINA_SAFETY_ON_TRUE_RETURN(!!eina_hash_find(h, type)); - } - else - gadget_external_domains = eina_hash_string_superfast_new((Eina_Free_Cb)eina_hash_free); - if (!h) - { - h = eina_hash_string_superfast_new(free); - eina_hash_add(gadget_external_domains, domain, h); - } - te = E_NEW(E_Gadget_External_Type, 1); - te->cb = callback; - te->wizard = wizard; - eina_hash_add(h, type, te); - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (zgs->layout) - EINA_LIST_FOREACH(zgs->gadgets, ll, zgc) - if (eina_streq(domain, zgc->external.domain) && eina_streq(type, zgc->external.type)) - _gadget_object_create(zgc); -} - -E_API void -e_gadget_external_type_name_cb_set(const char *domain, const char *type, E_Gadget_External_Name_Cb name) -{ - E_Gadget_External_Type *te; - - te = _gadget_external_type_get(domain, type); - EINA_SAFETY_ON_NULL_RETURN(te); - te->name = name; -} - -E_API void -e_gadget_external_type_del(const char *domain, const char *type) -{ - Eina_List *l, *ll; - E_Gadget_Site *zgs; - E_Gadget_Config *zgc; - - if (!gadget_external_domains) return; - if (!sites) return; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - { - EINA_LIST_FOREACH(zgs->gadgets, ll, zgc) - if (eina_streq(domain, zgc->external.domain)) - { - if ((!type) || eina_streq(type, zgc->external.type)) - evas_object_del(zgc->gadget); - } - } - if (type) - { - Eina_Hash *h; - - h = eina_hash_find(gadget_external_domains, domain); - EINA_SAFETY_ON_NULL_RETURN(h); - eina_hash_del_by_key(h, type); - if (!eina_hash_population(h)) - eina_hash_del_by_key(gadget_external_domains, domain); - } - else - eina_hash_del_by_key(gadget_external_domains, domain); -} - -E_API Eina_Iterator * -e_gadget_type_iterator_get(void) -{ - return gadget_types ? eina_hash_iterator_key_new(gadget_types) : NULL; -} - -E_API void -e_gadget_del(Evas_Object *g) -{ - E_Gadget_Config *zgc; - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - _gadget_remove(zgc); -} - -static void -_gadget_drop_handler_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int x, y, w, h; - - evas_object_geometry_get(obj, &x, &y, &w, &h); - e_drop_handler_geometry_set(data, x, y, w, h); -} - -E_API Evas_Object * -e_gadget_drop_handler_add(Evas_Object *g, void *data, - void (*enter_cb)(void *data, const char *type, void *event), - void (*move_cb)(void *data, const char *type, void *event), - void (*leave_cb)(void *data, const char *type, void *event), - void (*drop_cb)(void *data, const char *type, void *event), - const char **types, unsigned int num_types) -{ - E_Gadget_Config *zgc; - int x, y, w, h; - Evas_Object *drop_object; - E_Drop_Handler *drop_handler; - - EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL); - - if (!zgc->drop_handlers) - zgc->drop_handlers = eina_hash_pointer_new((Eina_Free_Cb)e_drop_handler_del); - - evas_object_geometry_get(zgc->display, &x, &y, &w, &h); - drop_handler = e_drop_handler_add(zgc->e_obj_inherit, NULL, data, - enter_cb, move_cb, leave_cb, drop_cb, - types, num_types, x, y, w, h); - drop_object = evas_object_rectangle_add(e_comp->evas); - drop_handler->base = drop_object; - evas_object_color_set(drop_object, 0, 0, 0, 0); - e_object_data_set(E_OBJECT(drop_handler), drop_object); - evas_object_data_set(drop_object, "gadget_drop_handler", drop_handler); - evas_object_geometry_set(drop_object, x, y, w, h); - evas_object_pass_events_set(drop_object, 1); - evas_object_layer_set(drop_object, evas_object_layer_get(zgc->display)); - evas_object_event_callback_add(drop_object, EVAS_CALLBACK_MOVE, _gadget_drop_handler_moveresize, drop_handler); - evas_object_event_callback_add(drop_object, EVAS_CALLBACK_RESIZE, _gadget_drop_handler_moveresize, drop_handler); - evas_object_event_callback_add(drop_object, EVAS_CALLBACK_DEL, _gadget_drop_handler_del, zgc); - eina_hash_add(zgc->drop_handlers, &drop_object, drop_handler); - return drop_object; -} - -static void -_gadget_style_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - evas_object_smart_need_recalculate_set(zgc->site->layout, 1); -} - -E_API Evas_Object * -e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style) -{ - E_Gadget_Config *zgc; - Evas_Object *prev; - const char *grp; - - EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL); - - prev = zgc->style.obj; - if ((!prev) && (!style)) return NULL; - zgc->style.obj = style; - if (style) - { - elm_layout_file_get(style, NULL, &grp); - eina_stringshare_replace(&zgc->style.name, strrchr(grp, '/') + 1); - evas_object_event_callback_priority_add(style, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_AFTER, _gadget_del, zgc); - } - else - eina_stringshare_replace(&zgc->style.name, NULL); - if (prev) - evas_object_event_callback_del_full(prev, EVAS_CALLBACK_DEL, _gadget_del, zgc); - e_config_save_queue(); - zgc->display = style ?: zgc->gadget; - E_FILL(zgc->display); - E_EXPAND(zgc->display); - if (zgc->site->gravity) - { - elm_box_pack_before(zgc->site->layout, zgc->display, prev ?: zgc->gadget); - if (prev) - elm_box_unpack(zgc->site->layout, prev); - } - evas_object_raise(zgc->site->events); - if (prev) evas_object_event_callback_del(prev, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _gadget_style_hints); - if (!style) return prev; - - evas_object_data_set(style, "__e_gadget", zgc); - - elm_layout_sizing_eval(style); - evas_object_smart_calculate(style); - evas_object_size_hint_min_get(style, &zgc->style.minw, &zgc->style.minh); - evas_object_event_callback_add(style, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _gadget_style_hints, zgc); - evas_object_show(style); - if (zgc->display != zgc->gadget) - evas_object_smart_callback_add(zgc->display, "gadget_popup", _gadget_popup, zgc); - return prev; -} - -static void -_gadget_util_ctxpopup_visibility(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - e_comp_shape_queue(); -} - -static void -_gadget_util_ctxpopup_moveresize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - e_comp_shape_queue(); -} - -E_API void -e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_obj) -{ - int x, y, w, h; - E_Layer layer; - E_Gadget_Config *zgc; - Evas_Object *content; - E_Zone *zone; - Elm_Ctxpopup_Direction first, second; - - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - - content = elm_object_content_get(ctx); - zone = e_comp_object_util_zone_get(g); - elm_ctxpopup_hover_parent_set(ctx, evas_object_data_get(zone->bg_event_object, "gadget_hover_rect")); - layer = MAX(evas_object_layer_get(pos_obj ?: g), E_LAYER_POPUP); - evas_object_layer_set(ctx, layer); - - evas_object_geometry_get(pos_obj ?: g, &x, &y, &w, &h); - if (zgc->site->anchor & E_GADGET_SITE_ANCHOR_TOP) - y += h; - if (zgc->site->anchor & E_GADGET_SITE_ANCHOR_LEFT) - x += w; - if (zgc->site->orient == E_GADGET_SITE_ORIENT_HORIZONTAL) - { - x += w / 2; - first = ELM_CTXPOPUP_DIRECTION_UP, second = ELM_CTXPOPUP_DIRECTION_DOWN; - if (zgc->site->anchor & E_GADGET_SITE_ANCHOR_TOP) - first = ELM_CTXPOPUP_DIRECTION_DOWN, second = ELM_CTXPOPUP_DIRECTION_UP; - } - else if (zgc->site->orient == E_GADGET_SITE_ORIENT_VERTICAL) - { - y += h / 2; - first = ELM_CTXPOPUP_DIRECTION_LEFT, second = ELM_CTXPOPUP_DIRECTION_RIGHT; - if (zgc->site->anchor & E_GADGET_SITE_ANCHOR_LEFT) - first = ELM_CTXPOPUP_DIRECTION_RIGHT, second = ELM_CTXPOPUP_DIRECTION_LEFT; - } - else - { - int zx, zy, zw, zh; - e_zone_useful_geometry_get(e_comp_object_util_zone_get(pos_obj ?: g), &zx, &zy, &zw, &zh); - if (x < zx + (zw / 2)) - { - second = ELM_CTXPOPUP_DIRECTION_RIGHT; - x += w / 2; - } - else - second = ELM_CTXPOPUP_DIRECTION_LEFT; - if (y < zy + (zh / 2)) - { - first = ELM_CTXPOPUP_DIRECTION_DOWN; - y += h; - } - else - first = ELM_CTXPOPUP_DIRECTION_UP; - } - elm_ctxpopup_direction_priority_set(ctx, first, second, 0, 0); - evas_object_move(ctx, x, y); - evas_object_event_callback_add(ctx, EVAS_CALLBACK_SHOW, _gadget_util_ctxpopup_visibility, NULL); - evas_object_event_callback_add(ctx, EVAS_CALLBACK_HIDE, _gadget_util_ctxpopup_visibility, NULL); - if (content) - { - evas_object_event_callback_add(content, EVAS_CALLBACK_MOVE, _gadget_util_ctxpopup_moveresize, NULL); - evas_object_event_callback_add(content, EVAS_CALLBACK_RESIZE, _gadget_util_ctxpopup_moveresize, NULL); - } - _desktop_rect_obj_add(ctx); - evas_object_smart_callback_call(g, "gadget_popup", ctx); - if (evas_object_visible_get(ctx)) - e_comp_shape_queue(); -} - -static void -_gadget_util_allow(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - zgc->allow_deny.allow(zgc->allow_deny.data, zgc->gadget, NULL); - _gadget_util_allow_deny_cleanup(zgc); -} - -static void -_gadget_util_deny(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Config *zgc = data; - - zgc->allow_deny.deny(zgc->allow_deny.data, zgc->gadget, NULL); - _gadget_util_allow_deny_cleanup(zgc); -} - -E_API void -e_gadget_util_allow_deny_ctxpopup(Evas_Object *g, const char *text, Evas_Smart_Cb allow_cb, Evas_Smart_Cb deny_cb, const void *data) -{ - Evas_Object *ctx, *tb, *lbl, *bt; - E_Gadget_Config *zgc; - - EINA_SAFETY_ON_NULL_RETURN(g); - zgc = evas_object_data_get(g, "__e_gadget"); - EINA_SAFETY_ON_NULL_RETURN(zgc); - - /* FIXME */ - EINA_SAFETY_ON_TRUE_RETURN(!!zgc->allow_deny.popup); - - EINA_SAFETY_ON_NULL_RETURN(allow_cb); - EINA_SAFETY_ON_NULL_RETURN(deny_cb); - EINA_SAFETY_ON_NULL_RETURN(text); - - zgc->allow_deny.allow = allow_cb; - zgc->allow_deny.deny = deny_cb; - zgc->allow_deny.data = (void*)data; - - ctx = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(ctx, "noblock"); - - tb = elm_table_add(ctx); - E_EXPAND(tb); - E_FILL(tb); - evas_object_show(tb); - lbl = elm_label_add(ctx); - E_FILL(lbl); - elm_object_text_set(lbl, text); - evas_object_show(lbl); - elm_table_pack(tb, lbl, 0, 0, 2, 2); - - bt = elm_button_add(ctx); - evas_object_show(bt); - E_EXPAND(bt); - E_FILL(bt); - elm_object_text_set(bt, _("Deny")); - evas_object_smart_callback_add(bt, "clicked", _gadget_util_deny, zgc); - elm_table_pack(tb, bt, 0, 2, 1, 1); - - bt = elm_button_add(ctx); - evas_object_show(bt); - E_EXPAND(bt); - E_FILL(bt); - elm_object_text_set(bt, _("Allow")); - evas_object_smart_callback_add(bt, "clicked", _gadget_util_allow, zgc); - elm_table_pack(tb, bt, 1, 2, 1, 1); - - elm_object_content_set(ctx, tb); - - e_gadget_util_ctxpopup_place(g, ctx, NULL); - zgc->allow_deny.popup = e_comp_object_util_add(ctx, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(zgc->allow_deny.popup, E_LAYER_POPUP); - evas_object_show(zgc->allow_deny.popup); -} - -EINTERN void -e_gadget_save(void) -{ - e_config_domain_save("e_gadget_sites", edd_sites, sites); -#ifdef HAVE_WAYLAND - e_gadget_runner_save(); -#endif -} - -EINTERN void -e_gadget_site_rename(const char *name, const char *newname) -{ - Eina_List *l; - E_Gadget_Site *zgs; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (eina_streq(zgs->name, name)) - { - eina_stringshare_replace(&zgs->name, newname); - e_config_save_queue(); - break; - } -} - -static void -_desktop_gadget_context(Evas_Object *site EINA_UNUSED, Evas_Object *g, unsigned int timestamp) -{ - if (g) _gadget_menu(g, timestamp); -} - -static void -_desktop_gadget_context_cancel(Evas_Object *site EINA_UNUSED, Evas_Object *g, unsigned int timestamp) -{ - if (g) _gadget_menu_cancel(g, timestamp); -} - -EINTERN void -e_gadget_init(void) -{ - gadget_types = eina_hash_string_superfast_new(free); - edd_gadget = E_CONFIG_DD_NEW("E_Gadget_Config", E_Gadget_Config); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, id, INT); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, zone, INT); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, type, STR); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, external.domain, STR); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, external.type, STR); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, style.name, STR); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, x, DOUBLE); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, y, DOUBLE); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, w, DOUBLE); - E_CONFIG_VAL(edd_gadget, E_Gadget_Config, h, DOUBLE); - - edd_site = E_CONFIG_DD_NEW("E_Gadget_Site", E_Gadget_Site); - E_CONFIG_VAL(edd_site, E_Gadget_Site, gravity, UINT); - E_CONFIG_VAL(edd_site, E_Gadget_Site, orient, UINT); - E_CONFIG_VAL(edd_site, E_Gadget_Site, anchor, UINT); - E_CONFIG_VAL(edd_site, E_Gadget_Site, autoadd, UCHAR); - E_CONFIG_VAL(edd_site, E_Gadget_Site, name, STR); - - E_CONFIG_LIST(edd_site, E_Gadget_Site, gadgets, edd_gadget); - - edd_sites = E_CONFIG_DD_NEW("E_Gadget_Sites", E_Gadget_Sites); - E_CONFIG_LIST(edd_sites, E_Gadget_Sites, sites, edd_site); - sites = e_config_domain_load("e_gadget_sites", edd_sites); - if (sites) - { - Eina_List *l; - E_Gadget_Site *zgs; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - { - Eina_List *ll; - E_Gadget_Config *zgc; - - EINA_LIST_FOREACH(zgs->gadgets, ll, zgc) - { - zgs->gadget_list = eina_inlist_append(zgs->gadget_list, EINA_INLIST_GET(zgc)); - zgc->site = zgs; - } - } - } - else - sites = E_NEW(E_Gadget_Sites, 1); - - move_act = e_action_add("gadget_move"); - e_action_predef_name_set(_("Gadgets"), _("Move gadget"), "gadget_move", NULL, NULL, 0); - move_act->func.go_mouse = _gadget_act_move; - - resize_act = e_action_add("gadget_resize"); - e_action_predef_name_set(_("Gadgets"), _("Resize gadget"), "gadget_resize", NULL, NULL, 0); - resize_act->func.go_mouse = _gadget_act_resize; - resize_act->func.end_mouse = _gadget_act_resize_end; - - configure_act = e_action_add("gadget_configure"); - e_action_predef_name_set(_("Gadgets"), _("Configure gadget"), "gadget_configure", NULL, NULL, 0); - configure_act->func.go_mouse = _gadget_act_configure; - - E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMP_OBJECT_ADD, _site_auto_comp_object_handler, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMPOSITOR_UPDATE, _site_auto_comp_update, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_USEFUL_GEOMETRY_CHANGED, _site_zones_update, NULL); - - E_LIST_FOREACH(e_comp->zones, _site_zone_hover_rect_new); - - comp_site = e_comp->canvas->gadget_site = e_gadget_site_add(E_GADGET_SITE_ORIENT_NONE, "__desktop"); - evas_object_event_callback_add(e_comp->canvas->resize_object, EVAS_CALLBACK_RESIZE, _comp_site_resize, comp_site); - ZGS_GET(comp_site); - zgs->context_cb = _desktop_gadget_context; - zgs->context_cancel_cb = _desktop_gadget_context_cancel; - evas_object_layer_set(comp_site, E_LAYER_DESKTOP); - evas_object_resize(comp_site, e_comp->w, e_comp->h); -#ifdef HAVE_WAYLAND - e_gadget_runner_init(); -#endif -} - -EINTERN void -e_gadget_shutdown(void) -{ - E_Gadget_Site *zgs; - -#ifdef HAVE_WAYLAND - e_gadget_runner_shutdown(); -#endif - E_FREE_LIST(handlers, ecore_event_handler_del); - E_CONFIG_DD_FREE(edd_gadget); - E_CONFIG_DD_FREE(edd_site); - E_CONFIG_DD_FREE(edd_sites); - EINA_LIST_FREE(sites->sites, zgs) - { - E_FREE_LIST(zgs->gadgets, _gadget_free); - evas_object_del(zgs->layout); - eina_stringshare_del(zgs->name); - free(zgs); - } - E_FREE(sites); - - e_action_del("gadget_move"); - e_action_del("gadget_resize"); - e_action_del("gadget_configure"); - e_action_predef_name_del(_("Gadgets"), _("Move gadget")); - e_action_predef_name_del(_("Gadgets"), _("Resize gadget")); - e_action_predef_name_del(_("Gadgets"), _("Configure gadget")); - move_act = resize_act = configure_act = NULL; - E_FREE_FUNC(gadget_types, eina_hash_free); - E_FREE_FUNC(gadget_external_domains, eina_hash_free); -} - -////////////////////////////////////////////////////// -//// EDITOR ///// -////////////////////////////////////////////////////// - -static void -_editor_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int w, h, size; - Elm_Object_Item *it; - - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - size = MAX(w, h); - size = MAX(size / 4, 100); - elm_gengrid_item_size_set(obj, size, size); - for (it = elm_gengrid_first_item_get(obj); it; it = elm_gengrid_item_next_get(it)) - { - Gadget_Item *gi = elm_object_item_data_get(it); - evas_object_size_hint_max_set(gi->gadget, lround(size * 0.95), lround(size * 0.95)); - } -} - -static void -_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Evas_Object *site = evas_object_data_get(obj, "__gadget_site"); - if (site) - { - evas_object_event_callback_del(site, EVAS_CALLBACK_DEL, _edit_site_del); - ZGS_GET(site); - zgs->editor = NULL; - } - evas_object_event_callback_del_full(data, EVAS_CALLBACK_RESIZE, _editor_resize, obj); -} - -static void -_editor_item_del(void *data, Evas_Object *obj EINA_UNUSED) -{ - Gadget_Item *gi = data; - elm_box_unpack_all(gi->box); - free(data); -} - -static void -_editor_pointer_site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - e_comp_ungrab_input(1, 1); - free(data); - pointer_site = NULL; - E_FREE_LIST(pointer_site_handlers, ecore_event_handler_del); -} - -static void -_editor_site_hints(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int x, y, w, h; - - evas_object_size_hint_min_get(obj, &w, &h); - evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); - evas_object_geometry_set(pointer_site, x - (w / 2), y - (h / 2), w, h); -} - -static Eina_Bool -_editor_pointer_button(Gadget_Item *active, int t EINA_UNUSED, Ecore_Event_Mouse_Button *ev) -{ - int x, y, w, h; - E_Gadget_Site *zgs, *zzgs = NULL; - - if (active->site) - { - evas_object_geometry_get(active->site, &x, &y, &w, &h); - if (evas_object_smart_need_recalculate_get(active->site)) - evas_object_smart_calculate(active->site); - if ((ev->buttons == 1) && E_INSIDE(ev->x, ev->y, x, y, w, h)) - evas_object_smart_callback_call(active->site, "gadget_site_dropped", pointer_site); - e_comp_canvas_feed_mouse_up(0); - evas_object_pass_events_set(active->site, 0); - evas_object_pass_events_set(desktop_editor, 0); - elm_object_disabled_set(active->editor, 1); - e_comp_object_util_del_list_remove(active->editor, pointer_site); - } - else - { - E_Gadget_Config *zgc, *z; - Eina_List *l; - - if (ev->buttons == 1) - { - EINA_LIST_FOREACH(sites->sites, l, zgs) - { - if (!zgs->layout) continue; - if (!evas_object_visible_get(zgs->events)) continue; - evas_object_geometry_get(zgs->layout, &x, &y, &w, &h); - if (!E_INSIDE(ev->x, ev->y, x, y, w, h)) continue; - /* FIXME: technically not accurate since objects on the same layer - * will have different stacking, but walking object trees sucks - */ - if ((!zzgs) || - (evas_object_layer_get(zzgs->layout) < evas_object_layer_get(zgs->layout))) - zzgs = zgs; - } - } - zgs = evas_object_data_get(pointer_site, "__e_gadget_site"); - zgc = eina_list_data_get(zgs->gadgets); - e_comp_canvas_feed_mouse_up(0); - evas_object_pass_events_set(zgc->orig->site->layout, 0); - evas_object_pass_events_set(desktop_editor, 0); - if (zzgs) - { - /* fake the moving gadget as being on the pointer site */ - z = zgc->orig; - zgc->site->gadget_list = eina_inlist_remove(zgc->site->gadget_list, EINA_INLIST_GET(zgc)); - zgc->site->gadgets = eina_list_remove(zgc->site->gadgets, zgc); - if (evas_object_smart_need_recalculate_get(zzgs->layout)) - evas_object_smart_calculate(zzgs->layout); - evas_object_geometry_get(zgc->display, &x, &y, NULL, NULL); - evas_object_move(z->display, x, y); - z->site->gadget_list = eina_inlist_remove(z->site->gadget_list, EINA_INLIST_GET(z)); - z->site->gadgets = eina_list_remove(z->site->gadgets, z); - zgs->gadgets = eina_list_append(zgs->gadgets, z); - z->site = zgs; - evas_object_smart_callback_call(zzgs->layout, "gadget_site_dropped", pointer_site); - _gadget_free(zgc); - } - - } - E_FREE_FUNC(pointer_site, evas_object_del); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_editor_pointer_move(Gadget_Item *active EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev) -{ - int w, h; - - evas_object_geometry_get(pointer_site, NULL, NULL, &w, &h); - evas_object_move(pointer_site, ev->x - (w / 2), ev->y - (h / 2)); - if (!e_gadget_site_orient_get(pointer_site)) - evas_object_smart_need_recalculate_set(pointer_site, 1); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_editor_pointer_wheel(Gadget_Item *active EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Wheel *ev) -{ - int w, h; - - evas_object_geometry_get(pointer_site, NULL, NULL, &w, &h); - evas_object_resize(pointer_site, w - (ev->z * 10 * e_scale), h - (ev->z * 10 * e_scale)); - evas_object_smart_need_recalculate_set(pointer_site, 1); - return ECORE_CALLBACK_RENEW; -} - -static void -_editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool up) -{ - Gadget_Item *active; - Evas_Object *rect; - int size; - - pointer_site = e_gadget_site_add(orient, NULL); - if (site && (orient == E_GADGET_SITE_ORIENT_HORIZONTAL)) - evas_object_geometry_get(site, NULL, NULL, NULL, &size); - else if (site && (orient == E_GADGET_SITE_ORIENT_VERTICAL)) - evas_object_geometry_get(site, NULL, NULL, &size, NULL); - else - size = 96 * e_scale; - evas_object_resize(pointer_site, size, size); - evas_object_layer_set(pointer_site, E_LAYER_MENU); - evas_object_pass_events_set(pointer_site, 1); - evas_object_show(pointer_site); - active = E_NEW(Gadget_Item, 1); - active->editor = editor; - active->site = site; - if (active->site) - evas_object_pass_events_set(active->site, 1); - evas_object_event_callback_add(pointer_site, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _editor_site_hints, active); - evas_object_event_callback_add(pointer_site, EVAS_CALLBACK_DEL, _editor_pointer_site_del, active); - E_LIST_HANDLER_APPEND(pointer_site_handlers, ECORE_EVENT_MOUSE_MOVE, _editor_pointer_move, active); - if (!orient) - E_LIST_HANDLER_APPEND(pointer_site_handlers, ECORE_EVENT_MOUSE_WHEEL, _editor_pointer_wheel, active); - E_LIST_HANDLER_APPEND(pointer_site_handlers, - up ? ECORE_EVENT_MOUSE_BUTTON_UP : ECORE_EVENT_MOUSE_BUTTON_DOWN, _editor_pointer_button, active); - - rect = evas_object_rectangle_add(e_comp->evas); - evas_object_resize(rect, e_comp->w, e_comp->h); - evas_object_color_set(rect, 0, 0, 0, 0); - evas_object_layer_set(rect, E_LAYER_MENU + 1); - e_comp_object_util_del_list_append(pointer_site, rect); - evas_object_show(rect); - e_comp_grab_input(1, 1); -} - -static void -_editor_gadget_new(void *data, Evas_Object *obj, void *event_info) -{ - Gadget_Item *gi = data; - E_Gadget_Site_Orient orient; - E_Gadget_Config *zgc; - - zgc = evas_object_data_get(gi->gadget, "__e_gadget"); - - evas_object_hide(desktop_editor); - evas_object_pass_events_set(desktop_editor, 1); - orient = e_gadget_site_orient_get(gi->site); - _editor_pointer_site_init(orient, gi->site, gi->editor, 0); - - if (zgc->external.domain) - e_gadget_site_gadget_external_add(pointer_site, zgc->external.domain, e_gadget_type_get(gi->gadget), 1); - else - e_gadget_site_gadget_add(pointer_site, e_gadget_type_get(gi->gadget), 1); - ZGS_GET(pointer_site); - { - zgc = eina_list_data_get(zgs->gadgets); - zgc->moving = 1; - } - elm_object_disabled_set(gi->editor, 1); - if (eina_streq(evas_object_type_get(obj), "elm_genlist")) - elm_genlist_item_selected_set(event_info, 0); - else - elm_gengrid_item_selected_set(event_info, 0); -} - -static Evas_Object * -_editor_content_get(void *data, Evas_Object *obj, const char *part, Evas_Object *old) -{ - Gadget_Item *gi = data; - Eina_Bool gl = eina_streq(evas_object_type_get(obj), "elm_genlist"); - - if (eina_streq(part, "elm.swallow.icon")) - { - if (gl) return NULL; - } - else if (!gl) return NULL; - if (old) - { - if (gi->box == old) return old; - elm_box_unpack_all(old); - elm_box_unpack(gi->box, gi->gadget); - elm_box_pack_end(old, gi->gadget); - gi->box = old; - return old; - } - gi->box = elm_box_add(obj); - elm_box_horizontal_set(gi->box, 1); - elm_box_pack_end(gi->box, gi->gadget); - return gi->box; -} - -static char * -_editor_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) -{ - char buf[1024]; - Gadget_Item *gi = data; - E_Gadget_Config *zgc; - - zgc = evas_object_data_get(gi->gadget, "__e_gadget"); - if (zgc->external.domain) - { - E_Gadget_External_Type *te; - - te = _gadget_external_type_get(zgc->external.domain, zgc->external.type); - if (te->name) - return te->name(zgc->external.type); - ERR("No name cb for external gadget provider!"); - return strdup(_("ERROR: NO NAME PROVIDED")); - } - strncpy(buf, e_gadget_type_get(gi->gadget), sizeof(buf) - 1); - buf[0] = toupper(buf[0]); - return strdup(buf); -} - -static void -_editor_gadget_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Gadget_Item *gi = data; - elm_object_item_del(gi->it); -} - -static int -_editor_sort(Elm_Object_Item *ita, Elm_Object_Item *itb) -{ - Gadget_Item *a = elm_object_item_data_get(ita); - Gadget_Item *b = elm_object_item_data_get(itb); - - return strcasecmp(e_gadget_type_get(a->gadget), e_gadget_type_get(b->gadget)); -} - -E_API Evas_Object * -e_gadget_editor_add(Evas_Object *parent, Evas_Object *site) -{ - Evas_Object *list, *tempsite, *g; - Eina_Iterator *it; - Eina_List *gadgets; - const char *type; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(site); - static Elm_Genlist_Item_Class gli = - { - .version = ELM_GENLIST_ITEM_CLASS_VERSION, - .func = - { - .text_get = _editor_text_get, - .reusable_content_get = _editor_content_get, - .del = _editor_item_del, - }, - }; - - if (orient) - { - orient = E_GADGET_SITE_ORIENT_HORIZONTAL; - list = elm_genlist_add(parent); - elm_genlist_homogeneous_set(list, 1); - elm_genlist_mode_set(list, ELM_LIST_COMPRESS); - } - else - { - list = elm_gengrid_add(parent); - evas_object_event_callback_add(list, EVAS_CALLBACK_RESIZE, _editor_resize, NULL); - } - elm_scroller_bounce_set(list, 0, 0); - elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - tempsite = e_gadget_site_add(orient, NULL); - evas_object_name_set(tempsite, evas_object_name_get(site)); - e_gadget_site_gravity_set(tempsite, E_GADGET_SITE_GRAVITY_NONE); - - it = e_gadget_type_iterator_get(); - /* FIXME: no types available */ - EINA_ITERATOR_FOREACH(it, type) - { - E_Gadget_Config *zgc; - e_gadget_site_gadget_add(tempsite, type, 1); - ZGS_GET(tempsite); - zgc = eina_list_last_data_get(zgs->gadgets); - if ((zgc) && (!zgc->gadget)) _gadget_remove(zgc); - } - eina_iterator_free(it); - - if (gadget_external_domains) - { - Eina_Hash_Tuple *tup; - - it = eina_hash_iterator_tuple_new(gadget_external_domains); - EINA_ITERATOR_FOREACH(it, tup) - { - const char *domain = tup->key; - Eina_Hash *h = tup->data; - E_Gadget_Config *zgc; - Eina_Iterator *typeit = eina_hash_iterator_key_new(h); - - EINA_ITERATOR_FOREACH(typeit, type) - { - e_gadget_site_gadget_external_add(tempsite, domain, type, 1); - ZGS_GET(tempsite); - zgc = eina_list_last_data_get(zgs->gadgets); - if (!zgc->gadget) _gadget_remove(zgc); - } - eina_iterator_free(typeit); - } - eina_iterator_free(it); - } - - gadgets = e_gadget_site_gadgets_list(tempsite); - EINA_LIST_FREE(gadgets, g) - { - Gadget_Item *gi; - - gi = E_NEW(Gadget_Item, 1); - gi->editor = list; - gi->gadget = g; - gi->site = site; - E_EXPAND(g); - E_FILL(g); - evas_object_pass_events_set(g, 1); - evas_object_event_callback_add(g, EVAS_CALLBACK_DEL, _editor_gadget_del, gi); - if (orient) - gi->it = elm_genlist_item_sorted_insert(list, &gli, gi, NULL, 0, (Eina_Compare_Cb)_editor_sort, _editor_gadget_new, gi); - else - gi->it = elm_gengrid_item_sorted_insert(list, &gli, gi, (Eina_Compare_Cb)_editor_sort, _editor_gadget_new, gi); - } - evas_object_event_callback_add(list, EVAS_CALLBACK_DEL, _editor_del, parent); - e_comp_object_util_del_list_append(list, tempsite); - ZGS_GET(site); - evas_object_event_callback_add(site, EVAS_CALLBACK_DEL, _edit_site_del, zgs); - evas_object_data_set(list, "__gadget_site", site); - /* FIXME: embedded editors? */ - zgs->editor = list; - if (desktop_rect) - { - Eina_List *l; - E_Gadget_Config *zgc; - - EINA_LIST_FOREACH(zgs->gadgets, l, zgc) - _desktop_rect_obj_add(zgc->display); - } - added = 0; - return list; -} - -static void -_editor_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - if (obj == desktop_editor) - evas_object_pass_events_set(desktop_editor, 0); -} - -E_API Evas_Object * -e_gadget_site_edit(Evas_Object *site) -{ - Evas_Object *comp_object, *popup, *editor, *tb, *r; - E_Zone *zone, *czone; - - ZGS_GET(site); - EINA_SAFETY_ON_TRUE_RETURN_VAL(!!zgs->editor, NULL); - zone = e_comp_object_util_zone_get(site); - czone = e_zone_current_get(); - if (zone != czone) - { - int x, y, w, h; - - evas_object_geometry_get(site, &x, &y, &w, &h); - if (E_INTERSECTS(x, y, w, h, czone->x, czone->y, czone->w, czone->h)) - zone = czone; - } - - popup = elm_popup_add(e_comp->elm); - elm_popup_scrollable_set(popup, EINA_FALSE); - elm_popup_allow_events_set(popup, 1); - - tb = elm_table_add(popup); - elm_object_content_set(popup, tb); - r = evas_object_rectangle_add(e_comp->evas); - evas_object_size_hint_min_set(r, zone->w / 2, 1); - e_comp_object_util_del_list_append(tb, r); - elm_table_pack(tb, r, 0, 0, 2, 1); - r = evas_object_rectangle_add(e_comp->evas); - evas_object_size_hint_min_set(r, 1, zone->h / 2); - e_comp_object_util_del_list_append(tb, r); - elm_table_pack(tb, r, 0, 1, 1, 1); - - editor = e_gadget_editor_add(e_comp->elm, site); - elm_table_pack(tb, editor, 0, 1, 2, 2); - evas_object_show(editor); - E_EXPAND(editor); - E_FILL(editor); - comp_object = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(comp_object, E_LAYER_POPUP); - evas_object_show(comp_object); - evas_object_event_callback_add(comp_object, EVAS_CALLBACK_SHOW, _editor_show, NULL); - evas_object_resize(comp_object, zone->w / 2, zone->h / 2); - e_comp_object_util_center_on_zone(comp_object, zone); - - return comp_object; -} - -static void -_edit_end() -{ - if (desktop_editor) - { - E_Action *act; - - act = e_action_find("desk_deskshow_toggle"); - if (act) act->func.go(E_OBJECT(e_comp_object_util_zone_get(desktop_editor)), NULL); - evas_object_hide(desktop_editor); - E_FREE_FUNC(desktop_editor, evas_object_del); - } - E_FREE_FUNC(desktop_rect, evas_object_del); - E_FREE_LIST(desktop_handlers, ecore_event_handler_del); - e_comp_ungrab_input(1, 1); -} - -static void -_edit_site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - E_Gadget_Site *zgs = data; - - evas_object_data_del(zgs->editor, "__gadget_site"); - zgs->editor = NULL; - _edit_end(); -} - -static void -_gadget_desklock_del(void) -{ - e_desklock_hide(); - desktop_editor = NULL; - _edit_end(); -} - -static void -_gadget_desklock_clear(void) -{ - Eina_List *l; - E_Gadget_Site *zgs; - - EINA_LIST_FOREACH(sites->sites, l, zgs) - if (zgs->autoadd && zgs->layout && strstr(zgs->name, "desklock.")) - { - E_LIST_FOREACH(zgs->gadgets, _gadget_remove); - } -} - -static Eina_Bool -_gadget_desklock_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev) -{ - if ((!_editor_site_visible()) && (!pointer_site)) return ECORE_CALLBACK_RENEW; - if (eina_streq(ev->key, "Escape")) - { - if (pointer_site) - { - E_FREE_FUNC(pointer_site, evas_object_del); - if (desktop_editor) evas_object_show(desktop_editor); - } - else - _gadget_desklock_del(); - } - else if (eina_streq(ev->key, "Delete") || eina_streq(ev->key, "BackSpace")) - _gadget_desklock_clear(); - return ECORE_CALLBACK_DONE; -} - -static void -_gadget_desklock_mouse_up_handler(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button != 1) return; - if (!_editor_site_visible()) return; - if (!added) - _gadget_desklock_del(); - added = 0; -} - -static void -_gadget_moved() -{ - added = 1; -} - -static Eina_List *desktop_editor_move_handlers; -static Evas_Point desktop_editor_move_point; -static E_Zone *desktop_editor_move_zone; - -static void -_desktop_editor_mouse_up_job(void *d) -{ - evas_object_repeat_events_set(d, 1); -} - -static Eina_Bool -_desktop_editor_mouse_up(void *d, int t EINA_UNUSED, Ecore_Event_Mouse_Button *ev EINA_UNUSED) -{ - E_FREE_LIST(desktop_editor_move_handlers, ecore_event_handler_del); - evas_object_pointer_mode_set(d, EVAS_OBJECT_POINTER_MODE_NOGRAB); - ecore_job_add(_desktop_editor_mouse_up_job, d); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_desktop_editor_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev) -{ - int x, y, w, h; - int nx, ny; - - evas_object_geometry_get(desktop_editor, &x, &y, &w, &h); - nx = x + ev->x - desktop_editor_move_point.x; - ny = y + ev->y - desktop_editor_move_point.y; - desktop_editor_move_point.x = ev->x; - desktop_editor_move_point.y = ev->y; - if (!E_CONTAINS(desktop_editor_move_zone->x, desktop_editor_move_zone->y, desktop_editor_move_zone->w, desktop_editor_move_zone->h, - nx, ny, w, h)) - { - if (nx < desktop_editor_move_zone->x) nx = desktop_editor_move_zone->x; - if (ny < desktop_editor_move_zone->y) ny = desktop_editor_move_zone->y; - if (nx + w > desktop_editor_move_zone->x + desktop_editor_move_zone->w) - nx = desktop_editor_move_zone->x + desktop_editor_move_zone->w - w; - if (ny + h > desktop_editor_move_zone->y + desktop_editor_move_zone->h) - ny = desktop_editor_move_zone->y + desktop_editor_move_zone->h - h; - } - evas_object_move(desktop_editor, nx, ny); - return ECORE_CALLBACK_RENEW; -} - -static void -_desktop_editor_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - uintptr_t button = (uintptr_t)(uintptr_t*)data; - uintptr_t modifiers = button % 10000; - int i; - const char *names[] = - { - "Shift", - "Control", - "Alt", - "Win", - "AltGr", - }; - - button = (button - modifiers) / 10000; - if (button != (unsigned int)ev->button) return; - for (i = 0; modifiers && i < 5; i++) - { - if (!(modifiers & (1 << i))) continue; - if (evas_key_modifier_is_set(ev->modifiers, names[i])) - modifiers &= ~(1 << i); - } - if (modifiers) return; - desktop_editor_move_point.x = ev->output.x; - desktop_editor_move_point.y = ev->output.y; - desktop_editor_move_zone = e_comp_object_util_zone_get(obj); - evas_object_pointer_mode_set(obj, EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN); - evas_object_repeat_events_set(obj, 0); - E_LIST_HANDLER_APPEND(desktop_editor_move_handlers, ECORE_EVENT_MOUSE_MOVE, _desktop_editor_mouse_move, obj); - E_LIST_HANDLER_APPEND(desktop_editor_move_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _desktop_editor_mouse_up, obj); -} - -static void -_desktop_editor_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - evas_object_layer_set(data, evas_object_layer_get(obj)); -} - -static void -_desktop_editor_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int x, y, w, h; - - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_geometry_set(data, x, y, w, h); -} - -static void -_desktop_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_del(data); - E_FREE_LIST(desktop_editor_move_handlers, ecore_event_handler_del); -} - -static void -_desktop_editor_visibility(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - if (evas_object_visible_get(obj)) - { - evas_object_show(data); - evas_object_pointer_mode_set(data, EVAS_OBJECT_POINTER_MODE_NOGRAB); - } - else - { - evas_object_hide(data); - evas_object_pointer_mode_set(data, EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN); - } -} - -static void -_desktop_editor_text_add(void) -{ - Evas_Object *txt, *tb, *popup = e_comp_object_util_get(desktop_editor); - unsigned int button, modifiers; - char *hotkeys; - - hotkeys = e_bindings_mouse_action_modifiers_text_generate(E_BINDING_CONTEXT_ANY, "gadget_move", &modifiers, &button); - tb = elm_object_content_get(popup); - if (hotkeys) - { - char buf[4096]; - Evas_Object *bx, *r; - - elm_object_content_unset(popup); - r = evas_object_rectangle_add(e_comp->evas); - evas_object_repeat_events_set(r, 1); - _desktop_rect_obj_add(r); - evas_object_layer_set(r, evas_object_layer_get(desktop_editor)); - evas_object_color_set(r, 0, 0, 0, 0); - evas_object_show(r); - bx = elm_box_add(popup); - evas_object_event_callback_add(bx, EVAS_CALLBACK_MOVE, _desktop_editor_moveresize, r); - evas_object_event_callback_add(bx, EVAS_CALLBACK_RESIZE, _desktop_editor_moveresize, r); - evas_object_event_callback_add(desktop_editor, EVAS_CALLBACK_RESTACK, _desktop_editor_restack, r); - evas_object_event_callback_add(desktop_editor, EVAS_CALLBACK_DEL, _desktop_editor_del, r); - evas_object_event_callback_add(desktop_editor, EVAS_CALLBACK_SHOW, _desktop_editor_visibility, r); - evas_object_event_callback_add(desktop_editor, EVAS_CALLBACK_HIDE, _desktop_editor_visibility, r); - evas_object_show(bx); - elm_object_content_set(popup, bx); - elm_box_pack_end(bx, tb); - txt = elm_label_add(tb); - elm_box_pack_start(bx, txt); - evas_object_show(txt); - snprintf(buf, sizeof(buf), _("The current binding to move gadgets and this dialog is %s+Mouse %d"), hotkeys, button); - elm_object_text_set(txt, buf); - evas_object_pointer_mode_set(r, EVAS_OBJECT_POINTER_MODE_NOGRAB); - button = (button * 10000) + modifiers; - evas_object_event_callback_add(r, EVAS_CALLBACK_MOUSE_DOWN, _desktop_editor_mouse_down, (uintptr_t*)(uintptr_t)button); - } - txt = elm_label_add(tb); - evas_object_show(txt); - elm_object_text_set(txt, _("Press Escape or click the background to exit." - "Use Backspace or Delete to remove all gadgets from this screen")); - elm_table_pack(tb, txt, 0, 3, 2, 1); -} - -static Eina_Bool -_gadget_desklock_handler(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Comp_Object *ev) -{ - const char *name; - Evas_Object *site, *comp_object; - - name = evas_object_name_get(ev->comp_object); - if (!name) return ECORE_CALLBACK_RENEW; - if (strncmp(name, "desklock", 8)) return ECORE_CALLBACK_RENEW; - evas_object_layer_set(ev->comp_object, DESKLOCK_DEMO_LAYER - 1); - site = e_gadget_site_auto_add(E_GADGET_SITE_ORIENT_NONE, name); - _desktop_rect_obj_add(site); - evas_object_smart_callback_add(site, "gadget_moved", _gadget_moved, NULL); - evas_object_layer_set(site, DESKLOCK_DEMO_LAYER); - ZGS_GET(site); - desktop_editor = comp_object = e_gadget_site_edit(site); - _desktop_editor_text_add(); - _desktop_rect_obj_add(zgs->events); - _desktop_rect_obj_add(comp_object); - e_comp_object_util_del_list_append(ev->comp_object, comp_object); - - return ECORE_CALLBACK_RENEW; -} - -E_API void -e_gadget_site_desklock_edit(void) -{ - desktop_rect = evas_object_event_grabber_add(e_comp->evas); - evas_object_resize(desktop_rect, e_comp->w, e_comp->h); - evas_object_layer_set(desktop_rect, E_LAYER_MAX - 100); - evas_object_show(desktop_rect); - E_LIST_HANDLER_APPEND(desktop_handlers, E_EVENT_COMP_OBJECT_ADD, _gadget_desklock_handler, NULL); - E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_KEY_DOWN, _gadget_desklock_key_handler, NULL); - evas_object_event_callback_add(desktop_rect, EVAS_CALLBACK_MOUSE_UP, _gadget_desklock_mouse_up_handler, NULL); - e_desklock_demo(); - e_comp_grab_input(1, 1); -} - -static Eina_Bool -_gadget_desktop_key_handler(void *data, int t EINA_UNUSED, Ecore_Event_Key *ev) -{ - if ((!_editor_site_visible()) && (!pointer_site)) return ECORE_CALLBACK_RENEW; - if (eina_streq(ev->key, "Escape")) - { - if (pointer_site) - { - E_FREE_FUNC(pointer_site, evas_object_del); - if (desktop_editor) evas_object_show(desktop_editor); - } - else - _edit_end(); - } - else if (eina_streq(ev->key, "Delete") || eina_streq(ev->key, "BackSpace")) - { - E_Gadget_Site *zgs = data; - E_LIST_FOREACH(zgs->gadgets, _gadget_remove); - } - return ECORE_CALLBACK_DONE; -} - -static void -_gadget_desktop_mouse_up_handler(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button != 1) return; - if (!_editor_site_visible()) return; - if (!added) - _edit_end(); - added = 0; -} - -E_API void -e_gadget_site_desktop_edit(Evas_Object *site) -{ - E_Action *act; - - ZGS_GET(site); - - desktop_rect = evas_object_event_grabber_add(e_comp->evas); - evas_object_event_callback_add(desktop_rect, EVAS_CALLBACK_DEL, _edit_end, NULL); - evas_object_resize(desktop_rect, e_comp->w, e_comp->h); - evas_object_layer_set(desktop_rect, E_LAYER_MAX - 100); - evas_object_show(desktop_rect); - - _desktop_rect_obj_add(site); - - E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_KEY_DOWN, _gadget_desktop_key_handler, zgs); - evas_object_event_callback_add(desktop_rect, EVAS_CALLBACK_MOUSE_UP, _gadget_desktop_mouse_up_handler, NULL); - - desktop_editor = e_gadget_site_edit(site); - _desktop_editor_text_add(); - _desktop_rect_obj_add(desktop_editor); - evas_object_smart_callback_add(site, "gadget_moved", _gadget_moved, NULL); - evas_object_show(desktop_editor); - - act = e_action_find("desk_deskshow_toggle"); - if (act) act->func.go(E_OBJECT(e_comp_object_util_zone_get(desktop_editor)), NULL); - e_comp_grab_input(1, 1); -} diff --git a/src/bin/e_gadget.h b/src/bin/e_gadget.h deleted file mode 100644 index 0afae5111..000000000 --- a/src/bin/e_gadget.h +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef E_TYPEDEFS -#ifndef E_GADGET_H -# define E_GADGET_H - - -/** SMART CALLBACKS: - ------------------------------- - * called by gadget site internals on gadget site object: - - * have a gadget object as event_info - * { - "gadget_added" - - a new gadget was added to the gadget site by the user - "gadget_created" - - a gadget object was created on the site - "gadget_destroyed" - - a gadget object was destroyed on the site; all objects created by the - gadget infrastructure are now dead - - do not watch both this and EVAS_CALLBACK_DEL, as the ordering of these - callbacks is not consistent - "gadget_moved" - - a gadget is preparing to move from its current site - "gadget_removed" - - a gadget was removed from the gadget site by the user - - the gadget should remove its config when this is triggered - * } - - * have NULL as event_info - * { - "gadget_site_anchor" - - the anchor of the gadget site changed - "gadget_site_gravity" - - the gravity of the gadget site changed - "gadget_site_locked" - - the gadget site's visibility has been locked (must be visible) - "gadget_site_unlocked" - - the gadget site's visibility has been unlocked (can be hidden) - * } - - * have E_Menu as event_info - * { - "gadget_site_owner_menu" - - the owner (parent object) of the site should add any owner-specific items - in this callback (eg. settings) - "gadget_site_style_menu" - - the owner (parent object) of the site should add any style-specific items - in this callback (eg. plain, inset) - * } - - * have Evas_Object as event_info - * { - "gadget_site_popup" - - a popup has been triggered from the site; the site must remain visible until - the passed popup object has been hidden - - event_info is the Evas_Object of the popup - * } - ------------------------------- - ------------------------------- - * called externally on gadget site - "gadget_site_dropped" - - called on a target site when a gadget site is dropped on it - - event_info is the dropped site - - all gadgets on the dropped site will be moved to the target site - "gadget_site_style" - - called on a target site when its owner has executed a style change - - event_info is NULL - - triggers restyling of all contained gadgets - ------------------------------- - ------------------------------- - * called by gadget internals on gadget object: - "gadget_menu" - - called on a gadget object when the "gadget_menu" action has been triggered - - event_info is an E_Menu object - - if a configure callback has been passed with e_gadget_configure_cb_set(), - a "Settings" item will be automatically added with this callback - "gadget_reparent" - - called on a gadget object when the gadget has been reparented - - parent object is event_info - - indicates that the gadget should watch this new object for EVAS_CALLBACK_RESIZE - - event_info will be NULL in the case that the reparenting removes the parent - ------------------------------- - ------------------------------- - * called externally by gadget on gadget object: - "gadget_popup" - - called on a gadget object by the gadget when the gadget creates a popup which - requires that the gadget remain visible for the lifetime of the popup - - event_info is the Evas_Object of the popup - */ - -#include "e_gadget_types.h" - -typedef Evas_Object *(*E_Gadget_Create_Cb)(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -typedef Evas_Object *(*E_Gadget_External_Create_Cb)(Evas_Object *parent, const char *type, int *id, E_Gadget_Site_Orient orient); -typedef Evas_Object *(*E_Gadget_Configure_Cb)(Evas_Object *gadget); -typedef void (*E_Gadget_Menu_Populate_Cb)(Evas_Object *gadget, E_Menu *m); -typedef void (*E_Gadget_Context_Cb)(Evas_Object *site, Evas_Object *g, unsigned int timestamp); -typedef void (*E_Gadget_Wizard_End_Cb)(void *data, int id); -typedef Evas_Object *(*E_Gadget_Wizard_Cb)(E_Gadget_Wizard_End_Cb cb, void *data, Evas_Object *site); -typedef Evas_Object *(*E_Gadget_External_Wizard_Cb)(E_Gadget_Wizard_End_Cb cb, void *data, const char *type, Evas_Object *site); -typedef void (*E_Gadget_Style_Cb)(Evas_Object *owner, Eina_Stringshare *name, Evas_Object *g); -typedef char *(*E_Gadget_External_Name_Cb)(const char *type); - -EINTERN void e_gadget_init(void); -EINTERN void e_gadget_shutdown(void); -EINTERN void e_gadget_site_rename(const char *name, const char *newname); - -E_API Evas_Object *e_gadget_site_add(E_Gadget_Site_Orient orient, const char *name); -E_API Evas_Object *e_gadget_site_auto_add(E_Gadget_Site_Orient orient, const char *name); -E_API void e_gadget_site_del(Evas_Object *obj); -E_API E_Gadget_Site_Anchor e_gadget_site_anchor_get(Evas_Object *obj); -E_API void e_gadget_site_owner_setup(Evas_Object *obj, E_Gadget_Site_Anchor an, E_Gadget_Style_Cb cb, E_Gadget_Context_Cb context_cb, E_Gadget_Context_Cb context_cancel_cb); -E_API E_Gadget_Site_Orient e_gadget_site_orient_get(Evas_Object *obj); -E_API E_Gadget_Site_Gravity e_gadget_site_gravity_get(Evas_Object *obj); -E_API void e_gadget_site_gravity_set(Evas_Object *obj, E_Gadget_Site_Gravity gravity); -E_API void e_gadget_site_gadget_add(Evas_Object *obj, const char *type, Eina_Bool demo); -E_API void e_gadget_site_gadget_external_add(Evas_Object *obj, const char *domain, const char *type, Eina_Bool demo); -E_API Eina_List *e_gadget_site_gadgets_list(Evas_Object *obj); -E_API Eina_Bool e_gadget_site_is_desklock(Evas_Object *obj); - -E_API void e_gadget_configure_cb_set(Evas_Object *g, E_Gadget_Configure_Cb cb); -E_API void e_gadget_configure(Evas_Object *g); -E_API void e_gadget_menu_populate_cb_set(Evas_Object *g, E_Gadget_Menu_Populate_Cb cb); -E_API void e_gadget_menu_populate(Evas_Object *g, E_Menu *m); - -E_API Evas_Object *e_gadget_site_get(Evas_Object *g); -E_API Eina_Stringshare *e_gadget_type_get(Evas_Object *g); - -E_API void e_gadget_type_add(const char *type, E_Gadget_Create_Cb callback, E_Gadget_Wizard_Cb wizard); -E_API void e_gadget_type_del(const char *type); -E_API void e_gadget_external_type_add(const char *domain, const char *type, E_Gadget_External_Create_Cb callback, E_Gadget_External_Wizard_Cb wizard); -E_API void e_gadget_external_type_del(const char *domain, const char *type); -E_API void e_gadget_external_type_name_cb_set(const char *domain, const char *type, E_Gadget_External_Name_Cb name); -E_API Eina_Iterator *e_gadget_type_iterator_get(void); -/* delete a gadget and its config */ -E_API void e_gadget_del(Evas_Object *g); -/* drop region initially matches gadget size, resizes to match returned object's size - * handler is removed when returned object is deleted - */ -E_API Evas_Object *e_gadget_drop_handler_add(Evas_Object *g, void *data, - void (*enter_cb)(void *data, const char *type, void *event), - void (*move_cb)(void *data, const char *type, void *event), - void (*leave_cb)(void *data, const char *type, void *event), - void (*drop_cb)(void *data, const char *type, void *event), - const char **types, unsigned int num_types); - -E_API Evas_Object *e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style); -E_API void e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_obj); -E_API void e_gadget_util_allow_deny_ctxpopup(Evas_Object *g, const char *text, Evas_Smart_Cb allow_cb, Evas_Smart_Cb deny_cb, const void *data); - -E_API Evas_Object *e_gadget_editor_add(Evas_Object *parent, Evas_Object *site); -E_API Evas_Object *e_gadget_site_edit(Evas_Object *site); -E_API void e_gadget_site_desklock_edit(void); -E_API void e_gadget_site_desktop_edit(Evas_Object *site); -#endif -#endif diff --git a/src/bin/e_gadget_loader.c b/src/bin/e_gadget_loader.c deleted file mode 100644 index 24913c915..000000000 --- a/src/bin/e_gadget_loader.c +++ /dev/null @@ -1,354 +0,0 @@ -#include "config.h" -#define EFL_BETA_API_SUPPORT -#include -#include -#include -#include "e-gadget-client-protocol.h" -#include "action_route-client-protocol.h" -#include - -static Ecore_Event_Handler *handler; - -static Eina_Hash *wins; -static Eina_Hash *gadget_globals; -static Eina_Hash *ar_globals; -static Eina_Hash *display_actions; -static Eina_List *tooltips; - -typedef struct Gadget_Action -{ - Ecore_Wl2_Display *d; - Eina_Stringshare *action; - char handle[37]; - Eina_List *requestors; - struct action_route_bind *ar_bind; -} Gadget_Action; - -static inline Ecore_Wl2_Display * -win_display_get(Evas_Object *win) -{ - Ecore_Wl2_Window *ww; - ww = elm_win_wl_window_get(win); - return ecore_wl2_window_display_get(ww); -} - -static void -win_emit(Ecore_Wl2_Display *d, const char *sig, uint32_t val) -{ - Evas_Object *win; - - win = eina_list_data_get(eina_hash_find(wins, &d)); - evas_object_smart_callback_call(win, sig, (uintptr_t*)(uintptr_t)val); -} - -static void -_gadget_anchor(void *data, struct e_gadget *e_gadget EINA_UNUSED, uint32_t anchor) -{ - win_emit(data, "gadget_site_anchor", anchor); -} - -static void -_gadget_orient(void *data, struct e_gadget *e_gadget EINA_UNUSED, uint32_t orient) -{ - win_emit(data, "gadget_site_orient", orient); -} - -static void -_gadget_gravity(void *data, struct e_gadget *e_gadget EINA_UNUSED, uint32_t gravity) -{ - win_emit(data, "gadget_site_gravity", gravity); -} - -static void -_gadget_configure(void *data, struct e_gadget *e_gadget EINA_UNUSED) -{ - Evas_Object *win; - - win = eina_list_data_get(eina_hash_find(wins, &data)); - evas_object_smart_callback_call(win, "gadget_configure", NULL); -} - -static const struct e_gadget_listener _gadget_listener = -{ - _gadget_anchor, - _gadget_orient, - _gadget_gravity, - _gadget_configure, -}; - -static void -_gadget_global_bind(Ecore_Wl2_Display *d, uint32_t id) -{ - Eina_List *l; - Evas_Object *tt; - - struct e_gadget *gadget_global = wl_registry_bind(ecore_wl2_display_registry_get(d), id, &e_gadget_interface, 1); - e_gadget_add_listener(gadget_global, &_gadget_listener, d); - eina_hash_add(gadget_globals, &d, gadget_global); - EINA_LIST_FOREACH(tooltips, l, tt) - e_gadget_set_tooltip(gadget_global, ecore_wl2_window_surface_get(elm_win_wl_window_get(tt))); - ecore_wl2_display_flush(d); -} - -static void -_ar_global_bind(Ecore_Wl2_Display *d, uint32_t id) -{ - struct action_route *ar_global = wl_registry_bind(ecore_wl2_display_registry_get(d), id, &action_route_interface, 1); - eina_hash_add(ar_globals, &d, ar_global); - ecore_wl2_display_flush(d); -} - -static Eina_Bool -_global_added(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Wl2_Event_Global *ev) -{ - if (eina_streq(ev->interface, "e_gadget")) - _gadget_global_bind(ev->display, ev->id); - else if (eina_streq(ev->interface, "action_route")) - _ar_global_bind(ev->display, ev->id); - return ECORE_CALLBACK_RENEW; -} - -static void -_gadget_init(Ecore_Wl2_Display *d) -{ - Eina_Iterator *it; - Ecore_Wl2_Global *g; - - if (wins) - { - if (eina_hash_find(gadget_globals, &d)) return; - } - else - { - gadget_globals = eina_hash_pointer_new(NULL); - ar_globals = eina_hash_pointer_new(NULL); - } - it = ecore_wl2_display_globals_get(d); - EINA_ITERATOR_FOREACH(it, g) - { - if (eina_streq(g->interface, "e_gadget")) - _gadget_global_bind(d, g->id); - else if (eina_streq(g->interface, "action_route")) - _ar_global_bind(d, g->id); - } - eina_iterator_free(it); - if (!handler) - handler = ecore_event_handler_add(ECORE_WL2_EVENT_GLOBAL_ADDED, (Ecore_Event_Handler_Cb)_global_added, NULL); -} - -static void -_ar_bind_activate(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - const char *params = event_info; - Gadget_Action *ga = data; - - if (params && (!params[0])) params = NULL; - action_route_bind_activate(ga->ar_bind, params); - ecore_wl2_display_flush(ga->d); -} - -static void -_ar_bind_del(Gadget_Action *ga) -{ - Evas_Object *r; - eina_stringshare_del(ga->action); - EINA_LIST_FREE(ga->requestors, r) - evas_object_smart_callback_del_full(r, ga->handle, _ar_bind_activate, ga); - free(ga); -} - -static void -_ar_bind_end(void *data, struct action_route_bind *action_route_bind EINA_UNUSED) -{ - Gadget_Action *ga = data; - Eina_List *l; - Evas_Object *r; - - EINA_LIST_FOREACH(ga->requestors, l, r) - evas_object_smart_callback_call(r, "gadget_action_end", ga->handle); -} - -static void -_ar_bind_status(void *data, struct action_route_bind *action_route_bind, uint32_t state) -{ - uuid_t u; - Gadget_Action *ga = data; - Evas_Object *r; - - if (state == ACTION_ROUTE_BIND_STATE_REJECTED) - { - Eina_Hash *h; - Eina_List *l; - h = eina_hash_find(display_actions, &ga->d); - EINA_LIST_FOREACH(ga->requestors, l, r) - { - if (ga->handle[0]) - evas_object_smart_callback_call(r, "gadget_action_deleted", ga->handle); - else - evas_object_smart_callback_call(r, "gadget_action", NULL); - } - eina_hash_del_by_key(h, ga->action); - return; - } - uuid_generate(u); - uuid_unparse_lower(u, ga->handle); - ga->ar_bind = action_route_bind; - r = eina_list_data_get(ga->requestors); - evas_object_smart_callback_add(r, ga->handle, _ar_bind_activate, ga); - evas_object_smart_callback_call(r, "gadget_action", ga->handle); -} - -static const struct action_route_bind_listener _ar_bind_interface = -{ - _ar_bind_status, - _ar_bind_end -}; - -static void -uriopen_request(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Ecore_Wl2_Display *d = data; - const char *uri = event_info; - struct e_gadget *gadget_global = eina_hash_find(gadget_globals, &d); - - e_gadget_open_uri(gadget_global, uri); - ecore_wl2_display_flush(d); -} - -static void -action_request(void *data, Evas_Object *obj, void *event_info) -{ - Gadget_Action *ga; - const char *action = event_info; - Ecore_Wl2_Display *d = data; - void *ar_global; - struct action_route_bind *ar_bind; - Eina_Hash *h; - - if ((!action) || (!action[0])) - { - evas_object_smart_callback_call(obj, "gadget_action", NULL); - return; - } - if (display_actions) - { - h = eina_hash_find(display_actions, &d); - if (h) - { - ga = eina_hash_find(h, action); - if (ga && (!eina_list_data_find(ga->requestors, obj))) - { - ga->requestors = eina_list_append(ga->requestors, obj); - evas_object_smart_callback_add(obj, ga->handle, _ar_bind_activate, ga); - } - evas_object_smart_callback_call(obj, "gadget_action", ga ? ga->handle : NULL); - return; - } - } - ar_global = eina_hash_find(ar_globals, &d); - if (!ar_global) - { - evas_object_smart_callback_call(obj, "gadget_action", NULL); - return; - } - ga = calloc(1, sizeof(Gadget_Action)); - ga->d = d; - ga->requestors = eina_list_append(ga->requestors, obj); - ga->action = eina_stringshare_add(action); - if (!display_actions) - display_actions = eina_hash_string_superfast_new(NULL); - h = eina_hash_find(display_actions, &d); - if (!h) - { - h = eina_hash_pointer_new((Eina_Free_Cb)_ar_bind_del); - eina_hash_add(display_actions, &d, h); - } - - ar_bind = action_route_bind_action(ar_global, action); - action_route_bind_add_listener(ar_bind, &_ar_bind_interface, ga); - wl_display_roundtrip(ecore_wl2_display_get(d)); -} - -static void -win_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Ecore_Wl2_Display *d = win_display_get(obj); - eina_hash_list_remove(wins, &d, obj); - tooltips = eina_list_remove(tooltips, obj); -} - -static void -_tooltip_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int w, h; - - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - evas_object_size_hint_aspect_set(obj, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static Evas_Object * -win_add(Evas_Object *win) -{ - Ecore_Wl2_Display *d; - Eina_Bool first; - if (!win) return NULL; - d = win_display_get(win); - _gadget_init(d); - if (elm_win_type_get(win) == ELM_WIN_TOOLTIP) - { - tooltips = eina_list_append(tooltips, win); - evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _tooltip_resize, d); - if (eina_hash_population(gadget_globals)) - { - struct e_gadget *gadget_global = eina_hash_find(gadget_globals, &d); - if (gadget_global) - e_gadget_set_tooltip(gadget_global, ecore_wl2_window_surface_get(elm_win_wl_window_get(win))); - } - } - if (!wins) - wins = eina_hash_pointer_new(NULL); - first = !eina_hash_find(wins, &d); - eina_hash_list_append(wins, &d, win); - if (first) - { - evas_object_smart_callback_add(win, "gadget_action_request", action_request, d); - evas_object_smart_callback_add(win, "gadget_open_uri", uriopen_request, d); - } - evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, win_del, NULL); - elm_win_borderless_set(win, 1); - return win; -} - -int -eina_init(void) -{ - int (*_eina_init)(void) = dlsym(RTLD_NEXT, __func__); - - if (wins) return _eina_init(); - if (getenv("RUNNER_DEBUG")) raise(SIGSTOP); - return _eina_init(); -} - -Evas_Object * -elm_win_util_dialog_add(Evas_Object *parent, const char *name, const char *title) -{ - Evas_Object *(*_elm_win_util_dialog_add)(Evas_Object *, const char *, const char *) = dlsym(RTLD_NEXT, __func__); - - return win_add(_elm_win_util_dialog_add(parent, name, title)); -} - -Evas_Object * -elm_win_util_standard_add(const char *name, const char *title) -{ - Evas_Object *(*_elm_win_util_standard_add)(const char *, const char *) = dlsym(RTLD_NEXT, __func__); - - return win_add(_elm_win_util_standard_add(name, title)); -} - -Evas_Object * -elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type) -{ - Evas_Object *(*_elm_win_add)(Evas_Object *,const char*, Elm_Win_Type) = dlsym(RTLD_NEXT, __func__); - - return win_add(_elm_win_add(parent, name, type)); -} diff --git a/src/bin/e_gadget_runner.c b/src/bin/e_gadget_runner.c deleted file mode 100644 index 39a008ed9..000000000 --- a/src/bin/e_gadget_runner.c +++ /dev/null @@ -1,1270 +0,0 @@ -#include "e.h" -#include -#include "e-gadget-server-protocol.h" -#include "action_route-server-protocol.h" -#include - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wformat-truncation" -#endif - -typedef enum -{ - EXIT_MODE_RESTART, - EXIT_MODE_DELETE, -} Exit_Mode; - -typedef struct Config_Item -{ - int id; - int exit_mode; - Eina_Stringshare *cmd; - void *inst; - Eina_Bool cmd_changed E_BITFIELD; - Eina_Bool sandbox E_BITFIELD; -} Config_Item; - -typedef struct Tooltip -{ - Evas_Object *obj; - Evas_Object *content; - Evas_Object *tooltip_content; - struct wl_resource *tooltip_surface; -} Tooltip; - -typedef struct Instance -{ - E_Gadget_Site_Orient orient; - E_Gadget_Site_Anchor anchor; - Evas_Object *box; - Evas_Object *obj; - Efl_Exe *exe; - Config_Item *ci; - Eina_Hash *allowed_pids; - Eina_List *tooltip_surfaces; - void *gadget_resource; - Tooltip popup, ctxpopup, base; - Eina_List *extracted; -} Instance; - -typedef struct RConfig -{ - Eina_List *items; - Evas_Object *config_dialog; -} RConfig; - -static Eina_Bool runner_enabled; - -static E_Config_DD *conf_edd = NULL; -static E_Config_DD *conf_item_edd = NULL; - -static int ns_fd = -1; - -static RConfig *rconfig; -static Eina_List *instances; -static Eina_List *wizards; - -static Eina_Hash *sandbox_gadgets; - -static Eina_List *handlers; -static Eio_Monitor *gadget_monitor; -static Eio_File *gadget_lister; - -typedef struct Wizard_Item -{ - Evas_Object *site; - Evas_Object *popup; - E_Gadget_Wizard_End_Cb cb; - void *data; - int id; - Eina_Bool sandbox E_BITFIELD; -} Wizard_Item; - -static void runner_exe_del(void *data, const Efl_Event *ev); - -static char * -sandbox_name(const char *filename) -{ - Efreet_Desktop *ed = eina_hash_find(sandbox_gadgets, filename); - char buf[1024]; - - snprintf(buf, sizeof(buf), "%s (v%s)", ed->name, (char*)eina_hash_find(ed->x, "X-Gadget-Version")); - return strdup(buf); -} - -static void -runner_run(Instance *inst) -{ - char *preload = eina_strdup(getenv("LD_PRELOAD")); - char buf[PATH_MAX]; - int pid; - - snprintf(buf, sizeof(buf), "%s/enlightenment/gadgets/%s/loader.so", e_prefix_lib_get(), MODULE_ARCH); - e_util_env_set("LD_PRELOAD", buf); - - snprintf(buf, sizeof(buf), "%d", inst->ci->id); - e_util_env_set("E_GADGET_ID", buf); - switch (inst->orient) - { - case E_GADGET_SITE_ORIENT_NONE: - e_util_env_set("E_GADGET_ORIENTATION", "None"); - break; - case E_GADGET_SITE_ORIENT_HORIZONTAL: - e_util_env_set("E_GADGET_ORIENTATION", "Horizontal"); - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - e_util_env_set("E_GADGET_ORIENTATION", "Vertical"); - break; - } - if (inst->anchor) - { - if (inst->anchor & E_GADGET_SITE_ANCHOR_TOP) - { - if (inst->anchor & E_GADGET_SITE_ANCHOR_LEFT) - e_util_env_set("E_GADGET_ANCHOR", "Top,Left"); - else if (inst->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - e_util_env_set("E_GADGET_ANCHOR", "Top,Right"); - else - e_util_env_set("E_GADGET_ANCHOR", "Top"); - } - else if (inst->anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - if (inst->anchor & E_GADGET_SITE_ANCHOR_LEFT) - e_util_env_set("E_GADGET_ANCHOR", "Bottom,Left"); - else if (inst->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - e_util_env_set("E_GADGET_ANCHOR", "Bottom,Right"); - else - e_util_env_set("E_GADGET_ANCHOR", "Bottom"); - } - else - { - if (inst->anchor & E_GADGET_SITE_ANCHOR_LEFT) - e_util_env_set("E_GADGET_ANCHOR", "Left"); - else if (inst->anchor & E_GADGET_SITE_ANCHOR_RIGHT) - e_util_env_set("E_GADGET_ANCHOR", "Right"); - } - } - e_util_env_set("E_GADGET_ID", buf); - - unshare(CLONE_NEWPID); - - inst->exe = efl_canvas_wl_run(inst->obj, inst->ci->cmd); - efl_event_callback_add(inst->exe, EFL_TASK_EVENT_EXIT, runner_exe_del, inst); - - setns(ns_fd, CLONE_NEWPID); - - e_util_env_set("E_GADGET_ANCHOR", NULL); - e_util_env_set("E_GADGET_ORIENTATION", NULL); - e_util_env_set("E_GADGET_ID", NULL); - e_util_env_set("LD_PRELOAD", preload); - free(preload); - eina_hash_free_buckets(inst->allowed_pids); - pid = efl_exe_pid_get(inst->exe); - eina_hash_add(inst->allowed_pids, &pid, (void*)1); -} - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - Instance *inst = ci->inst; - - e_comp_ungrab_input(1, 1); - rconfig->config_dialog = NULL; - if (ci->cmd_changed) - { - char *cmd; - - cmd = elm_entry_markup_to_utf8(elm_entry_entry_get(evas_object_data_get(obj, "entry"))); - eina_stringshare_replace(&ci->cmd, cmd); - free(cmd); - e_config_save_queue(); - } - if (!inst) ci->cmd_changed = 0; - if (!ci->cmd_changed) return; - ci->cmd_changed = 0; - if (inst->exe) efl_exe_signal(inst->exe, EFL_EXE_SIGNAL_QUIT); - runner_run(inst); -} - -static void -_config_label_add(Evas_Object *tb, const char *txt, int row) -{ - Evas_Object *o; - - o = elm_label_add(tb); - E_ALIGN(o, 0, 0.5); - elm_object_text_set(o, txt); - evas_object_show(o); - elm_table_pack(tb, o, 0, row, 1, 1); -} - -static void -_config_cmd_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - - ci->cmd_changed = 1; -} - -static void -_config_cmd_activate(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - Instance *inst = ci->inst; - char *cmd; - - ci->cmd_changed = 0; - cmd = elm_entry_markup_to_utf8(elm_entry_entry_get(obj)); - eina_stringshare_replace(&ci->cmd, cmd); - free(cmd); - e_config_save_queue(); - if (!inst) return; - if (inst->exe) efl_exe_signal(inst->exe, EFL_EXE_SIGNAL_QUIT); - runner_run(inst); -} - -EINTERN Evas_Object * -config_runner(Config_Item *ci, E_Zone *zone) -{ - Evas_Object *popup, *tb, *o, *ent, *rg; - int row = 0; - - if (!zone) zone = e_zone_current_get(); - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - evas_object_layer_set(popup, E_LAYER_POPUP); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - elm_table_align_set(tb, 0, 0.5); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - o = evas_object_rectangle_add(e_comp->evas); - evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(200), 1); - elm_table_pack(tb, o, 0, row++, 2, 1); - - _config_label_add(tb, _("Command:"), row); - ent = o = elm_entry_add(tb); - E_FILL(o); - evas_object_show(o); - elm_entry_single_line_set(o, 1); - elm_entry_entry_set(o, ci->cmd); - evas_object_smart_callback_add(o, "changed,user", _config_cmd_changed, ci); - evas_object_smart_callback_add(o, "activated", _config_cmd_activate, ci); - elm_table_pack(tb, o, 1, row++, 1, 1); - - _config_label_add(tb, _("On Exit:"), row); - o = rg = elm_radio_add(tb); - E_FILL(o); - evas_object_show(o); - elm_object_text_set(o, _("Restart")); - elm_radio_state_value_set(o, EXIT_MODE_RESTART); - elm_radio_value_pointer_set(o, &ci->exit_mode); - elm_table_pack(tb, o, 1, row++, 1, 1); - - o = elm_radio_add(tb); - E_FILL(o); - elm_radio_group_add(o, rg); - evas_object_show(o); - elm_object_text_set(o, _("Delete")); - elm_radio_state_value_set(o, EXIT_MODE_DELETE); - elm_table_pack(tb, o, 1, row++, 1, 1); - - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_move(popup, zone->x, zone->y); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center(popup); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_priority_add(popup, EVAS_CALLBACK_DEL, EVAS_CALLBACK_PRIORITY_BEFORE, _config_close, ci); - evas_object_data_set(popup, "entry", ent); - e_comp_grab_input(1, 1); - - elm_object_focus_set(ent, 1); - - return rconfig->config_dialog = popup; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(rconfig->items, l, ci) - if (*id == ci->id) return ci; - } - - ci = E_NEW(Config_Item, 1); - if (!*id) - *id = ci->id = rconfig->items ? eina_list_count(rconfig->items) + 1 : 1; - else - ci->id = *id; - - if (ci->id < 1) return ci; - rconfig->items = eina_list_append(rconfig->items, ci); - e_config_save_queue(); - - return ci; -} - -static void -wizard_site_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Wizard_Item *wi = data; - wi->site = NULL; - evas_object_hide(wi->popup); - evas_object_del(wi->popup); -} - -static void -_wizard_config_end(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Wizard_Item *wi = data; - Eina_List *l; - Config_Item *ci; - - EINA_LIST_FOREACH(rconfig->items, l, ci) - { - if (ci->id == wi->id) - { - if (ci->cmd) break; - wi->id = 0; - free(ci); - rconfig->items = eina_list_remove_list(rconfig->items, l); - break; - } - } - - if (wi->site) - wi->cb(wi->data, wi->id); - wizards = eina_list_remove(wizards, wi); - if (wi->site) - evas_object_event_callback_del_full(wi->site, EVAS_CALLBACK_DEL, wizard_site_del, wi); - free(wi); -} - -static Evas_Object * -runner_wizard(E_Gadget_Wizard_End_Cb cb, void *data, Evas_Object *site) -{ - int id = 0; - Config_Item *ci; - Wizard_Item *wi; - - wi = E_NEW(Wizard_Item, 1); - wi->cb = cb; - wi->data = data; - wi->site = site; - evas_object_event_callback_add(wi->site, EVAS_CALLBACK_DEL, wizard_site_del, wi); - wizards = eina_list_append(wizards, wi); - - ci = _conf_item_get(&id); - wi->id = ci->id; - wi->popup = config_runner(ci, NULL); - evas_object_event_callback_add(wi->popup, EVAS_CALLBACK_DEL, _wizard_config_end, wi); - return wi->popup; -} - -///////////////////////////////////////// - -static void -mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - evas_object_focus_set(inst->obj, 1); -} - -static void -runner_removed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Instance *inst = data; - if (inst->box != event_info) return; - rconfig->items = eina_list_remove(rconfig->items, inst->ci); - eina_stringshare_del(inst->ci->cmd); - E_FREE(inst->ci); -} - -static void -runner_site_gravity(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - if (inst->gadget_resource) - e_gadget_send_gadget_gravity(inst->gadget_resource, e_gadget_site_gravity_get(obj)); -} - -static void -runner_site_anchor(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->anchor = e_gadget_site_anchor_get(obj); - if (inst->gadget_resource) - e_gadget_send_gadget_anchor(inst->gadget_resource, inst->anchor); -} - -static void -runner_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Evas_Object *site = e_gadget_site_get(obj); - - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - e_comp_wl->efl_wls = eina_list_remove(e_comp_wl->efl_wls, inst->obj); - evas_object_smart_callback_del_full(site, "gadget_removed", runner_removed, inst); - evas_object_smart_callback_del_full(site, "gadget_site_anchor", runner_site_anchor, inst); - evas_object_smart_callback_del_full(site, "gadget_site_gravity", runner_site_gravity, inst); - if (inst->ci) - inst->ci->inst = NULL; - else - efl_exe_signal(inst->exe, EFL_EXE_SIGNAL_USR2); - efl_event_callback_del(inst->exe, EFL_TASK_EVENT_EXIT, runner_exe_del, inst); - efl_exe_signal(inst->exe, EFL_EXE_SIGNAL_TERM); - inst->exe = NULL; - instances = eina_list_remove(instances, inst); - eina_hash_free(inst->allowed_pids); - eina_list_free(inst->tooltip_surfaces); - free(inst); -} - -static Evas_Object * -runner_gadget_configure(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "runner"); - if (inst->ci->sandbox) - { - if (inst->gadget_resource) - e_gadget_send_gadget_configure(inst->gadget_resource); - return NULL; - } - else - return config_runner(inst->ci, e_comp_object_util_zone_get(g)); -} - -static void -runner_created(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - if (inst->box != event_info) return; - inst->anchor = e_gadget_site_anchor_get(obj); - e_gadget_configure_cb_set(inst->box, runner_gadget_configure); - evas_object_smart_callback_del_full(obj, "gadget_created", runner_created, data); - if (e_gadget_site_is_desklock(obj)) - evas_object_show(inst->obj); - else if (!e_desklock_state_get()) - evas_object_show(inst->obj); - runner_run(inst); -} - - -static void -gadget_unbind(struct wl_resource *resource) -{ - Instance *inst = wl_resource_get_user_data(resource); - inst->gadget_resource = NULL; -} - -static void -gadget_open_uri(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, const char *uri) -{ - //Instance *inst = wl_resource_get_user_data(resource); - - /* FIXME: rate limit? */ - e_util_open(uri, NULL); -} - -static void -gadget_set_tooltip(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *surface) -{ - Instance *inst = wl_resource_get_user_data(resource); - - inst->tooltip_surfaces = eina_list_append(inst->tooltip_surfaces, surface); -} - -static const struct e_gadget_interface _gadget_interface = -{ - .open_uri = gadget_open_uri, - .set_tooltip = gadget_set_tooltip, -}; - -static void -gadget_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id) -{ - struct wl_resource *res; - Instance *inst = data; - pid_t pid; - Evas_Object *site; - - wl_client_get_credentials(client, &pid, NULL, NULL); - if (pid != efl_exe_pid_get(inst->exe)) - { - wl_client_post_no_memory(client); - return; - } - - res = wl_resource_create(client, &e_gadget_interface, version, id); - wl_resource_set_implementation(res, &_gadget_interface, data, gadget_unbind); - inst->gadget_resource = res; - site = e_gadget_site_get(inst->box); - e_gadget_send_gadget_orient(res, e_gadget_site_orient_get(site)); - e_gadget_send_gadget_gravity(res, e_gadget_site_gravity_get(site)); - e_gadget_send_gadget_anchor(res, e_gadget_site_anchor_get(site)); -} - -static void -ar_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id) -{ - struct wl_resource *res; - Instance *inst = data; - int v; - const void *ar_interface; - pid_t pid; - - wl_client_get_credentials(client, &pid, NULL, NULL); - if (pid != efl_exe_pid_get(inst->exe)) - { - wl_client_post_no_memory(client); - return; - } - ar_interface = e_comp_wl_extension_action_route_interface_get(&v); - - if (!(res = wl_resource_create(client, &action_route_interface, MIN(v, version), id))) - { - wl_client_post_no_memory(client); - return; - } - - wl_resource_set_implementation(res, ar_interface, inst->allowed_pids, NULL); -} - -static void -child_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Evas_Object *ext; - - inst->popup.obj = NULL; - inst->popup.content = NULL; - ext = evas_object_data_get(obj, "extracted"); - elm_box_unpack_all(obj); - inst->extracted = eina_list_remove(inst->extracted, ext); - evas_object_hide(ext); -} - -static void -child_added(void *data, const Efl_Event *ev) -{ - Evas_Object *popup, *bx; - Eo *event_info = ev->info; - E_Zone *zone = e_comp_object_util_zone_get(ev->object); - Instance *inst = data; - - if (!efl_canvas_wl_surface_extract(event_info)) return; - inst->extracted = eina_list_append(inst->extracted, event_info); - inst->popup.content = event_info; - - popup = elm_popup_add(e_comp->elm); - e_comp_object_util_del_list_append(event_info, popup); - E_EXPAND(popup); - evas_object_layer_set(popup, E_LAYER_POPUP); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - bx = elm_box_add(popup); - E_EXPAND(event_info); - E_FILL(event_info); - elm_box_homogeneous_set(bx, 1); - evas_object_show(bx); - evas_object_show(event_info); - elm_box_pack_end(bx, event_info); - elm_object_content_set(popup, bx); - - inst->popup.obj = popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_move(popup, zone->x, zone->y); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center(popup); - evas_object_show(popup); - e_comp_canvas_feed_mouse_up(0); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(bx, EVAS_CALLBACK_DEL, child_close, inst); - evas_object_data_set(bx, "extracted", event_info); - evas_object_focus_set(event_info, 1); -} - -static void -extracted_del(Instance *inst, Evas_Object *ext) -{ - inst->extracted = eina_list_remove(inst->extracted, ext); - evas_object_hide(ext); -} - -static void -popup_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Evas_Object *ext; - - inst->ctxpopup.obj = NULL; - inst->ctxpopup.content = NULL; - ext = evas_object_data_get(obj, "extracted"); - elm_box_unpack_all(obj); - extracted_del(inst, ext); -} - -static void -popup_dismissed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - evas_object_del(obj); -} - -static void -popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - elm_ctxpopup_dismiss(inst->ctxpopup.obj); - evas_object_del(elm_object_content_get(inst->ctxpopup.obj)); -} - -static void -popup_hints_update(Evas_Object *obj) -{ - double w, h; - E_Zone *zone = e_comp_object_util_zone_get(obj); - - evas_object_size_hint_weight_get(obj, &w, &h); - w = E_CLAMP(w, 0, 0.5); - h = E_CLAMP(h, 0, 0.5); - - if ((w > 0) && (h > 0)) - { - evas_object_size_hint_min_set(obj, w * zone->w, h * zone->h); - evas_object_size_hint_max_set(obj, w * zone->w, h * zone->h); - } - if ((!EINA_DBL_NONZERO(w)) && (!EINA_DBL_NONZERO(h))) - { - int ww, hh; - evas_object_geometry_get(obj, NULL, NULL, &ww, &hh); - evas_object_size_hint_min_set(obj, ww, hh); - } - E_WEIGHT(obj, 0, 0); -} - -static void -popup_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - evas_object_event_callback_del_full(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, popup_hints, data); - popup_hints_update(obj); - evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, popup_hints, data); -} - -static void -tooltip_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Tooltip *tt = data; - Instance *inst = evas_object_data_get(tt->tooltip_content, "instance"); - - tt->tooltip_content = NULL; - inst->tooltip_surfaces = eina_list_remove(inst->tooltip_surfaces, tt->tooltip_surface); - tt->tooltip_surface = NULL; - elm_object_tooltip_unset(tt->obj); - extracted_del(inst, obj); -} - -static void -tooltip_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Tooltip *tt = data; - - elm_box_unpack_all(obj); - if (tt->tooltip_content) evas_object_hide(tt->tooltip_content); - tt->tooltip_content = NULL; - tt->tooltip_surface = NULL; -} - -static void -tooltip_hints(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int w, h; - evas_object_size_hint_aspect_get(obj, NULL, &w, &h); - evas_object_size_hint_min_set(obj, w, h); -} - -static Evas_Object * -tooltip_content_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *tooltip) -{ - Evas_Object *bx; - Tooltip *tt = data; - - bx = elm_box_add(tooltip); - evas_object_pass_events_set(bx, 1); - evas_object_event_callback_add(bx, EVAS_CALLBACK_DEL, tooltip_hide, tt); - elm_box_pack_end(bx, tt->tooltip_content); - evas_object_show(tt->tooltip_content); - elm_box_recalculate(bx); - evas_object_show(bx); - return bx; -} - -static void -popup_added(void *data, const Efl_Event *ev) -{ - Instance *inst = data; - Eo *event_info = ev->info; - Evas_Object *bx; - - if (!efl_canvas_wl_surface_extract(event_info)) return; - inst->extracted = eina_list_append(inst->extracted, event_info); - if (inst->tooltip_surfaces) - { - Eina_List *l; - struct wl_resource *surface; - - EINA_LIST_FOREACH(inst->tooltip_surfaces, l, surface) - if (event_info == efl_canvas_wl_extracted_surface_object_find(surface)) - { - Evas_Object *base = efl_canvas_wl_surface_parent_surface_get(event_info); - Tooltip *tt = NULL; - - //FIXME: if (inst->tooltip_content) error - if (base && efl_canvas_wl_surface_extracted_get(base)) - { - if (base == inst->popup.content) - tt = &inst->popup; - else if (base == inst->ctxpopup.content) - tt = &inst->ctxpopup; - } - else // base tooltip - tt = &inst->base; - if (tt) - { - tt->tooltip_surface = surface; - tt->tooltip_content = event_info; - evas_object_data_set(event_info, "instance", inst); - evas_object_pass_events_set(event_info, 1); - E_FILL(event_info); - tooltip_hints(NULL, NULL, event_info, NULL); - evas_object_event_callback_add(event_info, EVAS_CALLBACK_DEL, tooltip_del, tt); - evas_object_event_callback_add(event_info, EVAS_CALLBACK_CHANGED_SIZE_HINTS, tooltip_hints, tt); - elm_object_tooltip_content_cb_set(tt->obj, tooltip_content_cb, tt, NULL); - } - else - { - inst->extracted = eina_list_remove(inst->extracted, event_info); - evas_object_hide(event_info); - } - return; - } - } - - //FIXME: if (inst->ctxpopup.obj) error - - inst->ctxpopup.obj = elm_ctxpopup_add(inst->box); - inst->ctxpopup.content = event_info; - elm_object_style_set(inst->ctxpopup.obj, "noblock"); - evas_object_smart_callback_add(inst->ctxpopup.obj, "dismissed", popup_dismissed, inst); - evas_object_event_callback_add(event_info, EVAS_CALLBACK_DEL, popup_hide, inst); - - bx = elm_box_add(inst->ctxpopup.obj); - popup_hints_update(event_info); - E_FILL(event_info); - evas_object_event_callback_add(event_info, EVAS_CALLBACK_CHANGED_SIZE_HINTS, popup_hints, inst); - evas_object_show(bx); - elm_box_pack_end(bx, event_info); - elm_box_recalculate(bx); - evas_object_show(event_info); - evas_object_data_set(bx, "extracted", event_info); - evas_object_event_callback_add(bx, EVAS_CALLBACK_DEL, popup_del, inst); - elm_object_content_set(inst->ctxpopup.obj, bx); - - e_gadget_util_ctxpopup_place(inst->box, inst->ctxpopup.obj, NULL); - evas_object_show(inst->ctxpopup.obj); - evas_object_focus_set(event_info, 1); -} - -static void -seat_added(void *data EINA_UNUSED, const Efl_Event *ev) -{ - efl_canvas_wl_seat_keymap_set(ev->object, NULL, e_comp_wl->xkb.state, e_comp_wl->xkb.map_string, &e_comp_wl->kbd.keys); - efl_canvas_wl_seat_key_repeat_set(ev->object, NULL, e_config->keyboard.repeat_rate, e_config->keyboard.repeat_delay); -} - -static void -runner_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - int w, h; - Evas_Aspect_Control aspect; - - evas_object_size_hint_min_get(obj, &w, &h); - evas_object_size_hint_min_set(inst->box, w, h); - evas_object_size_hint_max_get(obj, &w, &h); - evas_object_size_hint_max_set(inst->box, w, h); - evas_object_size_hint_aspect_get(obj, &aspect, &w, &h); - evas_object_size_hint_aspect_set(inst->box, aspect, w, h); -} - -static void -runner_menu_bugreport(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - char *url = data; - e_util_open(url, NULL); - free(url); -} - -static void -runner_menu(void *data, Evas_Object *obj, void *event_info) -{ - E_Menu *m = event_info; - Instance *inst = data; - - if (inst->ci->sandbox) - { - E_Menu_Item *mi; - E_Menu *subm; - Efreet_Desktop *ed = eina_hash_find(sandbox_gadgets, e_gadget_type_get(obj)); - char buf[1024]; - - e_menu_title_set(m, ed->name); - - subm = e_menu_new(); - snprintf(buf, sizeof(buf), _("Version: %s"), (char*)eina_hash_find(ed->x, "X-Gadget-Version")); - e_menu_title_set(subm, buf); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Details")); - e_menu_item_submenu_set(mi, subm); - e_object_unref(E_OBJECT(subm)); - - mi = e_menu_item_new(subm); - snprintf(buf, sizeof(buf), "PID: %u", efl_exe_pid_get(inst->exe)); - e_menu_item_label_set(mi, buf); - e_menu_item_disabled_set(mi, 1); - - mi = e_menu_item_new(subm); - e_menu_item_label_set(mi, _("Report bug")); - e_util_menu_item_theme_icon_set(mi, "dialog-error"); - e_menu_item_callback_set(mi, runner_menu_bugreport, eina_strdup(eina_hash_find(ed->x, "X-Gadget-Bugreport"))); - } - else - { - char buf[1024], *p; - - strncpy(buf, inst->ci->cmd, sizeof(buf) - 1); - p = strchr(buf, ' '); - if (p) p[0] = 0; - e_menu_title_set(m, ecore_file_file_get(buf)); - } -} - -static Evas_Object * -gadget_create(Evas_Object *parent, Config_Item *ci, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - int ar_version; - - inst = E_NEW(Instance, 1); - instances = eina_list_append(instances, inst); - inst->ci = ci; - inst->orient = orient; - if (!inst->ci) - inst->ci = _conf_item_get(id); - inst->ci->inst = inst; - inst->allowed_pids = eina_hash_int32_new(NULL); - inst->obj = efl_add(EFL_CANVAS_WL_CLASS, e_comp->evas); - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - { - efl_canvas_wl_seat_keymap_set(inst->obj, NULL, e_comp_wl->xkb.state, e_comp_wl->xkb.map_string, &e_comp_wl->kbd.keys); - efl_canvas_wl_seat_key_repeat_set(inst->obj, NULL, e_config->keyboard.repeat_rate, e_config->keyboard.repeat_delay); - e_comp_wl->efl_wls = eina_list_append(e_comp_wl->efl_wls, inst->obj); - } - E_EXPAND(inst->obj); - E_FILL(inst->obj); - efl_canvas_wl_aspect_propagate_set(inst->obj, 1); - efl_canvas_wl_minmax_propagate_set(inst->obj, 1); - efl_canvas_wl_global_add(inst->obj, &e_gadget_interface, 1, inst, gadget_bind); - efl_event_callback_add(inst->obj, EFL_CANVAS_WL_EVENT_CHILD_ADDED, child_added, inst); - efl_event_callback_add(inst->obj, EFL_CANVAS_WL_EVENT_POPUP_ADDED, popup_added, inst); - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - efl_event_callback_add(inst->obj, EFL_CANVAS_WL_EVENT_SEAT_ADDED, seat_added, inst); - e_comp_wl_extension_action_route_interface_get(&ar_version); - efl_canvas_wl_global_add(inst->obj, &action_route_interface, ar_version, inst, ar_bind); - evas_object_event_callback_add(inst->obj, EVAS_CALLBACK_MOUSE_DOWN, mouse_down, inst); - evas_object_smart_callback_add(parent, "gadget_created", runner_created, inst); - evas_object_smart_callback_add(parent, "gadget_removed", runner_removed, inst); - evas_object_smart_callback_add(parent, "gadget_site_anchor", runner_site_anchor, inst); - evas_object_smart_callback_add(parent, "gadget_site_gravity", runner_site_gravity, inst); - inst->base.obj = inst->box = elm_box_add(e_comp->elm); - evas_object_data_set(inst->box, "runner", inst); - evas_object_smart_callback_add(inst->box, "gadget_menu", runner_menu, inst); - evas_object_event_callback_add(inst->box, EVAS_CALLBACK_DEL, runner_del, inst); - evas_object_event_callback_add(inst->obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, runner_hints, inst); - elm_box_homogeneous_set(inst->box, 1); - elm_box_pack_end(inst->box, inst->obj); - return inst->box; -} - -static Evas_Object * -runner_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Evas_Object *obj; - Config_Item *ci = NULL; - - if (orient) return NULL; - if (*id > 0) ci = _conf_item_get(id); - if ((*id < 0) || ((ci) && (ci->inst))) - { - obj = elm_image_add(parent); - elm_image_file_set(obj, e_theme_edje_file_get(NULL, "e/icons/modules-launcher"), "e/icons/modules-launcher"); - evas_object_size_hint_aspect_set(obj, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - return obj; - } - return gadget_create(parent, ci, id, orient); -} - -static void -runner_exe_del(void *data, const Efl_Event *ev) -{ - Instance *inst = data; - - if ((!instances) || (!eina_list_data_find(instances, inst))) return; - switch (inst->ci->exit_mode) - { - case EXIT_MODE_RESTART: - /* FIXME: probably notify? */ - if (efl_task_exit_code_get(ev->object) == 255) //exec error - e_gadget_del(inst->box); - else - runner_run(inst); - break; - case EXIT_MODE_DELETE: - e_gadget_del(inst->box); - break; - } -} - -/////////////////////////////// - -static Evas_Object * -sandbox_create(Evas_Object *parent, const char *type, int *id, E_Gadget_Site_Orient orient) -{ - Efreet_Desktop *ed = eina_hash_find(sandbox_gadgets, type); - Config_Item *ci = NULL; - - if (*id > 0) ci = _conf_item_get(id); - if ((*id < 0) || (ci && ci->inst)) - { - if (ed->x) - { - const char *orients = eina_hash_find(ed->x, "X-Gadget-Orientations"); - - if (orients) - { - const char *ostring[] = - { - "None", - "Horizontal", - "Vertical", - }; - const char *v, *val = orients; - Eina_Bool found = EINA_FALSE; - - v = strchr(val, ';'); - do - { - if (v) - { - if (!memcmp(val, ostring[orient], v - val)) - { - found = EINA_TRUE; - break; - } - val = v + 1; - v = strchr(val, ';'); - } - else - { - if (!strcmp(val, ostring[orient])) - found = EINA_TRUE; - break; - } - } while (val[0]); - if (!found) return NULL; - } - } - if (ed->icon) - { - int w, h; - Eina_Bool fail = EINA_FALSE; - Evas_Object *obj; - - obj = elm_image_add(parent); - if (ed->icon[0] == '/') - { - if (eina_str_has_extension(ed->icon, ".edj")) - fail = !elm_image_file_set(obj, ed->icon, "icon"); - else - fail = !elm_image_file_set(obj, ed->icon, NULL); - } - else - { - if (!elm_image_file_set(obj, e_theme_edje_file_get(NULL, ed->icon), ed->icon)) - fail = !elm_icon_standard_set(obj, ed->icon); - } - if (!fail) - { - elm_image_object_size_get(obj, &w, &h); - if (w && h) - evas_object_size_hint_aspect_set(obj, EVAS_ASPECT_CONTROL_BOTH, w, h); - return obj; - } - evas_object_del(obj); - } - } - if (!ci) - { - ci = _conf_item_get(id); - ci->exit_mode = EXIT_MODE_RESTART; - } - if (ci->id > 0) - if (!eina_streq(ci->cmd, ed->exec)) - e_config_save_queue(); - eina_stringshare_replace(&ci->cmd, ed->exec); - ci->sandbox = 1; - return gadget_create(parent, ci, id, orient); -} - -/////////////////////////////// - -static void -gadget_dir_add(const char *filename) -{ - const char *file; - char buf[PATH_MAX]; - Efreet_Desktop *ed; - - file = ecore_file_file_get(filename); - snprintf(buf, sizeof(buf), "%s/%s.desktop", filename, file); - ed = efreet_desktop_new(buf); - EINA_SAFETY_ON_NULL_RETURN(ed); - if (!ed->name) - { - char str[4096]; - snprintf(str, sizeof(str), _("A gadget .desktop file was found," - "but no [Name] entry was specified!" - "%s"), buf); - /* FIXME: maybe don't use notification here? T6630 */ - e_notification_util_send(_("Gadget Error"), str); - efreet_desktop_free(ed); - return; - } - if (ed->type != EFREET_DESKTOP_TYPE_APPLICATION) - { - char str[4096]; - snprintf(str, sizeof(str), _("A gadget .desktop file was found," - "but [Type] is not set to Application!" - "%s"), buf); - /* FIXME: maybe don't use notification here? T6630 */ - e_notification_util_send(_("Gadget Error"), str); - efreet_desktop_free(ed); - return; - } - if ((!ed->x) || (!eina_hash_find(ed->x, "X-Gadget-Version"))) - { - char str[4096]; - snprintf(str, sizeof(str), _("A gadget .desktop file was found," - "but [X-Gadget-Version] is missing!" - "%s"), buf); - /* FIXME: maybe don't use notification here? T6630 */ - e_notification_util_send(_("Gadget Error"), str); - efreet_desktop_free(ed); - return; - } - if (!eina_hash_find(ed->x, "X-Gadget-Bugreport")) - { - char str[4096]; - snprintf(str, sizeof(str), _("A gadget .desktop file was found," - "but [X-Gadget-Bugreport] is missing!" - "%s"), buf); - /* FIXME: maybe don't use notification here? T6630 */ - e_notification_util_send(_("Gadget Error"), str); - efreet_desktop_free(ed); - return; - } - eina_hash_add(sandbox_gadgets, filename, ed); - e_gadget_external_type_add("runner_sandbox", filename, sandbox_create, NULL); - e_gadget_external_type_name_cb_set("runner_sandbox", filename, sandbox_name); -} - -static Eina_Bool -monitor_dir_create(void *d EINA_UNUSED, int t EINA_UNUSED, Eio_Monitor_Event *ev) -{ - if (!eina_hash_find(sandbox_gadgets, ev->filename)) - gadget_dir_add(ev->filename); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -monitor_dir_del(void *d EINA_UNUSED, int t EINA_UNUSED, Eio_Monitor_Event *ev) -{ - eina_hash_del_by_key(sandbox_gadgets, ev->filename); - e_gadget_external_type_del("runner_sandbox", ev->filename); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -monitor_error(void *d EINA_UNUSED, int t EINA_UNUSED, Eio_Monitor_Error *ev EINA_UNUSED) -{ - /* panic? */ - return ECORE_CALLBACK_RENEW; -} - - -static Eina_Bool -list_filter_cb(void *d EINA_UNUSED, Eio_File *ls EINA_UNUSED, const Eina_File_Direct_Info *info) -{ - struct stat st; - char buf[PATH_MAX]; - - if (info->type != EINA_FILE_DIR) return EINA_FALSE; - if (info->path[info->name_start] == '.') return EINA_FALSE; - snprintf(buf, sizeof(buf), "%s/%s.desktop", info->path, info->path + info->name_start); - return !stat(info->path, &st); -} - -static void -list_main_cb(void *d EINA_UNUSED, Eio_File *ls EINA_UNUSED, const Eina_File_Direct_Info *info) -{ - gadget_dir_add(info->path); -} - -static void -list_done_cb(void *d EINA_UNUSED, Eio_File *ls EINA_UNUSED) -{ - gadget_lister = NULL; -} - -static void -list_error_cb(void *d EINA_UNUSED, Eio_File *ls EINA_UNUSED, int error EINA_UNUSED) -{ - gadget_lister = NULL; -} - -static Ecore_Job *desklock_job; - -static void -desklock_job_cb() -{ - Eina_List *l; - Instance *inst; - - EINA_LIST_FOREACH(instances, l, inst) - { - if (e_gadget_site_is_desklock(e_gadget_site_get(inst->box))) continue; - if (e_desklock_state_get()) - evas_object_hide(inst->obj); - else - evas_object_show(inst->obj); - } - desklock_job = NULL; -} - -static Eina_Bool -desklock_event() -{ - if (!desklock_job) desklock_job = ecore_job_add(desklock_job_cb, NULL); - return ECORE_CALLBACK_RENEW; -} - -EINTERN void -e_gadget_runner_init(void) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), "%s/enlightenment/gadgets/%s/loader.so", e_prefix_lib_get(), MODULE_ARCH); - if (!ecore_file_exists(buf)) return; - runner_enabled = EINA_TRUE; - conf_item_edd = E_CONFIG_DD_NEW("Config_Item", Config_Item); -#undef T -#undef D -#define T Config_Item -#define D conf_item_edd - E_CONFIG_VAL(D, T, id, INT); - E_CONFIG_VAL(D, T, exit_mode, INT); - E_CONFIG_VAL(D, T, cmd, STR); - - conf_edd = E_CONFIG_DD_NEW("RConfig", RConfig); -#undef T -#undef D -#define T RConfig -#define D conf_edd - E_CONFIG_LIST(D, T, items, conf_item_edd); - - rconfig = e_config_domain_load("e_gadget_runner", conf_edd); - if (!rconfig) rconfig = E_NEW(RConfig, 1); - - e_gadget_type_add("runner", runner_create, runner_wizard); - { - snprintf(buf, sizeof(buf), "%s/enlightenment/gadgets/%s", e_prefix_lib_get(), MODULE_ARCH); - gadget_monitor = eio_monitor_add(buf); - gadget_lister = eio_file_direct_ls(buf, list_filter_cb, list_main_cb, list_done_cb, list_error_cb, NULL); - } - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_DIRECTORY_CREATED, monitor_dir_create, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_DIRECTORY_DELETED, monitor_dir_del, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_ERROR, monitor_error, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_DESKLOCK, desklock_event, NULL); - - sandbox_gadgets = eina_hash_string_superfast_new((Eina_Free_Cb)efreet_desktop_free); - { - snprintf(buf, sizeof(buf), "/proc/%d/ns/pid", getpid()); - ns_fd = open(buf, O_RDONLY); - } -} - -EINTERN void -e_gadget_runner_shutdown(void) -{ - if (!runner_enabled) return; - e_gadget_type_del("runner"); - e_gadget_external_type_del("runner_sandbox", NULL); - - if (rconfig) - { - Config_Item *ci; - - if (rconfig->config_dialog) - { - evas_object_hide(rconfig->config_dialog); - evas_object_del(rconfig->config_dialog); - } - - EINA_LIST_FREE(rconfig->items, ci) - { - eina_stringshare_del(ci->cmd); - free(ci); - } - - } - E_FREE(rconfig); - E_CONFIG_DD_FREE(conf_edd); - E_CONFIG_DD_FREE(conf_item_edd); - E_FREE_LIST(handlers, ecore_event_handler_del); - E_FREE_FUNC(sandbox_gadgets, eina_hash_free); - E_FREE_FUNC(gadget_lister, eio_file_cancel); - E_FREE_FUNC(desklock_job, ecore_job_del); - close(ns_fd); - ns_fd = -1; -} - -EINTERN void -e_gadget_runner_save(void) -{ - if (!runner_enabled) return; - e_config_domain_save("e_gadget_runner", conf_edd, rconfig); -} diff --git a/src/bin/e_gadget_types.h b/src/bin/e_gadget_types.h deleted file mode 100644 index 070592e1e..000000000 --- a/src/bin/e_gadget_types.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef E_GADGET_TYPES_H -# define E_GADGET_TYPES_H - -typedef enum -{ - E_GADGET_SITE_GRAVITY_NONE = 0, - E_GADGET_SITE_GRAVITY_LEFT, - E_GADGET_SITE_GRAVITY_RIGHT, - E_GADGET_SITE_GRAVITY_TOP, - E_GADGET_SITE_GRAVITY_BOTTOM, - E_GADGET_SITE_GRAVITY_CENTER, -} E_Gadget_Site_Gravity; - -typedef enum -{ - E_GADGET_SITE_ORIENT_NONE = 0, - E_GADGET_SITE_ORIENT_HORIZONTAL, - E_GADGET_SITE_ORIENT_VERTICAL, -} E_Gadget_Site_Orient; - -typedef enum -{ - E_GADGET_SITE_ANCHOR_NONE = 0, - E_GADGET_SITE_ANCHOR_LEFT = (1 << 0), - E_GADGET_SITE_ANCHOR_RIGHT = (1 << 1), - E_GADGET_SITE_ANCHOR_TOP = (1 << 2), - E_GADGET_SITE_ANCHOR_BOTTOM = (1 << 3), -} E_Gadget_Site_Anchor; - -#endif diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 6ca9c9836..e7ad9ac3e 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -152,8 +152,6 @@ #include "e_utils.h" #include "e_hints.h" #include "e_comp_x_randr.h" -#include "e_gadget.h" -#include "e_bryce.h" #ifdef HAVE_WAYLAND # include "e_comp_wl.h" diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index bb1c154fe..eac50938f 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -93,18 +93,6 @@ _e_int_menus_wallpaper_cb() e_configure_registry_call("appearance/wallpaper", NULL, NULL); } -static void -_e_int_menus_bryce_cb() -{ - e_bryce_edit(NULL); -} - -static void -_e_int_menus_desktop_gadget_add_cb() -{ - e_gadget_site_desktop_edit(e_comp->canvas->gadget_site); -} - #ifdef ISCOMFITOR static void _TEST_ADD(void *data, E_Dialog *dia EINA_UNUSED) @@ -366,16 +354,6 @@ e_int_menus_desktops_new(void) e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper"); e_menu_item_callback_set(mi, _e_int_menus_wallpaper_cb, NULL); - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Add Gadget Bar (EXPERIMENTAL)")); - e_util_menu_item_theme_icon_set(mi, "list-add"); - e_menu_item_callback_set(mi, _e_int_menus_bryce_cb, NULL); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Add Gadgets To Desktop")); - e_util_menu_item_theme_icon_set(mi, "list-add"); - e_menu_item_callback_set(mi, _e_int_menus_desktop_gadget_add_cb, NULL); - mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 85a466c4c..7209c933c 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -944,11 +944,6 @@ main(int argc, char **argv) TS("E_Remember Init Done"); _e_main_shutdown_push(e_remember_shutdown); - TS("E_Gadget Init"); - e_gadget_init(); - TS("E_Gadget Init Done"); - _e_main_shutdown_push((void*)e_gadget_shutdown); - TS("E_Gadcon Init"); if (!e_gadcon_init()) { @@ -1064,14 +1059,6 @@ main(int argc, char **argv) _e_main_modules_load(safe_mode); TS("Load Modules Done"); - if (E_EFL_VERSION_MINIMUM(1, 17, 99)) - { - TS("Bryce Init"); - e_bryce_init(); - TS("Bryce Init Done"); - _e_main_shutdown_push((void*)e_bryce_shutdown); - } - TS("E_Shelf Init"); if (!e_shelf_init()) { diff --git a/src/bin/generated/meson.build b/src/bin/generated/meson.build index dff59bc72..9d8e7db48 100644 --- a/src/bin/generated/meson.build +++ b/src/bin/generated/meson.build @@ -4,7 +4,6 @@ protos = [ '../../protocol/www.xml', '../../protocol/efl-aux-hints.xml', '../../protocol/action_route.xml', - '../../protocol/e-gadget.xml', '@0@/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml'.format(dir_wayland_protocols), '@0@/unstable/relative-pointer/relative-pointer-unstable-v1.xml'.format(dir_wayland_protocols), '@0@/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml'.format(dir_wayland_protocols), @@ -23,12 +22,5 @@ gadget_loader_protos = [ '../../protocol/e-gadget.xml', ] -gadget_loader_proto_files = [] - -foreach p: gadget_loader_protos - gadget_loader_proto_files += gen_scanner_client.process(p) - gadget_loader_proto_files += gen_scanner_impl.process(p) -endforeach - wayland_proto_c = proto_c wayland_proto_h = proto_h diff --git a/src/bin/meson.build b/src/bin/meson.build index d1ad05294..87079a658 100644 --- a/src/bin/meson.build +++ b/src/bin/meson.build @@ -74,8 +74,6 @@ src = [ 'e_backlight.c', 'e_bg.c', 'e_bindings.c', - 'e_bryce.c', - 'e_bryce_editor.c', 'e_client.c', 'e_client_volume.c', 'e_color.c', @@ -118,7 +116,6 @@ src = [ 'e_font.c', 'e_gadcon.c', 'e_gadcon_popup.c', - 'e_gadget.c', 'e_grabinput.c', 'e_grab_dialog.c', 'e_hints.c', @@ -248,7 +245,6 @@ hdr = [ 'e_backlight.h', 'e_bg.h', 'e_bindings.h', - 'e_bryce.h', 'e_client.h', 'e_client_volume.h', 'e_client.x', @@ -295,8 +291,6 @@ hdr = [ 'e_font.h', 'e_gadcon.h', 'e_gadcon_popup.h', - 'e_gadget.h', - 'e_gadget_types.h', 'e_grabinput.h', 'e_grab_dialog.h', 'e.h', @@ -411,7 +405,6 @@ if config_h.has('HAVE_WAYLAND') == true 'e_comp_wl.c', 'e_comp_wl_extensions.c', 'e_comp_wl_extensions_tizen.c', - 'e_gadget_runner.c', wayland_proto_c, wayland_proto_h ] @@ -559,20 +552,5 @@ executable('enlightenment_ckpasswd', ) suid_exes += join_paths(dir_e_utils, 'enlightenment_ckpasswd') -if config_h.has('HAVE_WAYLAND') == true - shared_library('loader', - ['e_gadget_loader.c', gadget_loader_proto_files], - name_prefix: '', - include_directories: include_directories('../..'), - dependencies: [ - dep_dl, - dependency('uuid'), - dependency('elementary'), - dependency('ecore-wl2'), - dependency('wayland-client'), - cc.find_library('uuid')], - install_dir: join_paths([dir_lib, 'enlightenment/gadgets/', module_arch]), - install: true) -endif subdir('e_fm') subdir('system') diff --git a/src/modules/backlight/e_mod_main.c b/src/modules/backlight/e_mod_main.c index 96c7d756d..3d99c4f40 100644 --- a/src/modules/backlight/e_mod_main.c +++ b/src/modules/backlight/e_mod_main.c @@ -10,7 +10,6 @@ */ #include "e.h" -#include "gadget/backlight.h" /* gadcon requirements */ static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); @@ -470,8 +469,6 @@ E_API E_Module_Api e_modapi = E_API void * e_modapi_init(E_Module *m) { - e_modapi_gadget_init(m); - backlight_module = m; e_gadcon_provider_register(&_gadcon_class); E_LIST_HANDLER_APPEND(handlers, E_EVENT_BACKLIGHT_CHANGE, _backlight_cb_changed, NULL); @@ -487,10 +484,8 @@ e_modapi_init(E_Module *m) } E_API int -e_modapi_shutdown(E_Module *m) +e_modapi_shutdown(E_Module *m EINA_UNUSED) { - e_modapi_gadget_shutdown(m); - if (act) { e_action_predef_name_del("Screen", "Backlight Controls"); @@ -499,13 +494,12 @@ e_modapi_shutdown(E_Module *m) } E_FREE_LIST(handlers, ecore_event_handler_del); e_gadcon_provider_unregister(&_gadcon_class); + backlight_module = NULL; return 1; } E_API int -e_modapi_save(E_Module *m) +e_modapi_save(E_Module *m EINA_UNUSED) { - e_modapi_gadget_save(m); - return 1; } diff --git a/src/modules/backlight/gadget/backlight.c b/src/modules/backlight/gadget/backlight.c deleted file mode 100644 index 9eaf2d9c2..000000000 --- a/src/modules/backlight/gadget/backlight.c +++ /dev/null @@ -1,302 +0,0 @@ -#include "backlight.h" - -typedef struct _Instance Instance; - -struct _Instance -{ - Evas_Object *o_main; - Evas_Object *o_backlight, *o_table, *o_slider; - Evas_Object *popup, *box; - E_Gadget_Site_Orient orient; - double val; -}; - -static Eina_List *ginstances = NULL; -static E_Action *act = NULL; -static Eina_List *handlers; - -static void -_backlight_gadget_update(Instance *inst) -{ - Edje_Message_Float msg; - - if (EINA_FLT_EQ(inst->val, -1.0)) - msg.val = .75; - else - msg.val = inst->val; - if (msg.val < 0.0) msg.val = 0.0; - else if (msg.val > 1.0) - msg.val = 1.0; - edje_object_message_send(elm_layout_edje_get(inst->o_backlight), EDJE_MESSAGE_FLOAT, 0, &msg); -} - -static void -_backlight_level_set(Instance *inst, double val, Eina_Bool set_slider) -{ - if (val > 1.0) val = 1.0; - if (val < 0.0) val = 0.0; - inst->val = val; - - if (set_slider) - elm_slider_value_set(inst->o_slider, inst->val * 100); - - e_backlight_mode_set(e_comp_object_util_zone_get(inst->o_main), E_BACKLIGHT_MODE_NORMAL); - e_backlight_level_set(e_comp_object_util_zone_get(inst->o_main), inst->val, 0.0); - e_config->backlight.normal = inst->val; - e_config_save_queue(); -} - -static void -_slider_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->val = elm_slider_value_get(inst->o_slider) / 100; - _backlight_level_set(inst, inst->val, EINA_FALSE); -} - -static void -_backlight_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->popup = NULL; -} - -static void -_backlight_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->popup = NULL; -} - -static void -_backlight_popup_new(Instance *inst) -{ - Evas_Object *o; - - if (inst->popup) return; - - e_backlight_mode_set(e_comp_object_util_zone_get(inst->o_main), E_BACKLIGHT_MODE_NORMAL); - inst->val = e_backlight_level_get(e_comp_object_util_zone_get(inst->o_main)); - _backlight_gadget_update(inst); - - inst->popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(inst->popup, "noblock"); - evas_object_smart_callback_add(inst->popup, "dismissed", _backlight_popup_dismissed, inst); - evas_object_event_callback_add(inst->popup, EVAS_CALLBACK_DEL, _backlight_popup_deleted, inst); - - inst->box = elm_box_add(e_comp->elm); - elm_box_horizontal_set(inst->box, EINA_FALSE); - evas_object_size_hint_weight_set(inst->box, 0.0, 1.0); - evas_object_size_hint_align_set(inst->box, 0.0, 0.0); - elm_object_content_set(inst->popup, inst->box); - evas_object_show(inst->box); - - o = elm_slider_add(inst->box); - elm_slider_horizontal_set(o, EINA_FALSE); - elm_slider_inverted_set(o, EINA_TRUE); - elm_slider_unit_format_set(o, "%.0f"); - elm_slider_indicator_show_set(o, EINA_FALSE); - elm_slider_min_max_set(o, 1, 100.0); - elm_slider_step_set(o, 0.05); - elm_slider_span_size_set(o, 100); - elm_slider_value_set(o, inst->val * 100.0); - evas_object_smart_callback_add(o, "changed", _slider_cb, inst); - elm_box_pack_end(inst->box, o); - evas_object_show(o); - inst->o_slider = o; - - e_gadget_util_ctxpopup_place(inst->o_main, inst->popup, inst->o_backlight); - evas_object_show(inst->popup); -} - -static void -_backlight_cb_mouse_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event) -{ - Instance *inst = data; - Evas_Event_Mouse_Up *ev = event; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - - if (ev->button == 1) - { - if (inst->popup) elm_ctxpopup_dismiss(inst->popup); - else _backlight_popup_new(inst); - } -} - -static void -_backlight_cb_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event) -{ - Evas_Event_Mouse_Wheel *ev = event; - Instance *inst = data; - - inst->val = e_backlight_level_get(e_comp_object_util_zone_get(inst->o_main)); - if (ev->z > 0) - _backlight_level_set(inst, inst->val - 0.1, EINA_TRUE); - else if (ev->z < 0) - _backlight_level_set(inst, inst->val + 0.1, EINA_TRUE); -} - -static void -_e_mod_action_cb(E_Object *obj EINA_UNUSED, - const char *params) -{ - Eina_List *l; - Instance *inst; - - EINA_LIST_FOREACH(ginstances, l, inst) - { - if (params) _backlight_level_set(inst, inst->val + atof(params), EINA_TRUE); - } -} - -static Eina_Bool -_backlight_cb_mod_init_end(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED) -{ - Eina_List *l; - Instance *inst; - - EINA_LIST_FOREACH(ginstances, l, inst) - { - inst->val = e_backlight_level_get(e_comp_object_util_zone_get(inst->o_main)); - _backlight_gadget_update(inst); - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_backlight_cb_changed(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED) -{ - Eina_List *l; - Instance *inst; - - EINA_LIST_FOREACH(ginstances, l, inst) - { - inst->val = e_backlight_level_get(e_comp_object_util_zone_get(inst->o_main)); - _backlight_gadget_update(inst); - } - return ECORE_CALLBACK_RENEW; -} - -static Evas_Object * -_backlight_gadget_configure(Evas_Object *g EINA_UNUSED) -{ - if (e_configure_registry_exists("screen/power_management")) - { - e_configure_registry_call("screen/power_management", NULL, NULL); - } - return NULL; -} - -static void -_backlight_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->o_backlight), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_backlight_gadget_created_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->o_main) - { - e_gadget_configure_cb_set(inst->o_main, _backlight_gadget_configure); - - inst->o_backlight = elm_layout_add(inst->o_main); - E_EXPAND(inst->o_backlight); - E_FILL(inst->o_backlight); - if (inst->orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->o_backlight, - "base/theme/gadget/backlight", - "e/gadget/backlight/main_vert"); - else - e_theme_edje_object_set(inst->o_backlight, - "base/theme/gadget/backlight", - "e/gadget/backlight/main"); - evas_object_event_callback_add(inst->o_backlight, - EVAS_CALLBACK_MOUSE_UP, - _backlight_cb_mouse_up, - inst); - evas_object_event_callback_add(inst->o_backlight, - EVAS_CALLBACK_MOUSE_WHEEL, - _backlight_cb_mouse_wheel, - inst); - evas_object_event_callback_add(inst->o_backlight, - EVAS_CALLBACK_RESIZE, - _backlight_resize_cb, - inst); - elm_box_pack_end(inst->o_main, inst->o_backlight); - evas_object_show(inst->o_backlight); - if (!EINA_FLT_EQ(inst->val, -1.0)) - inst->val = e_backlight_level_get(e_comp_object_util_zone_get(inst->o_main)); - _backlight_gadget_update(inst); - } - evas_object_smart_callback_del_full(obj, "gadget_created", _backlight_gadget_created_cb, data); -} - -static void -backlight_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->popup) - elm_ctxpopup_dismiss(inst->popup); - backlight_shutdown(); - ginstances = eina_list_remove(ginstances, inst); - free(inst); -} - -EINTERN Evas_Object * -backlight_gadget_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->o_main = elm_box_add(parent); - inst->orient = orient; - if (*id != -1) - backlight_init(); - else - inst->val = -1.0; - evas_object_smart_callback_add(parent, "gadget_created", _backlight_gadget_created_cb, inst); - if (*id != -1) - { - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, backlight_del, inst); - ginstances = eina_list_append(ginstances, inst); - } - return inst->o_main; -} - -EINTERN void -backlight_init(void) -{ - E_LIST_HANDLER_APPEND(handlers, E_EVENT_BACKLIGHT_CHANGE, _backlight_cb_changed, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_MODULE_INIT_END, _backlight_cb_mod_init_end, NULL); - act = e_action_add("backlight"); - if (act) - { - act->func.go = _e_mod_action_cb; - e_action_predef_name_set(N_("Screen"), N_("Backlight Controls"), "backlight", - NULL, "syntax: brightness change(-1.0 - 1.0), example: -0.1", 1); - } -} - -EINTERN void -backlight_shutdown(void) -{ - if (act) - { - e_action_predef_name_del("Screen", "Backlight Controls"); - e_action_del("backlight"); - act = NULL; - } - E_FREE_LIST(handlers, ecore_event_handler_del); -} diff --git a/src/modules/backlight/gadget/backlight.h b/src/modules/backlight/gadget/backlight.h deleted file mode 100644 index a6cfd1aed..000000000 --- a/src/modules/backlight/gadget/backlight.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef BACKLIGHT_H -#define BACKLIGHT_H - -#include "e.h" - -EINTERN void *e_modapi_gadget_init(E_Module *m EINA_UNUSED); -EINTERN int e_modapi_gadget_shutdown(E_Module *m EINA_UNUSED); -EINTERN int e_modapi_gadget_save(E_Module *m EINA_UNUSED); - -EINTERN Evas_Object *backlight_gadget_create(Evas_Object *parent, int *id EINA_UNUSED, E_Gadget_Site_Orient orient); -EINTERN void backlight_init(void); -EINTERN void backlight_shutdown(void); - -#endif diff --git a/src/modules/backlight/gadget/mod.c b/src/modules/backlight/gadget/mod.c deleted file mode 100644 index f27ca80d4..000000000 --- a/src/modules/backlight/gadget/mod.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "backlight.h" - -EINTERN void * -e_modapi_gadget_init(E_Module *m) -{ - e_gadget_type_add("Backlight", backlight_gadget_create, NULL); - return m; -} - -EINTERN int -e_modapi_gadget_shutdown(E_Module *m EINA_UNUSED) -{ - e_gadget_type_del("Backlight"); - return 1; -} - -EINTERN int -e_modapi_gadget_save(E_Module *m EINA_UNUSED) -{ - return 1; -} - diff --git a/src/modules/backlight/meson.build b/src/modules/backlight/meson.build index c601cd6fc..150768958 100644 --- a/src/modules/backlight/meson.build +++ b/src/modules/backlight/meson.build @@ -1,5 +1,3 @@ src = files( - 'e_mod_main.c', - 'gadget/backlight.c', - 'gadget/mod.c' + 'e_mod_main.c' ) diff --git a/src/modules/bluez5/e_mod_main.c b/src/modules/bluez5/e_mod_main.c index b3165ced9..bcac3ec9c 100644 --- a/src/modules/bluez5/e_mod_main.c +++ b/src/modules/bluez5/e_mod_main.c @@ -33,96 +33,6 @@ _mod_icon_set(Evas_Object *base, Eina_Bool gadget) ///////////////////////////////////////////////////////////////////////////// -static void -_gad_popup_dismiss(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->pop = NULL; -} - -static void -_gad_popup_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->pop = NULL; -} - -static void -_gad_popup_do(Instance *inst) -{ - Evas_Object *o; - - if (inst->pop) return; - - inst->pop = o = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(o, "noblock"); - evas_object_smart_callback_add(o, "dismissed", _gad_popup_dismiss, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _gad_popup_del, inst); - - inst->popcontent = o = ebluez5_popup_content_add(e_comp->elm, inst); - elm_object_content_set(inst->pop, o); - evas_object_show(o); - - e_gadget_util_ctxpopup_place(inst->o_bluez5, inst->pop, inst->o_bluez5); - evas_object_show(inst->pop); -} - -static void -_gad_mouse_up(void *data, Evas *evas EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event) -{ - Instance *inst = data; - Evas_Event_Mouse_Up *ev = event; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button != 1) return; - if (!inst->pop) _gad_popup_do(inst); - else elm_ctxpopup_dismiss(inst->pop); -} - -static void -_gad_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - instances = eina_list_remove(instances, inst); - E_FREE(inst); -} - -/* XXX: fill in later when we have gotten this far -static Evas_Object * -_gad_config(Evas_Object *g EINA_UNUSED) -{ - if (e_configure_registry_exists("extensions/bluez5")) - e_configure_registry_call("extensions/bluez5", NULL, NULL); - return NULL; -} -*/ - -static Evas_Object * -_gad_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Evas_Object *o; - Instance *inst = E_NEW(Instance, 1); - - if (!inst) return NULL; - inst->id = *id; - inst->orient = orient; - inst->o_bluez5 = o = elm_layout_add(parent); - _mod_icon_set(o, EINA_TRUE); - evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH, 1, 1); -// XXX: fill in later when we have gotten this far -// e_gadget_configure_cb_set(o, _gad_config); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _gad_mouse_up, inst); - if (*id != -1) - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _gad_del, inst); - instances = eina_list_append(instances, inst); - return o; -} - -///////////////////////////////////////////////////////////////////////////// - static void _popup_del(Instance *inst) { @@ -279,10 +189,6 @@ ebluez5_popups_show(void) { if (!inst->popup) _popup_new(inst); } - else - { - if (!inst->pop) _gad_popup_do(inst); - } } } @@ -466,7 +372,6 @@ e_modapi_init(E_Module *m) bz_init(); e_gadcon_provider_register(&_gc_class); - e_gadget_type_add("Bluetooth", _gad_create, NULL); return m; } @@ -494,9 +399,6 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) bz_shutdown(); ebluze5_popup_shutdown(); - e_gadget_type_del("Bluetooth"); - e_gadcon_provider_unregister(&_gc_class); - E_CONFIG_DD_FREE(conf_edd); E_CONFIG_DD_FREE(conf_adapter_edd); return 1; diff --git a/src/modules/bluez5/e_mod_main.h b/src/modules/bluez5/e_mod_main.h index e0bef146e..c3b75e8a2 100644 --- a/src/modules/bluez5/e_mod_main.h +++ b/src/modules/bluez5/e_mod_main.h @@ -12,11 +12,7 @@ struct _Instance // e_gadcon info E_Gadcon_Client *gcc; E_Gadcon_Popup *popup; - // e_gadget info - Evas_Object *pop; - Evas_Object *popcontent; int id; - E_Gadget_Site_Orient orient; }; typedef struct _Config Config; diff --git a/src/modules/conf_display/e_int_config_desklock.c b/src/modules/conf_display/e_int_config_desklock.c index 4466d62f8..06690fa83 100644 --- a/src/modules/conf_display/e_int_config_desklock.c +++ b/src/modules/conf_display/e_int_config_desklock.c @@ -208,12 +208,6 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) free(cfdata); } -static void -_cb_lockscreen_gadgets() -{ - e_gadget_site_desklock_edit(); -} - static Evas_Object * _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { @@ -276,9 +270,6 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) e_widget_disabled_set(cfdata->lock_cmd_entry, (cfdata->desklock_auth_method != E_DESKLOCK_AUTH_METHOD_EXTERNAL)); - e_widget_list_object_append(ol, of, 1, 1, 0.5); - ow = e_widget_button_add(evas, _("Configure Lockscreen Gadgets"), "configure", _cb_lockscreen_gadgets, NULL, NULL); - e_widget_list_object_append(ol, ow, 1, 1, 0.5); e_widget_toolbook_page_append(otb, NULL, _("Locking"), ol, 1, 1, 1, 0, 0.0, 0.0); diff --git a/src/modules/luncher/bar.c b/src/modules/luncher/bar.c deleted file mode 100644 index b9727c258..000000000 --- a/src/modules/luncher/bar.c +++ /dev/null @@ -1,2066 +0,0 @@ -#include "luncher.h" -static Eina_List *handlers; -static Eina_Bool _bar_icon_preview_show(void *data); -static Eina_Bool _bar_icon_preview_hide(void *data); -static void _bar_icon_del(Instance *inst, Icon *ic); -static void _bar_exec_new_show(void *data, Evas *e, Evas_Object *obj, void *event_data); -static void _bar_icon_preview_menu_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED); - -static void -_bar_aspect(Instance *inst) -{ - Evas_Coord w, h; - - switch (e_gadget_site_orient_get(e_gadget_site_get(inst->o_main))) - { - case E_GADGET_SITE_ORIENT_VERTICAL: - h = eina_list_count(inst->icons); - w = 1; - break; - default: - w = eina_list_count(inst->icons); - h = 1; - } - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static Eina_Bool -_bar_check_for_duplicates(Icon *ic, E_Client *dupe) -{ - Eina_List *l; - E_Exec_Instance *ex; - - EINA_LIST_FOREACH(ic->execs, l, ex) - if (eina_list_data_find(ex->clients, dupe)) return EINA_TRUE; - return !!eina_list_data_find(ic->clients, dupe); -} - -static Eina_Bool -_bar_check_modifiers(Evas_Modifier *modifiers) -{ - if ((evas_key_modifier_is_set(modifiers, "Alt")) || - (evas_key_modifier_is_set(modifiers, "Control")) || - (evas_key_modifier_is_set(modifiers, "Shift"))) - return EINA_TRUE; - return EINA_FALSE; -} - -static Evas_Object * -_bar_gadget_configure(Evas_Object *g) -{ - if (!luncher_config) return NULL; - if (luncher_config->config_dialog) return NULL; - Instance *inst = evas_object_data_get(g, "instance"); - return config_luncher(e_zone_current_get(), inst, EINA_TRUE); -} - -static void -_bar_popup_dismissed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - E_FREE_FUNC(obj, evas_object_del); -} - -static const char * -_bar_location_get(Instance *inst) -{ - const char *s = "float"; - - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - E_Gadget_Site_Anchor anchor = e_gadget_site_anchor_get(e_gadget_site_get(inst->o_main)); - - if (anchor & E_GADGET_SITE_ANCHOR_LEFT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "left"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "left"; - break; - } - } - else - s = "left"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_RIGHT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "right"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "right"; - break; - } - } - else - s = "right"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_TOP) - s = "top"; - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - s = "bottom"; - else - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - default: - s = "bottom"; - break; - } - } - return s; -} - -static Icon * -_bar_icon_match(Instance *inst, E_Client *ec) -{ - Icon *ic = NULL, *ic2 = NULL; - Eina_Bool has_desktop = EINA_FALSE; - char ori[32]; - - if (ec->exe_inst) - { - if (ec->exe_inst->desktop) - has_desktop = EINA_TRUE; - } - if (has_desktop) - { - ic = eina_hash_find(inst->icons_desktop_hash, ec->exe_inst->desktop->orig_path); - if ((ic) && (ic2 = eina_hash_find(inst->icons_clients_hash, &ec))) - { - ic2->execs = eina_list_remove(ic2->execs, ec->exe_inst); - ic2->clients = eina_list_remove(ic2->clients, ec); - if (ic2->client_cbs) - { - ic2->client_cbs = eina_list_remove(ic2->client_cbs, ec); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic2); - } - if (!eina_list_count(ic2->execs) && !eina_list_count(ic2->clients)) - { - eina_hash_del(inst->icons_clients_hash, ec, ic2); - snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic2->o_layout, ori, "e"); - if (!ic2->in_order) - _bar_icon_del(inst, ic2); - } - } - } - if (has_desktop && !ic) - ic = eina_hash_find(inst->icons_clients_hash, &ec); - if (!ic) - ic = eina_hash_find(inst->icons_clients_hash, &ec); - - return ic; -} - -static void -_bar_instance_watch(void *data, E_Exec_Instance *ex, E_Exec_Watch_Type type) -{ - Icon *ic = data; - char ori[32]; - - switch (type) - { - case E_EXEC_WATCH_STARTED: - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - if (!ic->execs && ic->inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) - { - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(ic->inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - } - if (!eina_list_data_find(ic->execs, ex) && ic->inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) - ic->execs = eina_list_append(ic->execs, ex); - break; - case E_EXEC_WATCH_TIMEOUT: - case E_EXEC_WATCH_STOPPED: - ic->exec = NULL; - break; - default: - break; - } -} - -static void -_bar_icon_del(Instance *inst, Icon *ic) -{ - E_Client *ec; - - inst->icons = eina_list_remove(inst->icons, ic); - if (ic->client_menu) - evas_object_event_callback_del_full(ic->client_menu, EVAS_CALLBACK_HIDE, _bar_icon_preview_menu_hide, ic); - if (ic->preview) - _bar_icon_preview_hide(ic); - if (!inst->main_del) - _bar_aspect(inst); - evas_object_del(ic->o_icon); - evas_object_del(ic->o_layout); - eina_hash_del_by_data(inst->icons_desktop_hash, ic); - eina_hash_del_by_data(inst->icons_clients_hash, ic); - if (ic->desktop) - efreet_desktop_unref(ic->desktop); - eina_list_free(ic->execs); - eina_list_free(ic->clients); - EINA_LIST_FREE(ic->client_cbs, ec) - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic); - eina_stringshare_del(ic->icon); - eina_stringshare_del(ic->key); - if (ic->exec) - e_exec_instance_watcher_del(ic->exec, _bar_instance_watch, ic); - ic->exec = NULL; - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - E_FREE(ic); -} - -#if 0 -static void -_bar_icon_menu_icon_mouse_out(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - elm_layout_signal_emit(obj, "e,state,unfocused", "e"); -} - -static void -_bar_icon_menu_icon_mouse_in(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data) -{ - Evas_Event_Mouse_In *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - elm_layout_signal_emit(obj, "e,state,focused", "e"); -} - -static Evas_Object * -_bar_icon_menu_item_new(Icon *ic, Evas_Object *popup, Evas_Object *parent, const char *name, const char *icon) -{ - const char *path = NULL, *k = NULL; - char buf[4096]; - int len = 0; - Evas_Object *layout, *label, *img; - - layout = elm_layout_add(parent); - e_theme_edje_object_set(layout, "e/gadget/luncher/preview", - "e/gadget/luncher/preview"); - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_IN, _bar_icon_menu_icon_mouse_in, NULL); - evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_OUT, _bar_icon_menu_icon_mouse_out, NULL); - elm_layout_signal_emit(layout, "e,state,icon,menu", "e"); - elm_box_pack_end(parent, layout); - evas_object_data_set(layout, "popup", popup); - evas_object_data_set(layout, "content", parent); - evas_object_show(layout); - - label = elm_label_add(layout); - elm_object_style_set(label, "luncher_preview"); - elm_label_ellipsis_set(label, EINA_TRUE); - elm_object_text_set(label, name); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_FILL); - elm_layout_content_set(layout, "e.swallow.title", label); - evas_object_show(label); - - img = elm_icon_add(layout); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - if (!icon) - path = NULL; - else if (strncmp(icon, "/", 1) && !ecore_file_exists(icon)) - { - path = efreet_icon_path_find(e_config->icon_theme, icon, ic->inst->size); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", icon, ic->inst->size); - } - } - else if (ecore_file_exists(icon)) - { - path = icon; - } - if (!path && icon) - { - snprintf(buf, sizeof(buf), "e/icons/%s", icon); - if (eina_list_count(e_theme_collection_items_find("base/theme/icons", buf))) - { - path = e_theme_edje_file_get("base/theme/icons", buf); - k = buf; - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (!path && !icon) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - if (path && icon) - { - len = strlen(icon); - if ((len > 4) && (!strcasecmp(icon + len - 4, ".edj"))) - k = "icon"; - } - elm_image_file_set(img, path, k); - elm_layout_content_set(layout, "e.swallow.icon", img); - evas_object_show(img); - - elm_layout_sizing_eval(layout); - - return layout; -} -#endif - -static void -_bar_icon_drag_done(E_Drag *drag, int dropped) -{ - Instance *inst = e_object_data_get(E_OBJECT(drag)); - - efreet_desktop_unref(drag->data); - if (!inst) return; - evas_object_smart_callback_call(e_gadget_site_get(inst->o_main), "gadget_site_unlocked", NULL); - if (!dropped) - bar_recalculate(inst); -} - -static Eina_Bool -_bar_icon_preview_hide(void *data) -{ - Icon *ic = data; - - if (!ic) return EINA_FALSE; - - ic->mouse_out_timer = NULL; - - if (!ic->preview || ic->preview_dismissed) - { - ic->active = EINA_FALSE; - return EINA_FALSE; - } - E_FREE_FUNC(ic->preview_box, evas_object_del); - E_FREE_FUNC(ic->preview_scroller, evas_object_del); - elm_ctxpopup_dismiss(ic->preview); - ic->preview_dismissed = EINA_TRUE; - ic->inst->current_preview = NULL; - ic->inst->current_preview_menu = EINA_FALSE; - ic->active = EINA_FALSE; - - return EINA_FALSE; -} - -static void -_bar_icon_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Icon *ic = data; - - elm_layout_signal_emit(ic->o_layout, "e,state,default", "e"); - elm_layout_signal_emit(ic->o_layout, "e,state,unfocused", "e"); - ic->active = EINA_FALSE; - if (!ic->inst->cfg->hide_tooltips) - elm_object_tooltip_hide(obj); - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - ic->mouse_out_timer = ecore_timer_loop_add(.25, _bar_icon_preview_hide, ic); -} - -static void -_bar_icon_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Move *ev = event_data; - int dx, dy; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - if (!ic->drag.start) - return; - - dx = ev->cur.output.x - ic->drag.x; - dy = ev->cur.output.y - ic->drag.y; - if (((dx * dx) + (dy * dy)) > - (e_config->drag_resist * e_config->drag_resist)) - { - E_Drag *d; - Evas_Object *o; - Evas_Coord x, y, w, h; - unsigned int size; - const char *drag_types[] = { "enlightenment/desktop" }; - - _bar_icon_preview_hide(ic); - ic->drag.dnd = 1; - ic->drag.start = 0; - - evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h); - d = e_drag_new(x, y, drag_types, 1, - ic->desktop, -1, NULL, _bar_icon_drag_done); - d->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - efreet_desktop_ref(ic->desktop); - size = MAX(w, h); - o = e_util_desktop_icon_add(ic->desktop, size, e_drag_evas_get(d)); - e_drag_object_set(d, o); - - e_drag_resize(d, w, h); - e_drag_start(d, ic->drag.x, ic->drag.y); - e_object_data_set(E_OBJECT(d), ic->inst); - if (ic->in_order) - e_order_remove(ic->inst->order, ic->desktop); - } -} - -static Eina_Bool -_bar_drag_timer(void *data) -{ - Icon *ic = data; - - ic->drag_timer = NULL; - ic->drag.start = 1; - evas_object_smart_callback_call(e_gadget_site_get(ic->inst->o_main), "gadget_site_locked", NULL); - return EINA_FALSE; -} - -static void -_bar_icon_menu_action_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Efreet_Desktop_Action *action = (Efreet_Desktop_Action*)data; - - e_exec(e_zone_current_get(), NULL, action->exec, NULL, "luncher"); -} - -static void -_bar_icon_menu_add_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Icon *ic = data; - - if (ic->desktop) - e_order_append(ic->inst->order, ic->desktop); -} - -static void -_bar_icon_menu_remove_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Icon *ic = data; - - if (ic->desktop) - e_order_remove(ic->inst->order, ic->desktop); -} - -static void -_bar_icon_menu_properties_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - Icon *ic = data; - - if (ic->desktop) - e_desktop_edit(ic->desktop); -} - -static void -_bar_gadget_menu_populate(Evas_Object *g, E_Menu *m) -{ - Instance *inst = evas_object_data_get(g, "instance"); - Evas *e = evas_object_evas_get(g); - Eina_List *l; - Icon *ic = NULL; - Evas_Coord px, py; - E_Menu_Item *mi; - Efreet_Desktop_Action *action; - - evas_pointer_canvas_xy_get(e, &px, &py); - EINA_LIST_FOREACH(inst->icons, l, ic) - { - Evas_Coord x, y, w, h; - - evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h); - if (E_INSIDE(px, py, x, y, w, h)) break; - ic = NULL; - } - if (!ic) return; - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - - if (ic->desktop) - { - if (ic->desktop->actions) - { - EINA_LIST_FOREACH(ic->desktop->actions, l, action) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, action->name); - e_util_menu_item_theme_icon_set(mi, action->icon); - e_menu_item_callback_set(mi, _bar_icon_menu_action_cb, action); - } - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - } - if (ic->desktop) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Icon Properties")); - e_util_menu_item_theme_icon_set(mi, "preferences-applications"); - e_menu_item_callback_set(mi, _bar_icon_menu_properties_cb, ic); - } - if (ic->in_order) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Remove Icon")); - e_util_menu_item_theme_icon_set(mi, "list-remove"); - e_menu_item_callback_set(mi, _bar_icon_menu_remove_cb, ic); - } - else if ((!ic->in_order) && (ic->desktop)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Add Icon")); - e_util_menu_item_theme_icon_set(mi, "list-add"); - e_menu_item_callback_set(mi, _bar_icon_menu_add_cb, ic); - } -} - -static void -_bar_icon_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Up *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - if (ev->button == 1) - { - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - ic->drag.x = ev->output.x; - ic->drag.y = ev->output.y; - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - ic->drag_timer = ecore_timer_loop_add(0.35, _bar_drag_timer, ic); - } -} - -static void -_bar_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Up *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) - { - if (ev->button == 1) - { - ic->drag.start = 0; - ic->drag.dnd = 0; - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - } - return; - } - if (_bar_check_modifiers(ev->modifiers)) return; - - if (ev->button == 1) - { - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - if (ic->drag.dnd) - { - ic->drag.start = 0; - ic->drag.dnd = 0; - return; - } - } - if (ev->button == 1 && ic->desktop) - { - if (ic->desktop->type == EFREET_DESKTOP_TYPE_APPLICATION) - { - E_Exec_Instance *ex; - - ex = e_exec(e_zone_current_get(), ic->desktop, NULL, NULL, "luncher"); - ic->exec = ex; - e_exec_instance_watcher_add(ex, _bar_instance_watch, ic); - if (!ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,starting", "e"); - ic->starting = EINA_TRUE; - } - else if (ic->desktop->type == EFREET_DESKTOP_TYPE_LINK) - { - if (!strncasecmp(ic->desktop->url, "file:", 5)) - { - E_Action *act; - - act = e_action_find("fileman"); - if (act) - act->func.go(NULL, ic->desktop->url + 5); - } - } - } - else if (ev->button == 1 && !ic->in_order) - { - _bar_icon_preview_show(ic); - } -} - -static void -_bar_icon_preview_item_mouse_out(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - elm_layout_signal_emit(obj, "e,state,unfocused", "e"); -} - -static void -_bar_icon_preview_item_mouse_in(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data) -{ - Evas_Event_Mouse_In *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - elm_layout_signal_emit(obj, "e,state,focused", "e"); -} - -static void -_bar_icon_preview_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Icon *ic = data; - - if (ic->inst->current_preview_menu) - return; - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - ic->mouse_out_timer = ecore_timer_loop_add(0.25, _bar_icon_preview_hide, ic); -} - -static void -_bar_icon_preview_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_In *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); -} - -static void -_bar_icon_preview_menu_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Icon *ic = data; - - evas_object_event_callback_del_full(obj, EVAS_CALLBACK_HIDE, _bar_icon_preview_menu_hide, ic); - ic->client_menu = NULL; - if (ic->preview) - { - ic->inst->current_preview_menu = EINA_FALSE; - _bar_icon_preview_mouse_out(ic, NULL, NULL, NULL); - } -} - -static void -_bar_icon_preview_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data) -{ - E_Client *ec = data; - Evas_Event_Mouse_Up *ev = event_data; - Icon *ic = evas_object_data_get(obj, "icon"); - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - if (ev->button == 3) - { - e_int_client_menu_show(ec, ev->canvas.x, ev->canvas.y, 0, ev->timestamp); - evas_object_event_callback_add(ec->border_menu->comp_object, EVAS_CALLBACK_HIDE, - _bar_icon_preview_menu_hide, ic); - ic->client_menu = ec->border_menu->comp_object; - ic->inst->current_preview_menu = EINA_TRUE; - return; - } - e_client_activate(ec, 1); - _bar_icon_preview_hide(ic); -} - -static void -_bar_icon_preview_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Object *img = data; - - evas_object_del(img); -} - -static void -_bar_icon_preview_client_add(Icon *ic, E_Client *ec) -{ - Evas_Object *layout, *label, *img; - - layout = elm_layout_add(ic->preview_box); - edje_object_update_hints_set(elm_layout_edje_get(layout), EINA_TRUE); - evas_object_data_set(layout, "icon", ic); - e_theme_edje_object_set(layout, "e/gadget/luncher/preview", - "e/gadget/luncher/preview"); - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_IN, - _bar_icon_preview_item_mouse_in, ic); - evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_OUT, - _bar_icon_preview_item_mouse_out, ic); - elm_box_pack_end(ic->preview_box, layout); - evas_object_show(layout); - - label = elm_label_add(layout); - elm_object_style_set(label, "luncher_preview"); - elm_label_ellipsis_set(label, EINA_TRUE); - elm_object_text_set(label, e_client_util_name_get(ec)); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_FILL); - elm_layout_content_set(layout, "e.swallow.title", label); - evas_object_show(label); - - img = e_comp_object_util_mirror_add(ec->frame); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_BOTH, ec->client.w, ec->client.h); - evas_object_size_hint_min_set(img, ic->inst->cfg->preview_size, ic->inst->cfg->preview_size); - elm_layout_content_set(layout, "e.swallow.icon", img); - if (evas_object_image_alpha_get(img)) - elm_layout_signal_emit(layout, "e,state,icon,alpha", "e"); - evas_object_show(img); - - if (!(ec->desk->visible) || (ec->iconic)) - elm_layout_signal_emit(layout, "e,state,invisible", "e"); - - evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, - _bar_icon_preview_mouse_up, ec); - evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, - _bar_icon_preview_del, img); - elm_layout_sizing_eval(layout); -} - -static Eina_Bool -_bar_icon_preview_show(void *data) -{ - Icon *ic = data; - Eina_List *l, *ll; - E_Client *ec; - E_Exec_Instance *ex; - Eina_List *clients = NULL; - E_Gadget_Site_Orient orient; - E_Zone *zone = e_zone_current_get(); - int count = 0; - - if (!ic) - return EINA_FALSE; - ic->mouse_in_timer = NULL; - if (ic->drag.dnd) - return EINA_FALSE; - if (!ic->inst) - return EINA_FALSE; - if (!ic->inst->o_icon_con) - return EINA_FALSE; - - orient = e_gadget_site_orient_get(e_gadget_site_get(ic->inst->o_main)); - - if (ic->inst->current_preview && (ic->inst->current_preview != ic->preview)) - _bar_icon_preview_hide(evas_object_data_get(ic->inst->current_preview, "icon")); - if (ic->preview && !ic->preview_dismissed) - _bar_icon_preview_hide(ic); - ic->preview_dismissed = EINA_FALSE; - if (!eina_list_count(ic->execs) && !eina_list_count(ic->clients)) - return EINA_FALSE; - - ic->preview = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(ic->preview, "noblock"); - evas_object_smart_callback_add(ic->preview, "dismissed", _bar_popup_dismissed, ic); - evas_object_event_callback_add(ic->preview, EVAS_CALLBACK_MOUSE_IN, - _bar_icon_preview_mouse_in, ic); - evas_object_event_callback_add(ic->preview, EVAS_CALLBACK_MOUSE_OUT, - _bar_icon_preview_mouse_out, ic); - - ic->preview_scroller = elm_scroller_add(ic->preview); - elm_scroller_content_min_limit(ic->preview_scroller, EINA_TRUE, EINA_TRUE); - evas_object_size_hint_max_set(ic->preview_scroller, zone->w - 15, zone->h - 15); - elm_object_style_set(ic->preview_scroller, "no_inset_shadow"); - E_EXPAND(ic->preview_scroller); - - ic->preview_box = elm_box_add(ic->preview); - evas_object_size_hint_align_set(ic->preview_box, 0, 0); - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - elm_box_horizontal_set(ic->preview_box, EINA_TRUE); - elm_box_padding_set(ic->preview_box, 2, 0); - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - elm_box_horizontal_set(ic->preview_box, EINA_FALSE); - elm_box_padding_set(ic->preview_box, 0, 2); - break; - default: - elm_box_horizontal_set(ic->preview_box, EINA_TRUE); - elm_box_padding_set(ic->preview_box, 2, 0); - } - EINA_LIST_FOREACH(ic->execs, l, ex) - { - EINA_LIST_FOREACH(ex->clients, ll, ec) - clients = eina_list_append(clients, ec); - } - EINA_LIST_FOREACH(ic->clients, l, ec) - clients = eina_list_append(clients, ec); - - EINA_LIST_FREE(clients, ec) - { - if (ec && !ec->netwm.state.skip_taskbar && !e_client_util_ignored_get(ec)) - { - if (!e_client_util_is_popup(ec)) - { - _bar_icon_preview_client_add(ic, ec); - count++; - } - } - } - - if (!count) - { - _bar_icon_preview_hide(ic); - return EINA_FALSE; - } - elm_object_content_set(ic->preview_scroller, ic->preview_box); - elm_object_content_set(ic->preview, ic->preview_scroller); - evas_object_show(ic->preview_box); - - e_gadget_util_ctxpopup_place(ic->inst->o_main, ic->preview, ic->o_icon); - evas_object_layer_set(ic->preview, E_LAYER_POPUP); - - evas_object_data_del(ic->preview, "icon"); - evas_object_data_set(ic->preview, "icon", ic); - evas_object_show(ic->preview); - ic->inst->current_preview = ic->preview; - - return EINA_FALSE; -} - -static void -_bar_icon_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data) -{ - Icon *ic = data; - Eina_Bool clients = EINA_FALSE; - Evas_Event_Mouse_In *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_bar_check_modifiers(ev->modifiers)) return; - - if (!ic->active) - { - if (!ic->inst->cfg->hide_tooltips) - elm_object_tooltip_show(obj); - ic->active = EINA_TRUE; - elm_layout_signal_emit(ic->o_layout, "e,state,focused", "e"); - } - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - if (ic->inst->current_preview && (ic->preview == ic->inst->current_preview)) return; - if (eina_list_count(ic->execs) || eina_list_count(ic->clients)) - clients = EINA_TRUE; - if (clients && ic->inst->current_preview && !ic->inst->current_preview_menu) - ic->mouse_in_timer = ecore_timer_loop_add(0.2, _bar_icon_preview_show, ic); - else if (clients && !ic->inst->current_preview) - ic->mouse_in_timer = ecore_timer_loop_add(0.3, _bar_icon_preview_show, ic); -} - -static void -_bar_exec_new_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Icon *ic = data; - E_Client *ec = e_comp_object_client_get(obj); - - if (ic->preview && (ic->inst->current_preview == ic->preview)) - { - _bar_icon_preview_client_add(ic, ec); - } - else - { - if (ic->active) - { - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - if (ic->inst->current_preview && !ic->inst->current_preview_menu) - _bar_icon_preview_show(ic); - else if (!ic->inst->current_preview) - ic->mouse_in_timer = ecore_timer_loop_add(0.3, _bar_icon_preview_show, ic); - } - } - ic->client_cbs = eina_list_remove(ic->client_cbs, ec); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic); -} - -static void -_bar_icon_file_set(Icon *ic, Efreet_Desktop *desktop, E_Client *non_desktop_client) -{ - const char *path = NULL, *k = NULL; - char buf[4096]; - int len = 0, clamp = 0; - if (desktop) - { - if (!desktop->icon) - path = NULL; - else if (strncmp(desktop->icon, "/", 1) && !ecore_file_exists(desktop->icon)) - { - clamp = MAX((4 * round((double)ic->inst->size/4)), 8); - path = efreet_icon_path_find(e_config->icon_theme, desktop->icon, clamp); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", desktop->icon, clamp); - } - } - else if (ecore_file_exists(desktop->icon)) - { - path = desktop->icon; - } - if (!path && desktop->icon) - { - snprintf(buf, sizeof(buf), "e/icons/%s", desktop->icon); - if (eina_list_count(e_theme_collection_items_find("base/theme/icons", buf))) - { - path = e_theme_edje_file_get("base/theme/icons", buf); - k = buf; - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (!path && !desktop->icon) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - if (path && desktop->icon && !k) - { - len = strlen(desktop->icon); - if ((len > 4) && (!strcasecmp(desktop->icon + len - 4, ".edj"))) - k = "icon"; - } - } - else if (non_desktop_client) - { - Evas_Object *tmp; - const char *file, *group; - Eina_Bool ret = EINA_FALSE; - - tmp = e_client_icon_add(non_desktop_client, evas_object_evas_get(ic->o_layout)); - if (isedje(tmp)) - { - edje_object_file_get(tmp, &file, &group); - if (file && group) - ret = EINA_TRUE; - } - else - ret = e_icon_file_get(tmp, &file, &group); - if (ret) - { - eina_stringshare_replace(&ic->icon, file); - eina_stringshare_replace(&ic->key, group); - path = ic->icon; - k = ic->key; - } - evas_object_del(tmp); - } - else if (ic->icon) - { - if (strncmp(ic->icon, "/", 1) && !ecore_file_exists(ic->icon)) - { - clamp = (4 * round((double)ic->inst->size/4)); - path = efreet_icon_path_find(e_config->icon_theme, ic->icon, clamp); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", ic->icon, clamp); - } - } - else if (ecore_file_exists(ic->icon)) - { - path = ic->icon; - k = ic->key; - } - if (!path) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - elm_image_file_set(ic->o_icon, path, k); -} - -static void -_bar_resized_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) -{ - Instance *inst = data; - - _bar_aspect(inst); -} - -static Icon * -_bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_client) -{ - char ori[32]; - Icon *ic; - const Eina_List *l; - - ic = E_NEW(Icon, 1); - if (desktop) - efreet_desktop_ref(desktop); - ic->desktop = desktop; - ic->inst = inst; - ic->preview = NULL; - ic->preview_box = NULL; - ic->preview_scroller = NULL; - ic->client_menu = NULL; - ic->mouse_in_timer = NULL; - ic->mouse_out_timer = NULL; - ic->active = EINA_FALSE; - ic->starting = EINA_FALSE; - ic->preview_dismissed = EINA_FALSE; - ic->exec = NULL; - - ic->o_layout = elm_layout_add(inst->o_icon_con); - edje_object_update_hints_set(elm_layout_edje_get(ic->o_layout), EINA_TRUE); - e_theme_edje_object_set(ic->o_layout, "e/gadget/luncher/icon", - "e/gadget/luncher/icon"); - E_EXPAND(ic->o_layout); - E_FILL(ic->o_layout); - edje_object_signal_callback_add(elm_layout_edje_get(ic->o_layout), "e,state,resized", "e", _bar_resized_cb, inst); - elm_box_pack_end(inst->o_icon_con, ic->o_layout); - evas_object_show(ic->o_layout); - - snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - - ic->o_icon = elm_icon_add(ic->o_layout); - E_EXPAND(ic->o_icon); - - - _bar_icon_file_set(ic, desktop, non_desktop_client); - - if (!inst->cfg->hide_tooltips) - { - if (desktop) - elm_object_tooltip_text_set(ic->o_icon, desktop->name); - else if (non_desktop_client && non_desktop_client->icccm.class) - elm_object_tooltip_text_set(ic->o_icon, non_desktop_client->icccm.class); - else if (non_desktop_client && non_desktop_client->icccm.name) - elm_object_tooltip_text_set(ic->o_icon, non_desktop_client->icccm.name); - else if (non_desktop_client && non_desktop_client->icccm.title) - elm_object_tooltip_text_set(ic->o_icon, non_desktop_client->icccm.title); - else if (non_desktop_client && non_desktop_client->netwm.name) - elm_object_tooltip_text_set(ic->o_icon, non_desktop_client->netwm.name); - else - elm_object_tooltip_text_set(ic->o_icon, _("Unknown")); - elm_object_tooltip_orient_set(ic->o_icon, ELM_TOOLTIP_ORIENT_CENTER); - elm_object_tooltip_style_set(ic->o_icon, "luncher"); - } - evas_object_size_hint_aspect_set(ic->o_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - elm_layout_content_set(ic->o_layout, "e.swallow.icon", ic->o_icon); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_UP, - _bar_icon_mouse_up, ic); - evas_object_event_callback_priority_add(ic->o_icon, EVAS_CALLBACK_MOUSE_DOWN, 0, - _bar_icon_mouse_down, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_MOVE, - _bar_icon_mouse_move, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_IN, - _bar_icon_mouse_in, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_OUT, - _bar_icon_mouse_out, ic); - evas_object_show(ic->o_icon); - - if (desktop) - eina_hash_add(inst->icons_desktop_hash, eina_stringshare_add(desktop->orig_path), ic); - else - eina_hash_add(inst->icons_clients_hash, &non_desktop_client, ic); - - if (desktop) - { - if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) - { - l = e_exec_desktop_instances_find(desktop); - if (l) - { - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - ic->execs = eina_list_clone(l); - } - } - } - else - { - if (!_bar_check_for_duplicates(ic, non_desktop_client)) - ic->clients = eina_list_append(ic->clients, non_desktop_client); - } - elm_layout_sizing_eval(ic->o_layout); - _bar_aspect(inst); - return ic; -} - -static Eina_Bool -_bar_cb_desk_switch(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client *ev EINA_UNUSED) -{ - Instance *inst = NULL; - Icon *ic = NULL; - Eina_List *l = NULL, *ll = NULL; - - - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - if (inst->current_preview) - { - EINA_LIST_FOREACH(inst->icons, ll, ic) - { - if (inst->current_preview && (inst->current_preview == ic->preview)) - { - _bar_icon_preview_show(ic); - return ECORE_CALLBACK_RENEW; - } - } - } - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_bar_cb_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client *ev) -{ - Instance *inst = NULL; - Eina_List *l = NULL; - char ori[32]; - - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - Icon *ic = NULL; - - if (!inst->bar) continue; - if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) continue; - ic = _bar_icon_match(inst, ev->ec); - if (ic) - { - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - ic->clients = eina_list_remove(ic->clients, ev->ec); - if (ic->client_cbs) - { - ic->client_cbs = eina_list_remove(ic->client_cbs, ev->ec); - evas_object_event_callback_del_full(ev->ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic); - } - if (ev->ec->exe_inst) - ic->execs = eina_list_remove(ic->execs, ev->ec->exe_inst); - if (!eina_list_count(ic->execs) && !eina_list_count(ic->clients)) - { - snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - if (ic->preview) - _bar_icon_preview_hide(ic); - if (!ic->in_order) - _bar_icon_del(inst, ic); - } - else if (ic->preview && (inst->current_preview == ic->preview)) - { - _bar_icon_preview_show(ic); - } - } - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_bar_cb_exec_del(void *data EINA_UNUSED, int type EINA_UNUSED, E_Exec_Instance *ex) -{ - Instance *inst = NULL; - Eina_List *l = NULL; - E_Client *ec = NULL; - char ori[32]; - - EINA_LIST_FOREACH(ex->clients, l, ec) - { - if (!ec->netwm.state.skip_taskbar && !e_client_util_is_popup(ec)) - { - break; - } - } - - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - Icon *ic = NULL; - - if (!inst->bar) continue; - if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) continue; - if (ex->desktop) - { - ic = eina_hash_find(inst->icons_desktop_hash, ex->desktop->orig_path); - } - if (ic) - { - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - ic->execs = eina_list_remove(ic->execs, ex); - if (ec) ic->clients = eina_list_remove(ic->clients, ec); - if (ec && ic->client_cbs) - { - ic->client_cbs = eina_list_remove(ic->client_cbs, ec); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic); - } - if (!eina_list_count(ic->execs) && !eina_list_count(ic->clients)) - { - snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - if (ic->preview) - _bar_icon_preview_hide(ic); - if (!ic->in_order) - _bar_icon_del(inst, ic); - } - else if (ic->preview && (inst->current_preview == ic->preview)) - { - _bar_icon_preview_show(ic); - } - } - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_bar_cb_exec_client_prop(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client_Property *ev) -{ - Instance *inst = NULL; - E_Client *ec = NULL; - Eina_List *l = NULL; - Eina_Bool skip; - Eina_Bool has_desktop = EINA_TRUE; - - if (e_client_util_ignored_get(ev->ec)) - return ECORE_CALLBACK_RENEW; - if ((!(ev->property & E_CLIENT_PROPERTY_NETWM_STATE)) && (!(ev->property & E_CLIENT_PROPERTY_ICON)) - && (!(ev->property & E_CLIENT_PROPERTY_URGENCY))) - return ECORE_CALLBACK_RENEW; - - if (!ev->ec->exe_inst) - has_desktop = EINA_FALSE; - if (ev->ec->exe_inst) - { - if (!ev->ec->exe_inst->desktop) - has_desktop = EINA_FALSE; - } - if (has_desktop) - { - skip = EINA_TRUE; - EINA_LIST_FOREACH(ev->ec->exe_inst->clients, l, ec) - { - if (!ec->netwm.state.skip_taskbar && !e_client_util_is_popup(ec)) - { - skip = EINA_FALSE; - break; - } - } - } - else - { - if (ev->ec->netwm.state.skip_taskbar || e_client_util_is_popup(ev->ec)) - skip = EINA_TRUE; - else - skip = EINA_FALSE; - } - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - Icon *ic = NULL; - char ori[32]; - - if (!inst->bar) continue; - if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) continue; - ic = _bar_icon_match(inst, ev->ec); - if (skip && !ic) continue; - if (!skip) - { - if (ic) - { - if ((ev->property & E_CLIENT_PROPERTY_URGENCY)) - { - if (ev->ec->urgent) - elm_layout_signal_emit(ic->o_layout, "e,state,urgent", "e"); - else - elm_layout_signal_emit(ic->o_layout, "e,state,normal", "e"); - return ECORE_CALLBACK_RENEW; - } - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - if (has_desktop) - { - if (!(_bar_check_for_duplicates(ic, ev->ec))) - ic->execs = eina_list_append(ic->execs, ev->ec->exe_inst); - } - else - { - if (!(_bar_check_for_duplicates(ic, ev->ec))) - ic->clients = eina_list_append(ic->clients, ev->ec); - } - } - else - { - if (has_desktop && !ev->ec->internal_elm_win) - ic = _bar_icon_add(inst, ev->ec->exe_inst->desktop, NULL); - else - ic = _bar_icon_add(inst, NULL, ev->ec); - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - ic->in_order = EINA_FALSE; - inst->icons = eina_list_append(inst->icons, ic); - _bar_aspect(inst); - } - } - else - { - if (has_desktop) - ic->execs = eina_list_remove(ic->execs, ev->ec->exe_inst); - else - ic->clients = eina_list_remove(ic->clients, ev->ec); - if (ic->client_cbs) - { - ic->client_cbs = eina_list_remove(ic->client_cbs, ev->ec); - evas_object_event_callback_del_full(ev->ec->frame, EVAS_CALLBACK_SHOW, _bar_exec_new_show, ic); - } - if (!eina_list_count(ic->execs) && !eina_list_count(ic->clients)) - { - if (ic->preview) - _bar_icon_preview_hide(ic); - if (!ic->in_order) - _bar_icon_del(inst, ic); - else - { - snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - } - } - else if (ic->preview && (inst->current_preview == ic->preview)) - { - _bar_icon_preview_show(ic); - } - } - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_bar_cb_exec_new(void *data EINA_UNUSED, int type, E_Exec_Instance *ex) -{ - Instance *inst = NULL; - E_Client *ec = NULL; - Eina_List *l = NULL; - Eina_Bool skip; - - if (type == E_EVENT_EXEC_NEW_CLIENT) - { - ec = eina_list_last_data_get(ex->clients); - if (ec->netwm.state.skip_taskbar || e_client_util_is_popup(ec)) - skip = EINA_TRUE; - else - skip = EINA_FALSE; - } - else - { - skip = EINA_TRUE; - EINA_LIST_FOREACH(ex->clients, l, ec) - { - if (!ec->netwm.state.skip_taskbar && !e_client_util_is_popup(ec)) - { - skip = EINA_FALSE; - break; - } - } - } - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - Icon *ic = NULL; - char ori[32]; - - if (!inst->bar) continue; - if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) continue; - if (ec) ic = _bar_icon_match(inst, ec); - if (ic) - { - if (skip) continue; - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - if (!(_bar_check_for_duplicates(ic, ec))) - { - if (ex->desktop) - ic->execs = eina_list_append(ic->execs, ex); - else - ic->clients = eina_list_append(ic->clients, ec); - } - if (evas_object_visible_get(ec->frame)) - _bar_exec_new_show(ic, NULL, ec->frame, NULL); - else - { - ic->client_cbs = eina_list_append(ic->client_cbs, ec); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, - _bar_exec_new_show, ic); - } - } - else - { - if (skip) continue; - if (ex->desktop && !ec->internal_elm_win) - ic = _bar_icon_add(inst, ex->desktop, NULL); - else - ic = _bar_icon_add(inst, NULL, ec); - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - ic->in_order = EINA_FALSE; - inst->icons = eina_list_append(inst->icons, ic); - _bar_aspect(inst); - } - } - return ECORE_CALLBACK_RENEW; -} - -static void -_bar_empty(Instance *inst) -{ - if (inst->icons) - { - elm_box_clear(inst->o_icon_con); - while (inst->icons) - _bar_icon_del(inst, eina_list_data_get(inst->icons)); - inst->icons = NULL; - } -} - -static void -_bar_fill(Instance *inst) -{ - const Eina_Hash *execs = e_exec_instances_get(); - Eina_Iterator *it; - Eina_List *l, *ll, *lll; - E_Exec_Instance *ex; - E_Client *ec; - Icon *ic; - char ori[32]; - - if (inst->order && inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY) - { - Efreet_Desktop *desktop; - Eina_List *list; - - EINA_LIST_FOREACH(inst->order->desktops, list, desktop) - { - ic = _bar_icon_add(inst, desktop, NULL); - ic->in_order = EINA_TRUE; - inst->icons = eina_list_append(inst->icons, ic); - } - } - if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) - { - _bar_aspect(inst); - return; - } - it = eina_hash_iterator_data_new(execs); - EINA_ITERATOR_FOREACH(it, l) - { - EINA_LIST_FOREACH(l, ll, ex) - { - Eina_Bool skip = EINA_TRUE; - - EINA_LIST_FOREACH(ex->clients, lll, ec) - { - if (!ec->netwm.state.skip_taskbar && !e_client_util_is_popup(ec)) - { - skip = EINA_FALSE; - } - if (skip) continue; - ic = _bar_icon_match(inst, ec); - if (ic) - { - if (!(_bar_check_for_duplicates(ic, ec))) - ic->execs = eina_list_append(ic->execs, ex); - continue; - } - if (!ec->internal_elm_win) - ic = _bar_icon_add(inst, ex->desktop, NULL); - else - ic = _bar_icon_add(inst, NULL, ec); - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - ic->in_order = EINA_FALSE; - inst->icons = eina_list_append(inst->icons, ic); - } - } - } - eina_iterator_free(it); - E_CLIENT_FOREACH(ec) - { - if (e_client_util_ignored_get(ec)) continue; - if (ec->netwm.state.skip_taskbar) continue; - if (e_client_util_is_popup(ec)) continue; - ic = _bar_icon_match(inst, ec); - if (!ic) - { - if (ec->exe_inst && ec->exe_inst->desktop && !ec->internal_elm_win) - ic = _bar_icon_add(inst, ec->exe_inst->desktop, NULL); - else - ic = _bar_icon_add(inst, NULL, ec); - snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); - elm_layout_signal_emit(ic->o_layout, ori, "e"); - ic->in_order = EINA_FALSE; - inst->icons = eina_list_append(inst->icons, ic); - } - } - _bar_aspect(inst); -} - -static void -_bar_resize_job(void *data) -{ - Instance *inst = data; - Eina_List *l; - Icon *ic; - E_Gadget_Site_Orient orient; - Evas_Coord x, y, w, h, size; - - if (inst) - { - orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - elm_layout_sizing_eval(inst->o_main); - evas_object_geometry_get(inst->o_main, &x, &y, &w, &h); - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - size = h; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - size = w; - break; - default: - size = h; - } - if (inst->size == size) - { - inst->resize_job = NULL; - return; - } - inst->size = size; - EINA_LIST_FOREACH(inst->icons, l, ic) - _bar_icon_file_set(ic, ic->desktop, NULL); - inst->resize_job = NULL; - } -} - -static Eina_Bool -_bar_cb_update_icons(EINA_UNUSED void *data, EINA_UNUSED int ev_type, EINA_UNUSED void *ev) -{ - Instance *inst = NULL; - Eina_List *l, *ll; - Icon *ic; - - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - if (!inst->bar) continue; - EINA_LIST_FOREACH(inst->icons, ll, ic) - _bar_icon_file_set(ic, ic->desktop, eina_list_data_get(ic->clients)); - } - return ECORE_CALLBACK_PASS_ON; -} - -static void -_bar_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->resize_job) return; - inst->resize_job = ecore_job_add(_bar_resize_job, inst); -} - -static void -_bar_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Evas_Coord px, py, x, y, w, h; - Eina_List *l = NULL; - Icon *ic = NULL; - - evas_pointer_canvas_xy_get(evas_object_evas_get(inst->o_main), &px, &py); - evas_object_geometry_get(inst->o_main, &x, &y, &w, &h); - - if (E_INSIDE(px, py, x, y, w, h)) return; - - EINA_LIST_FOREACH(inst->icons, l, ic) - { - elm_layout_signal_emit(ic->o_layout, "e,state,default", "e"); - elm_layout_signal_emit(ic->o_layout, "e,state,unfocused", "e"); - _bar_icon_mouse_out(ic, NULL, ic->o_icon, NULL); - } - _bar_aspect(inst); -} - -static void -_bar_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - char buf[4096]; - - if (inst->o_main != event_data) return; - if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", inst->cfg->dir) >= sizeof(buf)) - return; - - luncher_config->items = eina_list_remove(luncher_config->items, inst->cfg); - eina_stringshare_del(inst->cfg->dir); - E_FREE(inst->cfg); -} - -static void -_bar_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - evas_object_smart_callback_del_full(e_gadget_site_get(obj), "gadget_removed", _bar_removed_cb, inst); - E_FREE_FUNC(inst->iconify_provider, e_comp_object_effect_mover_del); - inst->main_del = EINA_TRUE; - _bar_empty(inst); - e_object_del(E_OBJECT(inst->order)); - E_FREE_FUNC(inst->drop_handler, evas_object_del); - eina_hash_free(inst->icons_desktop_hash); - eina_hash_free(inst->icons_clients_hash); - luncher_instances = eina_list_remove(luncher_instances, inst); - free(inst); - if (!eina_list_count(luncher_instances)) - { - EINA_LIST_FREE(handlers, handler) - E_FREE_FUNC(handler, ecore_event_handler_del); - } -} - -static void -_bar_drop_drop(void *data, const char *type, void *event_data) -{ - Instance *inst = data; - E_Event_Dnd_Drop *ev = event_data; - Efreet_Desktop *desktop = NULL; - Eina_List *l = NULL; - Icon *ic = NULL; - - evas_object_del(inst->place_holder); - inst->place_holder = NULL; - if (!strcmp(type, "enlightenment/desktop")) - desktop = ev->data; - else if (!strcmp(type, "enlightenment/border")) - { - E_Client *ec; - - ec = ev->data; - desktop = ec->desktop; - if (!desktop) - { - desktop = e_desktop_client_create(ec); - efreet_desktop_save(desktop); - e_desktop_edit(desktop); - } - } - else if (!strcmp(type, "text/uri-list")) - l = ev->data; - - ic = inst->drop_before; - if (ic) - { - if (desktop) - e_order_prepend_relative(inst->order, desktop, ic->desktop); - else - e_order_files_prepend_relative(inst->order, l, ic->desktop); - } - else - { - if (desktop) - e_order_append(inst->order, desktop); - else - e_order_files_append(inst->order, l); - } -} - -static void -_bar_drop_leave(void *data, const char *type EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - inst->inside = EINA_FALSE; - evas_object_del(inst->place_holder); - inst->place_holder = NULL; -} - -static void -_bar_drop_move(void *data, const char *type EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - E_Event_Dnd_Move *ev = event_data; - Evas_Coord x = ev->x, y = ev->y; - Eina_List *l; - Icon *ic; - - if (!inst->inside) - return; - - EINA_LIST_FOREACH(inst->icons, l, ic) - { - Evas_Coord dx, dy, dw, dh; - - if (!ic->in_order) continue; - evas_object_geometry_get(ic->o_layout, &dx, &dy, &dw, &dh); - if (E_INSIDE(x, y, dx, dy, dw, dh)) - inst->drop_before = ic; - } - elm_box_unpack(inst->o_icon_con, inst->place_holder); - if (inst->drop_before) - elm_box_pack_before(inst->o_icon_con, inst->place_holder, inst->drop_before->o_layout); -} - -static void -_bar_drop_enter(void *data, const char *type EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - inst->inside = EINA_TRUE; - inst->place_holder = evas_object_rectangle_add(evas_object_evas_get(inst->o_icon_con)); - evas_object_color_set(inst->place_holder, 0, 0, 0, 0); - evas_object_size_hint_min_set(inst->place_holder, inst->size, inst->size); - evas_object_size_hint_max_set(inst->place_holder, inst->size, inst->size); - evas_object_show(inst->place_holder); -} - -static void -_bar_iconify_end(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) -{ - E_Client *ec = data; - - evas_object_layer_set(ec->frame, ec->layer); - ec->layer_block = 0; - if (ec->iconic) - evas_object_hide(ec->frame); -} - -static Eina_Bool -_bar_iconify_start(void *data, Evas_Object *obj, const char *signal EINA_UNUSED) -{ - Instance *inst = data; - Icon *ic = NULL; - E_Client *ec; - int ox, oy, ow, oh; - - ec = e_comp_object_client_get(obj); - - if (ec) - ic = _bar_icon_match(inst, ec); - - if (!ic) return EINA_FALSE; - - ec->layer_block = 1; - evas_object_layer_set(ec->frame, E_LAYER_CLIENT_PRIO); - evas_object_geometry_get(ic->o_layout, &ox, &oy, &ow, &oh); - e_comp_object_effect_set(ec->frame, "iconify/luncher"); - e_comp_object_effect_params_set(ec->frame, 1, (int[]){ec->x, ec->y, ec->w, ec->h, ox, oy, ow, oh}, 8); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){!!strcmp(signal, "e,action,iconify")}, 1); - e_comp_object_effect_start(ec->frame, _bar_iconify_end, ec); - return EINA_TRUE; -} - -static void -_bar_anchor_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst && inst->o_icon_con) - { - bar_recalculate(inst); - } -} - -static void -_bar_order_update(void *data, E_Order *eo EINA_UNUSED) -{ - Instance *inst = data; - - if (inst && inst->o_icon_con) - { - bar_recalculate(inst); - } -} - -static void -_bar_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - char buf[4096]; - const char *drop[] = { "enlightenment/desktop", "enlightenment/border", "text/uri-list" }; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - inst->o_icon_con = elm_box_add(inst->o_main); - E_EXPAND(inst->o_icon_con); - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - elm_box_horizontal_set(inst->o_icon_con, EINA_TRUE); - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - elm_box_horizontal_set(inst->o_icon_con, EINA_FALSE); - break; - default: - elm_box_horizontal_set(inst->o_icon_con, EINA_TRUE); - } - elm_layout_content_set(inst->o_main, "e.swallow.bar", inst->o_icon_con); - evas_object_show(inst->o_icon_con); - - evas_object_data_set(inst->o_main, "instance", inst); - evas_object_data_set(inst->o_icon_con, "instance", inst); - - e_gadget_configure_cb_set(inst->o_main, _bar_gadget_configure); - e_gadget_menu_populate_cb_set(inst->o_main, _bar_gadget_menu_populate); - evas_object_smart_callback_del_full(obj, "gadget_created", _bar_created_cb, data); - - if (!inst->cfg->dir) - inst->cfg->dir = eina_stringshare_add("default"); - if (inst->cfg->dir[0] != '/') - e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order", - inst->cfg->dir); - else - eina_strlcpy(buf, inst->cfg->dir, sizeof(buf)); - - inst->order = e_order_new(buf); - e_order_update_callback_set(inst->order, _bar_order_update, inst); - - if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) - { - if (inst->cfg->id != -1) - inst->iconify_provider = e_comp_object_effect_mover_add(80, "e,action,*iconify", - _bar_iconify_start, inst); - } - _bar_fill(inst); - - if (inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY) - { - inst->drop_handler = - e_gadget_drop_handler_add(inst->o_main, inst, - _bar_drop_enter, _bar_drop_move, - _bar_drop_leave, _bar_drop_drop, - drop, 3); - elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler); - evas_object_show(inst->drop_handler); - } - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_RESIZE, _bar_resize, inst); -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(luncher_config->items, l, ci) - if (*id == ci->id) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(luncher_config->items)+1; - else - ci->id = -1; - ci->preview_size = 64; - ci->dir = eina_stringshare_add("default"); - ci->type = E_LUNCHER_MODULE_FULL; - luncher_config->items = eina_list_append(luncher_config->items, ci); - - return ci; -} - -static void -_bar_recalculate_job(void *data) -{ - Instance *inst = data; - - if (inst) - { - if (inst->o_icon_con) - { - _bar_empty(inst); - _bar_fill(inst); - } - inst->recalc_job = NULL; - } -} - -EINTERN void -bar_recalculate(Instance *inst) -{ - E_FREE_FUNC(inst->recalc_job, ecore_job_del); - inst->recalc_job = ecore_job_add(_bar_recalculate_job, inst); -} - -EINTERN void -bar_reorder(Instance *inst) -{ - char buf[4096]; - - if (inst) - { - E_FREE_FUNC(inst->recalc_job, ecore_job_del); - _bar_empty(inst); - if (!inst->cfg->dir) - inst->cfg->dir = eina_stringshare_add("default"); - if (inst->cfg->dir[0] != '/') - e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order", - inst->cfg->dir); - else - eina_strlcpy(buf, inst->cfg->dir, sizeof(buf)); - e_object_del(E_OBJECT(inst->order)); - inst->order = e_order_new(buf); - e_order_update_callback_set(inst->order, _bar_order_update, inst); - _bar_fill(inst); - } -} - -EINTERN void -bar_config_updated(Instance *inst) -{ - const char *drop[] = { "enlightenment/desktop", "enlightenment/border", "text/uri-list" }; - - if (!inst->iconify_provider && inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) - { - inst->iconify_provider = e_comp_object_effect_mover_add(80, "e,action,*iconify", - _bar_iconify_start, inst); - } - else if (inst->iconify_provider && inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY) - { - E_FREE_FUNC(inst->iconify_provider, e_comp_object_effect_mover_del); - } - - bar_reorder(inst); - - if (!inst->drop_handler && inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY) - { - inst->drop_handler = - e_gadget_drop_handler_add(inst->o_main, inst, - _bar_drop_enter, _bar_drop_move, - _bar_drop_leave, _bar_drop_drop, - drop, 3); - elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler); - evas_object_show(inst->drop_handler); - } - else if (inst->drop_handler && inst->cfg->type == E_LUNCHER_MODULE_TASKS_ONLY) - { - E_FREE_FUNC(inst->drop_handler, evas_object_del); - } -} - -EINTERN Evas_Object * -bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - if (e_gadget_site_is_desklock(parent)) return NULL; - inst = E_NEW(Instance, 1); - inst->size = 0; - inst->resize_job = NULL; - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->inside = EINA_FALSE; - inst->bar = EINA_TRUE; - inst->main_del = EINA_FALSE; - inst->icons_desktop_hash = eina_hash_string_superfast_new(NULL); - inst->icons_clients_hash = eina_hash_pointer_new(NULL); - - if (!inst->cfg->preview_size) - inst->cfg->preview_size = 64; - - inst->o_main = elm_layout_add(parent); - e_theme_edje_object_set(inst->o_main, "e/gadget/luncher/bar", - "e/gadget/luncher/bar"); - edje_object_update_hints_set(elm_layout_edje_get(inst->o_main), EINA_TRUE); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_MOUSE_OUT, _bar_mouse_out, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, _bar_del, inst); - evas_object_smart_callback_add(parent, "gadget_created", _bar_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_site_anchor", _bar_anchor_changed_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _bar_removed_cb, inst); - evas_object_show(inst->o_main); - - if (!eina_list_count(handlers)) - { - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, - _bar_cb_update_icons, NULL); - E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, - _bar_cb_update_icons, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW, - _bar_cb_exec_new, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT, - _bar_cb_exec_new, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, - _bar_cb_exec_client_prop, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL, - _bar_cb_exec_del, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, - _bar_cb_client_remove, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_DESK_SHOW, - _bar_cb_desk_switch, NULL); - } - if (inst->cfg->id < 0) return inst->o_main; - luncher_instances = eina_list_append(luncher_instances, inst); - - inst->current_preview = NULL; - inst->current_preview_menu = EINA_FALSE; - - return inst->o_main; -} - diff --git a/src/modules/luncher/config.c b/src/modules/luncher/config.c deleted file mode 100644 index 2ce4baf7e..000000000 --- a/src/modules/luncher/config.c +++ /dev/null @@ -1,572 +0,0 @@ -#include "luncher.h" - -static void -_config_close(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - luncher_config->list = NULL; - luncher_config->slist = NULL; - evas_object_del(luncher_config->config_dialog); - luncher_config->config_dialog = NULL; - e_config_save_queue(); -} - -static void -_config_show_general(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(luncher_config->contents); - evas_object_show(luncher_config->general); -} - -static void -_config_show_contents(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(luncher_config->general); - evas_object_show(luncher_config->contents); -} - -static void -_type_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->type = E_LUNCHER_MODULE_FULL; - break; - case 1: - inst->cfg->type = E_LUNCHER_MODULE_LAUNCH_ONLY; - break; - case 2: - inst->cfg->type = E_LUNCHER_MODULE_TASKS_ONLY; - break; - default: - inst->cfg->type = E_LUNCHER_MODULE_FULL; - } - - e_config_save_queue(); - bar_config_updated(inst); -} - -static void -_check_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - inst->cfg->hide_tooltips = elm_check_state_get(obj); - - e_config_save_queue(); - bar_config_updated(inst); -} - -static void -_config_source_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - const char *dir = elm_object_item_text_get(elm_list_selected_item_get(luncher_config->list)); - - if (eina_streq(inst->cfg->dir, dir)) - return; - if (inst->cfg->dir) eina_stringshare_del(inst->cfg->dir); - inst->cfg->dir = NULL; - inst->cfg->dir = eina_stringshare_ref(dir); - bar_reorder(inst); -} - -static void -_config_populate_order_list(Evas_Object *list, Instance *inst) -{ - Eina_List *dirs; - char buf[4096], *file; - size_t len; - Elm_Object_Item *it; - - elm_list_clear(list); - - len = e_user_dir_concat_static(buf, "applications/bar"); - if (len + 2 >= sizeof(buf)) return; - dirs = ecore_file_ls(buf); - - buf[len] = '/'; - len++; - - EINA_LIST_FREE(dirs, file) - { - if (file[0] == '.') continue; - if (eina_strlcpy(buf + len, file, sizeof(buf) - len) >= sizeof(buf) - len) - continue; - if (ecore_file_is_dir(buf)) - { - it = elm_list_item_append(list, file, NULL, NULL, _config_source_changed, inst); - if ((inst->cfg->dir) && (eina_streq(inst->cfg->dir, file))) - elm_list_item_selected_set(it, EINA_TRUE); - } - free(file); - } - elm_list_go(list); -} - -static void -_config_source_cancel(void *data) -{ - Instance *inst = data; - - config_luncher(e_zone_current_get(), inst, luncher_config->bar); -} - -static void -_config_source_added(void *data, char *text) -{ - Instance *inst = data; - char buf[4096]; - char tmp[4096] = {0}; - FILE *f; - size_t len; - - len = e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", text); - if (len + sizeof("/.order") >= sizeof(buf)) return; - while (!ecore_file_exists(buf)) - { - ecore_file_mkdir(buf); - memcpy(buf + len, "/.order", sizeof("/.order")); - e_user_dir_concat_static(tmp, "applications/bar/default/.order"); - if (ecore_file_cp(tmp, buf)) break; - f = fopen(buf, "w"); - if (!f) break; - /* Populate this .order file with some defaults */ - snprintf(tmp, sizeof(tmp), - "terminology.desktop\n" - "sylpheed.desktop\n" - "firefox.desktop\n" - "openoffice.desktop\n" - "xchat.desktop\n" - "gimp.desktop\n"); - fwrite(tmp, sizeof(char), strlen(tmp), f); - fclose(f); - break; - } - config_luncher(e_zone_current_get(), inst, luncher_config->bar); -} - -static void -_config_source_deleted(void *data) -{ - char buf[4096]; - Instance *inst = data; - - if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", inst->cfg->dir) >= sizeof(buf)) - return; - if (ecore_file_is_dir(buf)) - ecore_file_recursive_rm(buf); - e_object_del(E_OBJECT(inst->order)); - config_luncher(e_zone_current_get(), inst, luncher_config->bar); -} - -static void -_config_source_add(void *data, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - evas_object_del(luncher_config->config_dialog); - e_entry_dialog_show(_("Create new Luncher source"), "enlightenment", - _("Enter a name for this new source:"), "", NULL, NULL, - _config_source_added, _config_source_cancel, inst); -} - -static void -_config_source_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - char buf[4096]; - - evas_object_del(luncher_config->config_dialog); - snprintf(buf, sizeof(buf), _("You requested to delete \"%s\"." - "Are you sure you want to delete this bar source?"), - inst->cfg->dir); - e_confirm_dialog_show(_("Are you sure you want to delete this bar source?"), - "application-exit", buf, _("Delete"), _("Keep"), - _config_source_deleted, _config_source_cancel, inst, inst, - NULL, NULL); -} - -static void -_config_contents(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Evas_Object *popup = evas_object_data_get(obj, "popup"); - - if (e_configure_registry_exists("applications/ibar_applications")) - { - char path[4096]; - e_user_dir_snprintf(path, sizeof(path), "applications/bar/%s/.order", - inst->cfg->dir); - e_configure_registry_call("internal/ibar_other", NULL, path); - evas_object_del(popup); - } - -} - -static void -_config_create_icon(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Evas_Object *popup = evas_object_data_get(obj, "popup"); - - if (e_configure_registry_exists("applications/new_application")) - { - char path[4096]; - e_user_dir_snprintf(path, sizeof(path), "applications/bar/%s/.order", - inst->cfg->dir); - e_configure_registry_call("applications/new_application", NULL, path); - evas_object_del(popup); - } -} - -static void -_icon_theme_file_set(Evas_Object *img, const char *icon) -{ - const char *path = NULL, *k = NULL; - char buf[4096]; - int len = 0; - - if (!icon) - path = NULL; - else if (strncmp(icon, "/", 1) && !ecore_file_exists(icon)) - { - path = efreet_icon_path_find(e_config->icon_theme, icon, 48); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", icon, 48); - } - } - else if (ecore_file_exists(icon)) - { - path = icon; - } - if (!path && icon) - { - snprintf(buf, sizeof(buf), "e/icons/%s", icon); - if (eina_list_count(e_theme_collection_items_find("base/theme/icons", buf))) - { - path = e_theme_edje_file_get("base/theme/icons", buf); - k = buf; - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (!path && !icon) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - if (path && icon) - { - len = strlen(icon); - if ((len > 4) && (!strcasecmp(icon + len - 4, ".edj"))) - k = "icon"; - } - elm_image_file_set(img, path, k); -} - -static void -_update_preview_size(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - int value = elm_slider_value_get(obj); - - inst->cfg->preview_size = value; - e_config_save_queue(); -} - -EINTERN Evas_Object * -config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar) -{ - Evas_Object *popup, *tb, *lbl, *fr, *box, *list, *mlist; - Evas_Object *butbox, *sep, *hbox, *img, *but, *o, *group; - Evas_Object *slider, *check; - Elm_Object_Item *it; - - luncher_config->bar = bar; - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - lbl = elm_label_add(tb); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - evas_object_show(lbl); - elm_object_text_set(lbl, _("Luncher Configuration")); - elm_table_pack(tb, lbl, 0, 0, 2, 1); - - mlist = elm_list_add(tb); - E_ALIGN(mlist, 0, EVAS_HINT_FILL); - E_WEIGHT(mlist, 0, EVAS_HINT_EXPAND); - elm_table_pack(tb, mlist, 0, 1, 1, 1); - elm_list_select_mode_set(mlist, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(mlist, 1, 1); - it = elm_list_item_append(mlist, _("General"), NULL, NULL, - _config_show_general, inst); - elm_list_item_selected_set(it, 1); - it = elm_list_item_append(mlist, _("Contents"), NULL, NULL, - _config_show_contents, inst); - elm_list_go(mlist); - evas_object_show(mlist); - - fr = elm_frame_add(tb); - elm_object_text_set(fr, _("General")); - E_EXPAND(fr); - evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(tb, fr, 1, 1, 1, 1); - evas_object_show(fr); - luncher_config->general = fr; - - box = elm_box_add(fr); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Luncher Type:")); - E_ALIGN(lbl, 0.5, 0.5); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Launcher and Taskbar")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _type_changed, inst); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Launcher Only")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _type_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Taskbar Only")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _type_changed, inst); - evas_object_show(o); - - switch(inst->cfg->type) - { - case E_LUNCHER_MODULE_FULL: - elm_radio_value_set(group, 0); - break; - case E_LUNCHER_MODULE_LAUNCH_ONLY: - elm_radio_value_set(group, 1); - break; - case E_LUNCHER_MODULE_TASKS_ONLY: - elm_radio_value_set(group, 2); - break; - default: - elm_radio_value_set(group, 0); - } - - o = elm_separator_add(box); - elm_separator_horizontal_set(o, EINA_TRUE); - E_EXPAND(o); - E_FILL(o); - elm_box_pack_end(box, o); - evas_object_show(o); - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Tooltips:")); - E_ALIGN(lbl, 0.5, 0.5); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - check = elm_check_add(box); - elm_object_text_set(check, _("Hide tooltips")); - elm_check_state_set(check, inst->cfg->hide_tooltips); - E_ALIGN(check, 0.0, 0.0); - E_WEIGHT(check, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(check, "changed", _check_changed, inst); - elm_box_pack_end(box, check); - evas_object_show(check); - - o = elm_separator_add(box); - elm_separator_horizontal_set(o, EINA_TRUE); - E_EXPAND(o); - E_FILL(o); - elm_box_pack_end(box, o); - evas_object_show(o); - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Preview Size:")); - E_ALIGN(lbl, 0.5, 0.5); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - slider = elm_slider_add(box); - elm_slider_unit_format_set(slider, "%1.0f"); - elm_slider_indicator_format_set(slider, "%1.0f"); - elm_slider_min_max_set(slider, 1, 256); - elm_slider_value_set(slider, inst->cfg->preview_size); - elm_slider_step_set(slider, 1 / 256.0); - elm_slider_span_size_set(slider, 256); - E_ALIGN(slider, 0.0, 0.0); - E_WEIGHT(slider, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(slider, "delay,changed", _update_preview_size, inst); - elm_box_pack_end(box, slider); - evas_object_show(slider); - - elm_object_content_set(fr, box); - - fr = elm_frame_add(tb); - elm_object_text_set(fr, _("Contents")); - E_EXPAND(fr); - evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(tb, fr, 1, 1, 1, 1); - evas_object_show(fr); - luncher_config->contents = fr; - - box = elm_box_add(fr); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - hbox = elm_box_add(box); - elm_box_horizontal_set(hbox, EINA_TRUE); - elm_box_homogeneous_set(hbox, EINA_FALSE); - evas_object_size_hint_expand_set(hbox, 0.0, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, hbox); - evas_object_show(hbox); - - list = elm_list_add(hbox); - E_ALIGN(list, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_box_pack_end(hbox, list); - elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(list, 1, 1); - evas_object_show(list); - luncher_config->list = list; - _config_populate_order_list(list, inst); - - butbox = elm_box_add(hbox); - elm_box_horizontal_set(butbox, EINA_FALSE); - E_EXPAND(butbox); - evas_object_size_hint_align_set(butbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(hbox, butbox); - evas_object_show(butbox); - - sep = elm_separator_add(box); - elm_separator_horizontal_set(sep, EINA_TRUE); - elm_box_pack_end(box, sep); - evas_object_show(sep); - - img = elm_icon_add(butbox); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - _icon_theme_file_set(img, "list-add"); - evas_object_show(img); - - but = elm_button_add(butbox); - elm_object_part_content_set(but, "icon", img); - elm_object_text_set(but, _("Add")); - E_EXPAND(but); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_data_set(but, "popup", popup); - evas_object_smart_callback_add(but, "clicked", _config_source_add, inst); - elm_box_pack_end(butbox, but); - evas_object_show(but); - - img = elm_icon_add(butbox); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - _icon_theme_file_set(img, "list-remove"); - evas_object_show(img); - - but = elm_button_add(butbox); - elm_object_part_content_set(but, "icon", img); - elm_object_text_set(but, _("Delete")); - E_EXPAND(but); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_data_set(but, "popup", popup); - evas_object_smart_callback_add(but, "clicked", _config_source_del, inst); - elm_box_pack_end(butbox, but); - evas_object_show(but); - - hbox = elm_box_add(box); - elm_box_horizontal_set(hbox, EINA_TRUE); - elm_box_homogeneous_set(hbox, EINA_TRUE); - E_EXPAND(box); - evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, hbox); - evas_object_show(hbox); - - img = elm_icon_add(hbox); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - _icon_theme_file_set(img, "document-new"); - evas_object_show(img); - - but = elm_button_add(hbox); - elm_object_part_content_set(but, "icon", img); - elm_object_text_set(but, _("Create New Icon")); - E_EXPAND(but); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_data_set(but, "popup", popup); - evas_object_smart_callback_add(but, "clicked", _config_create_icon, inst); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - img = elm_icon_add(hbox); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - _icon_theme_file_set(img, "list-add"); - evas_object_show(img); - - but = elm_button_add(hbox); - elm_object_part_content_set(but, "icon", img); - elm_object_text_set(but, _("Contents")); - E_EXPAND(but); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_data_set(but, "popup", popup); - evas_object_smart_callback_add(but, "clicked", _config_contents, inst); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - elm_object_content_set(fr, box); - - _config_show_general(NULL, NULL, NULL); - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, NULL); - - return luncher_config->config_dialog = popup; -} - diff --git a/src/modules/luncher/e-module-luncher.edj b/src/modules/luncher/e-module-luncher.edj deleted file mode 100644 index f2dd5d4bb..000000000 Binary files a/src/modules/luncher/e-module-luncher.edj and /dev/null differ diff --git a/src/modules/luncher/grid.c b/src/modules/luncher/grid.c deleted file mode 100644 index b99fdff22..000000000 --- a/src/modules/luncher/grid.c +++ /dev/null @@ -1,754 +0,0 @@ -#include "luncher.h" -static Eina_List *handlers; -static Elm_Gengrid_Item_Class _grid_icon_class; -static void _grid_resize_job(void *data); - -static void -_grid_aspect(Instance *inst) -{ - Evas_Coord w, h, square, size; - - if (!eina_list_count(inst->icons)) - return; - evas_object_geometry_get(inst->o_main, 0, 0, &w, &h); - size = 0; - if ((w + h) > 1) - { - square = w + h; - size = floor((square / eina_list_count(inst->icons))); - } - inst->size = size; - elm_gengrid_item_size_set(inst->o_icon_con, size, size); -} - -static Eina_Bool -_grid_check_modifiers(Evas_Modifier *modifiers) -{ - if ((evas_key_modifier_is_set(modifiers, "Alt")) || - (evas_key_modifier_is_set(modifiers, "Control")) || - (evas_key_modifier_is_set(modifiers, "Shift"))) - return EINA_TRUE; - return EINA_FALSE; -} - -static Evas_Object * -_grid_gadget_configure(Evas_Object *g) -{ - if (!luncher_config) return NULL; - if (luncher_config->config_dialog) return NULL; - Instance *inst = evas_object_data_get(g, "instance"); - return config_luncher(e_zone_current_get(), inst, EINA_TRUE); -} - -static void -_grid_instance_watch(void *data, E_Exec_Instance *ex EINA_UNUSED, E_Exec_Watch_Type type) -{ - Icon *ic = data; - - switch (type) - { - case E_EXEC_WATCH_STARTED: - if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); - ic->starting = EINA_FALSE; - break; - default: - break; - } -} - -static void -_grid_icon_del(Instance *inst, Icon *ic) -{ - inst->icons = eina_list_remove(inst->icons, ic); - evas_object_del(ic->o_icon); - evas_object_del(ic->o_layout); - if (ic->desktop) - efreet_desktop_unref(ic->desktop); - eina_stringshare_del(ic->icon); - eina_stringshare_del(ic->key); - if (ic->exec) - e_exec_instance_watcher_del(ic->exec, _grid_instance_watch, ic); - ic->exec = NULL; - _grid_aspect(inst); - E_FREE(ic); -} - -static void -_grid_icon_drag_done(E_Drag *drag, int dropped) -{ - Instance *inst = e_object_data_get(E_OBJECT(drag)); - - efreet_desktop_unref(drag->data); - if (!inst) return; - evas_object_smart_callback_call(e_gadget_site_get(inst->o_main), "gadget_site_unlocked", NULL); - if (!dropped) - grid_recalculate(inst); -} - -static void -_grid_icon_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Move *ev = event_data; - int dx, dy; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_grid_check_modifiers(ev->modifiers)) return; - - if (!ic->drag.start) return; - - dx = ev->cur.output.x - ic->drag.x; - dy = ev->cur.output.y - ic->drag.y; - if (((dx * dx) + (dy * dy)) > - (e_config->drag_resist * e_config->drag_resist)) - { - E_Drag *d; - Evas_Object *o; - Evas_Coord x, y, w, h; - unsigned int size; - const char *drag_types[] = { "enlightenment/desktop" }; - - ic->drag.dnd = 1; - ic->drag.start = 0; - - evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h); - d = e_drag_new(x, y, drag_types, 1, - ic->desktop, -1, NULL, _grid_icon_drag_done); - d->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - efreet_desktop_ref(ic->desktop); - size = MAX(w, h); - o = e_util_desktop_icon_add(ic->desktop, size, e_drag_evas_get(d)); - e_drag_object_set(d, o); - - e_drag_resize(d, w, h); - e_drag_start(d, ic->drag.x, ic->drag.y); - e_object_data_set(E_OBJECT(d), ic->inst); - if (ic->in_order) - e_order_remove(ic->inst->order, ic->desktop); - } -} - -static Eina_Bool -_grid_drag_timer(void *data) -{ - Icon *ic = data; - - ic->drag_timer = NULL; - ic->drag.start = 1; - evas_object_smart_callback_call(e_gadget_site_get(ic->inst->o_main), "gadget_site_locked", NULL); - return EINA_FALSE; -} - -static void -_grid_icon_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Up *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) - { - if (ev->button == 1) - { - ic->drag.start = 0; - ic->drag.dnd = 0; - E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); - E_FREE_FUNC(ic->mouse_out_timer, ecore_timer_del); - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - } - return; - } - if (_grid_check_modifiers(ev->modifiers)) return; - - if (ev->button == 1) - { - ic->drag.x = ev->output.x; - ic->drag.y = ev->output.y; - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - ic->drag_timer = ecore_timer_loop_add(.35, _grid_drag_timer, ic); - } -} - -static void -_grid_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_Up *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_grid_check_modifiers(ev->modifiers)) return; - - if (ev->button == 1) - { - E_FREE_FUNC(ic->drag_timer, ecore_timer_del); - if (ic->drag.dnd) - { - ic->drag.start = 0; - ic->drag.dnd = 0; - return; - } - } - if (ev->button == 1 && ic->desktop) - { - if (ic->desktop->type == EFREET_DESKTOP_TYPE_APPLICATION) - { - E_Exec_Instance *ex; - - ex = e_exec(e_zone_current_get(), ic->desktop, NULL, NULL, "luncher"); - ic->exec = ex; - e_exec_instance_watcher_add(ex, _grid_instance_watch, ic); - if (!ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,starting", "e"); - ic->starting = EINA_TRUE; - } - else if (ic->desktop->type == EFREET_DESKTOP_TYPE_LINK) - { - if (!strncasecmp(ic->desktop->url, "file:", 5)) - { - E_Action *act; - - act = e_action_find("fileman"); - if (act) - act->func.go(NULL, ic->desktop->url + 5); - } - } - } -} - -static void -_grid_icon_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data) -{ - Icon *ic = data; - Evas_Event_Mouse_In *ev = event_data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_grid_check_modifiers(ev->modifiers)) return; - - evas_object_raise(ic->o_layout); - if (!ic->inst->cfg->hide_tooltips) - elm_object_tooltip_show(obj); - ic->active = EINA_TRUE; - elm_layout_signal_emit(ic->o_layout, "e,state,focused", "e"); -} - -static void -_grid_icon_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Icon *ic = data; - - if (!ic->inst->cfg->hide_tooltips) - elm_object_tooltip_hide(obj); - elm_layout_signal_emit(ic->o_layout, "e,state,unfocused", "e"); -} - -static Evas_Object * -_gengrid_icon_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) -{ - Icon *ic = data; - if (strcmp(part, "elm.swallow.icon")) - return NULL; - return ic->o_layout; -} - -static void -_grid_icon_file_set(Icon *ic, Efreet_Desktop *desktop) -{ - const char *path = NULL, *k = NULL; - char buf[4096]; - - if (desktop) - { - if (!desktop->icon) - path = NULL; - else if (strncmp(desktop->icon, "/", 1) && !ecore_file_exists(desktop->icon)) - { - path = efreet_icon_path_find(e_config->icon_theme, desktop->icon, ic->inst->size); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", desktop->icon, ic->inst->size); - } - } - else if (ecore_file_exists(desktop->icon)) - { - path = desktop->icon; - } - if (!path && desktop->icon) - { - snprintf(buf, sizeof(buf), "e/icons/%s", desktop->icon); - if (eina_list_count(e_theme_collection_items_find("base/theme/icons", buf))) - { - path = e_theme_edje_file_get("base/theme/icons", buf); - k = buf; - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (!path && !desktop->icon) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (ic->icon) - { - if (strncmp(ic->icon, "/", 1) && !ecore_file_exists(ic->icon)) - { - path = efreet_icon_path_find(e_config->icon_theme, ic->icon, ic->inst->size); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", ic->icon, ic->inst->size); - } - } - else if (ecore_file_exists(ic->icon)) - { - path = ic->icon; - k = ic->key; - } - if (!path) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - elm_image_file_set(ic->o_icon, path, k); -} - -static Icon * -_grid_icon_add(Instance *inst, Efreet_Desktop *desktop) -{ - Icon *ic; - - ic = E_NEW(Icon, 1); - efreet_desktop_ref(desktop); - ic->desktop = desktop; - ic->inst = inst; - ic->preview = NULL; - ic->preview_box = NULL; - ic->mouse_in_timer = NULL; - ic->mouse_out_timer = NULL; - ic->active = EINA_FALSE; - ic->starting = EINA_FALSE; - ic->exec = NULL; - - ic->o_layout = elm_layout_add(inst->o_icon_con); - e_theme_edje_object_set(ic->o_layout, "e/gadget/luncher/icon", - "e/gadget/luncher/icon"); - E_FILL(ic->o_layout); - evas_object_show(ic->o_layout); - - ic->o_icon = elm_icon_add(ic->o_layout); - E_EXPAND(ic->o_icon); - - - _grid_icon_file_set(ic, desktop); - - if (!inst->cfg->hide_tooltips) - { - elm_object_tooltip_text_set(ic->o_icon, desktop->name); - elm_object_tooltip_orient_set(ic->o_icon, ELM_TOOLTIP_ORIENT_CENTER); - elm_object_tooltip_style_set(ic->o_icon, "luncher"); - } - evas_object_size_hint_aspect_set(ic->o_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - elm_layout_content_set(ic->o_layout, "e.swallow.icon", ic->o_icon); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_UP, - _grid_icon_mouse_up, ic); - evas_object_event_callback_priority_add(ic->o_icon, EVAS_CALLBACK_MOUSE_DOWN, 0, - _grid_icon_mouse_down, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_MOVE, - _grid_icon_mouse_move, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_IN, - _grid_icon_mouse_in, ic); - evas_object_event_callback_add(ic->o_icon, EVAS_CALLBACK_MOUSE_OUT, - _grid_icon_mouse_out, ic); - evas_object_show(ic->o_icon); - - elm_layout_sizing_eval(ic->o_layout); - - elm_gengrid_item_append(inst->o_icon_con, &_grid_icon_class, ic, NULL, NULL); - _grid_aspect(inst); - - return ic; -} - -static void -_grid_empty(Instance *inst) -{ - if (inst->icons) - { - elm_gengrid_clear(inst->o_icon_con); - while (inst->icons) - _grid_icon_del(inst, eina_list_data_get(inst->icons)); - inst->icons = NULL; - } -} - -static void -_grid_fill(Instance *inst) -{ - Icon *ic; - - if (inst->order) - { - Efreet_Desktop *desktop; - Eina_List *list; - - EINA_LIST_FOREACH(inst->order->desktops, list, desktop) - { - ic = _grid_icon_add(inst, desktop); - ic->in_order = EINA_TRUE; - inst->icons = eina_list_append(inst->icons, ic); - } - } -} - -static void -_grid_resize_job(void *data) -{ - Instance *inst = data; - Eina_List *l; - Icon *ic; - - if (inst) - { - elm_layout_sizing_eval(inst->o_main); - _grid_aspect(inst); - EINA_LIST_FOREACH(inst->icons, l, ic) - _grid_icon_file_set(ic, ic->desktop); - inst->resize_job = NULL; - } -} - -static Eina_Bool -_grid_cb_update_icons(EINA_UNUSED void *data, EINA_UNUSED int ev_type, EINA_UNUSED void *ev) -{ - Instance *inst = NULL; - Eina_List *l = NULL; - - EINA_LIST_FOREACH(luncher_instances, l, inst) - { - if (inst->bar) continue; - if (inst->resize_job) return ECORE_CALLBACK_RENEW; - inst->resize_job = ecore_job_add(_grid_resize_job, inst); - } - return ECORE_CALLBACK_PASS_ON; -} - -static void -_grid_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->resize_job) return; - inst->resize_job = ecore_job_add(_grid_resize_job, inst); -} - -static void -_grid_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - char buf[4096]; - - if (inst->o_main != event_data) return; - if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", inst->cfg->dir) >= sizeof(buf)) - return; - - luncher_config->items = eina_list_remove(luncher_config->items, inst->cfg); - eina_stringshare_del(inst->cfg->dir); - E_FREE(inst->cfg); -} - -static void -_grid_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - evas_object_smart_callback_del_full(e_gadget_site_get(obj), "gadget_removed", _grid_removed_cb, inst); - e_object_del(E_OBJECT(inst->order)); - E_FREE_FUNC(inst->drop_handler, evas_object_del); - luncher_instances = eina_list_remove(luncher_instances, inst); - free(inst); -} - -static void -_grid_drop_drop(void *data, const char *type, void *event_data) -{ - Instance *inst = data; - E_Event_Dnd_Drop *ev = event_data; - Efreet_Desktop *desktop = NULL; - Eina_List *l = NULL; - Icon *ic = NULL; - - evas_object_del(inst->place_holder); - inst->place_holder = NULL; - if (!strcmp(type, "enlightenment/desktop")) - desktop = ev->data; - else if (!strcmp(type, "enlightenment/border")) - { - E_Client *ec; - - ec = ev->data; - desktop = ec->desktop; - if (!desktop) - { - desktop = e_desktop_client_create(ec); - efreet_desktop_save(desktop); - e_desktop_edit(desktop); - } - } - else if (!strcmp(type, "text/uri-list")) - l = ev->data; - - ic = inst->drop_before; - if (ic) - { - if (desktop) - e_order_prepend_relative(inst->order, desktop, ic->desktop); - else - e_order_files_prepend_relative(inst->order, l, ic->desktop); - } - else - { - if (desktop) - e_order_append(inst->order, desktop); - else - e_order_files_append(inst->order, l); - } -} - -static void -_grid_drop_leave(void *data, const char *type EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - inst->inside = EINA_FALSE; - evas_object_del(inst->place_holder); - inst->place_holder = NULL; -} - -static void -_grid_drop_move(void *data, const char *type EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - E_Event_Dnd_Move *ev = event_data; - Evas_Coord x = ev->x, y = ev->y; - Eina_List *l; - Icon *ic; - - if (!inst->inside) - return; - - EINA_LIST_FOREACH(inst->icons, l, ic) - { - Evas_Coord dx, dy, dw, dh; - - if (!ic->in_order) continue; - evas_object_geometry_get(ic->o_layout, &dx, &dy, &dw, &dh); - if (E_INSIDE(x, y, dx, dy, dw, dh)) - inst->drop_before = ic; - } - if (inst->drop_before) - elm_gengrid_item_insert_before(inst->o_icon_con, &_grid_icon_class, inst->place_holder, inst->drop_before->o_layout, NULL, NULL); -} - -static void -_grid_drop_enter(void *data, const char *type EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - inst->inside = EINA_TRUE; - inst->place_holder = evas_object_rectangle_add(evas_object_evas_get(inst->o_icon_con)); - evas_object_color_set(inst->place_holder, 0, 0, 0, 0); - evas_object_size_hint_min_set(inst->place_holder, inst->size, inst->size); - evas_object_size_hint_max_set(inst->place_holder, inst->size, inst->size); - evas_object_show(inst->place_holder); -} - -static void -_grid_anchor_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst && inst->o_icon_con) - { - grid_recalculate(inst); - } -} - -static void -_grid_order_update(void *data, E_Order *eo EINA_UNUSED) -{ - Instance *inst = data; - - if (inst && inst->o_icon_con) - { - grid_recalculate(inst); - } -} - -static void -_grid_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - char buf[4096]; - const char *drop[] = { "enlightenment/desktop", "enlightenment/border", "text/uri-list" }; - - inst->o_icon_con = elm_gengrid_add(inst->o_main); - elm_object_style_set(inst->o_icon_con, "no_inset_shadow"); - elm_gengrid_align_set(inst->o_icon_con, 0.5, 0.5); - elm_gengrid_select_mode_set(inst->o_icon_con, ELM_OBJECT_SELECT_MODE_NONE); - E_FILL(inst->o_icon_con); - elm_layout_content_set(inst->o_main, "e.swallow.grid", inst->o_icon_con); - evas_object_show(inst->o_icon_con); - - evas_object_data_set(inst->o_main, "instance", inst); - evas_object_data_set(inst->o_icon_con, "instance", inst); - - e_gadget_configure_cb_set(inst->o_main, _grid_gadget_configure); - evas_object_smart_callback_del_full(obj, "gadget_created", _grid_created_cb, data); - - if (!inst->cfg->dir) - inst->cfg->dir = eina_stringshare_add("default"); - if (inst->cfg->dir[0] != '/') - e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order", - inst->cfg->dir); - else - eina_strlcpy(buf, inst->cfg->dir, sizeof(buf)); - - inst->order = e_order_new(buf); - e_order_update_callback_set(inst->order, _grid_order_update, inst); - - _grid_fill(inst); - - inst->drop_handler = - e_gadget_drop_handler_add(inst->o_main, inst, - _grid_drop_enter, _grid_drop_move, - _grid_drop_leave, _grid_drop_drop, - drop, 3); - elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler); - evas_object_show(inst->drop_handler); - - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_RESIZE, _grid_resize, inst); - _grid_aspect(inst); -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(luncher_config->items, l, ci) - if (*id == ci->id) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(luncher_config->items)+1; - else - ci->id = -1; - ci->dir = eina_stringshare_add("default"); - luncher_config->items = eina_list_append(luncher_config->items, ci); - - return ci; -} - -static void -_grid_recalculate_job(void *data) -{ - Instance *inst = data; - - if (inst) - { - if (inst->o_icon_con) - { - _grid_empty(inst); - _grid_fill(inst); - } - inst->recalc_job = NULL; - } -} - -EINTERN void -grid_recalculate(Instance *inst) -{ - E_FREE_FUNC(inst->recalc_job, ecore_job_del); - inst->recalc_job = ecore_job_add(_grid_recalculate_job, inst); -} - -EINTERN void -grid_reorder(Instance *inst) -{ - char buf[4096]; - - if (inst) - { - E_FREE_FUNC(inst->recalc_job, ecore_job_del); - _grid_empty(inst); - if (!inst->cfg->dir) - inst->cfg->dir = eina_stringshare_add("default"); - if (inst->cfg->dir[0] != '/') - e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order", - inst->cfg->dir); - else - eina_strlcpy(buf, inst->cfg->dir, sizeof(buf)); - e_object_del(E_OBJECT(inst->order)); - inst->order = e_order_new(buf); - e_order_update_callback_set(inst->order, _grid_order_update, inst); - _grid_fill(inst); - } -} - -EINTERN Evas_Object * -grid_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - if (orient) return NULL; - if (e_gadget_site_is_desklock(parent)) return NULL; - inst = E_NEW(Instance, 1); - inst->size = 0; - inst->resize_job = NULL; - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->inside = EINA_FALSE; - inst->bar = EINA_FALSE; - - if (!inst->cfg->preview_size) - inst->cfg->preview_size = 64; - - _grid_icon_class.item_style = "luncher"; - _grid_icon_class.func.text_get = NULL; - _grid_icon_class.func.content_get = _gengrid_icon_get; - _grid_icon_class.func.state_get = NULL; - _grid_icon_class.func.del = NULL; - - inst->o_main = elm_layout_add(parent); - e_theme_edje_object_set(inst->o_main, "e/gadget/luncher/grid", - "e/gadget/luncher/grid"); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, _grid_del, inst); - evas_object_smart_callback_add(parent, "gadget_created", _grid_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_site_anchor", _grid_anchor_changed_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _grid_removed_cb, inst); - evas_object_show(inst->o_main); - - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, - _grid_cb_update_icons, NULL); - E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, - _grid_cb_update_icons, NULL); - - if (inst->cfg->id < 0) return inst->o_main; - luncher_instances = eina_list_append(luncher_instances, inst); - - return inst->o_main; -} diff --git a/src/modules/luncher/luncher.h b/src/modules/luncher/luncher.h deleted file mode 100644 index ef9855073..000000000 --- a/src/modules/luncher/luncher.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef LUNCHER_H -#define LUNCHER_H - -#include "e.h" - -E_API extern E_Module_Api e_modapi; - -E_API void *e_modapi_init (E_Module *m); -E_API int e_modapi_shutdown (E_Module *m); -E_API int e_modapi_save (E_Module *m); - -typedef struct _Config Config; -typedef struct _Config_Item Config_Item; -typedef struct _Instance Instance; -typedef struct _Icon Icon; -typedef enum _Luncher_Type Luncher_Type; - -enum _Luncher_Type -{ - E_LUNCHER_MODULE_FULL = 0, - E_LUNCHER_MODULE_LAUNCH_ONLY, - E_LUNCHER_MODULE_TASKS_ONLY -}; - -struct _Config -{ - Eina_List *items; - - E_Module *module; - Evas_Object *config_dialog; - Evas_Object *slist; - Evas_Object *list; - Evas_Object *general; - Evas_Object *contents; - Eina_Bool bar; -}; - -struct _Config_Item -{ - int id; - int version; - int preview_size; - int hide_tooltips; - Eina_Stringshare *dir; - Luncher_Type type; -}; - -struct _Instance -{ - Evas_Object *o_main; - Evas_Object *o_icon_con; - Evas_Object *drop_handler; - Evas_Object *place_holder; - Evas_Object *current_preview; - E_Order *order; - Eina_List *icons; - Eina_Hash *icons_desktop_hash; - Eina_Hash *icons_clients_hash; - Evas_Coord size; - Ecore_Job *resize_job; - Ecore_Job *recalc_job; - E_Comp_Object_Mover *iconify_provider; - Eina_Bool main_del; - Eina_Bool bar; - Eina_Bool inside; - Eina_Bool current_preview_menu; - Config_Item *cfg; - Icon *drop_before; -}; - -struct _Icon -{ - Instance *inst; - Evas_Object *o_layout; - Evas_Object *o_icon; - Evas_Object *preview; - Evas_Object *preview_box; - Evas_Object *preview_scroller; - Evas_Object *client_menu; - E_Exec_Instance *exec; - Efreet_Desktop *desktop; - Eina_List *execs; - Eina_List *clients; - Eina_List *client_cbs; - Ecore_Timer *mouse_in_timer; - Ecore_Timer *mouse_out_timer; - Ecore_Timer *drag_timer; - Eina_Stringshare *icon; - Eina_Stringshare *key; - Eina_Bool in_order; - Eina_Bool active; - Eina_Bool starting; - Eina_Bool preview_dismissed; - struct - { - unsigned char start E_BITFIELD; - unsigned char dnd E_BITFIELD; - int x, y; - } drag; -}; - -EINTERN Evas_Object *config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar); -EINTERN Evas_Object *bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN void bar_reorder(Instance *inst); -EINTERN void bar_recalculate(Instance *inst); -EINTERN void bar_config_updated(Instance *inst); -EINTERN Evas_Object *grid_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN void grid_reorder(Instance *inst); -EINTERN void grid_recalculate(Instance *inst); - -EINTERN extern Config *luncher_config; -EINTERN extern Eina_List *luncher_instances; - -#endif diff --git a/src/modules/luncher/meson.build b/src/modules/luncher/meson.build deleted file mode 100644 index 17905a7d7..000000000 --- a/src/modules/luncher/meson.build +++ /dev/null @@ -1,7 +0,0 @@ -src = files( - 'mod.c', - 'bar.c', - 'config.c', - 'grid.c', - 'luncher.h' - ) diff --git a/src/modules/luncher/mod.c b/src/modules/luncher/mod.c deleted file mode 100644 index 94530db5a..000000000 --- a/src/modules/luncher/mod.c +++ /dev/null @@ -1,108 +0,0 @@ -#include "luncher.h" - -#define CONFIG_VERSION 2 - -static E_Config_DD *conf_edd = NULL; -static E_Config_DD *conf_item_edd = NULL; -Eina_List *luncher_instances = NULL; -Config *luncher_config = NULL; - -EINTERN void -luncher_init(void) -{ - Eina_List *l; - Config_Item *ci; - - conf_item_edd = E_CONFIG_DD_NEW("Luncher_Config_Item", Config_Item); -#undef T -#undef D -#define T Config_Item -#define D conf_item_edd - E_CONFIG_VAL(D, T, id, INT); - E_CONFIG_VAL(D, T, version, INT); - E_CONFIG_VAL(D, T, preview_size, INT); - E_CONFIG_VAL(D, T, dir, STR); - E_CONFIG_VAL(D, T, type, INT); - E_CONFIG_VAL(D, T, hide_tooltips, INT); - - conf_edd = E_CONFIG_DD_NEW("Luncher_Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_LIST(D, T, items, conf_item_edd); - - luncher_config = e_config_domain_load("module.luncher", conf_edd); - - if (!luncher_config) - { - luncher_config = E_NEW(Config, 1); - ci = E_NEW(Config_Item, 1); - ci->id = 0; - ci->version = CONFIG_VERSION; - ci->preview_size = 64; - ci->dir = eina_stringshare_add("default"); - ci->type = E_LUNCHER_MODULE_FULL; - ci->hide_tooltips = 0; - luncher_config->items = eina_list_append(luncher_config->items, ci); - } - EINA_LIST_FOREACH(luncher_config->items, l, ci) - { - if (ci->version < CONFIG_VERSION) - { - ci->version = CONFIG_VERSION; - ci->type = E_LUNCHER_MODULE_FULL; - } - } - e_gadget_type_add("Luncher Bar", bar_create, NULL); - e_gadget_type_add("Luncher Grid", grid_create, NULL); -} - -EINTERN void -luncher_shutdown(void) -{ - if (luncher_config) - { - Config_Item *ci; - EINA_LIST_FREE(luncher_config->items, ci) - { - eina_stringshare_del(ci->dir); - free(ci); - } - E_FREE(luncher_config); - } - E_CONFIG_DD_FREE(conf_edd); - E_CONFIG_DD_FREE(conf_item_edd); - - e_gadget_type_del("Luncher Bar"); - e_gadget_type_del("Luncher Grid"); -} - -E_API E_Module_Api e_modapi = -{ - E_MODULE_API_VERSION, - "Luncher" -}; - -E_API void * -e_modapi_init(E_Module *m) -{ - luncher_init(); - - luncher_config->module = m; - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - luncher_shutdown(); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.luncher", conf_edd, luncher_config); - return 1; -} diff --git a/src/modules/luncher/module.desktop b/src/modules/luncher/module.desktop deleted file mode 100644 index 6aa6dc6bb..000000000 --- a/src/modules/luncher/module.desktop +++ /dev/null @@ -1,36 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Luncher -Name[ca]=Luncher -Name[cs]=Lišta spouštěčů -Name[de]=Luncher -Name[eo]=Breto Luncher -Name[fi]=Luncher -Name[fr]=Luncher -Name[gl]=Luncher -Name[ja]=Luncher -Name[ms]=Luncher -Name[pl]=Luncher -Name[ru]=Luncher -Name[sr]=И-трака -Name[tr]=Luncher -Comment=Iconic application launcher. -Comment[ca]=Barra d'icones per a executar aplicacions. -Comment[cs]=Lišta se spouštěči. -Comment[de]=Symbolbasierter Anwendungsstarter. -Comment[el]=Εικονικός εκκινητής εφαρμογών. -Comment[eo]=Lanĉilo de piktograma aplikaĵo. -Comment[es]=Lanzador de aplicaciones con íconos. -Comment[fi]=Ikoninen sovelluskäynnistin. -Comment[fr]=Barre d'icones permettant de lancer des applications. -Comment[gl]=Unha barra de iconas para iniciar aplicativos. -Comment[hu]=Ikonokkal bővíthető alkalmazásindító modul. -Comment[it]=Una barra di icone per il lancio di applicazioni. -Comment[ja]=Iconic アプリケーションランチャー -Comment[ms]=Pelancar aplikasi ikonik -Comment[pt]=Barra para iniciar aplicações -Comment[ru]=Панель для запуска приложений, представленных в виде значков. -Comment[sr]=Трака иконица покретача програма. -Comment[tr]=Uygulama başlatıcı. -Icon=e-module-luncher -X-Enlightenment-ModuleType=utils diff --git a/src/modules/meson.build b/src/modules/meson.build index 0a1e07913..21a8f1a23 100644 --- a/src/modules/meson.build +++ b/src/modules/meson.build @@ -44,16 +44,11 @@ mods = [ 'xkbswitch', 'tiling', 'packagekit', - 'wireless', - 'time', - 'luncher', - 'teamwork', 'vkbd', # modules have a custom binary as well 'battery', 'cpufreq', 'clock', - 'sysinfo', # custyom sub modules and custom data 'wizard', # also standard modules, just with only a desktop file using a generic icon diff --git a/src/modules/mixer/gadget/backend.c b/src/modules/mixer/backend.c similarity index 99% rename from src/modules/mixer/gadget/backend.c rename to src/modules/mixer/backend.c index 66ebb2652..7fcb2c73c 100644 --- a/src/modules/mixer/gadget/backend.c +++ b/src/modules/mixer/backend.c @@ -3,8 +3,7 @@ #include "emix.h" #include "e_mod_main.h" #include "e_mod_config.h" -#include "gadget/mixer.h" -#include "gadget/backend.h" +#include "backend.h" #define VOLUME_STEP 5 diff --git a/src/modules/mixer/gadget/backend.h b/src/modules/mixer/backend.h similarity index 100% rename from src/modules/mixer/gadget/backend.h rename to src/modules/mixer/backend.h diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c index 3fdbd4a09..cdaaefabf 100644 --- a/src/modules/mixer/e_mod_main.c +++ b/src/modules/mixer/e_mod_main.c @@ -3,8 +3,8 @@ #include "emix.h" #include "e_mod_main.h" #include "e_mod_config.h" -#include "gadget/mixer.h" -#include "gadget/backend.h" +#include "mixer.h" +#include "backend.h" EINTERN int _e_emix_log_domain; @@ -444,7 +444,7 @@ _gc_id_new(const E_Gadcon_Client_Class *client_class EINA_UNUSED) } E_API void * -e_modapi_init(E_Module *m) +e_modapi_init(E_Module *m EINA_UNUSED) { char buf[4096]; @@ -466,8 +466,6 @@ e_modapi_init(E_Module *m) E_LIST_HANDLER_APPEND(_handlers, E_EVENT_MIXER_SINKS_CHANGED, _mixer_sinks_changed, NULL); - e_modapi_gadget_init(m); - e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "preferences-extensions"); e_configure_registry_item_add("extensions/emix", 30, _("Mixer"), NULL, @@ -480,7 +478,7 @@ e_modapi_init(E_Module *m) } E_API int -e_modapi_shutdown(E_Module *m) +e_modapi_shutdown(E_Module *m EINA_UNUSED) { e_gadcon_provider_unregister((const E_Gadcon_Client_Class *)&_gadcon_class); @@ -491,16 +489,13 @@ e_modapi_shutdown(E_Module *m) E_FREE(mixer_context); } - e_modapi_gadget_shutdown(m); - backend_shutdown(); return 1; } E_API int -e_modapi_save(E_Module *m) +e_modapi_save(E_Module *m EINA_UNUSED) { - e_modapi_gadget_save(m); emix_config_save(); return 1; } diff --git a/src/modules/mixer/gadget/mixer.c b/src/modules/mixer/gadget/mixer.c deleted file mode 100644 index 2376c182c..000000000 --- a/src/modules/mixer/gadget/mixer.c +++ /dev/null @@ -1,423 +0,0 @@ -#include "mixer.h" -#include "backend.h" - -typedef struct _Context Context; -struct _Context -{ - char *theme; - E_Module *module; - Eina_List *instances; - E_Menu *menu; - unsigned int notification_id; -}; - -typedef struct _Instance Instance; -struct _Instance -{ - int id; - Evas_Object *o_main; - Evas_Object *o_mixer; - Evas_Object *popup; - Evas_Object *list; - Evas_Object *slider; - Evas_Object *check; - E_Gadget_Site_Orient orient; -}; - -static Context *gmixer_context = NULL; -static Eina_List *_handlers = NULL; - -static void -_mixer_popup_update(Instance *inst, int mute, int vol) -{ - elm_check_state_set(inst->check, !!mute); - elm_slider_value_set(inst->slider, vol); -} - -static void -_mixer_gadget_update(void) -{ - Edje_Message_Int_Set *msg; - Instance *inst; - Eina_List *l; - const Eina_List *ll; - Elm_Object_Item *it; - - EINA_LIST_FOREACH(gmixer_context->instances, l, inst) - { - msg = alloca(sizeof(Edje_Message_Int_Set) + (2 * sizeof(int))); - msg->count = 3; - - if (!backend_sink_default_get()) - { - msg->val[0] = EINA_FALSE; - msg->val[1] = 0; - msg->val[2] = 0; - if (inst->popup) - elm_ctxpopup_dismiss(inst->popup); - } - else - { - msg->val[0] = backend_mute_get(); - msg->val[1] = backend_volume_get(); - msg->val[2] = msg->val[1]; - if (inst->popup) - _mixer_popup_update(inst, msg->val[0], msg->val[1]); - } - edje_object_message_send(elm_layout_edje_get(inst->o_mixer), EDJE_MESSAGE_INT_SET, 0, msg); - elm_layout_signal_emit(inst->o_mixer, "e,action,volume,change", "e"); - - if (inst->list) - { - EINA_LIST_FOREACH(elm_list_items_get(inst->list), ll, it) - { - if (backend_sink_default_get() == elm_object_item_data_get(it)) - elm_list_item_selected_set(it, EINA_TRUE); - } - } - } -} - -static Eina_Bool -_mixer_backend_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - _mixer_gadget_update(); - return ECORE_CALLBACK_PASS_ON; -} - -static void -_emixer_exec_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - elm_ctxpopup_dismiss(inst->popup); - - backend_emixer_exec(); -} - -static void -_check_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, - void *event EINA_UNUSED) -{ - backend_mute_set(elm_check_state_get(obj)); -} - -static void -_slider_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, - void *event EINA_UNUSED) -{ - int val; - - - val = (int)elm_slider_value_get(obj); - backend_volume_set(val); -} - -static void -_sink_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Emix_Sink *s = data; - - backend_sink_default_set(s); -} - -static void -_mixer_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->popup = NULL; -} - -static void -_mixer_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->popup = NULL; - inst->list = NULL; - inst->slider = NULL; - inst->check = NULL; -} - -static Eina_Bool -_mixer_sinks_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Eina_List *l, *ll; - Instance *inst; - - EINA_LIST_FOREACH(gmixer_context->instances, l, inst) - { - if (inst->list) - { - Elm_Object_Item *default_it = NULL; - Emix_Sink *s; - - elm_list_clear(inst->list); - EINA_LIST_FOREACH((Eina_List *)emix_sinks_get(), ll, s) - { - Elm_Object_Item *it; - - it = elm_list_item_append(inst->list, s->name, NULL, NULL, - _sink_selected_cb, s); - if (backend_sink_default_get() == s) - default_it = it; - } - elm_list_go(inst->list); - if (default_it) - elm_list_item_selected_set(default_it, EINA_TRUE); - } - } - - - return ECORE_CALLBACK_PASS_ON; -} - -static void -_popup_new(Instance *inst) -{ - Evas_Object *button, *list, *slider, *bx; - Emix_Sink *s; - Eina_List *l; - Elm_Object_Item *default_it = NULL; - - inst->popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(inst->popup, "noblock"); - evas_object_smart_callback_add(inst->popup, "dismissed", _mixer_popup_dismissed, inst); - evas_object_event_callback_add(inst->popup, EVAS_CALLBACK_DEL, _mixer_popup_deleted, inst); - - list = elm_box_add(e_comp->elm); - elm_object_content_set(inst->popup, list); - - inst->list = elm_list_add(e_comp->elm); - elm_list_mode_set(inst->list, ELM_LIST_COMPRESS); - evas_object_size_hint_align_set(inst->list, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(inst->list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(inst->list); - - EINA_LIST_FOREACH((Eina_List *)emix_sinks_get(), l, s) - { - Elm_Object_Item *it; - - it = elm_list_item_append(inst->list, s->name, NULL, NULL, _sink_selected_cb, s); - if (backend_sink_default_get() == s) - default_it = it; - } - elm_list_go(inst->list); - elm_box_pack_end(list, inst->list); - - bx = elm_box_add(e_comp->elm); - elm_box_horizontal_set(bx, EINA_TRUE); - evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0); - elm_box_pack_end(list, bx); - evas_object_show(bx); - - slider = elm_slider_add(e_comp->elm); - inst->slider = slider; - elm_slider_span_size_set(slider, 128 * elm_config_scale_get()); - elm_slider_unit_format_set(slider, "%1.0f"); - elm_slider_indicator_format_set(slider, "%1.0f"); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_show(slider); - elm_slider_min_max_set(slider, 0.0, emix_max_volume_get()); - evas_object_smart_callback_add(slider, "changed", _slider_changed_cb, NULL); - elm_slider_value_set(slider, backend_volume_get()); - elm_box_pack_end(bx, slider); - evas_object_show(slider); - - inst->check = elm_check_add(e_comp->elm); - evas_object_size_hint_align_set(inst->check, 0.5, EVAS_HINT_FILL); - elm_object_text_set(inst->check, _("Mute")); - elm_check_state_set(inst->check, backend_mute_get()); - evas_object_smart_callback_add(inst->check, "changed", _check_changed_cb, - NULL); - elm_box_pack_end(bx, inst->check); - evas_object_show(inst->check); - - button = elm_button_add(e_comp->elm); - evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0.0); - elm_object_text_set(button, _("Mixer")); - evas_object_smart_callback_add(button, "clicked", _emixer_exec_cb, inst); - elm_box_pack_end(list, button); - evas_object_show(button); - - evas_object_size_hint_min_set(list, 208, 208); - - e_gadget_util_ctxpopup_place(inst->o_main, inst->popup, inst->o_mixer); - evas_object_show(inst->popup); - - if (default_it) - elm_list_item_selected_set(default_it, EINA_TRUE); -} - -static void -_mouse_up_cb(void *data, Evas *evas EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event) -{ - Instance *inst = data; - Evas_Event_Mouse_Up *ev = event; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - - if (ev->button == 1) - { - if (inst->popup) - { - elm_ctxpopup_dismiss(inst->popup); - return; - } - _popup_new(inst); - } - else if (ev->button == 2) - { - backend_mute_set(!backend_mute_get()); - } -} - -static void -_mouse_wheel_cb(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event) -{ - Evas_Event_Mouse_Wheel *ev = event; - - if (ev->z > 0) - backend_volume_decrease(); - else if (ev->z < 0) - backend_volume_increase(); -} - -static Evas_Object * -_mixer_gadget_configure(Evas_Object *g EINA_UNUSED) -{ - if (e_configure_registry_exists("extensions/emix")) - { - e_configure_registry_call("extensions/emix", NULL, NULL); - } - return NULL; -} - -static void -_mixer_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->o_mixer), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_mixer_gadget_created_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->o_main) - { - e_gadget_configure_cb_set(inst->o_main, _mixer_gadget_configure); - - inst->o_mixer = elm_layout_add(inst->o_main); - E_EXPAND(inst->o_mixer); - E_FILL(inst->o_mixer); - if (inst->orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->o_mixer, - "base/theme/gadget/mixer", - "e/gadget/mixer/main_vert"); - else - e_theme_edje_object_set(inst->o_mixer, - "base/theme/gadget/mixer", - "e/gadget/mixer/main"); - evas_object_event_callback_add(inst->o_mixer, EVAS_CALLBACK_MOUSE_UP, - _mouse_up_cb, inst); - evas_object_event_callback_add(inst->o_mixer, EVAS_CALLBACK_MOUSE_WHEEL, - _mouse_wheel_cb, inst); - evas_object_event_callback_add(inst->o_mixer, EVAS_CALLBACK_RESIZE, - _mixer_resize_cb, inst); - elm_box_pack_end(inst->o_main, inst->o_mixer); - evas_object_show(inst->o_mixer); - if (inst->id != -1) - gmixer_context->instances = eina_list_append(gmixer_context->instances, inst); - if (inst->id == -1) - { - Edje_Message_Int_Set *msg; - - msg = alloca(sizeof(Edje_Message_Int_Set) + (2 * sizeof(int))); - msg->count = 3; - msg->val[0] = EINA_FALSE; - msg->val[1] = 60; - msg->val[2] = 60; - edje_object_message_send(elm_layout_edje_get(inst->o_mixer), EDJE_MESSAGE_INT_SET, 0, msg); - elm_layout_signal_emit(inst->o_mixer, "e,action,volume,change", "e"); - } - else - _mixer_gadget_update(); - } - evas_object_smart_callback_del_full(obj, "gadget_created", _mixer_gadget_created_cb, data); -} - -static void -mixer_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - gmixer_context->instances = eina_list_remove(gmixer_context->instances, inst); - free(inst); -} - -EINTERN Evas_Object * -mixer_gadget_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - if (*id != -1) - { - if (!mixer_init()) - return NULL; - } - inst = E_NEW(Instance, 1); - inst->o_main = elm_box_add(parent); - inst->orient = orient; - inst->id = *id; - evas_object_show(inst->o_main); - - evas_object_smart_callback_add(parent, "gadget_created", _mixer_gadget_created_cb, inst); - if (*id != -1) - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, mixer_del, inst); - return inst->o_main; -} - -EINTERN Eina_Bool -mixer_init(void) -{ - char buf[4096]; - - if (!gmixer_context) - { - gmixer_context = E_NEW(Context, 1); - - snprintf(buf, sizeof(buf), "%s/mixer.edj", - e_module_dir_get(gmixer_context->module)); - gmixer_context->theme = strdup(buf); - E_LIST_HANDLER_APPEND(_handlers, E_EVENT_MIXER_BACKEND_CHANGED, - _mixer_backend_changed, NULL); - E_LIST_HANDLER_APPEND(_handlers, E_EVENT_MIXER_SINKS_CHANGED, - _mixer_sinks_changed, NULL); - } - - return EINA_TRUE; -} - -EINTERN void -mixer_shutdown(void) -{ - E_FREE_LIST(_handlers, ecore_event_handler_del); - if (gmixer_context) - { - free(gmixer_context->theme); - E_FREE(gmixer_context); - } -} - diff --git a/src/modules/mixer/gadget/mixer.h b/src/modules/mixer/gadget/mixer.h deleted file mode 100644 index 049d61b56..000000000 --- a/src/modules/mixer/gadget/mixer.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef MIXER_H -#define MIXER_H - -#include "e.h" -#include -#include "emix.h" -#include "../e_mod_config.h" - -EINTERN void *e_modapi_gadget_init(E_Module *m); -EINTERN int e_modapi_gadget_shutdown(E_Module *m); -EINTERN int e_modapi_gadget_save(E_Module *m); - -EINTERN extern int _e_gemix_log_domain; - -#undef DBG -#undef INF -#undef WRN -#undef ERR -#undef CRIT -#define DBG(...) EINA_LOG_DOM_DBG(_e_gemix_log_domain, __VA_ARGS__) -#define INF(...) EINA_LOG_DOM_INF(_e_gemix_log_domain, __VA_ARGS__) -#define WRN(...) EINA_LOG_DOM_WARN(_e_gemix_log_domain, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(_e_gemix_log_domain, __VA_ARGS__) -#define CRIT(...) EINA_LOG_DOM_CRIT(_e_gemix_log_domain, __VA_ARGS__) - -EINTERN Eina_Bool mixer_init(void); -EINTERN void mixer_shutdown(void); -EINTERN Evas_Object *mixer_gadget_create(Evas_Object *parent, int *id EINA_UNUSED, E_Gadget_Site_Orient orient EINA_UNUSED); - -#endif diff --git a/src/modules/mixer/gadget/mod.c b/src/modules/mixer/gadget/mod.c deleted file mode 100644 index 613e58df1..000000000 --- a/src/modules/mixer/gadget/mod.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "mixer.h" -#include "backend.h" - -EINTERN int _e_gemix_log_domain; - -EINTERN void * -e_modapi_gadget_init(E_Module *m) -{ - if (!backend_init()) return NULL; - - _e_gemix_log_domain = eina_log_domain_register("mixer_gadget", EINA_COLOR_RED); - - e_gadget_type_add("Mixer", mixer_gadget_create, NULL); - - return m; -} - -EINTERN int -e_modapi_gadget_shutdown(E_Module *m EINA_UNUSED) -{ - mixer_shutdown(); - - e_gadget_type_del("Mixer"); - - backend_shutdown(); - - return 1; -} - -EINTERN int -e_modapi_gadget_save(E_Module *m EINA_UNUSED) -{ - emix_config_save(); - return 1; -} - diff --git a/src/modules/mixer/meson.build b/src/modules/mixer/meson.build index a2ea75b6b..7a9fb2b6b 100644 --- a/src/modules/mixer/meson.build +++ b/src/modules/mixer/meson.build @@ -3,10 +3,8 @@ src = files( 'e_mod_config.c', 'e_mod_config.h', 'e_mod_main.h', - 'gadget/mixer.h', - 'gadget/mixer.c', - 'gadget/mod.c', - 'gadget/backend.c' + 'backend.c', + 'backend.h' ) mixer_lib = files( diff --git a/src/modules/mixer/mixer.h b/src/modules/mixer/mixer.h new file mode 100644 index 000000000..21acdbf5f --- /dev/null +++ b/src/modules/mixer/mixer.h @@ -0,0 +1,9 @@ +#ifndef MIXER_H +#define MIXER_H + +#include "e.h" +#include +#include "emix.h" +#include "../e_mod_config.h" + +#endif diff --git a/src/modules/packagekit/e_mod_main.c b/src/modules/packagekit/e_mod_main.c index 04da5498f..4996ca060 100644 --- a/src/modules/packagekit/e_mod_main.c +++ b/src/modules/packagekit/e_mod_main.c @@ -26,7 +26,7 @@ _mouse_down_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (inst->popup) packagekit_popup_del(inst); else - packagekit_popup_new(inst, EINA_TRUE); + packagekit_popup_new(inst); } else if (ev->button == 2) { @@ -76,133 +76,6 @@ _refresh_timer_cb(void *data) return ECORE_CALLBACK_RENEW; } - -/* Gadget Api Functions */ -static void -_gadget_mouse_up_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event) -{ - E_PackageKit_Instance *inst = data; - E_PackageKit_Module_Context *ctxt = packagekit_mod->data; - Evas_Event_Mouse_Up *ev = event; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - - if (ev->button == 1) - { - if (inst->ctxpopup) - packagekit_popup_del(inst); - else - packagekit_popup_new(inst, EINA_FALSE); - } - else if (ev->button == 2) - { - packagekit_create_transaction_and_exec(ctxt, packagekit_get_updates); - } -} - -static void -_gadget_del_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) -{ - E_PackageKit_Instance *inst = data; - E_PackageKit_Module_Context *ctxt = packagekit_mod->data; - - if (inst->ctxpopup) packagekit_popup_del(inst); - ctxt->instances = eina_list_remove(ctxt->instances, inst); - free(inst); -} - -static Evas_Object * -_gadget_configure_cb(Evas_Object *gadget) -{ - E_PackageKit_Instance *inst = evas_object_data_get(gadget, "pkit-inst"); - return packagekit_config_show(inst->ctxt); -} - -static void -_gadget_menu1_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - E_PackageKit_Module_Context *ctxt = data; - - e_exec(e_zone_current_get(), NULL, - ctxt->config->manager_command, - NULL, NULL); -} - -static void -_gadget_menu2_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - E_PackageKit_Module_Context *ctxt = data; - - packagekit_create_transaction_and_exec(ctxt, packagekit_refresh_cache); -} - -static void -_gadget_menu_populate_cb(Evas_Object *gadget, E_Menu *m) -{ - E_PackageKit_Instance *inst = evas_object_data_get(gadget, "pkit-inst"); - E_Menu_Item *mi; - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Refresh package list")); - e_util_menu_item_theme_icon_set(mi, "view-refresh"); - e_menu_item_callback_set(mi, _gadget_menu2_cb, inst->ctxt); - - if (inst->ctxt->config->manager_command && inst->ctxt->config->manager_command[0]) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Run the package manager")); - e_util_menu_item_theme_icon_set(mi, "preferences-applications"); - e_menu_item_callback_set(mi, _gadget_menu1_cb, inst->ctxt); - } -} - -static void -_gadget_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - E_PackageKit_Instance *inst = data; - - evas_object_smart_callback_del_full(obj, "gadget_created", - _gadget_created_cb, data); - evas_object_event_callback_add(inst->gadget, EVAS_CALLBACK_MOUSE_UP, - _gadget_mouse_up_cb, inst); - e_gadget_configure_cb_set(inst->gadget, _gadget_configure_cb); - e_gadget_menu_populate_cb_set(inst->gadget, _gadget_menu_populate_cb); - packagekit_icon_update(inst->ctxt, EINA_FALSE); -} - -EINTERN Evas_Object * -_gadget_create_cb(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - E_PackageKit_Instance *inst; - E_PackageKit_Module_Context *ctxt = packagekit_mod->data; - - inst = E_NEW(E_PackageKit_Instance, 1); - inst->ctxt = ctxt; - inst->gadget = edje_object_add(evas_object_evas_get(parent)); - e_theme_edje_object_set(inst->gadget, "base/theme/modules/packagekit", - "e/modules/packagekit/main"); - evas_object_event_callback_add(inst->gadget, EVAS_CALLBACK_DEL, - _gadget_del_cb, inst); - evas_object_data_set(inst->gadget, "pkit-inst", inst); - ctxt->instances = eina_list_append(ctxt->instances, inst); - if (*id >= 0) - { // normal mode - evas_object_smart_callback_add(parent, "gadget_created", - _gadget_created_cb, inst); - } - else - { // demo mode - edje_object_signal_emit(inst->gadget, "packagekit,state,updated", "e"); - } - - return inst->gadget; -} - - /* Gadcon Api Functions */ static E_Gadcon_Client * _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) @@ -315,10 +188,6 @@ e_modapi_init(E_Module *m) ctxt->module = m; packagekit_mod = m; - // add the gadget to the new E gadgets system - // TODO should this name be translated? also on type_del?? - e_gadget_type_add("PackageKit", _gadget_create_cb, NULL); - // add the gadget to the old E gadcon system e_gadcon_provider_register(&_gc_class); @@ -341,9 +210,6 @@ e_modapi_shutdown(E_Module *m) E_FREE(ctxt->config); E_CONFIG_DD_FREE(ctxt->conf_edd); - // remove the gadget from the new E gadgets system - e_gadget_type_del("PackageKit"); - // remove the gadget from the old E gadcon system e_gadcon_provider_unregister(&_gc_class); diff --git a/src/modules/packagekit/e_mod_packagekit.c b/src/modules/packagekit/e_mod_packagekit.c index cb412dc65..e32b555eb 100644 --- a/src/modules/packagekit/e_mod_packagekit.c +++ b/src/modules/packagekit/e_mod_packagekit.c @@ -2,7 +2,6 @@ #include "e_mod_main.h" #include "e_mod_packagekit.h" - /* GUI */ void packagekit_icon_update(E_PackageKit_Module_Context *ctxt, @@ -432,34 +431,14 @@ _genlist_selunsel_cb(void *data, Evas_Object *obj EINA_UNUSED, packagekit_popup_update(data, EINA_FALSE); } -static void -_ctxpopup_dismissed(void *data, Evas_Object *obj, void *info EINA_UNUSED) -{ - E_PackageKit_Instance *inst = data; - - evas_object_del(obj); - inst->ctxpopup = NULL; -} - void -packagekit_popup_new(E_PackageKit_Instance *inst, Eina_Bool is_gadcon) +packagekit_popup_new(E_PackageKit_Instance *inst) { Evas_Object *table, *bt, *ic, *lb, *li, *pb, *fr, *bx, *size_rect; const char *p; - if (is_gadcon) - { - inst->popup = e_gadcon_popup_new(inst->gcc, EINA_FALSE); - table = elm_table_add(e_comp->elm); - } - else - { - inst->ctxpopup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(inst->ctxpopup, "noblock"); - evas_object_smart_callback_add(inst->ctxpopup, "dismissed", - _ctxpopup_dismissed, inst); - table = elm_table_add(inst->ctxpopup); - } + inst->popup = e_gadcon_popup_new(inst->gcc, EINA_FALSE); + table = elm_table_add(e_comp->elm); evas_object_show(table); // horiz box for title and buttons @@ -573,19 +552,10 @@ packagekit_popup_new(E_PackageKit_Instance *inst, Eina_Bool is_gadcon) } // setup and show the popup - if (is_gadcon) - { - e_gadcon_popup_content_set(inst->popup, table); - e_object_data_set(E_OBJECT(inst->popup), inst); - E_OBJECT_DEL_SET(inst->popup, _popup_del_cb); - e_gadcon_popup_show(inst->popup); - } - else - { - elm_object_content_set(inst->ctxpopup, table); - e_gadget_util_ctxpopup_place(inst->gadget, inst->ctxpopup, NULL); - evas_object_show(inst->ctxpopup); - } + e_gadcon_popup_content_set(inst->popup, table); + e_object_data_set(E_OBJECT(inst->popup), inst); + E_OBJECT_DEL_SET(inst->popup, _popup_del_cb); + e_gadcon_popup_show(inst->popup); // update the popup state and contents packagekit_popup_update(inst, EINA_TRUE); @@ -596,8 +566,6 @@ packagekit_popup_del(E_PackageKit_Instance *inst) { if (inst->popup) E_FREE_FUNC(inst->popup, e_object_del); - if (inst->ctxpopup) - elm_ctxpopup_dismiss(inst->ctxpopup); inst->popup_genlist = inst->popup_title_entry = NULL; inst->popup_progressbar = inst->popup_progressbar_frame = NULL; diff --git a/src/modules/packagekit/e_mod_packagekit.h b/src/modules/packagekit/e_mod_packagekit.h index df09a6622..1d89b5154 100644 --- a/src/modules/packagekit/e_mod_packagekit.h +++ b/src/modules/packagekit/e_mod_packagekit.h @@ -79,7 +79,6 @@ typedef struct _E_PackageKit_Instance E_Gadcon_Client *gcc; Evas_Object *gadget; E_Gadcon_Popup *popup; - Evas_Object *ctxpopup; Evas_Object *popup_title_entry; Evas_Object *popup_error_label; Evas_Object *popup_install_button; @@ -113,7 +112,7 @@ void packagekit_get_updates(E_PackageKit_Module_Context *ctxt, const char * void packagekit_refresh_cache(E_PackageKit_Module_Context *ctxt, const char *transaction); void packagekit_update_packages(E_PackageKit_Module_Context *ctxt, const char *transaction); void packagekit_icon_update(E_PackageKit_Module_Context *ctxt, Eina_Bool working); -void packagekit_popup_new(E_PackageKit_Instance *inst, Eina_Bool is_gadcon); +void packagekit_popup_new(E_PackageKit_Instance *inst); void packagekit_popup_del(E_PackageKit_Instance *inst); void packagekit_popup_update(E_PackageKit_Instance *inst, Eina_Bool rebuild_list); diff --git a/src/modules/pager/e_mod_config.c b/src/modules/pager/e_mod_config.c index 2fb019309..b70bb988c 100644 --- a/src/modules/pager/e_mod_config.c +++ b/src/modules/pager/e_mod_config.c @@ -152,7 +152,6 @@ _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) pager_config->show_desk_names = cfdata->show_desk_names; pager_config->popup_urgent = cfdata->popup.urgent_show; _pager_cb_config_updated(); - _pager_cb_config_gadget_updated(EINA_FALSE); e_config_save_queue(); return 1; } @@ -300,7 +299,6 @@ _adv_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) pager_config->btn_noplace = cfdata->btn.noplace; pager_config->btn_desk = cfdata->btn.desk; _pager_cb_config_updated(); - _pager_cb_config_gadget_updated(EINA_FALSE); e_config_save_queue(); return 1; } diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 4a81aec99..4945eb4b6 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -170,10 +170,12 @@ static int hold_mod = 0; static E_Desk *current_desk = NULL; static Eina_List *pagers = NULL; static double _pager_start_time = 0.0; +static E_Config_DD *conf_edd = NULL; EINTERN E_Module *module; EINTERN E_Config_Dialog *config_dialog; EINTERN Eina_List *instances, *shandlers; +EINTERN Config *pager_config; static Pager_Win * _pager_desk_window_find(Pager_Desk *pd, E_Client *client) @@ -2086,12 +2088,69 @@ E_API E_Module_Api e_modapi = }; E_API void * -e_modapi_init(E_Module *m) +e_modapi_init(E_Module *m EINA_UNUSED) { E_Module *p; _pager_start_time = ecore_time_get(); - e_modapi_gadget_init(m); + conf_edd = E_CONFIG_DD_NEW("Pager_Config", Config); +#undef T +#undef D +#define T Config +#define D conf_edd + E_CONFIG_VAL(D, T, popup, UINT); + E_CONFIG_VAL(D, T, popup_speed, DOUBLE); + 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); + E_CONFIG_VAL(D, T, btn_drag, UCHAR); + E_CONFIG_VAL(D, T, btn_noplace, UCHAR); + E_CONFIG_VAL(D, T, btn_desk, UCHAR); + E_CONFIG_VAL(D, T, flip_desk, UCHAR); + E_CONFIG_VAL(D, T, plain, UCHAR); + E_CONFIG_VAL(D, T, permanent_plain, UCHAR); + + pager_config = e_config_domain_load("module.pager", conf_edd); + + if (!pager_config) + { + pager_config = E_NEW(Config, 1); + pager_config->popup = 1; + pager_config->popup_speed = 1.0; + pager_config->popup_urgent = 0; + pager_config->popup_urgent_stick = 0; + pager_config->popup_urgent_speed = 1.5; + pager_config->show_desk_names = 0; + pager_config->popup_height = 60; + pager_config->popup_act_height = 60; + pager_config->drag_resist = 3; + pager_config->btn_drag = 1; + pager_config->btn_noplace = 2; + pager_config->btn_desk = 2; + pager_config->flip_desk = 0; + pager_config->plain = 0; + pager_config->permanent_plain = 0; + } + E_CONFIG_LIMIT(pager_config->popup, 0, 1); + E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0); + 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_CONFIG_LIMIT(pager_config->flip_desk, 0, 1); + E_CONFIG_LIMIT(pager_config->btn_drag, 0, 32); + E_CONFIG_LIMIT(pager_config->btn_noplace, 0, 32); + E_CONFIG_LIMIT(pager_config->btn_desk, 0, 32); + E_CONFIG_LIMIT(pager_config->plain, 0, 1); + E_CONFIG_LIMIT(pager_config->permanent_plain, 0, 1); + p = e_module_find("pager_plain"); if (p && p->enabled) { @@ -2141,9 +2200,8 @@ e_modapi_init(E_Module *m) } E_API int -e_modapi_shutdown(E_Module *m) +e_modapi_shutdown(E_Module *m EINA_UNUSED) { - e_modapi_gadget_shutdown(m); e_gadcon_provider_unregister(&_gadcon_class); if (config_dialog) @@ -2160,13 +2218,15 @@ e_modapi_shutdown(E_Module *m) e_action_predef_name_del("Pager", "Popup Desk Next"); e_action_predef_name_del("Pager", "Popup Desk Previous"); + module = NULL; + return 1; } E_API int -e_modapi_save(E_Module *m) +e_modapi_save(E_Module *m EINA_UNUSED) { - e_modapi_gadget_save(m); + e_config_domain_save("module.pager", conf_edd, pager_config); return 1; } diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index fc6a5221c..bf9d94624 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -1,8 +1,27 @@ #ifndef E_MOD_MAIN_H #define E_MOD_MAIN_H -#include "gadget/pager.h" typedef struct _Config_Item Config_Item; +typedef struct _Config Config; +struct _Config +{ + unsigned int popup; + double popup_speed; + unsigned int popup_urgent; + unsigned int popup_urgent_stick; + unsigned int popup_urgent_focus; + double popup_urgent_speed; + unsigned int show_desk_names; + int popup_act_height; + int popup_height; + unsigned int drag_resist; + unsigned int btn_drag; + unsigned int btn_noplace; + unsigned int btn_desk; + unsigned int flip_desk; + unsigned int plain; + unsigned int permanent_plain; +}; #define PAGER_RESIZE_NONE 0 #define PAGER_RESIZE_HORZ 1 @@ -21,6 +40,10 @@ E_API void *e_modapi_init(E_Module *m); E_API int e_modapi_shutdown(E_Module *m); E_API int e_modapi_save(E_Module *m); +EINTERN void _pager_cb_config_updated(void); + +EINTERN extern Config *pager_config; + EINTERN void _config_pager_module(Config_Item *ci); extern E_Module *module; diff --git a/src/modules/pager/gadget/config.c b/src/modules/pager/gadget/config.c deleted file mode 100644 index c6c653582..000000000 --- a/src/modules/pager/gadget/config.c +++ /dev/null @@ -1,685 +0,0 @@ -#include "pager.h" - -#define BUTTON_DRAG 0 -#define BUTTON_NOPLACE 1 -#define BUTTON_DESK 2 - -typedef struct _Config_Objects Config_Objects; -struct _Config_Objects -{ - Evas_Object *general_page; - Evas_Object *popup_page; - Evas_Object *urgent_page; - Evas_Object *style_page; - Evas_Object *o_popup; - Evas_Object *o_popup_speed; - Evas_Object *o_popup_urgent; - Evas_Object *o_popup_urgent_stick; - Evas_Object *o_popup_urgent_focus; - Evas_Object *o_popup_urgent_speed; - Evas_Object *o_show_desk_names; - Evas_Object *o_popup_act_height; - Evas_Object *o_popup_height; - Evas_Object *o_btn_drag; - Evas_Object *o_btn_noplace; - Evas_Object *o_btn_desk; - Evas_Object *o_btn_virtual; - Evas_Object *o_flip_desk; - Evas_Object *o_permanent; - Evas_Object *o_plain; - E_Grab_Dialog *grab_dia; - int grab_btn; - int w, h; -}; -Config_Objects *pager_gadget_config_objects = NULL; - -static void -_config_close(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - cfg_dialog = NULL; - E_FREE(pager_gadget_config_objects); -} - -static void -_config_show_general(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(pager_gadget_config_objects->popup_page); - evas_object_hide(pager_gadget_config_objects->urgent_page); - evas_object_hide(pager_gadget_config_objects->style_page); - evas_object_show(pager_gadget_config_objects->general_page); -} - -static void -_config_show_popup(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(pager_gadget_config_objects->general_page); - evas_object_hide(pager_gadget_config_objects->urgent_page); - evas_object_hide(pager_gadget_config_objects->style_page); - evas_object_show(pager_gadget_config_objects->popup_page); -} - -static void -_config_show_urgent(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(pager_gadget_config_objects->general_page); - evas_object_hide(pager_gadget_config_objects->popup_page); - evas_object_hide(pager_gadget_config_objects->style_page); - evas_object_show(pager_gadget_config_objects->urgent_page); -} - -static void -_config_show_style(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(pager_gadget_config_objects->general_page); - evas_object_hide(pager_gadget_config_objects->popup_page); - evas_object_hide(pager_gadget_config_objects->urgent_page); - evas_object_show(pager_gadget_config_objects->style_page); -} - -static void -_config_value_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Eina_Bool val, changed = EINA_FALSE; - pager_config->popup = - elm_check_state_get(pager_gadget_config_objects->o_popup); - pager_config->popup_speed = - elm_slider_value_get(pager_gadget_config_objects->o_popup_speed); - pager_config->flip_desk = - elm_check_state_get(pager_gadget_config_objects->o_flip_desk); - pager_config->popup_urgent = - elm_check_state_get(pager_gadget_config_objects->o_popup_urgent); - pager_config->popup_urgent_stick = - elm_check_state_get(pager_gadget_config_objects->o_popup_urgent_stick); - pager_config->popup_urgent_focus = - elm_check_state_get(pager_gadget_config_objects->o_popup_urgent_focus); - pager_config->popup_urgent_speed = - elm_slider_value_get(pager_gadget_config_objects->o_popup_urgent_speed); - pager_config->show_desk_names = - elm_check_state_get(pager_gadget_config_objects->o_show_desk_names); - pager_config->popup_height = - elm_slider_value_get(pager_gadget_config_objects->o_popup_height); - pager_config->popup_act_height = - elm_slider_value_get(pager_gadget_config_objects->o_popup_act_height); - val = elm_check_state_get(pager_gadget_config_objects->o_permanent); - if (val != pager_config->permanent_plain) - changed = EINA_TRUE; - pager_config->permanent_plain = val; - val = elm_check_state_get(pager_gadget_config_objects->o_plain); - if (val != pager_config->plain) - changed = EINA_TRUE; - pager_config->plain = val; - _pager_cb_config_gadget_updated(changed); - _pager_cb_config_updated(); - e_config_save_queue(); - - elm_object_disabled_set(pager_gadget_config_objects->o_popup_speed, - !pager_config->popup); - elm_object_disabled_set(pager_gadget_config_objects->o_popup_act_height, - !pager_config->popup); - elm_object_disabled_set(pager_gadget_config_objects->o_popup_height, - !pager_config->popup); - elm_object_disabled_set(pager_gadget_config_objects->o_popup_urgent_stick, - !pager_config->popup_urgent); - elm_object_disabled_set(pager_gadget_config_objects->o_popup_urgent_focus, - !pager_config->popup_urgent); - elm_object_disabled_set(pager_gadget_config_objects->o_popup_urgent_speed, - !pager_config->popup_urgent); -} - -static void -_config_update_btn(Evas_Object *button, const int mouse_button) -{ - char lbl[256]; - char *icon = NULL; - Evas_Object *ic = NULL; - - switch (mouse_button) - { - case 0: - snprintf(lbl, sizeof(lbl), _("Click to set")); - break; - - case 1: - if (e_config->mouse_hand == E_MOUSE_HAND_RIGHT) - { - snprintf(lbl, sizeof(lbl), _("Left button")); - icon = "preferences-desktop-mouse-left"; - } - else if (e_config->mouse_hand == E_MOUSE_HAND_LEFT) - { - snprintf(lbl, sizeof(lbl), _("Right button")); - icon = "preferences-desktop-mouse-right"; - } - else - { - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - } - break; - - case 2: - snprintf(lbl, sizeof(lbl), _("Middle button")); - icon = "preferences-desktop-mouse-middle"; - break; - - case 3: - if (e_config->mouse_hand == E_MOUSE_HAND_RIGHT) - { - snprintf(lbl, sizeof(lbl), _("Right button")); - icon = "preferences-desktop-mouse-right"; - } - else if (e_config->mouse_hand == E_MOUSE_HAND_LEFT) - { - snprintf(lbl, sizeof(lbl), _("Left button")); - icon = "preferences-desktop-mouse-left"; - } - else - { - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - } - break; - - default: - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - break; - } - elm_object_text_set(button, lbl); - if (icon) - { - ic = elm_icon_add(button); - elm_icon_standard_set(ic, icon); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - } - elm_object_part_content_set(button, "icon", ic); -} - -static void -_config_update_btns(void) -{ -#if 0 - _config_update_btn(pager_gadget_config_objects->o_btn_drag, pager_config->btn_drag); -#endif - - _config_update_btn(pager_gadget_config_objects->o_btn_noplace, pager_config->btn_noplace); - _config_update_btn(pager_gadget_config_objects->o_btn_desk, pager_config->btn_desk); -} - -static void -_config_grab_window_del(void *data EINA_UNUSED) -{ - evas_object_show(cfg_dialog); - _config_update_btns(); -} - -static Eina_Bool -_config_grab_cb_mouse_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Button *ev; - - ev = event; - - if (ev->buttons == 3) - { - e_util_dialog_show(_("Attention"), - _("You cannot use the right mouse button in the" - "gadget for this as it is already taken by internal" - "code for context menus." - "This button only works in the popup.")); - } - else - { - if (ev->buttons == pager_config->btn_drag) - pager_config->btn_drag = 0; - else if (ev->buttons == pager_config->btn_noplace) - pager_config->btn_noplace = 0; - else if (ev->buttons == pager_config->btn_desk) - pager_config->btn_desk = 0; - - if (pager_gadget_config_objects->grab_btn == 1) - pager_config->btn_drag = ev->buttons; - else if (pager_gadget_config_objects->grab_btn == 2) - pager_config->btn_noplace = ev->buttons; - else - pager_config->btn_desk = ev->buttons; - } - - e_object_del(E_OBJECT(pager_gadget_config_objects->grab_dia)); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_config_grab_cb_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Key *ev; - - ev = event; - if (!strcmp(ev->key, "Delete")) - { - if (pager_gadget_config_objects->grab_btn == 1) - pager_config->btn_drag = 0; - else if (pager_gadget_config_objects->grab_btn == 2) - pager_config->btn_noplace = 0; - else - pager_config->btn_desk = 0; - } - e_object_del(E_OBJECT(pager_gadget_config_objects->grab_dia)); - return ECORE_CALLBACK_PASS_ON; -} - -static void -_config_grab_window_show(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_hide(cfg_dialog); - pager_gadget_config_objects->grab_btn = 0; - if ((long)data == BUTTON_DRAG) - pager_gadget_config_objects->grab_btn = 1; - else if ((long)data == BUTTON_NOPLACE) - pager_gadget_config_objects->grab_btn = 2; - - pager_gadget_config_objects->grab_dia = e_grab_dialog_show(NULL, EINA_TRUE, - _config_grab_cb_key_down, _config_grab_cb_mouse_down, NULL, NULL); - e_object_del_attach_func_set(E_OBJECT(pager_gadget_config_objects->grab_dia), _config_grab_window_del); -} - -static void -_config_virtual_desks_show(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - evas_object_del(cfg_dialog); - e_configure_registry_call("screen/virtual_desktops", NULL, NULL); -} - -static Evas_Object * -_config_create_pages(Evas_Object *parent) -{ - Evas_Object *m, *tb, *ow, *fr; - int row = 5; - - m = elm_table_add(parent); - E_EXPAND(m); - evas_object_show(m); - - /* General Page */ - fr = elm_frame_add(m); - elm_object_text_set(fr, _("General")); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - - tb = elm_table_add(m); - E_EXPAND(tb); - elm_object_content_set(fr, tb); - evas_object_show(tb); - - ow = elm_button_add(tb); - elm_object_text_set(ow, _("Configure virtual deskstops")); - evas_object_smart_callback_add(ow, "clicked", - _config_virtual_desks_show, NULL); - elm_table_pack(tb, ow, 0, 0, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - pager_gadget_config_objects->o_btn_virtual = ow; - row++; - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Flip desktop on mouse wheel")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->flip_desk); - elm_table_pack(tb, ow, 0, 1, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_flip_desk = ow; - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Always show desktop names")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->show_desk_names); - elm_table_pack(tb, ow, 0, 2, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_show_desk_names = ow; - -#if 0 - ow = elm_label_add(m); - elm_object_text_set(ow, _("Select and Slide button")); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - row++; - - ow = elm_button_add(tb); - elm_object_text_set(ow, _("Click to set")); - evas_object_smart_callback_add(ow, "clicked", - _config_grab_window_show, (void *)BUTTON_DRAG); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - pager_gadget_config_objects->o_btn_drag = ow; - row++; -#endif - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Drag and Drop button")); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - row++; - - ow = elm_button_add(tb); - elm_object_text_set(ow, _("Click to set")); - evas_object_smart_callback_add(ow, "clicked", - _config_grab_window_show, (void *)BUTTON_NOPLACE); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - pager_gadget_config_objects->o_btn_noplace = ow; - row++; - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Drag whole desktop")); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - row++; - - ow = elm_button_add(tb); - elm_object_text_set(ow, _("Click to set")); - evas_object_smart_callback_add(ow, "clicked", - _config_grab_window_show, (void *)BUTTON_DESK); - elm_table_pack(tb, ow, 0, row, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - pager_gadget_config_objects->o_btn_desk = ow; - - _config_update_btns(); - - elm_table_pack(m, fr, 0, 0, 1, 1); - pager_gadget_config_objects->general_page = fr; - - /* Popup Page */ - fr = elm_frame_add(m); - elm_object_text_set(fr, _("Popup")); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - - tb = elm_table_add(fr); - E_EXPAND(tb); - elm_object_content_set(fr, tb); - evas_object_show(tb); - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Show popup on desktop change")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->popup); - elm_table_pack(tb, ow, 0, 0, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup = ow; - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Popup pager height")); - elm_object_disabled_set(ow, !pager_config->popup); - elm_table_pack(tb, ow, 0, 1, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - - ow = elm_slider_add(tb); - elm_object_disabled_set(ow, !pager_config->popup); - elm_slider_min_max_set(ow, 20, 200); - elm_slider_step_set(ow, 0.0555); - elm_slider_value_set(ow, pager_config->popup_height); - elm_slider_unit_format_set(ow, _("%.0f pixels")); - elm_slider_indicator_format_set(ow, _("%.0f")); - elm_table_pack(tb, ow, 0, 2, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "delay,changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_height = ow; - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Popup duration")); - elm_object_disabled_set(ow, !pager_config->popup); - elm_table_pack(tb, ow, 0, 3, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - - ow = elm_slider_add(tb); - elm_object_disabled_set(ow, !pager_config->popup); - elm_slider_min_max_set(ow, 0.1, 10); - elm_slider_step_set(ow, 0.01); - elm_slider_value_set(ow, pager_config->popup_speed); - elm_slider_unit_format_set(ow, _("%1.1f seconds")); - elm_slider_indicator_format_set(ow, _("%.1f")); - elm_table_pack(tb, ow, 0, 4, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "delay,changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_speed = ow; - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Pager action popup height")); - elm_object_disabled_set(ow, !pager_config->popup); - elm_table_pack(tb, ow, 0, 5, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - - ow = elm_slider_add(tb); - elm_object_disabled_set(ow, !pager_config->popup); - elm_slider_min_max_set(ow, 20, 200); - elm_slider_step_set(ow, 0.0555); - elm_slider_value_set(ow, pager_config->popup_act_height); - elm_slider_unit_format_set(ow, _("%.0f pixels")); - elm_slider_indicator_format_set(ow, _("%.0f")); - elm_table_pack(tb, ow, 0, 6, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "delay,changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_act_height = ow; - - elm_table_pack(m, fr, 0, 0, 1, 1); - pager_gadget_config_objects->popup_page = fr; - - /* Urgent Page */ - fr = elm_frame_add(m); - elm_object_text_set(fr, _("Urgent")); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - - tb = elm_table_add(fr); - E_EXPAND(tb); - elm_object_content_set(fr, tb); - evas_object_show(tb); - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Show popup for urgent window")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->popup_urgent); - elm_table_pack(tb, ow, 0, 0, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_urgent = ow; - - ow = elm_check_add(tb); - elm_object_disabled_set(ow, !pager_config->popup_urgent); - elm_object_text_set(ow, _("Urgent popup sticks on screen")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->popup_urgent_stick); - elm_table_pack(tb, ow, 0, 1, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_urgent_stick = ow; - - ow = elm_check_add(tb); - elm_object_disabled_set(ow, !pager_config->popup_urgent); - elm_object_text_set(ow, _("Show popup for focused windows")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->popup_urgent_focus); - elm_table_pack(tb, ow, 0, 2, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_urgent_focus = ow; - - ow = elm_label_add(m); - elm_object_text_set(ow, _("Urgent Popup Duration")); - elm_object_disabled_set(ow, !pager_config->popup_urgent); - elm_table_pack(tb, ow, 0, 3, 1, 1); - E_ALIGN(ow, 0.0, 0.0); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_show(ow); - - ow = elm_slider_add(tb); - elm_object_disabled_set(ow, !pager_config->popup_urgent); - elm_slider_min_max_set(ow, 0.1, 10); - elm_slider_step_set(ow, 0.01); - elm_slider_value_set(ow, pager_config->popup_urgent_speed); - elm_slider_unit_format_set(ow, _("%1.1f seconds")); - elm_slider_indicator_format_set(ow, _("%.1f")); - elm_table_pack(tb, ow, 0, 4, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "delay,changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_popup_urgent_speed = ow; - - elm_table_pack(m, fr, 0, 0, 1, 1); - pager_gadget_config_objects->urgent_page = fr; - - /* Style Page */ - fr = elm_frame_add(m); - elm_object_text_set(fr, _("Style")); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - - tb = elm_table_add(m); - E_EXPAND(tb); - elm_object_content_set(fr, tb); - evas_object_show(tb); - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Always Use Plain Style")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->permanent_plain); - elm_table_pack(tb, ow, 0, 0, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_permanent = ow; - - ow = elm_check_add(tb); - elm_object_text_set(ow, _("Switch to Plain Style When Saving Power")); - evas_object_size_hint_align_set(ow, 0.0, EVAS_HINT_FILL); - elm_check_state_set(ow, pager_config->plain); - elm_table_pack(tb, ow, 0, 1, 1, 1); - E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL); - E_WEIGHT(ow, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(ow, "changed", - _config_value_changed, NULL); - evas_object_show(ow); - pager_gadget_config_objects->o_plain = ow; - - elm_table_pack(m, fr, 0, 0, 1, 1); - pager_gadget_config_objects->style_page = fr; - - return m; -} - -EINTERN Evas_Object * -config_pager(E_Zone *zone) -{ - Evas_Object *popup, *tb, *lbl, *list; - Elm_Object_Item *it; - - pager_gadget_config_objects = E_NEW(Config_Objects, 1); - pager_gadget_config_objects->w = 0; - pager_gadget_config_objects->h = 0; - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - lbl = elm_label_add(tb); - elm_object_style_set(lbl, "marker"); - evas_object_show(lbl); - elm_object_text_set(lbl, _("Pager Configuration")); - elm_table_pack(tb, lbl, 0, 0, 2, 1); - - list = elm_list_add(tb); - E_ALIGN(list, 0, EVAS_HINT_FILL); - E_WEIGHT(list, 0, EVAS_HINT_EXPAND); - elm_table_pack(tb, list, 0, 1, 1, 1); - elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(list, 1, 1); - it = elm_list_item_append(list, _("General"), NULL, NULL, - _config_show_general, NULL); - elm_list_item_selected_set(it, 1); - it = elm_list_item_append(list, _("Popup"), NULL, NULL, - _config_show_popup, NULL); - it = elm_list_item_append(list, _("Urgent"), NULL, NULL, - _config_show_urgent, NULL); - it = elm_list_item_append(list, _("Style"), NULL, NULL, - _config_show_style, NULL); - elm_list_go(list); - evas_object_show(list); - - elm_table_pack(tb, - _config_create_pages(tb), 1, 1, 1, 1); - _config_show_general(NULL, NULL, NULL); - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, NULL); - - return cfg_dialog = popup; -} - diff --git a/src/modules/pager/gadget/mod.c b/src/modules/pager/gadget/mod.c deleted file mode 100644 index f2b5863b7..000000000 --- a/src/modules/pager/gadget/mod.c +++ /dev/null @@ -1,108 +0,0 @@ -#include "pager.h" -static E_Config_DD *conf_edd = NULL; -EINTERN Config *pager_config; -EINTERN Evas_Object *cfg_dialog; -EINTERN Eina_List *ginstances, *ghandlers, *phandlers; - -EINTERN void * -e_modapi_gadget_init(E_Module *m) -{ - conf_edd = E_CONFIG_DD_NEW("Pager_Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_VAL(D, T, popup, UINT); - E_CONFIG_VAL(D, T, popup_speed, DOUBLE); - 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); - E_CONFIG_VAL(D, T, btn_drag, UCHAR); - E_CONFIG_VAL(D, T, btn_noplace, UCHAR); - E_CONFIG_VAL(D, T, btn_desk, UCHAR); - E_CONFIG_VAL(D, T, flip_desk, UCHAR); - E_CONFIG_VAL(D, T, plain, UCHAR); - E_CONFIG_VAL(D, T, permanent_plain, UCHAR); - - pager_config = e_config_domain_load("module.pager", conf_edd); - - if (!pager_config) - { - pager_config = E_NEW(Config, 1); - pager_config->popup = 1; - pager_config->popup_speed = 1.0; - pager_config->popup_urgent = 0; - pager_config->popup_urgent_stick = 0; - pager_config->popup_urgent_speed = 1.5; - pager_config->show_desk_names = 0; - pager_config->popup_height = 60; - pager_config->popup_act_height = 60; - pager_config->drag_resist = 3; - pager_config->btn_drag = 1; - pager_config->btn_noplace = 2; - pager_config->btn_desk = 2; - pager_config->flip_desk = 0; - pager_config->plain = 0; - pager_config->permanent_plain = 0; - } - E_CONFIG_LIMIT(pager_config->popup, 0, 1); - E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0); - 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_CONFIG_LIMIT(pager_config->flip_desk, 0, 1); - E_CONFIG_LIMIT(pager_config->btn_drag, 0, 32); - E_CONFIG_LIMIT(pager_config->btn_noplace, 0, 32); - E_CONFIG_LIMIT(pager_config->btn_desk, 0, 32); - E_CONFIG_LIMIT(pager_config->plain, 0, 1); - E_CONFIG_LIMIT(pager_config->permanent_plain, 0, 1); - - pager_init(); - - e_gadget_type_add("Pager", pager_create, NULL); - - return m; -} - -EINTERN int -e_modapi_gadget_shutdown(E_Module *m EINA_UNUSED) -{ - if (cfg_dialog) - e_object_del(E_OBJECT(cfg_dialog)); - - if (pager_config && ghandlers) - E_FREE_LIST(ghandlers, ecore_event_handler_del); - - e_action_del("pager_gadget_show"); - e_action_del("pager_gadget_switch"); - - e_action_predef_name_del("Pager Gadget", "Show Pager Popup"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Right"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Left"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Up"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Down"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Next"); - e_action_predef_name_del("Pager Gadget", "Popup Desk Previous"); - - e_gadget_type_del("Pager"); - - E_FREE(pager_config); - E_CONFIG_DD_FREE(conf_edd); - return 1; -} - -EINTERN int -e_modapi_gadget_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.pager", conf_edd, pager_config); - return 1; -} - diff --git a/src/modules/pager/gadget/pager.c b/src/modules/pager/gadget/pager.c deleted file mode 100644 index deea78485..000000000 --- a/src/modules/pager/gadget/pager.c +++ /dev/null @@ -1,2991 +0,0 @@ -#include "pager.h" - -/* actual module specifics */ -typedef struct _Instance Instance; -typedef struct _Pager Pager; -typedef struct _Pager_Desk Pager_Desk; -typedef struct _Pager_Win Pager_Win; -typedef struct _Pager_Popup Pager_Popup; - -struct _Instance -{ - Evas_Object *o_pager; /* table */ - Pager *pager; - Pager_Popup *popup; -}; - -struct _Pager -{ - Instance *inst; - Pager_Popup *popup; - Evas_Object *o_table; - E_Zone *zone; - int xnum, ynum; - Eina_List *desks; - Pager_Desk *active_pd; - unsigned char dragging E_BITFIELD; - unsigned char just_dragged E_BITFIELD; - E_Client *active_drag_client; - Ecore_Job *recalc; - Eina_Bool invert E_BITFIELD; - Eina_Bool plain E_BITFIELD; -}; - -struct _Pager_Desk -{ - Pager *pager; - E_Desk *desk; - Eina_List *wins; - Evas_Object *o_desk; - Evas_Object *o_layout; - Evas_Object *drop_handler; - int xpos, ypos, urgent; - int current E_BITFIELD; - struct - { - Pager *from_pager; - unsigned char in_pager E_BITFIELD; - unsigned char start E_BITFIELD; - int x, y, dx, dy, button; - } drag; -}; - -struct _Pager_Win -{ - E_Client *client; - Pager_Desk *desk; - Evas_Object *o_window; - Evas_Object *o_mirror; - Evas_Object *o_icon; - unsigned char skip_winlist E_BITFIELD; - struct - { - Pager *from_pager; - unsigned char start E_BITFIELD; - unsigned char in_pager E_BITFIELD; - unsigned char desktop E_BITFIELD; - int x, y, dx, dy, button; - } drag; -}; - -struct _Pager_Popup -{ - Evas_Object *popup; - Evas_Object *o_bg; - Pager *pager; - Ecore_Timer *timer; - unsigned char urgent E_BITFIELD; -}; - -static void _pager_cb_mirror_add(Pager_Desk *pd, Evas_Object *obj, Evas_Object *mirror); - -static void _pager_cb_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -static void _pager_cb_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -static Evas_Object *_pager_gadget_configure(Evas_Object *g); -static Eina_Bool _pager_cb_event_powersave_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_desk_name_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_compositor_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_iconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_uniconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_stick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_unstick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_desk_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_stack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_icon_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_urgent_change(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client_Property *ev); -static void _pager_window_move(Pager_Win *pw); -static void _pager_window_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -static void _pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void *_pager_window_cb_drag_convert(E_Drag *drag, const char *type); -static void _pager_window_cb_drag_finished(E_Drag *drag, int dropped); -static void _pager_drop_cb_enter(void *data, const char *type EINA_UNUSED, void *event_info); -static void _pager_drop_cb_move(void *data, const char *type EINA_UNUSED, void *event_info); -static void _pager_drop_cb_leave(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED); -static void _pager_drop_cb_drop(void *data, const char *type, void *event_info); -static void _pager_update_drop_position(Pager *p, Pager_Desk *pd, Evas_Coord x, Evas_Coord y); -static void _pager_desk_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_drag_finished(E_Drag *drag, int dropped); -static void _pager_desk_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static Eina_Bool _pager_popup_cb_timeout(void *data); -static Pager *_pager_new(Evas *evas, Eina_Bool popup); -static void _pager_free(Pager *p); -static void _pager_fill(Pager *p); -static void _pager_orient(Instance *inst, E_Gadget_Site_Orient orient); -static void _pager_empty(Pager *p); -static Pager_Desk *_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert); -static void _pager_desk_free(Pager_Desk *pd); -static void _pager_desk_select(Pager_Desk *pd); -static Pager_Desk *_pager_desk_find(Pager *p, E_Desk *desk); -static void _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2); -static Pager_Win *_pager_window_new(Pager_Desk *pd, Evas_Object *mirror, E_Client *client); -static void _pager_window_free(Pager_Win *pw); -static Pager_Popup *pager_popup_new(int keyaction); -static void _pager_popup_free(Pager_Popup *pp); -static Pager_Popup *_pager_popup_find(E_Zone *zone); - -/* functions for pager popup on key actions */ -static int _pager_popup_show(void); -static void _pager_popup_hide(int switch_desk); -static Eina_Bool _pager_popup_cb_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static void _pager_popup_desk_switch(int x, int y); -static void _pager_popup_modifiers_set(int mod); -static Eina_Bool _pager_popup_cb_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_popup_cb_key_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static void _pager_popup_cb_action_show(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED, Ecore_Event_Key *ev EINA_UNUSED); -static void _pager_popup_cb_action_switch(E_Object *obj EINA_UNUSED, const char *params, Ecore_Event_Key *ev); - -/* variables for pager popup on key actions */ -static Ecore_Window input_window = 0; -static Eina_List *handlers = NULL; -static Pager_Popup *act_popup = NULL; /* active popup */ -static int hold_count = 0; -static int hold_mod = 0; -static E_Desk *current_desk = NULL; -static Eina_List *pagers = NULL; - -static E_Action *act_popup_show = NULL; -static E_Action *act_popup_switch = NULL; - -static const char * -_pager_location_get(Instance *inst) -{ - const char *s = "float"; - - if (!inst) return NULL; - - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_pager)); - E_Gadget_Site_Anchor anchor = e_gadget_site_anchor_get(e_gadget_site_get(inst->o_pager)); - - if (anchor & E_GADGET_SITE_ANCHOR_LEFT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - - case E_GADGET_SITE_ORIENT_NONE: - s = "left"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - - case E_GADGET_SITE_ORIENT_NONE: - s = "left"; - break; - } - } - else - s = "left"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_RIGHT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right"; - break; - - case E_GADGET_SITE_ORIENT_NONE: - s = "right"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right"; - break; - - case E_GADGET_SITE_ORIENT_NONE: - s = "right"; - break; - } - } - else - s = "right"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_TOP) - s = "top"; - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - s = "bottom"; - else - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left"; - break; - - default: - s = "bottom"; - break; - } - } - return s; -} - -static Eina_Bool -_pager_check_modifiers(Evas_Modifier *modifiers) -{ - if ((evas_key_modifier_is_set(modifiers, "Alt")) || - (evas_key_modifier_is_set(modifiers, "Control")) || - (evas_key_modifier_is_set(modifiers, "Shift"))) - return EINA_TRUE; - return EINA_FALSE; -} - -static Pager_Win * -_pager_desk_window_find(Pager_Desk *pd, E_Client *client) -{ - Eina_List *l; - Pager_Win *pw; - - EINA_LIST_FOREACH(pd->wins, l, pw) - { - if (pw) - { - if (pw->client == client) return pw; - } - } - return NULL; -} - -static Pager_Win * -_pager_window_find(Pager *p, E_Client *client) -{ - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, client); - if (pw) return pw; - } - return NULL; -} - -static void -_pager_gadget_anchor_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Eina_Bool invert; - - if (inst->pager && inst->o_pager) - { - switch (e_gadget_site_orient_get(obj)) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - invert = EINA_FALSE; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - invert = EINA_TRUE; - break; - - default: - invert = EINA_FALSE; - } - if (invert != inst->pager->invert) - { - _pager_orient(inst, e_gadget_site_orient_get(obj)); - _pager_empty(inst->pager); - _pager_fill(inst->pager); - } - } -} - -static void -_pager_gadget_created_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Eina_List *l; - Pager_Desk *pd; - if (inst->pager && inst->o_pager) - { - e_gadget_configure_cb_set(inst->o_pager, _pager_gadget_configure); - _pager_orient(inst, e_gadget_site_orient_get(obj)); - _pager_empty(inst->pager); - _pager_fill(inst->pager); - - EINA_LIST_FOREACH(inst->pager->desks, l, pd) - { - if (!pd->drop_handler) - { - const char *drop[] = - { - "enlightenment/pager_win", "enlightenment/border", - "enlightenment/vdesktop" - }; - pd->drop_handler = - e_gadget_drop_handler_add(inst->o_pager, pd, - _pager_drop_cb_enter, _pager_drop_cb_move, - _pager_drop_cb_leave, _pager_drop_cb_drop, - drop, 3); - //edje_object_part_swallow(pd->o_desk, "e.swallow.drop", pd->drop_handler); - evas_object_show(pd->drop_handler); - } - } - } - evas_object_smart_callback_del_full(obj, "gadget_created", _pager_gadget_created_cb, data); -} - -static void -_pager_orient(Instance *inst, E_Gadget_Site_Orient orient) -{ - int aspect_w, aspect_h, zone_w = 1, zone_h = 1; - - if (inst->o_pager) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - inst->pager->invert = EINA_FALSE; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - inst->pager->invert = EINA_TRUE; - break; - - default: - inst->pager->invert = EINA_FALSE; - } - } - if (inst->pager->zone) - { - zone_w = inst->pager->zone->w; - zone_h = inst->pager->zone->h; - } - if (inst->pager->invert) - { - aspect_w = inst->pager->ynum * zone_w; - aspect_h = inst->pager->xnum * zone_h; - evas_object_size_hint_aspect_set(inst->o_pager, EVAS_ASPECT_CONTROL_BOTH, aspect_w, aspect_h); - } - else - { - aspect_w = inst->pager->xnum * zone_w; - aspect_h = inst->pager->ynum * zone_h; - evas_object_size_hint_aspect_set(inst->o_pager, EVAS_ASPECT_CONTROL_BOTH, aspect_w, aspect_h); - } -} - -static void -_pager_recalc(void *data) -{ - Pager *p = data; - Pager_Desk *pd; - Evas_Coord mw = 0, mh = 0; - int w, h, zw, zh, w2, h2; - - p->recalc = NULL; - if (!p->zone) return; - zw = p->zone->w; zh = p->zone->h; - pd = eina_list_data_get(p->desks); - if (!pd) return; - - edje_object_size_min_calc(pd->o_desk, &mw, &mh); - evas_object_geometry_get(pd->o_desk, NULL, NULL, &w, &h); - w -= mw; h -= mh; - w2 = w; h2 = (zh * w) / zw; - if (h2 > h) - { - h2 = h; w2 = (zw * h) / zh; - } - w = w2; h = h2; - w += mw; h += mh; - if ((p->inst) && (p->inst->o_pager)) - { - _pager_orient(p->inst, e_gadget_site_orient_get(e_gadget_site_get(p->inst->o_pager))); - } -} - -static void -_pager_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager *p = data; - - if (!p->recalc) - p->recalc = ecore_job_add(_pager_recalc, p); -} - -static Pager * -_pager_new(Evas *evas, Eina_Bool popup) -{ - Pager *p; - - p = E_NEW(Pager, 1); - p->inst = NULL; - p->popup = NULL; - if (pager_config->plain) - { - switch (e_powersave_mode_get()) - { - case E_POWERSAVE_MODE_HIGH: - p->plain = EINA_TRUE; - break; - - case E_POWERSAVE_MODE_EXTREME: - p->plain = EINA_TRUE; - break; - - case E_POWERSAVE_MODE_FREEZE: - p->plain = EINA_TRUE; - break; - - default: - p->plain = EINA_FALSE; - } - } - p->o_table = elm_table_add(e_win_evas_win_get(evas)); - evas_object_event_callback_add(p->o_table, EVAS_CALLBACK_RESIZE, _pager_resize, p); - elm_table_homogeneous_set(p->o_table, 1); - if (popup) - p->zone = e_zone_current_get(); - else - p->zone = e_comp_object_util_zone_get(p->o_table); - _pager_fill(p); - pagers = eina_list_append(pagers, p); - return p; -} - -static void -_pager_free(Pager *p) -{ - _pager_empty(p); - evas_object_del(p->o_table); - ecore_job_del(p->recalc); - pagers = eina_list_remove(pagers, p); - free(p); -} - -static void -_pager_fill(Pager *p) -{ - int x, y; - E_Gadget_Site_Orient orient; - - if (p->inst && p->inst->o_pager) - { - orient = e_gadget_site_orient_get(e_gadget_site_get(p->inst->o_pager)); - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - p->invert = EINA_FALSE; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - p->invert = EINA_TRUE; - break; - - default: - p->invert = EINA_FALSE; - } - } - e_zone_desk_count_get(p->zone, &(p->xnum), &(p->ynum)); - if (p->ynum != 1) p->invert = EINA_FALSE; - for (x = 0; x < p->xnum; x++) - { - if ((p->plain) || (pager_config->permanent_plain)) - { - if (!phandlers) - { - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_RESIZE, _pager_cb_event_client_resize, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_MOVE, _pager_cb_event_client_move, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_ADD, _pager_cb_event_client_add, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_REMOVE, _pager_cb_event_client_remove, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_ICONIFY, _pager_cb_event_client_iconify, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_UNICONIFY, _pager_cb_event_client_uniconify, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_stick, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_unstick, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_DESK_SET, _pager_cb_event_client_desk_set, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_STACK, _pager_cb_event_client_stack, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_icon_change, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_FOCUS_IN, _pager_cb_event_client_focus_in, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_FOCUS_OUT, _pager_cb_event_client_focus_out, NULL); - E_LIST_HANDLER_APPEND(phandlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_property, NULL); - } - } - for (y = 0; y < p->ynum; y++) - { - Pager_Desk *pd; - E_Desk *desk; - - desk = e_desk_at_xy_get(p->zone, x, y); - if (desk) - { - pd = _pager_desk_new(p, desk, x, y, p->invert); - if (pd) - { - p->desks = eina_list_append(p->desks, pd); - if (desk == e_desk_current_get(desk->zone)) - _pager_desk_select(pd); - } - } - } - } -} - -static void -_pager_empty(Pager *p) -{ - p->active_pd = NULL; - if (!(p->plain) && !(pager_config->permanent_plain)) - { - if (!phandlers) - { - Ecore_Event_Handler *handler; - EINA_LIST_FREE(phandlers, handler) - ecore_event_handler_del(handler); - } - } - E_FREE_LIST(p->desks, _pager_desk_free); -} - -static Pager_Desk * -_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert) -{ - Pager_Desk *pd; - Evas_Object *o, *evo; - E_Client *ec; - Eina_List *l; - int w, h; - Evas *e; - const char *drop[] = - { - "enlightenment/pager_win", "enlightenment/border", - "enlightenment/vdesktop" - }; - - if (!desk) return NULL; - pd = E_NEW(Pager_Desk, 1); - if (!pd) return NULL; - - pd->xpos = xpos; - pd->ypos = ypos; - pd->urgent = 0; - pd->desk = desk; - e_object_ref(E_OBJECT(desk)); - pd->pager = p; - pd->drop_handler = NULL; - - e = evas_object_evas_get(p->o_table); - o = edje_object_add(e); - pd->o_desk = o; - if (p->plain || pager_config->permanent_plain) - e_theme_edje_object_set(o, "base/theme/gadgets/pager", - "e/gadget/pager/plain/desk"); - else - e_theme_edje_object_set(o, "base/theme/gadgets/pager", - "e/gadget/pager/default/desk"); - edje_object_part_text_set(o, "e.text.label", desk->name); - if (pager_config->show_desk_names) - edje_object_signal_emit(o, "e,name,show", "e"); - - edje_object_size_min_calc(o, &w, &h); - - E_EXPAND(o); - E_FILL(o); - if (invert) - elm_table_pack(p->o_table, o, ypos, xpos, 1, 1); - else - elm_table_pack(p->o_table, o, xpos, ypos, 1, 1); - - evo = (Evas_Object *)edje_object_part_object_get(o, "e.eventarea"); - if (!evo) evo = o; - - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_DOWN, - _pager_desk_cb_mouse_down, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_UP, - _pager_desk_cb_mouse_up, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_MOVE, - _pager_desk_cb_mouse_move, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_WHEEL, - _pager_desk_cb_mouse_wheel, pd); - evas_object_show(o); - - if (p->plain || pager_config->permanent_plain) - { - pd->o_layout = e_layout_add(e); - e_layout_virtual_size_set(pd->o_layout, desk->zone->w, desk->zone->h); - edje_object_part_swallow(pd->o_desk, "e.swallow.content", pd->o_layout); - evas_object_show(pd->o_layout); - E_CLIENT_FOREACH(ec) - { - Pager_Win *pw; - - if (e_client_util_ignored_get(ec)) continue; - if ((ec->new_client) || (ec->zone != desk->zone) || - ((ec->desk != desk) && (!ec->sticky))) - continue; - pw = _pager_window_new(pd, NULL, ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - } - else - { - pd->o_layout = e_deskmirror_add(desk, 1, 0); - evas_object_smart_callback_add(pd->o_layout, "mirror_add", (Evas_Smart_Cb)_pager_cb_mirror_add, pd); - - l = e_deskmirror_mirror_list(pd->o_layout); - EINA_LIST_FREE(l, o) - { - ec = evas_object_data_get(o, "E_Client"); - if (ec) - { - Pager_Win *pw; - - pw = _pager_window_new(pd, o, ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - } - edje_object_part_swallow(pd->o_desk, "e.swallow.content", pd->o_layout); - evas_object_show(pd->o_layout); - } - if (pd->pager->inst) - { - pd->drop_handler = - e_gadget_drop_handler_add(p->inst->o_pager, pd, - _pager_drop_cb_enter, _pager_drop_cb_move, - _pager_drop_cb_leave, _pager_drop_cb_drop, - drop, 3); - edje_object_part_swallow(pd->o_desk, "e.swallow.drop", pd->drop_handler); - evas_object_show(pd->drop_handler); - } - - return pd; -} - -static void -_pager_desk_free(Pager_Desk *pd) -{ - Pager_Win *w; - - if (pd->drop_handler) - evas_object_del(pd->drop_handler); - pd->drop_handler = NULL; - evas_object_del(pd->o_desk); - evas_object_del(pd->o_layout); - EINA_LIST_FREE(pd->wins, w) - _pager_window_free(w); - e_object_unref(E_OBJECT(pd->desk)); - free(pd); -} - -static void -_pager_desk_select(Pager_Desk *pd) -{ - char ori[32]; - const char *s = _pager_location_get(pd->pager->inst); - if (pd->current) return; - if (pd->pager->active_pd) - { - pd->pager->active_pd->current = 0; - edje_object_signal_emit(pd->pager->active_pd->o_desk, "e,state,unselected", "e"); - } - pd->current = 1; - evas_object_raise(pd->o_desk); - if (s) - snprintf(ori, sizeof(ori), "e,state,selected,%s", s); - else - snprintf(ori, sizeof(ori), "e,state,selected,bottom"); - edje_object_signal_emit(pd->o_desk, ori, "e"); - pd->pager->active_pd = pd; -} - -static Pager_Desk * -_pager_desk_find(Pager *p, E_Desk *desk) -{ - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l, pd) - if (pd->desk == desk) return pd; - - return NULL; -} - -static void -_pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) -{ - int c; - E_Zone *zone1, *zone2; - E_Desk *desk1, *desk2; - Pager_Win *pw; - Eina_List *l; - - if ((!pd1) || (!pd2) || (!pd1->desk) || (!pd2->desk)) return; - if (pd1 == pd2) return; - - desk1 = pd1->desk; - desk2 = pd2->desk; - zone1 = pd1->desk->zone; - zone2 = pd2->desk->zone; - - /* Move opened windows from on desk to the other */ - EINA_LIST_FOREACH(pd1->wins, l, pw) - { - if ((!pw) || (!pw->client) || (pw->client->iconic)) continue; - pw->client->hidden = 0; - e_client_desk_set(pw->client, desk2); - } - EINA_LIST_FOREACH(pd2->wins, l, pw) - { - if ((!pw) || (!pw->client) || (pw->client->iconic)) continue; - pw->client->hidden = 0; - e_client_desk_set(pw->client, desk1); - } - e_deskmirror_update_force(pd1->o_layout); - e_deskmirror_update_force(pd2->o_layout); - - /* Modify desktop names in the config */ - for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next) - { - E_Config_Desktop_Name *tmp_dn; - - tmp_dn = l->data; - if (!tmp_dn) continue; - if ((tmp_dn->desk_x == desk1->x) && - (tmp_dn->desk_y == desk1->y) && - (tmp_dn->zone == (int)desk1->zone->num)) - { - tmp_dn->desk_x = desk2->x; - tmp_dn->desk_y = desk2->y; - tmp_dn->zone = desk2->zone->num; - c++; - } - else if ((tmp_dn->desk_x == desk2->x) && - (tmp_dn->desk_y == desk2->y) && - (tmp_dn->zone == (int)desk2->zone->num)) - { - tmp_dn->desk_x = desk1->x; - tmp_dn->desk_y = desk1->y; - tmp_dn->zone = desk1->zone->num; - c++; - } - } - if (c > 0) e_config_save(); - e_desk_name_update(); - - /* Modify desktop backgrounds in the config */ - for (l = e_config->desktop_backgrounds, c = 0; l && c < 2; l = l->next) - { - E_Config_Desktop_Background *tmp_db; - - tmp_db = l->data; - if (!tmp_db) continue; - if ((tmp_db->desk_x == desk1->x) && - (tmp_db->desk_y == desk1->y) && - (tmp_db->zone == (int)desk1->zone->num)) - { - tmp_db->desk_x = desk2->x; - tmp_db->desk_y = desk2->y; - tmp_db->zone = desk2->zone->num; - c++; - } - else if ((tmp_db->desk_x == desk2->x) && - (tmp_db->desk_y == desk2->y) && - (tmp_db->zone == (int)desk2->zone->num)) - { - tmp_db->desk_x = desk1->x; - tmp_db->desk_y = desk1->y; - tmp_db->zone = desk1->zone->num; - c++; - } - } - if (c > 0) e_config_save(); - - /* If the current desktop has been switched, force to update of the screen */ - if (desk2 == e_desk_current_get(zone2)) - { - desk2->visible = 0; - e_desk_show(desk2); - } - if (desk1 == e_desk_current_get(zone1)) - { - desk1->visible = 0; - e_desk_show(desk1); - } -} - -static Pager_Win * -_pager_window_new(Pager_Desk *pd, Evas_Object *mirror, E_Client *client) -{ - Pager_Win *pw; - Evas_Object *o; - int visible; - - if (!client) return NULL; - pw = E_NEW(Pager_Win, 1); - if (!pw) return NULL; - - pw->client = client; - pw->desk = pd; - if ((pd->pager->plain) || (pager_config->permanent_plain)) - { - visible = ((!client->iconic) && (!client->netwm.state.skip_pager)); - pw->skip_winlist = client->netwm.state.skip_pager; - - o = edje_object_add(evas_object_evas_get(pd->pager->o_table)); - pw->o_window = o; - e_theme_edje_object_set(o, "base/theme/gadgets/pager", - "e/gadget/pager/plain/window"); - if (visible) evas_object_show(o); - e_layout_pack(pd->o_layout, pw->o_window); - e_layout_child_raise(pw->o_window); - o = e_client_icon_add(client, evas_object_evas_get(pd->pager->o_table)); - if (o) - { - pw->o_icon = o; - evas_object_show(o); - edje_object_part_swallow(pw->o_window, "e.swallow.icon", o); - } - e_layout_child_move(pw->o_window, - pw->client->x - pw->client->zone->x, - pw->client->y - pw->client->zone->y); - e_layout_child_resize(pw->o_window, pw->client->w, pw->client->h); - evas_object_show(o); - o = pw->o_window; - } - else - { - pw->o_mirror = mirror; - o = mirror; - } - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, - _pager_window_cb_mouse_down, pw); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, - _pager_window_cb_mouse_up, pw); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, - _pager_window_cb_mouse_move, pw); - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, - _pager_window_cb_del, pw); - - if (client->urgent) - { - if (!(client->iconic)) - { - if ((pd->pager->plain) || (pager_config->permanent_plain)) - edje_object_signal_emit(pw->o_window, "e,state,urgent", "e"); - else - edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e"); - } - } - - return pw; -} - -static void -_pager_window_free(Pager_Win *pw) -{ - Evas_Object *o; - if ((pw->drag.from_pager) && (pw->desk->pager->dragging)) - pw->desk->pager->dragging = 0; - if (pw->o_mirror) - o = pw->o_mirror; - else - o = pw->o_window; - if (o) - evas_object_event_callback_del_full(o, EVAS_CALLBACK_DEL, - _pager_window_cb_del, pw); - if (pw->o_icon) evas_object_del(pw->o_icon); - if (pw->o_window) evas_object_del(pw->o_window); - free(pw); -} - -static void -_pager_popup_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager_Popup *pp = data; - E_FREE_FUNC(pp->timer, ecore_timer_del); - _pager_free(pp->pager); - free(pp); -} - -static Pager_Popup * -pager_popup_new(int keyaction) -{ - Pager_Popup *pp; - Evas_Coord w, h, zx, zy, zw, zh; - int x, y, height, width; - E_Desk *desk; - Pager_Desk *pd; - E_Zone *zone = e_zone_current_get(); - - pp = E_NEW(Pager_Popup, 1); - if (!pp) return NULL; - - /* Show popup */ - - pp->pager = _pager_new(e_comp->evas, EINA_TRUE); - - pp->pager->popup = pp; - pp->urgent = 0; - - e_zone_desk_count_get(zone, &x, &y); - - if (keyaction) - height = pager_config->popup_act_height; - else - height = pager_config->popup_height; - - pd = eina_list_data_get(pp->pager->desks); - if (!pd) - { - height *= y; - width = height * (zone->w * x) / (zone->h * y); - } - else - { - Evas_Coord mw = 0, mh = 0; - - edje_object_size_min_calc(pd->o_desk, &mw, &mh); - height -= mh; - width = (height * zone->w) / zone->h; - height *= y; - height += (y * mh); - width *= x; - width += (x * mw); - } - - evas_object_move(pp->pager->o_table, 0, 0); - evas_object_resize(pp->pager->o_table, width, height); - - pp->o_bg = edje_object_add(e_comp->evas); - evas_object_name_set(pp->o_bg, "pager_gadget_popup"); - e_theme_edje_object_set(pp->o_bg, "base/theme/gadgets/pager", - "e/gadget/pager/popup"); - desk = e_desk_current_get(zone); - if (desk) - edje_object_part_text_set(pp->o_bg, "e.text.label", desk->name); - - evas_object_size_hint_min_set(pp->pager->o_table, width, height); - edje_object_part_swallow(pp->o_bg, "e.swallow.content", pp->pager->o_table); - edje_object_size_min_calc(pp->o_bg, &w, &h); - - pp->popup = e_comp_object_util_add(pp->o_bg, E_COMP_OBJECT_TYPE_POPUP); - evas_object_layer_set(pp->popup, E_LAYER_CLIENT_POPUP); - evas_object_pass_events_set(pp->popup, 1); - e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh); - evas_object_geometry_set(pp->popup, zx, zy, w, h); - e_comp_object_util_center(pp->popup); - evas_object_event_callback_add(pp->popup, EVAS_CALLBACK_DEL, _pager_popup_cb_del, pp); - evas_object_show(pp->popup); - - pp->timer = NULL; - - return pp; -} - -static void -_pager_popup_free(Pager_Popup *pp) -{ - E_FREE_FUNC(pp->timer, ecore_timer_del); - evas_object_hide(pp->popup); - evas_object_del(pp->popup); -} - -static Pager_Popup * -_pager_popup_find(E_Zone *zone) -{ - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - if ((p->popup) && (p->zone == zone)) - return p->popup; - - return NULL; -} - -static void -_pager_cb_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(inst->pager->desks, l, pd) - edje_object_signal_emit(pd->o_desk, "e,state,hidden", "e"); -} - -static void -_pager_cb_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(inst->pager->desks, l, pd) - edje_object_signal_emit(pd->o_desk, "e,state,visible", "e"); -} - -static void -_pager_cb_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Pager *p = inst->pager; - E_Zone *zone = e_comp_object_util_zone_get(p->o_table); - if (zone != p->zone) - { - p->zone = zone; - _pager_empty(p); - _pager_fill(p); - } -} - -static Evas_Object * -_pager_gadget_configure(Evas_Object *g EINA_UNUSED) -{ - if (!pager_config) return NULL; - if (cfg_dialog) return NULL; - return config_pager(e_zone_current_get()); -} - -EINTERN void -_pager_cb_config_gadget_updated(Eina_Bool style_changed) -{ - Pager *p; - Pager_Desk *pd; - Eina_List *l, *ll; - if (!pager_config) return; - EINA_LIST_FOREACH(pagers, l, p) - { - if (style_changed) - { - if (pager_config->plain) - { - switch (e_powersave_mode_get()) - { - case E_POWERSAVE_MODE_HIGH: - p->plain = EINA_TRUE; - break; - - case E_POWERSAVE_MODE_EXTREME: - p->plain = EINA_TRUE; - break; - - case E_POWERSAVE_MODE_FREEZE: - p->plain = EINA_TRUE; - break; - - default: - p->plain = EINA_FALSE; - } - } - _pager_empty(p); - _pager_fill(p); - } - EINA_LIST_FOREACH(p->desks, ll, pd) - { - if (pd->current) - { - char ori[32]; - const char *s = _pager_location_get(pd->pager->inst); - if (s) - snprintf(ori, sizeof(ori), "e,state,selected,%s", s); - else - snprintf(ori, sizeof(ori), "e,state,selected,bottom"); - edje_object_signal_emit(pd->o_desk, ori, "e"); - } - else - edje_object_signal_emit(pd->o_desk, "e,state,unselected", "e"); - if (pager_config->show_desk_names) - edje_object_signal_emit(pd->o_desk, "e,name,show", "e"); - else - edje_object_signal_emit(pd->o_desk, "e,name,hide", "e"); - } - } -} - -static void -_pager_cb_mirror_add(Pager_Desk *pd, Evas_Object *obj EINA_UNUSED, Evas_Object *mirror) -{ - Pager_Win *pw; - - pw = _pager_window_new(pd, mirror, evas_object_data_get(mirror, "E_Client")); - if (pw) pd->wins = eina_list_append(pd->wins, pw); -} - -static Eina_Bool -_pager_cb_event_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l, *l2; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager_Win *pw; - Pager_Desk *pd; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - - if ((act_popup) && (act_popup->pager->zone == ev->ec->zone)) - { - EINA_LIST_FOREACH(act_popup->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - Pager_Win *pw; - - if ((p->zone != ev->ec->zone) || - (_pager_window_find(p, ev->ec))) - continue; - pd = _pager_desk_find(p, ev->ec->desk); - if (!pd) continue; - pw = _pager_window_new(pd, NULL, ev->ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (!pw) continue; - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_iconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (!pw) continue; - if ((pw->drag.from_pager) && (pw->desk->pager->dragging)) - pw->desk->pager->dragging = 0; - evas_object_hide(pw->o_window); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_uniconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if ((pw) && (!pw->skip_winlist)) evas_object_show(pw->o_window); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_stick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if ((!(ev->property & E_CLIENT_PROPERTY_STICKY)) || (!ev->ec->sticky)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - Pager_Win *pw; - - if (p->zone != ev->ec->zone) continue; - pw = _pager_window_find(p, ev->ec); - if (!pw) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - if ((ev->ec->desk != pd->desk) && (!_pager_desk_window_find(pd, ev->ec))) - { - pw = _pager_window_new(pd, NULL, ev->ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_unstick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if ((!(ev->property & E_CLIENT_PROPERTY_STICKY)) || (ev->ec->sticky)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - Eina_List *l2; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - if (ev->ec->desk != pd->desk) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static void -_pager_window_desk_change(Pager *pager, E_Client *ec) -{ - Eina_List *l; - Pager_Win *pw; - Pager_Desk *pd; - - /* if this pager is not for the zone of the client */ - if (pager->zone != ec->zone) - { - /* look at all desks in the pager */ - EINA_LIST_FOREACH(pager->desks, l, pd) - { - /* find this client in this desk */ - pw = _pager_desk_window_find(pd, ec); - if (!pw) continue; - /* if it is found - remove it. it does not belong in this - * pager as it probably moves zones */ - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - return; - } - /* and this pager zone is for this client */ - /* see if the window is in this pager at all */ - pw = _pager_window_find(pager, ec); - if (pw) /* is it sticky */ - { - if (ec->sticky) - { - /* if its sticky and in this pager - its already everywhere, so abort - * doing anything else */ - return; - } - /* move it to the right desk */ - /* find the pager desk of the target desk */ - pd = _pager_desk_find(pager, ec->desk); - if (pd) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - /* remove it from whatever desk it was on */ - pw->desk->wins = eina_list_remove(pw->desk->wins, pw); - e_layout_unpack(pw->o_window); - - /* add it to the one its MEANT to be on */ - pw->desk = pd; - pd->wins = eina_list_append(pd->wins, pw); - e_layout_pack(pd->o_layout, pw->o_window); - - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - - _pager_window_move(pw); - } - } - /* the client isn't in this pager at all - it must have moved zones */ - else - { - if (!ec->sticky) - { - /* find the pager desk it needs to go to */ - pd = _pager_desk_find(pager, ec->desk); - if ((pd) && (!_pager_desk_window_find(pd, ec))) - { - /* create it and add it */ - pw = _pager_window_new(pd, NULL, ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - pd->wins = eina_list_append(pd->wins, pw); - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - else - { - /* go through all desks */ - EINA_LIST_FOREACH(pager->desks, l, pd) - { - /* create it and add it */ - if (_pager_desk_window_find(pd, ec)) continue; - pw = _pager_window_new(pd, NULL, ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - pd->wins = eina_list_append(pd->wins, pw); - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - } -} - -static Eina_Bool -_pager_cb_event_client_desk_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Desk_Set *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - _pager_window_desk_change(p, ev->ec); - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_stack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw, *pw2 = NULL; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - E_Client *ec; - - ec = e_util_desk_client_below(ev->ec); - if (ec) pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - { - e_layout_child_raise_above(pw->o_window, pw2->o_window); - continue; - } - ec = e_util_desk_client_above(ev->ec); - if (ec) pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - { - e_layout_child_lower_below(pw->o_window, pw2->o_window); - continue; - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_icon_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if (!(ev->property & E_CLIENT_PROPERTY_ICON)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - Evas_Object *o; - - if (pw->o_icon) - { - evas_object_del(pw->o_icon); - pw->o_icon = NULL; - } - o = e_client_icon_add(ev->ec, - evas_object_evas_get(p->o_table)); - if (o) - { - pw->o_icon = o; - evas_object_show(o); - edje_object_part_swallow(pw->o_window, - "e.swallow.icon", o); - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Pager *pager; - Eina_List *l, *l2; - Pager_Popup *pp; - Pager_Desk *pd; - Pager_Win *pw; - E_Zone *zone; - - zone = ev->ec->zone; - - EINA_LIST_FOREACH(pagers, l, pager) - { - if (pager->zone != zone) continue; - - EINA_LIST_FOREACH(pager->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,focused", "e"); - break; - } - } - } - - pp = _pager_popup_find(zone); - if (!pp) return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(pp->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,focused", "e"); - break; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Pager *pager; - Pager_Popup *pp; - Pager_Desk *pd; - Pager_Win *pw; - E_Zone *zone; - Eina_List *l; - - zone = ev->ec->zone; - - EINA_LIST_FOREACH(pagers, l, pager) - { - Eina_List *l2; - - if (pager->zone != zone) continue; - - EINA_LIST_FOREACH(pager->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,unfocused", "e"); - break; - } - } - } - - pp = _pager_popup_find(zone); - if (!pp) return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(pp->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,unfocused", "e"); - break; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l, *l2; - int found = 0; - Pager *p; - Pager_Win *pw; - Pager_Desk *pd; - - if (!(ev->property & E_CLIENT_PROPERTY_NETWM_STATE)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - found = 1; - if (ev->ec->netwm.state.skip_pager) - { - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - } - } - if (found) return ECORE_CALLBACK_PASS_ON; - - /* If we did not find this window in the pager, then add it because - * the skip_pager state may have changed to 1 */ - EINA_LIST_FOREACH(pagers, l, p) - { - if ((p->zone != ev->ec->zone) || - (_pager_window_find(p, ev->ec))) - continue; - if (!ev->ec->sticky) - { - pd = _pager_desk_find(p, ev->ec->desk); - if ((pd) && (!_pager_desk_window_find(pd, ev->ec))) - { - pw = _pager_window_new(pd, NULL, ev->ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec; - - pd->wins = eina_list_append(pd->wins, pw); - ec = e_util_desk_client_above(pw->client); - if (ec) - pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_zone_desk_count_set(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Zone_Desk_Count_Set *ev) -{ - Eina_List *l; - Pager *p; - int xx, yy; - - xx = ev->zone->desk_x_count; - yy = ev->zone->desk_y_count; - EINA_LIST_FOREACH(pagers, l, p) - { - if ((xx == p->xnum) && (yy == p->ynum)) continue; - _pager_empty(p); - _pager_fill(p); - if (p->inst) _pager_orient(p->inst, e_gadget_site_orient_get(e_gadget_site_get(p->inst->o_pager))); - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Desk_Show *ev = event; - Eina_List *l; - Pager *p; - Pager_Popup *pp; - Pager_Desk *pd; - - if (!pagers) - return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != ev->desk->zone) continue; - pd = _pager_desk_find(p, ev->desk); - if (pd) _pager_desk_select(pd); - - if (p->popup) - edje_object_part_text_set(p->popup->o_bg, "e.text.label", ev->desk->name); - } - - if ((pager_config->popup) && (!act_popup)) - { - if ((pp = _pager_popup_find(ev->desk->zone))) - evas_object_show(pp->popup); - else - pp = pager_popup_new(0); - if (pp->timer) - ecore_timer_loop_reset(pp->timer); - else - pp->timer = ecore_timer_loop_add(pager_config->popup_speed, - _pager_popup_cb_timeout, pp); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_desk_name_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Desk_Name_Change *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - - if (p->zone != ev->desk->zone) continue; - pd = _pager_desk_find(p, ev->desk); - if (pager_config->show_desk_names) - { - if (pd) - edje_object_part_text_set(pd->o_desk, "e.text.label", - ev->desk->name); - } - else - { - if (pd) - edje_object_part_text_set(pd->o_desk, "e.text.label", ""); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_urgent_change(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client_Property *ev) -{ - Eina_List *l, *l2; - Pager *p; - Pager_Desk *pd; - Pager_Win *pw; - - if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW; - if (!pagers) return ECORE_CALLBACK_RENEW; - - if (pager_config->popup_urgent && (!e_client_util_desk_visible(ev->ec, e_desk_current_get(ev->ec->zone))) && - (pager_config->popup_urgent_focus || - (!pager_config->popup_urgent_focus && (!ev->ec->focused) && (!ev->ec->want_focus)))) - { - Pager_Popup *pp; - - pp = _pager_popup_find(ev->ec->zone); - - if ((!pp) && (ev->ec->urgent || ev->ec->icccm.urgent) && (!ev->ec->iconic)) - { - pp = pager_popup_new(0); - if (!pp) return ECORE_CALLBACK_RENEW; - - if (!pager_config->popup_urgent_stick) - pp->timer = ecore_timer_loop_add(pager_config->popup_urgent_speed, - _pager_popup_cb_timeout, pp); - pp->urgent = 1; - } - } - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - if (ev->ec->urgent) - { - if (!(ev->ec->iconic)) - { - if ((pd->pager) && (pd->pager->inst) && - (!pager_config->popup_urgent)) - edje_object_signal_emit(pd->o_desk, - "e,state,urgent", "e"); - } - edje_object_signal_emit(pw->o_window, - "e,state,urgent", "e"); - } - else - { - if (!(ev->ec->iconic)) - edje_object_signal_emit(pd->o_desk, - "e,state,not_urgent", "e"); - edje_object_signal_emit(pw->o_window, - "e,state,not_urgent", "e"); - } - } - } - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_pager_cb_event_compositor_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l2, pd) - e_layout_virtual_size_set(pd->o_layout, pd->desk->zone->w, - pd->desk->zone->h); - - if (p->inst) _pager_orient(p->inst, e_gadget_site_orient_get(e_gadget_site_get(p->inst->o_pager))); - /* TODO if (p->popup) */ - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_powersave_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - if (!pager_config->plain) - return ECORE_CALLBACK_PASS_ON; - - _pager_cb_config_gadget_updated(EINA_TRUE); - - return ECORE_CALLBACK_PASS_ON; -} - -static void -_pager_window_move(Pager_Win *pw) -{ - e_layout_child_move(pw->o_window, - pw->client->x - pw->client->zone->x, - pw->client->y - pw->client->zone->y); - e_layout_child_resize(pw->o_window, pw->client->w, pw->client->h); -} - -static void -_pager_window_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager_Win *pw = data; - - pw->desk->wins = eina_list_remove(pw->desk->wins, pw); - _pager_window_free(data); -} - -static void -_pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *ev = event_info; - Pager_Win *pw = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) - { - pw->drag.button = 0; - return; - } - pw->drag.button = 0; - if (_pager_check_modifiers(ev->modifiers)) return; - - evas_object_smart_callback_call(e_gadget_site_get(pw->desk->pager->inst->o_pager), "gadget_site_unlocked", NULL); -} - -static void -_pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - Pager_Win *pw; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_pager_check_modifiers(ev->modifiers)) return; - - pw = data; - - if (!pw) return; - pw->desk->pager->active_drag_client = NULL; - if (pw->desk->pager->popup && !act_popup) return; - if (!pw->desk->pager->popup && ev->button == 3) return; - if (e_client_util_ignored_get(pw->client) || e_client_util_is_popup(pw->client)) return; - if (ev->button == (int)pager_config->btn_desk) return; - if ((ev->button == (int)pager_config->btn_drag) || - (ev->button == (int)pager_config->btn_noplace)) - { - Evas_Coord ox, oy; - if ((pw->desk->pager->plain) || (pager_config->permanent_plain)) - evas_object_geometry_get(pw->o_window, &ox, &oy, NULL, NULL); - else - evas_object_geometry_get(pw->o_mirror, &ox, &oy, NULL, NULL); - pw->drag.in_pager = 1; - pw->drag.x = ev->canvas.x; - pw->drag.y = ev->canvas.y; - pw->drag.dx = ox - ev->canvas.x; - pw->drag.dy = oy - ev->canvas.y; - pw->drag.start = 1; - pw->drag.button = ev->button; - pw->desk->pager->active_drag_client = pw->client; - evas_object_smart_callback_call(e_gadget_site_get(pw->desk->pager->inst->o_pager), "gadget_site_locked", NULL); - } -} - -static void -_pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Move *ev = event_info; - Pager_Win *pw; - E_Drag *drag; - Evas_Object *o, *oo = NULL; - Evas_Coord x, y, w, h; - const char *drag_types[] = - { "enlightenment/pager_win", "enlightenment/border" }; - pw = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_pager_check_modifiers(ev->modifiers)) return; - if (!pw) return; - if (pw->client->lock_user_location) return; - if ((pw->desk->pager->popup) && (!act_popup)) return; - if (!pw->drag.button) return; - - /* prevent drag for a few pixels */ - if (!pw->drag.start) return; - - if (!is_dragged(pw->drag.x - ev->cur.output.x, - pw->drag.y - ev->cur.output.y)) return; - - pw->desk->pager->dragging = 1; - pw->drag.start = 0; - e_comp_object_effect_clip(pw->client->frame); - edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,in", "e"); - - if ((pw->desk->pager->plain) || (pager_config->permanent_plain)) - { - evas_object_geometry_get(pw->o_window, &x, &y, &w, &h); - evas_object_hide(pw->o_window); - } - else - { - evas_object_geometry_get(pw->o_mirror, &x, &y, &w, &h); - evas_object_hide(pw->o_mirror); - } - drag = e_drag_new(x, y, drag_types, 2, pw->desk->pager, -1, - _pager_window_cb_drag_convert, - _pager_window_cb_drag_finished); - drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - evas_object_raise(pw->client->frame); - if ((pw->desk->pager->plain) || (pager_config->permanent_plain)) - { - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/gadgets/pager/plain", - "e/gadget/pager/plain/window"); - evas_object_show(o); - - oo = e_client_icon_add(pw->client, drag->evas); - if (oo) - { - evas_object_show(oo); - edje_object_part_swallow(o, "e.swallow.icon", oo); - } - } - else - { - /* this is independent of the original mirror */ - o = e_deskmirror_mirror_copy(pw->o_mirror); - evas_object_show(o); - } - e_drag_object_set(drag, o); - e_drag_resize(drag, w, h); - e_drag_show(drag); - e_drag_start(drag, x - pw->drag.dx, y - pw->drag.dy); - if (oo) - e_comp_object_util_del_list_append(drag->comp_object, oo); -} - -static void * -_pager_window_cb_drag_convert(E_Drag *drag, const char *type) -{ - Pager *p; - - p = drag->data; - if (!strcmp(type, "enlightenment/pager_win")) return _pager_window_find(p, p->active_drag_client); - if (!strcmp(type, "enlightenment/border")) return p->active_drag_client; - return NULL; -} - -static void -_pager_window_cb_drag_finished(E_Drag *drag, int dropped) -{ - Pager_Win *pw; - Pager *p; - p = drag->data; - if (!p) return; - pw = _pager_window_find(p, p->active_drag_client); - if (!pw) return; - p->active_drag_client = NULL; - if ((p->plain) || (pager_config->permanent_plain)) - evas_object_show(pw->o_window); - else - evas_object_show(pw->o_mirror); - evas_object_smart_callback_call(e_gadget_site_get(pw->desk->pager->inst->o_pager), "gadget_site_unlocked", NULL); - if (dropped) - { - /* be helpful */ - if (pw->client->desk->visible && (!e_client_focused_get())) - evas_object_focus_set(pw->client->frame, 1); - e_deskmirror_update_force(pw->desk->o_layout); - } - else - { - int dx, dy, x, y, zx, zy, zw, zh; - E_Client *ec = pw->client; - - ec->hidden = !p->active_pd->desk->visible; - e_client_desk_set(ec, p->active_pd->desk); - - dx = (ec->w / 2); - dy = (ec->h / 2); - - evas_pointer_canvas_xy_get(evas_object_evas_get(p->o_table), &x, &y); - e_zone_useful_geometry_get(p->zone, &zx, &zy, &zw, &zh); - - /* offset so that center of window is on mouse, but keep within desk bounds */ - if (dx < x) - { - x -= dx; - if ((ec->w < zw) && (x + ec->w > zx + zw)) - x -= x + ec->w - (zx + zw); - } - else x = 0; - - if (dy < y) - { - y -= dy; - if ((ec->h < zh) && (y + ec->h > zy + zh)) - y -= y + ec->h - (zy + zh); - } - else y = 0; - evas_object_move(ec->frame, x, y); - - if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame); - evas_object_focus_set(ec->frame, 1); - e_deskmirror_update_force(pw->desk->o_layout); - } - edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e"); - if (!pw->drag.from_pager) - { - if (!pw->drag.start) p->just_dragged = 1; - pw->drag.in_pager = 0; - pw->drag.button = pw->drag.start = 0; - p->dragging = 0; - } - if (pw->drag.from_pager) pw->drag.from_pager->dragging = 0; - pw->drag.from_pager = NULL; - e_comp_object_effect_unclip(pw->client->frame); - if (act_popup) - { - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - e_grabinput_get(input_window, 0, input_window); - else - e_comp_grab_input(1, 1); - if (!hold_count) _pager_popup_hide(1); - } -} - -static void -_pager_update_drop_position(Pager *p, Pager_Desk *pd, Evas_Coord x, Evas_Coord y) -{ - Pager_Win *pw = NULL; - - if ((p->plain) || (pager_config->permanent_plain)) - { - if (pd) - edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e"); - return; - } - if (pd) - pw = _pager_desk_window_find(pd, p->active_drag_client); - else - pw = _pager_window_find(p, p->active_drag_client); - if (!pw) return; - if (pd) - { - int zx, zy, zw, zh, vx, vy, offx, offy; - E_Client *ec = pw->client; - E_Desk *old_desk = ec->desk; - Eina_Bool was_focused = e_client_stack_focused_get(ec); - E_Drag *drag = e_drag_current_get(); - - pw->drag.in_pager = 1; - //makes drags look weird - //e_zone_useful_geometry_get(pd->desk->zone, &zx, &zy, &zw, &zh); - zx = pd->desk->zone->x, zy = pd->desk->zone->y; - zw = pd->desk->zone->w, zh = pd->desk->zone->h; - e_deskmirror_coord_canvas_to_virtual(pd->o_layout, - x, y, &vx, &vy); - ec->hidden = !pd->desk->visible; - e_client_desk_set(ec, pd->desk); - offx = (ec->w / 2); - offy = (ec->h / 2); - if (drag) - { - if (drag->w > 0) offx = ((drag->dx) * ec->w) / drag->w; - if (drag->h > 0) offy = ((drag->dy) * ec->h) / drag->h; - } - x = E_CLAMP(vx + zx - offx, zx, zx + zw - ec->w); - y = E_CLAMP(vy + zy - offy, zy, zy + zh - ec->h); - evas_object_move(ec->frame, x, y); - if (was_focused) - e_desk_last_focused_focus(old_desk); - } - else - { - /* this prevents the desk from switching on drags */ - pw->drag.from_pager = pw->desk->pager; - pw->drag.from_pager->dragging = 1; - pw->drag.in_pager = 0; - } -} - -static void -_pager_drop_cb_enter(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager_Desk *pd = data; - - /* FIXME this fixes a segv, but the case is not easy - * reproduceable. this makes no sense either since - * the same 'pager' is passed to e_drop_handler_add - * and it works without this almost all the time. - * so this must be an issue with e_dnd code... i guess */ - if (act_popup) return; - edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e"); -} - -static void -_pager_drop_cb_move(void *data, const char *type EINA_UNUSED, void *event_info) -{ - E_Event_Dnd_Move *ev; - Pager_Desk *pd; - - ev = event_info; - pd = data; - - if (act_popup) return; - _pager_update_drop_position(pd->pager, pd, ev->x, ev->y); -} - -static void -_pager_drop_cb_leave(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager_Desk *pd = data; - - if (act_popup) return; - edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e"); -} - -static void -_pager_drop_cb_drop(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Drop *ev; - Eina_List *l; - Pager_Desk *pd, *pdd; - Pager_Desk *pd2 = NULL; - E_Client *ec = NULL; - Pager_Win *pw = NULL; - Evas_Coord wx, wy, wx2, wy2; - Evas_Coord nx, ny; - ev = event_info; - pd = data; - - if (act_popup) return; - - if (pd) - { - if (!strcmp(type, "enlightenment/pager_win")) - { - pw = (Pager_Win *)(ev->data); - if (pw) - { - ec = pw->client; - } - } - else if (!strcmp(type, "enlightenment/border")) - { - ec = ev->data; - if ((pd->pager->plain) || (pager_config->permanent_plain)) - { - e_layout_coord_virtual_to_canvas(pd->o_layout, ec->x, ec->y, - &wx, &wy); - e_layout_coord_virtual_to_canvas(pd->o_layout, ec->x + ec->w, - ec->y + ec->h, &wx2, &wy2); - } - else - { - e_deskmirror_coord_virtual_to_canvas(pd->o_layout, ec->x, ec->y, - &wx, &wy); - e_deskmirror_coord_virtual_to_canvas(pd->o_layout, ec->x + ec->w, - ec->y + ec->h, &wx2, &wy2); - } - } - else if (!strcmp(type, "enlightenment/vdesktop")) - { - pd2 = ev->data; - if (!pd2) return; - _pager_desk_switch(pd, pd2); - } - else - return; - - if (ec) - { - E_Maximize max = ec->maximized; - E_Fullscreen fs = ec->fullscreen_policy; - Eina_Bool fullscreen = ec->fullscreen; - E_Desk *old_desk = ec->desk; - Eina_Bool was_focused = e_client_stack_focused_get(ec); - - if (ec->iconic) e_client_uniconify(ec); - if (ec->maximized) - e_client_unmaximize(ec, E_MAXIMIZE_BOTH); - if (fullscreen) e_client_unfullscreen(ec); - ec->hidden = 0; - e_client_desk_set(ec, pd->desk); - if (was_focused) - e_desk_last_focused_focus(old_desk); - evas_object_raise(ec->frame); - - if ((!max) && (!fullscreen)) - { - E_Drag *drag = e_drag_current_get(); - int zx, zy, zw, zh, mx, my, offx, offy; - - if ((pd->pager->plain) || (pager_config->permanent_plain)) - { - e_layout_coord_canvas_to_virtual(pd->o_layout, - ev->x, ev->y, - &nx, &ny); - } - else - { - e_deskmirror_coord_canvas_to_virtual(pd->o_layout, - ev->x, ev->y, - &nx, &ny); - } - e_zone_useful_geometry_get(pd->desk->zone, - &zx, &zy, &zw, &zh); - - offx = (ec->w / 2); - offy = (ec->h / 2); - if (drag) - { - if (drag->w > 0) offx = ((drag->dx) * ec->w) / drag->w; - if (drag->h > 0) offy = ((drag->dy) * ec->h) / drag->h; - } - mx = E_CLAMP(nx + zx - offx, zx, zx + zw - ec->w); - my = E_CLAMP(ny + zy - offy, zy, zy + zh - ec->h); - evas_object_move(ec->frame, mx, my); - } - if (max) e_client_maximize(ec, max); - if (fullscreen) e_client_fullscreen(ec, fs); - e_deskmirror_update_force(pd->o_layout); - } - EINA_LIST_FOREACH(pd->pager->desks, l, pdd) - { - edje_object_signal_emit(pdd->o_desk, "e,action,drag,out", "e"); - } - } -} - -static void -_pager_desk_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - Pager_Desk *pd; - Evas_Coord ox, oy; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_pager_check_modifiers(ev->modifiers)) return; - - pd = data; - if (!pd) return; - if ((!pd->pager->popup) && (ev->button == 3)) return; - if (ev->button == (int)pager_config->btn_desk) - { - evas_object_geometry_get(pd->o_desk, &ox, &oy, NULL, NULL); - pd->drag.start = 1; - pd->drag.in_pager = 1; - pd->drag.dx = ox - ev->canvas.x; - pd->drag.dy = oy - ev->canvas.y; - pd->drag.x = ev->canvas.x; - pd->drag.y = ev->canvas.y; - pd->drag.button = ev->button; - evas_object_smart_callback_call(e_gadget_site_get(pd->pager->inst->o_pager), "gadget_site_locked", NULL); - } - else - { - pd->drag.dx = pd->drag.dy = pd->drag.x = pd->drag.y = 0; - } - pd->pager->just_dragged = 0; -} - -static void -_pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *ev = event_info; - Pager_Desk *pd; - Pager *p; - - pd = data; - - if (!pd) return; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) - { - pd->drag.start = 0; - pd->drag.in_pager = 0; - return; - } - if (_pager_check_modifiers(ev->modifiers)) return; - - p = pd->pager; - - /* FIXME: pd->pager->dragging is 0 when finishing a drag from desk to desk */ - if ((ev->button == 1) && (!pd->pager->dragging) && - (!pd->pager->just_dragged)) - { - current_desk = pd->desk; - e_desk_show(pd->desk); - pd->drag.start = 0; - pd->drag.in_pager = 0; - } - else if (ev->button == (int)pager_config->btn_desk) - { - if (pd->pager->dragging) pd->pager->dragging = 0; - pd->drag.start = 0; - pd->drag.in_pager = 0; - evas_object_smart_callback_call(e_gadget_site_get(p->inst->o_pager), "gadget_site_unlocked", NULL); - } - - if ((p->popup) && (p->popup->urgent)) _pager_popup_free(p->popup); -} - -static void -_pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Move *ev = event_info; - Pager_Desk *pd; - E_Drag *drag; - Evas_Object *o; - Evas_Coord x, y, w, h; - const char *drag_types[] = { "enlightenment/vdesktop" }; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_pager_check_modifiers(ev->modifiers)) return; - - pd = data; - if (!pd) return; - /* prevent drag for a few pixels */ - if (pd->drag.start) - { - if (!is_dragged(pd->drag.x - ev->cur.output.x, - pd->drag.y - ev->cur.output.y)) return; - if (pd->pager) pd->pager->dragging = 1; - pd->drag.start = 0; - } - - if (pd->drag.in_pager && pd->pager) - { - evas_object_geometry_get(pd->o_desk, &x, &y, &w, &h); - drag = e_drag_new(x, y, drag_types, 1, pd, -1, - NULL, _pager_desk_cb_drag_finished); - drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - /* redraw the desktop theme above */ - if ((pd->pager->plain) || (pager_config->permanent_plain)) - { - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/gadgets/pager", - "e/gadget/pager/plain/desk"); - evas_object_show(o); - } - else - { - o = e_comp_object_util_mirror_add(pd->o_layout); - } - e_drag_object_set(drag, o); - - e_drag_resize(drag, w, h); - e_drag_start(drag, x - pd->drag.dx, y - pd->drag.dy); - - pd->drag.from_pager = pd->pager; - pd->drag.from_pager->dragging = 1; - pd->drag.in_pager = 0; - } -} - -static void -_pager_desk_cb_drag_finished(E_Drag *drag, int dropped) -{ - Pager_Desk *pd; - Pager_Desk *pd2 = NULL; - Eina_List *l; - E_Desk *desk; - E_Zone *zone; - Pager *p; - - pd = drag->data; - if (!pd) return; - evas_object_smart_callback_call(e_gadget_site_get(pd->pager->inst->o_pager), "gadget_site_unlocked", NULL); - if (!dropped) - { - /* wasn't dropped on pager, switch with current desktop */ - if (!pd->desk) return; - zone = e_zone_current_get(); - desk = e_desk_current_get(zone); - EINA_LIST_FOREACH(pagers, l, p) - { - pd2 = _pager_desk_find(p, desk); - if (pd2) break; - } - _pager_desk_switch(pd, pd2); - } - if (pd->drag.from_pager) - { - pd->drag.from_pager->dragging = 0; - pd->drag.from_pager->just_dragged = 0; - } - edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e"); - pd->drag.from_pager = NULL; - - if (act_popup) - { - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - e_grabinput_get(input_window, 0, input_window); - else - e_comp_grab_input(1, 1); - if (!hold_count) _pager_popup_hide(1); - } -} - -static void -_pager_desk_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Wheel *ev = event_info; - Pager_Desk *pd; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (_pager_check_modifiers(ev->modifiers)) return; - - pd = data; - - if (pd->pager->popup) return; - - if (pager_config->flip_desk) - e_zone_desk_linear_flip_by(pd->desk->zone, ev->z); -} - -static Eina_Bool -_pager_popup_cb_timeout(void *data) -{ - Pager_Popup *pp; - - pp = data; - pp->timer = NULL; - _pager_popup_free(pp); - -#ifndef HAVE_WAYLAND_ONLY - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - { - if (input_window) - { - e_grabinput_release(input_window, input_window); - ecore_x_window_free(input_window); - input_window = 0; - } - } -#endif - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - { - e_comp_ungrab_input(1, 1); - input_window = 0; - } - - return ECORE_CALLBACK_CANCEL; -} - -/************************************************************************/ -/* popup-on-keyaction functions */ -static int -_pager_popup_show(void) -{ - E_Zone *zone; - int x, y, w, h; - Pager_Popup *pp; - //const char *drop[] = - //{ - //"enlightenment/pager_win", "enlightenment/border", - //"enlightenment/vdesktop" - //}; - - if ((act_popup) || (input_window)) return 0; - - zone = e_zone_current_get(); - - pp = _pager_popup_find(zone); - if (pp) _pager_popup_free(pp); - -#ifndef HAVE_WAYLAND_ONLY - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - { - input_window = ecore_x_window_input_new(e_comp->win, 0, 0, 1, 1); - ecore_x_window_show(input_window); - if (!e_grabinput_get(input_window, 0, input_window)) - { - ecore_x_window_free(input_window); - input_window = 0; - return 0; - } - } -#endif - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - { - input_window = e_comp->ee_win; - e_comp_grab_input(1, 1); - } - - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_KEY_DOWN, _pager_popup_cb_key_down, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_KEY_UP, _pager_popup_cb_key_up, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_MOUSE_WHEEL, _pager_popup_cb_mouse_wheel, NULL)); - - act_popup = pager_popup_new(0); - - evas_object_geometry_get(act_popup->pager->o_table, &x, &y, &w, &h); - - current_desk = e_desk_current_get(zone); - - return 1; -} - -static void -_pager_popup_hide(int switch_desk) -{ - hold_count = 0; - hold_mod = 0; - while (handlers) - { - ecore_event_handler_del(handlers->data); - handlers = eina_list_remove_list(handlers, handlers); - } - - act_popup->timer = ecore_timer_loop_add(0.1, _pager_popup_cb_timeout, act_popup); - - if ((switch_desk) && (current_desk)) e_desk_show(current_desk); - - act_popup = NULL; -} - -static void -_pager_popup_modifiers_set(int mod) -{ - if (!act_popup) return; - hold_mod = mod; - hold_count = 0; - if (hold_mod & ECORE_EVENT_MODIFIER_SHIFT) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_CTRL) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_ALT) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_WIN) hold_count++; -} - -static void -_pager_popup_desk_switch(int x, int y) -{ - int max_x, max_y, desk_x, desk_y; - Pager_Desk *pd; - Pager_Popup *pp = act_popup; - - e_zone_desk_count_get(pp->pager->zone, &max_x, &max_y); - - desk_x = current_desk->x + x; - desk_y = current_desk->y + y; - - if (desk_x < 0) - desk_x = max_x - 1; - else if (desk_x >= max_x) - desk_x = 0; - - if (desk_y < 0) - desk_y = max_y - 1; - else if (desk_y >= max_y) - desk_y = 0; - - current_desk = e_desk_at_xy_get(pp->pager->zone, desk_x, desk_y); - - pd = _pager_desk_find(pp->pager, current_desk); - if (pd) _pager_desk_select(pd); - - edje_object_part_text_set(pp->o_bg, "e.text.label", current_desk->name); -} - -static void -_pager_popup_cb_action_show(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED, Ecore_Event_Key *ev EINA_UNUSED) -{ - if (_pager_popup_show()) - _pager_popup_modifiers_set(ev->modifiers); -} - -static void -_pager_popup_cb_action_switch(E_Object *obj EINA_UNUSED, const char *params, Ecore_Event_Key *ev) -{ - int max_x, max_y, desk_x; - int x = 0, y = 0; - - if (!act_popup) - { - if (_pager_popup_show()) - _pager_popup_modifiers_set(ev->modifiers); - else - return; - } - - e_zone_desk_count_get(act_popup->pager->zone, &max_x, &max_y); - desk_x = current_desk->x /* + x <=this is always 0 */; - - if (!strcmp(params, "left")) - x = -1; - else if (!strcmp(params, "right")) - x = 1; - else if (!strcmp(params, "up")) - y = -1; - else if (!strcmp(params, "down")) - y = 1; - else if (!strcmp(params, "next")) - { - x = 1; - if (desk_x == max_x - 1) - y = 1; - } - else if (!strcmp(params, "prev")) - { - x = -1; - if (desk_x == 0) - y = -1; - } - - _pager_popup_desk_switch(x, y); -} - -static Eina_Bool -_pager_popup_cb_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Wheel *ev = event; - Pager_Popup *pp = act_popup; - int max_x; - - e_zone_desk_count_get(pp->pager->zone, &max_x, NULL); - - if (current_desk->x + ev->z >= max_x) - _pager_popup_desk_switch(1, 1); - else if (current_desk->x + ev->z < 0) - _pager_popup_desk_switch(-1, -1); - else - _pager_popup_desk_switch(ev->z, 0); - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Key *ev; - - ev = event; - if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON; - if (!strcmp(ev->key, "Up")) - _pager_popup_desk_switch(0, -1); - else if (!strcmp(ev->key, "Down")) - _pager_popup_desk_switch(0, 1); - else if (!strcmp(ev->key, "Left")) - _pager_popup_desk_switch(-1, 0); - else if (!strcmp(ev->key, "Right")) - _pager_popup_desk_switch(1, 0); - else if (!strcmp(ev->key, "Escape")) - _pager_popup_hide(0); - else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")) || - (!strcmp(ev->key, "space"))) - { - Pager_Popup *pp = act_popup; - - if (pp) - { - E_Desk *desk; - - desk = e_desk_at_xy_get(pp->pager->zone, - current_desk->x, current_desk->y); - if (desk) e_desk_show(desk); - } - _pager_popup_hide(0); - } - else - { - E_Config_Binding_Key *binding; - Eina_List *l; - - EINA_LIST_FOREACH(e_bindings->key_bindings, l, binding) - { - E_Binding_Modifier mod = 0; - - if ((binding->action) && (strcmp(binding->action, "pager_gadget_switch"))) - continue; - - if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) - mod |= E_BINDING_MODIFIER_SHIFT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) - mod |= E_BINDING_MODIFIER_CTRL; - if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT) - mod |= E_BINDING_MODIFIER_ALT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN) - mod |= E_BINDING_MODIFIER_WIN; - - if (binding->key && (!strcmp(binding->key, ev->key)) && - ((binding->modifiers == mod))) - { - E_Action *act; - - act = e_action_find(binding->action); - - if (act) - { - if (act->func.go_key) - act->func.go_key(NULL, binding->params, ev); - } - } - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_key_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Key *ev; - - ev = event; - if (!(act_popup)) return ECORE_CALLBACK_PASS_ON; - - if (hold_mod) - { - if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && - (!strcmp(ev->key, "Shift_L"))) hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && - (!strcmp(ev->key, "Shift_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) && - (!strcmp(ev->key, "Control_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) && - (!strcmp(ev->key, "Control_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Alt_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Alt_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Meta_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Meta_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Super_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Super_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Super_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Super_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Mode_switch"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Meta_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Meta_R"))) - hold_count--; - if ((hold_count <= 0) && (!act_popup->pager->dragging)) - { - _pager_popup_hide(1); - return ECORE_CALLBACK_PASS_ON; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static void -pager_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - _pager_free(inst->pager); - ginstances = eina_list_remove(ginstances, inst); - free(inst); -} - -EINTERN Evas_Object * -pager_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Pager *p; - Evas_Object *o; - Instance *inst; - - if (e_gadget_site_is_desklock(parent)) return NULL; - if (*id == 0) *id = 1; - inst = E_NEW(Instance, 1); - p = _pager_new(evas_object_evas_get(parent), EINA_FALSE); - p->inst = inst; - inst->pager = p; - o = p->o_table; - inst->o_pager = o; - _pager_orient(inst, e_gadget_site_orient_get(parent)); - - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, pager_del, inst); - evas_object_smart_callback_add(parent, "gadget_created", _pager_gadget_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_site_anchor", _pager_gadget_anchor_change_cb, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _pager_cb_move, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_SHOW, - _pager_cb_obj_show, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_HIDE, - _pager_cb_obj_hide, inst); - ginstances = eina_list_append(ginstances, inst); - return inst->o_pager; -} - -EINTERN void -pager_init(void) -{ - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_ZONE_DESK_COUNT_SET, _pager_cb_event_zone_desk_count_set, NULL); - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_DESK_SHOW, _pager_cb_event_desk_show, NULL); - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_DESK_NAME_CHANGE, _pager_cb_event_desk_name_change, NULL); - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_COMPOSITOR_UPDATE, _pager_cb_event_compositor_resize, NULL); - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_urgent_change, NULL); - E_LIST_HANDLER_APPEND(ghandlers, E_EVENT_POWERSAVE_UPDATE, _pager_cb_event_powersave_change, NULL); - - act_popup_show = e_action_add("pager_gadget_show"); - if (act_popup_show) - { - act_popup_show->func.go_key = _pager_popup_cb_action_show; - e_action_predef_name_set(N_("Pager Gadget"), N_("Show Pager Popup"), - "pager_gadget_show", "", NULL, 0); - } - act_popup_switch = e_action_add("pager_gadget_switch"); - if (act_popup_switch) - { - act_popup_switch->func.go_key = _pager_popup_cb_action_switch; - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Right"), - "pager_gadget_switch", "right", NULL, 0); - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Left"), - "pager_gadget_switch", "left", NULL, 0); - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Up"), - "pager_gadget_switch", "up", NULL, 0); - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Down"), - "pager_gadget_switch", "down", NULL, 0); - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Next"), - "pager_gadget_switch", "next", NULL, 0); - e_action_predef_name_set(N_("Pager Gadget"), N_("Popup Desk Previous"), - "pager_gadget_switch", "prev", NULL, 0); - } -} - diff --git a/src/modules/pager/gadget/pager.h b/src/modules/pager/gadget/pager.h deleted file mode 100644 index c0f7c283b..000000000 --- a/src/modules/pager/gadget/pager.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef PAGER_H -#define PAGER_H - -#include "e.h" - -EINTERN void *e_modapi_gadget_init(E_Module *m); -EINTERN int e_modapi_gadget_shutdown(E_Module *m); -EINTERN int e_modapi_gadget_save(E_Module *m); - -typedef struct _Config Config; -struct _Config -{ - unsigned int popup; - double popup_speed; - unsigned int popup_urgent; - unsigned int popup_urgent_stick; - unsigned int popup_urgent_focus; - double popup_urgent_speed; - unsigned int show_desk_names; - int popup_act_height; - int popup_height; - unsigned int drag_resist; - unsigned int btn_drag; - unsigned int btn_noplace; - unsigned int btn_desk; - unsigned int flip_desk; - unsigned int plain; - unsigned int permanent_plain; -}; - -EINTERN Evas_Object *pager_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *config_pager(E_Zone *zone); -EINTERN void pager_init(void); -EINTERN void _pager_cb_config_gadget_updated(Eina_Bool style_changed); -EINTERN void _pager_cb_config_updated(void); - -EINTERN extern Config *pager_config; -EINTERN extern Evas_Object *cfg_dialog; -EINTERN extern Eina_List *ginstances, *ghandlers, *phandlers; -/** - * @addtogroup Optional_Gadgets - * @{ - * - * @defgroup Module_Pager Virtual Desktop Pager - * - * Shows the grid of virtual desktops and allows changing between - * them. - * - * @} - */ -#endif diff --git a/src/modules/pager/meson.build b/src/modules/pager/meson.build index dad8fa4ea..b42668d41 100644 --- a/src/modules/pager/meson.build +++ b/src/modules/pager/meson.build @@ -1,9 +1,5 @@ src = files( 'e_mod_main.c', 'e_mod_config.c', - 'e_mod_main.h', - 'gadget/mod.c', - 'gadget/pager.h', - 'gadget/pager.c', - 'gadget/config.c' + 'e_mod_main.h' ) diff --git a/src/modules/start/e_mod_main.c b/src/modules/start/e_mod_main.c index 52e926830..ba4f8e3aa 100644 --- a/src/modules/start/e_mod_main.c +++ b/src/modules/start/e_mod_main.c @@ -320,11 +320,8 @@ E_API E_Module_Api e_modapi = E_API void * e_modapi_init(E_Module *m) { - EINTERN Evas_Object *start_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); - start_module = m; e_gadcon_provider_register(&_gadcon_class); - e_gadget_type_add("Start", start_create, NULL); return m; } @@ -333,7 +330,6 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) { start_module = NULL; e_gadcon_provider_unregister(&_gadcon_class); - e_gadget_type_del("Start"); return 1; } diff --git a/src/modules/start/meson.build b/src/modules/start/meson.build index 8ea716cc3..42119f40e 100644 --- a/src/modules/start/meson.build +++ b/src/modules/start/meson.build @@ -1,4 +1,3 @@ src = files( - 'e_mod_main.c', - 'start.c' + 'e_mod_main.c' ) diff --git a/src/modules/start/start.c b/src/modules/start/start.c deleted file mode 100644 index 610e7fde2..000000000 --- a/src/modules/start/start.c +++ /dev/null @@ -1,227 +0,0 @@ -#include "e.h" - -/* actual module specifics */ -typedef struct _Instance Instance; - -struct _Instance -{ - Evas_Object *site; - Evas_Object *o_button; - E_Menu *main_menu; -}; - -static void -do_orient(Instance *inst, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor anchor) -{ - char buf[4096]; - const char *s = "float"; - - if (anchor & E_GADGET_SITE_ANCHOR_LEFT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top_left"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left_top"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "left_top"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom_left"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "left_bottom"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "left_bottom"; - break; - } - } - else - s = "left"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_RIGHT) - { - if (anchor & E_GADGET_SITE_ANCHOR_TOP) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "top_right"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right_top"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "right_top"; - break; - } - } - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "bottom_right"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "right_bottom"; - break; - case E_GADGET_SITE_ORIENT_NONE: - s = "right_bottom"; - break; - } - } - else - s = "right"; - } - else if (anchor & E_GADGET_SITE_ANCHOR_TOP) - s = "top"; - else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM) - s = "bottom"; - else - { - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - s = "horizontal"; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - s = "vertical"; - break; - default: break; - } - } - snprintf(buf, sizeof(buf), "e,state,orientation,%s", s); - elm_layout_signal_emit(inst->o_button, buf, "e"); -} - -static void -_menu_cb_post(void *data, E_Menu *m) -{ - Instance *inst = data; - Eina_Bool fin; - - if (stopping || (!inst->main_menu)) return; - fin = m == inst->main_menu; - e_object_del(E_OBJECT(m)); - if (!fin) return; - elm_layout_signal_emit(inst->o_button, "e,state,unfocused", "e"); - inst->main_menu = NULL; -} - -static void -_button_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Instance *inst = data; - Evas_Event_Mouse_Up *ev = event_info; - Evas_Coord x, y, w, h; - E_Gadget_Site_Anchor an; - int dir = E_MENU_POP_DIRECTION_AUTO; - - if (ev->button != 1) return; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - - evas_object_geometry_get(inst->o_button, &x, &y, &w, &h); - if (!inst->main_menu) - inst->main_menu = e_int_menus_main_new(); - if (!inst->main_menu) return; - e_menu_post_deactivate_callback_set(inst->main_menu, - _menu_cb_post, inst); - an = e_gadget_site_anchor_get(e_gadget_site_get(inst->o_button)); - switch (e_gadget_site_orient_get(e_gadget_site_get(inst->o_button))) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - if (an & E_GADGET_SITE_ANCHOR_TOP) - dir = E_MENU_POP_DIRECTION_DOWN; - else if (an & E_GADGET_SITE_ANCHOR_BOTTOM) - dir = E_MENU_POP_DIRECTION_UP; - break; - case E_GADGET_SITE_ORIENT_VERTICAL: - if (an & E_GADGET_SITE_ANCHOR_LEFT) - dir = E_MENU_POP_DIRECTION_RIGHT; - else if (an & E_GADGET_SITE_ANCHOR_RIGHT) - dir = E_MENU_POP_DIRECTION_LEFT; - break; - default: break; - } - e_menu_activate_mouse(inst->main_menu, - e_zone_current_get(), - x, y, w, h, dir, ev->timestamp); - evas_object_smart_callback_call(inst->o_button, "gadget_popup", - inst->main_menu->container_object); - elm_layout_signal_emit(inst->o_button, "e,state,focused", "e"); - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; -} - -static void -_anchor_change(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - do_orient(inst, e_gadget_site_orient_get(obj), e_gadget_site_anchor_get(obj)); -} - -static void -start_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (inst->main_menu) - { - e_menu_post_deactivate_callback_set(inst->main_menu, NULL, NULL); - e_object_del(E_OBJECT(inst->main_menu)); - } - evas_object_smart_callback_del_full(inst->site, "gadget_site_anchor", _anchor_change, inst); - free(inst); -} - -static void -_gadget_created(void *data, Evas_Object *obj, void *event_info) -{ - Instance *inst = data; - - if (event_info != inst->o_button) return; - do_orient(inst, e_gadget_site_orient_get(obj), e_gadget_site_anchor_get(obj)); - evas_object_smart_callback_del_full(obj, "gadget_created", _gadget_created, inst); -} - -EINTERN Evas_Object * -start_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Evas_Object *o; - Instance *inst; - - if (e_gadget_site_is_desklock(parent)) return NULL; - if (*id == 0) *id = 1; - inst = E_NEW(Instance, 1); - inst->site = parent; - - o = elm_layout_add(parent); - - e_theme_edje_object_set(o, NULL, "e/gadget/start/main"); - elm_layout_signal_emit(o, "e,state,unfocused", "e"); - - inst->o_button = o; - evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, - _button_cb_mouse_up, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, start_del, inst); - evas_object_smart_callback_add(parent, "gadget_site_anchor", _anchor_change, inst); - evas_object_smart_callback_add(parent, "gadget_created", _gadget_created, inst); - do_orient(inst, orient, e_gadget_site_anchor_get(parent)); - - return o; -} diff --git a/src/modules/sysinfo/batman/batman.c b/src/modules/sysinfo/batman/batman.c deleted file mode 100644 index 8a28f78bd..000000000 --- a/src/modules/sysinfo/batman/batman.c +++ /dev/null @@ -1,759 +0,0 @@ -#include "batman.h" - -EINTERN Eina_Bool upower; -EINTERN Eina_List *batman_device_batteries; -EINTERN Eina_List *batman_device_ac_adapters; -EINTERN double batman_init_time; - -static Eina_Bool _batman_cb_warning_popup_timeout(void *data); -static void _batman_cb_warning_popup_hide(void *data, Evas *e, Evas_Object *obj, void *event); -static void _batman_warning_popup_destroy(Instance *inst); -static void _batman_warning_popup(Instance *inst, int time, double percent); - -Eina_List * -_batman_battery_find(const char *udi) -{ - Eina_List *l; - Battery *bat; - Eina_List *batteries = NULL; - EINA_LIST_FOREACH(batman_device_batteries, l, bat) - { /* these are always stringshared */ - if (udi == bat->udi) batteries = eina_list_append(batteries, bat); - } - - return batteries; -} - -Eina_List * -_batman_ac_adapter_find(const char *udi) -{ - Eina_List *l; - Ac_Adapter *ac; - Eina_List *adapters = NULL; - EINA_LIST_FOREACH(batman_device_ac_adapters, l, ac) - { /* these are always stringshared */ - if (udi == ac->udi) adapters = eina_list_append(adapters, ac); - } - - return adapters; -} - -static void -_batman_face_level_set(Evas_Object *battery, double level) -{ - Edje_Message_Float msg; - - if (level < 0.0) level = 0.0; - else if (level > 1.0) - level = 1.0; - msg.val = level; - edje_object_message_send(elm_layout_edje_get(battery), EDJE_MESSAGE_FLOAT, 1, &msg); -} - -static void -_batman_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->cfg->batman.popup = NULL; -} - -static void -_batman_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->batman.popup = NULL; -} - -static Evas_Object * -_batman_popup_create(Instance *inst) -{ - Evas_Object *popup, *box, *pbar, *label; - Battery *bat; - Eina_List *l; - char buf[128], buf2[128 + 100]; - int hrs = 0, mins = 0; - Eina_List *udis = NULL; - - hrs = (inst->cfg->batman.time_left / 3600); - mins = ((inst->cfg->batman.time_left) / 60 - (hrs * 60)); - if (mins < 0) mins = 0; - - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", - _batman_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, - _batman_popup_deleted, inst); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); E_FILL(box); - elm_object_content_set(popup, box); - evas_object_show(box); - - label = elm_label_add(box); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, buf); - elm_box_pack_end(box, label); - evas_object_show(label); - - if (eina_list_count(batman_device_batteries) == 0) - snprintf(buf, sizeof(buf), _("No Battery Found")); - else if (inst->cfg->batman.have_power && (inst->cfg->batman.full < 99)) - snprintf(buf, sizeof(buf), _("Battery Charging")); - else if (inst->cfg->batman.full >= 99) - snprintf(buf, sizeof(buf), _("Battery Fully Charged")); - else - snprintf(buf, sizeof(buf), _("Time Remaining: %i:%02i"), hrs, mins); - snprintf(buf2, sizeof(buf2), "%s", buf); - elm_object_text_set(label, buf2); - - EINA_LIST_FOREACH(batman_device_batteries, l, bat) - { - if (!eina_list_count(udis) || !eina_list_data_find(udis, bat->udi)) - { - udis = eina_list_append(udis, bat->udi); - if (bat->vendor && bat->vendor[0] && bat->model && bat->model[0]) - { - label = elm_label_add(box); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - snprintf(buf, sizeof(buf), "%s (%s)", bat->vendor, bat->model); - elm_object_text_set(label, buf); - elm_box_pack_end(box, label); - evas_object_show(label); - } - - pbar = elm_progressbar_add(box); - E_EXPAND(pbar); E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_value_set(pbar, bat->percent / 100); - elm_box_pack_end(box, pbar); - evas_object_show(pbar); - } - } - if (eina_list_count(udis)) - eina_list_free(udis); - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->batman.o_gadget); - evas_object_show(popup); - - return popup; -} - -static Evas_Object * -_batman_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - if (inst->cfg->batman.popup) return NULL; - return batman_configure(inst); -} - -static void -_batman_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->batman.popup) - elm_ctxpopup_dismiss(inst->cfg->batman.popup); - else - inst->cfg->batman.popup = _batman_popup_create(inst); - } -} - -static Eina_Bool -_powersave_cb_config_update(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Instance *inst = data; - - if (!inst->cfg->batman.have_battery) - e_powersave_mode_set(E_POWERSAVE_MODE_LOW); - else - { - if (inst->cfg->batman.have_power) - e_powersave_mode_set(E_POWERSAVE_MODE_LOW); - else if (inst->cfg->batman.full > 95) - e_powersave_mode_set(E_POWERSAVE_MODE_MEDIUM); - else if (inst->cfg->batman.full > 30) - e_powersave_mode_set(E_POWERSAVE_MODE_HIGH); - else - e_powersave_mode_set(E_POWERSAVE_MODE_EXTREME); - } - return ECORE_CALLBACK_RENEW; -} - -void -_batman_update(Instance *inst, int full, int time_left, Eina_Bool have_battery, Eina_Bool have_power) -{ - static double debounce_time = 0.0; - - if (!inst) return; - if (!inst->cfg) return; - if (inst->cfg->esm != E_SYSINFO_MODULE_BATMAN && inst->cfg->esm != E_SYSINFO_MODULE_SYSINFO) return; - - if (have_power != inst->cfg->batman.have_power) - { - if (have_power && (full < 100)) - elm_layout_signal_emit(inst->cfg->batman.o_gadget, - "e,state,charging", - "e"); - else - { - elm_layout_signal_emit(inst->cfg->batman.o_gadget, - "e,state,discharging", - "e"); - if (inst->popup_battery) - elm_layout_signal_emit(inst->popup_battery, - "e,state,discharging", "e"); - } - } - if (have_battery) - { - if (inst->cfg->batman.full != full) - { - double val; - - if (full >= 100) val = 1.0; - else val = (double)full / 100.0; - _batman_face_level_set(inst->cfg->batman.o_gadget, val); - if (inst->popup_battery) - _batman_face_level_set(inst->popup_battery, val); - } - } - else - { - _batman_face_level_set(inst->cfg->batman.o_gadget, 0.0); - } - if (have_battery && - (!have_power) && - (full < 100) && - ( - ( - (time_left > 0) && - inst->cfg->batman.alert && - ((time_left / 60) <= inst->cfg->batman.alert) - ) || - ( - inst->cfg->batman.alert_p && - (full <= inst->cfg->batman.alert_p) - ) - ) - ) - { - double t; - - printf("-------------------------------------- bat warn .. why below\n"); - printf("have_battery = %i\n", (int)have_battery); - printf("have_power = %i\n", (int)have_power); - printf("full = %i\n", (int)full); - printf("time_left = %i\n", (int)time_left); - printf("inst->cfg->batman.alert = %i\n", (int)inst->cfg->batman.alert); - printf("inst->cfg->batman.alert_p = %i\n", (int)inst->cfg->batman.alert_p); - t = ecore_time_get(); - if ((t - debounce_time) > 30.0) - { - printf("t-debounce = %3.3f\n", (t - debounce_time)); - debounce_time = t; - if ((t - batman_init_time) > 5.0) - _batman_warning_popup(inst, time_left, (double)full / 100.0); - } - } - else if (have_power || ((time_left / 60) > inst->cfg->batman.alert)) - _batman_warning_popup_destroy(inst); - if ((have_battery) && (!have_power) && (full >= 0) && - (inst->cfg->batman.suspend_below > 0) && - (full < inst->cfg->batman.suspend_below)) - { - if (inst->cfg->batman.suspend_method == SUSPEND) - e_sys_action_do(E_SYS_SUSPEND, NULL); - else if (inst->cfg->batman.suspend_method == HIBERNATE) - e_sys_action_do(E_SYS_HIBERNATE, NULL); - else if (inst->cfg->batman.suspend_method == SHUTDOWN) - e_sys_action_do(E_SYS_HALT, NULL); - } - inst->cfg->batman.full = full; - inst->cfg->batman.time_left = time_left; - inst->cfg->batman.have_battery = have_battery; - inst->cfg->batman.have_power = have_power; - - if (!have_battery) - e_powersave_mode_set(E_POWERSAVE_MODE_LOW); - else - { - if (have_power) - e_powersave_mode_set(E_POWERSAVE_MODE_LOW); - else if (full > 95) - e_powersave_mode_set(E_POWERSAVE_MODE_MEDIUM); - else if (full > 30) - e_powersave_mode_set(E_POWERSAVE_MODE_HIGH); - else - e_powersave_mode_set(E_POWERSAVE_MODE_EXTREME); - } -} - -void -_batman_device_update(Instance *inst) -{ - Eina_List *l; - Battery *bat; - Ac_Adapter *ac; - int full = -1; - int time_left = -1; - int have_battery = 0; - int have_power = 0; - int charging = 0; - - int batnum = 0; - int acnum = 0; - - EINA_LIST_FOREACH(batman_device_ac_adapters, l, ac) - { - if (ac->present) - { - acnum++; - have_power = 1; - } - } - - EINA_LIST_FOREACH(batman_device_batteries, l, bat) - { - if (!bat->got_prop) - continue; - have_battery = 1; - batnum++; - if (bat->charging == 1) have_power = 1; - if (full == -1) full = 0; - if (bat->percent >= 0) - full += bat->percent; - else if (bat->last_full_charge > 0) - full += (bat->current_charge * 100) / bat->last_full_charge; - else if (bat->design_charge > 0) - full += (bat->current_charge * 100) / bat->design_charge; - if (bat->time_left > 0) - { - if (time_left < 0) time_left = bat->time_left; - else time_left += bat->time_left; - } - charging += bat->charging; - } - - if ((batman_device_batteries) && (batnum == 0)) - return; /* not ready yet, no properties received for any battery */ - - if (batnum > 0) full /= batnum; - if ((full == 100) && have_power) - { - time_left = -1; - } - if (time_left < 1) time_left = -1; - - _batman_update(inst, full, time_left, have_battery, have_power); -} - -static Eina_Bool -_screensaver_on(void *data) -{ -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - Instance *inst = data; -#else - (void)data; -#endif - -#if defined(HAVE_EEZE) - _batman_udev_stop(inst); -#elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - _batman_sysctl_stop(inst); -#elif defined(upower) - _batman_upower_stop(); -#else - _batman_fallback_stop(); -#endif - - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _batman_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -void -_batman_config_updated(Instance *inst) -{ - int ok = 0; - - if (!inst->cfg) return; - - if (inst->cfg->id == -1) - { - _batman_face_level_set(inst->cfg->batman.o_gadget, 1.0); - return; - } - if ((inst->cfg->batman.force_mode == UNKNOWN) || - (inst->cfg->batman.force_mode == SUBSYSTEM)) - { -#if defined(HAVE_EEZE) - ok = _batman_udev_start(inst); -#elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - ok = _batman_sysctl_start(inst); -#else - ok = _batman_upower_start(inst); - if (ok) - upower = EINA_TRUE; -#endif - } - if (ok) return; - - if ((inst->cfg->batman.force_mode == UNKNOWN) || - (inst->cfg->batman.force_mode == NOSUBSYSTEM)) - { - ok = _batman_fallback_start(inst); - } -} - -static void -_warning_popup_dismissed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - E_FREE_FUNC(inst->popup_battery, evas_object_del); - E_FREE_FUNC(inst->warning, evas_object_del); -} - -static Eina_Bool -_batman_cb_warning_popup_timeout(void *data) -{ - Instance *inst; - - inst = data; - elm_ctxpopup_dismiss(inst->warning); - inst->cfg->batman.alert_timer = NULL; - return ECORE_CALLBACK_CANCEL; -} - -static void -_batman_cb_warning_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) -{ - Instance *inst = NULL; - - inst = (Instance *)data; - if ((!inst) || (!inst->warning)) return; - evas_object_hide(inst->warning); -} - -static void -_batman_warning_popup_destroy(Instance *inst) -{ - if (inst->cfg->batman.alert_timer) - { - ecore_timer_del(inst->cfg->batman.alert_timer); - inst->cfg->batman.alert_timer = NULL; - } - if (!inst->warning) return; - elm_ctxpopup_dismiss(inst->warning); -} - -static void -_batman_warning_popup_cb(void *data, unsigned int id) -{ - Instance *inst = data; - - inst->notification_id = id; -} - -static void -_batman_warning_popup(Instance *inst, int t, double percent) -{ - Evas_Object *popup_bg = NULL; - int x, y, w, h; - char buf[4096]; - int hrs = 0, mins = 0; - - if ((!inst) || (inst->warning)) return; - - hrs = (t / 3600); - mins = ((t) / 60 - (hrs * 60)); - if (mins < 0) mins = 0; - snprintf(buf, 4096, _("AC power is recommended. %i:%02i Remaining"), hrs, mins); - - if (inst->cfg->batman.desktop_notifications) - { - E_Notification_Notify n; - memset(&n, 0, sizeof(E_Notification_Notify)); - n.app_name = _("Battery"); - n.replaces_id = 0; - n.icon.icon = "battery-low"; - n.summary = _("Your battery is low!"); - n.body = buf; - n.timeout = inst->cfg->batman.alert_timeout * 1000; - e_notification_client_send(&n, _batman_warning_popup_cb, inst); - return; - } - - inst->warning = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(inst->warning, "noblock"); - evas_object_smart_callback_add(inst->warning, "dismissed", _warning_popup_dismissed, inst); - if (!inst->warning) return; - - popup_bg = elm_layout_add(inst->warning); - inst->popup_battery = elm_layout_add(popup_bg); - - if ((!popup_bg) || (!inst->popup_battery)) - { - elm_ctxpopup_dismiss(inst->warning); - inst->warning = NULL; - return; - } - - e_theme_edje_object_set(popup_bg, "base/theme/gadget/batman/popup", - "e/gadget/batman/popup"); - e_theme_edje_object_set(inst->popup_battery, "base/theme/gadget/batman", - "e/gadget/batman/main"); - if (edje_object_part_exists(elm_layout_edje_get(popup_bg), "e.swallow.batman")) - elm_layout_content_set(popup_bg, "e.swallow.batman", inst->popup_battery); - else - elm_layout_content_set(popup_bg, "battery", inst->popup_battery); - - elm_layout_text_set(popup_bg, "e.text.title", - _("Your battery is low!")); - elm_layout_text_set(popup_bg, "e.text.label", buf); - evas_object_show(inst->popup_battery); - evas_object_show(popup_bg); - - elm_object_content_set(inst->warning, popup_bg); - e_gadget_util_ctxpopup_place(inst->o_main, inst->warning, inst->cfg->batman.o_gadget); - evas_object_layer_set(inst->warning, E_LAYER_POPUP); - evas_object_show(inst->warning); - - evas_object_geometry_get(inst->warning, &x, &y, &w, &h); - evas_object_event_callback_add(inst->warning, EVAS_CALLBACK_MOUSE_UP, - _batman_cb_warning_popup_hide, inst); - - _batman_face_level_set(inst->popup_battery, percent); - edje_object_signal_emit(inst->popup_battery, "e,state,discharging", "e"); - - if ((inst->cfg->batman.alert_timeout > 0) && - (!inst->cfg->batman.alert_timer)) - { - inst->cfg->batman.alert_timer = - ecore_timer_loop_add(inst->cfg->batman.alert_timeout, - _batman_cb_warning_popup_timeout, inst); - } -} - -static void -_batman_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->cfg->batman.o_gadget), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - if (inst->cfg->esm == E_SYSINFO_MODULE_BATMAN) - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); - else - evas_object_size_hint_aspect_set(inst->cfg->batman.o_gadget, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_batman_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - if (inst->cfg->batman.popup) - E_FREE_FUNC(inst->cfg->batman.popup, evas_object_del); - if (inst->cfg->batman.configure) - E_FREE_FUNC(inst->cfg->batman.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->batman.handlers, handler) - ecore_event_handler_del(handler); -#if defined(HAVE_EEZE) - _batman_udev_stop(inst); -#elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - _batman_sysctl_stop(inst); -#elif defined(upower) - _batman_upower_stop(); -#else - _batman_fallback_stop(); -#endif - - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_batman_remove, data); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _batman_removed_cb, inst); - - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_batman_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->batman.popup) - E_FREE_FUNC(inst->cfg->batman.popup, evas_object_del); - if (inst->cfg->batman.configure) - E_FREE_FUNC(inst->cfg->batman.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->batman.handlers, handler) - ecore_event_handler_del(handler); -#if defined(HAVE_EEZE) - _batman_udev_stop(inst); -#elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - _batman_sysctl_stop(inst); -#elif defined(upower) - (void)inst; - _batman_upower_stop(); -#else - (void)inst; - _batman_fallback_stop(); -#endif -} - -static void -_batman_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - e_gadget_configure_cb_set(inst->o_main, _batman_configure_cb); - - inst->cfg->batman.full = -2; - inst->cfg->batman.time_left = -2; - inst->cfg->batman.have_battery = -2; - inst->cfg->batman.have_power = -2; - - inst->cfg->batman.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->batman.o_gadget, - "base/theme/gadget/batman", - "e/gadget/batman/main_vert"); - else - e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/gadget/batman", - "e/gadget/batman/main"); - E_EXPAND(inst->cfg->batman.o_gadget); - E_FILL(inst->cfg->batman.o_gadget); - elm_box_pack_end(inst->o_main, inst->cfg->batman.o_gadget); - evas_object_event_callback_add(inst->cfg->batman.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _batman_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->batman.o_gadget, EVAS_CALLBACK_RESIZE, _batman_resize_cb, inst); - evas_object_show(inst->cfg->batman.o_gadget); - evas_object_smart_callback_del_full(obj, "gadget_created", _batman_created_cb, data); - - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_POWERSAVE_CONFIG_UPDATE, - _powersave_cb_config_update, inst); - - _batman_config_updated(inst); -} - -Evas_Object * -sysinfo_batman_create(Evas_Object *parent, Instance *inst) -{ - inst->cfg->batman.full = -2; - inst->cfg->batman.time_left = -2; - inst->cfg->batman.have_battery = -2; - inst->cfg->batman.have_power = -2; - - inst->cfg->batman.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/gadget/batman", - "e/gadget/batman/main"); - E_EXPAND(inst->cfg->batman.o_gadget); - E_FILL(inst->cfg->batman.o_gadget); - evas_object_event_callback_add(inst->cfg->batman.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _batman_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->batman.o_gadget, EVAS_CALLBACK_RESIZE, _batman_resize_cb, inst); - evas_object_show(inst->cfg->batman.o_gadget); - - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - E_LIST_HANDLER_APPEND(inst->cfg->batman.handlers, E_EVENT_POWERSAVE_CONFIG_UPDATE, - _powersave_cb_config_update, inst); - - _batman_config_updated(inst); - - return inst->cfg->batman.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_BATMAN) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_BATMAN; - ci->batman.poll_interval = 512; - ci->batman.alert = 30; - ci->batman.alert_p = 10; - ci->batman.alert_timeout = 0; - ci->batman.suspend_below = 0; - ci->batman.force_mode = 0; - ci->batman.full = -2; - ci->batman.time_left = -2; - ci->batman.have_battery = -2; - ci->batman.have_power = -2; -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__) - ci->batman.fuzzy = 0; -#endif - ci->batman.desktop_notifications = 0; - ci->batman.configure = NULL; - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -batman_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", _batman_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _batman_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_batman_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} diff --git a/src/modules/sysinfo/batman/batman.h b/src/modules/sysinfo/batman/batman.h deleted file mode 100644 index 70a7b08d8..000000000 --- a/src/modules/sysinfo/batman/batman.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef BATMAN_H -#define BATMAN_H - -#include "../sysinfo.h" - -#define CHECK_NONE 0 -#define CHECK_ACPI 1 -#define CHECK_APM 2 -#define CHECK_PMU 3 -#define CHECK_SYS_ACPI 4 - -#define UNKNOWN 0 -#define NOSUBSYSTEM 1 -#define SUBSYSTEM 2 - -#define SUSPEND 0 -#define HIBERNATE 1 -#define SHUTDOWN 2 - -#define POPUP_DEBOUNCE_CYCLES 2 - -typedef struct _Battery Battery; -typedef struct _Ac_Adapter Ac_Adapter; -typedef struct _Batman_Config Batman_Config; - -struct _Battery -{ - Instance *inst; - const char *udi; -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - Ecore_Poller *poll; -#endif - Eina_Bool present E_BITFIELD; - Eina_Bool charging E_BITFIELD; -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - double last_update; - double percent; - double current_charge; - double design_charge; - double last_full_charge; - double charge_rate; - double time_full; - double time_left; -#else - int percent; - int current_charge; - int design_charge; - int last_full_charge; - int charge_rate; - int time_full; - int time_left; - const char *type; - const char *charge_units; -#endif - const char *technology; - const char *model; - const char *vendor; - Eina_Bool got_prop E_BITFIELD; - Eldbus_Proxy *proxy; - int * mib; -}; - -struct _Ac_Adapter -{ - Instance *inst; - const char *udi; - Eina_Bool present E_BITFIELD; - const char *product; - Eldbus_Proxy *proxy; - int * mib; -}; - -struct _Batman_Config -{ - Instance *inst; - Evas_Object *alert_check; - Evas_Object *alert_desktop; - Evas_Object *alert_time; - Evas_Object *alert_percent; - Evas_Object *alert_timeout; - Evas_Object *general_page; - Evas_Object *alert_page; - Evas_Object *power_page; -}; - -EINTERN Eina_List *_batman_battery_find(const char *udi); -EINTERN Eina_List *_batman_ac_adapter_find(const char *udi); -EINTERN void _batman_update(Instance *inst, int full, int time_left, Eina_Bool have_battery, Eina_Bool have_power); -EINTERN void _batman_device_update(Instance *inst); -/* in batman_fallback.c */ -EINTERN int _batman_fallback_start(Instance *inst); -EINTERN void _batman_fallback_stop(void); -/* end batman_fallback.c */ -#if defined(HAVE_EEZE) -/* in batman_udev.c */ -EINTERN int _batman_udev_start(Instance *inst); -EINTERN void _batman_udev_stop(Instance *inst); -/* end batman_udev.c */ -#elif !defined(__OpenBSD__) && !defined(__DragonFly__) && !defined(__FreeBSD__) && !defined(__NetBSD__) -/* in batman_upower.c */ -EINTERN int _batman_upower_start(Instance *inst); -EINTERN void _batman_upower_stop(void); -/* end batman_upower.c */ -#else -/* in batman_sysctl.c */ -EINTERN int _batman_sysctl_start(Instance *inst); -EINTERN void _batman_sysctl_stop(Instance *inst); -/* end batman_sysctl.c */ -#endif - -EINTERN Evas_Object *batman_configure(Instance *inst); -EINTERN void _batman_config_updated(Instance *inst); - -#endif diff --git a/src/modules/sysinfo/batman/batman_config.c b/src/modules/sysinfo/batman/batman_config.c deleted file mode 100644 index 489e20655..000000000 --- a/src/modules/sysinfo/batman/batman_config.c +++ /dev/null @@ -1,611 +0,0 @@ -#include "batman.h" - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - - E_FREE_FUNC(inst->cfg->batman.configure, evas_object_del); - E_FREE(bc); - e_config_save_queue(); -} - -static void -_config_show_general(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - - evas_object_hide(bc->power_page); - evas_object_hide(bc->alert_page); - evas_object_show(bc->general_page); -} - -static void -_config_show_alert(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - - evas_object_hide(bc->general_page); - evas_object_hide(bc->power_page); - evas_object_show(bc->alert_page); -} - -static void -_config_show_power(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - - evas_object_hide(bc->general_page); - evas_object_hide(bc->alert_page); - evas_object_show(bc->power_page); -} - -static void -_update_suspend_percent(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_slider_value_get(obj); - - inst->cfg->batman.suspend_below = value; - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_update_alert_time(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_slider_value_get(bc->alert_time); - - inst->cfg->batman.alert = value; - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_update_alert_percent(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_slider_value_get(bc->alert_percent); - - inst->cfg->batman.alert_p = value; - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_update_alert_timeout(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_slider_value_get(bc->alert_timeout); - - inst->cfg->batman.alert_timeout = value; - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_check_desktop_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - - inst->cfg->batman.desktop_notifications = elm_check_state_get(bc->alert_desktop); - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_check_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - - if (!elm_check_state_get(bc->alert_check)) - { - elm_object_disabled_set(bc->alert_time, EINA_TRUE); - elm_object_disabled_set(bc->alert_percent, EINA_TRUE); - elm_object_disabled_set(bc->alert_desktop, EINA_TRUE); - elm_object_disabled_set(bc->alert_timeout, EINA_TRUE); - elm_slider_value_set(bc->alert_time, 0); - elm_slider_value_set(bc->alert_percent, 0); - _update_alert_time(bc, NULL, NULL); - _update_alert_percent(bc, NULL, NULL); - } - else - { - elm_object_disabled_set(bc->alert_time, EINA_FALSE); - elm_object_disabled_set(bc->alert_percent, EINA_FALSE); - elm_object_disabled_set(bc->alert_desktop, EINA_FALSE); - elm_object_disabled_set(bc->alert_timeout, EINA_FALSE); - } - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_suspend_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->batman.suspend_method = SUSPEND; - break; - - case 1: - inst->cfg->batman.suspend_method = HIBERNATE; - break; - - case 2: - inst->cfg->batman.suspend_method = SHUTDOWN; - break; - - default: - inst->cfg->batman.suspend_method = SUSPEND; - } - - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_poll_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Batman_Config *bc = data; - Instance *inst = bc->inst; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->batman.poll_interval = 4; - break; - - case 1: - inst->cfg->batman.poll_interval = 8; - break; - - case 2: - inst->cfg->batman.poll_interval = 32; - break; - - case 3: - inst->cfg->batman.poll_interval = 64; - break; - - case 4: - inst->cfg->batman.poll_interval = 256; - break; - - default: - inst->cfg->batman.poll_interval = 32; - } - - e_config_save_queue(); - _batman_config_updated(inst); -} - -static void -_power_management_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Object *popup = data; - - evas_object_del(popup); - e_configure_registry_call("advanced/powermanagement", NULL, NULL); -} - -static void -_icon_theme_file_set(Evas_Object *img, const char *icon) -{ - const char *path = NULL, *k = NULL; - char buf[4096]; - int len = 0; - - if (!icon) - path = NULL; - else if (strncmp(icon, "/", 1) && !ecore_file_exists(icon)) - { - path = efreet_icon_path_find(e_config->icon_theme, icon, 48); - if (!path) - { - if (e_util_strcmp(e_config->icon_theme, "hicolor")) - path = efreet_icon_path_find("hicolor", icon, 48); - } - } - else if (ecore_file_exists(icon)) - { - path = icon; - } - if (!path && icon) - { - snprintf(buf, sizeof(buf), "e/icons/%s", icon); - if (eina_list_count(e_theme_collection_items_find("base/theme/icons", buf))) - { - path = e_theme_edje_file_get("base/theme/icons", buf); - k = buf; - } - else - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - } - else if (!path && !icon) - { - path = e_theme_edje_file_get("base/theme/icons", "e/icons/unknown"); - k = "e/icons/unknown"; - } - - if (path && icon) - { - len = strlen(icon); - if ((len > 4) && (!strcasecmp(icon + len - 4, ".edj"))) - k = "icon"; - } - elm_image_file_set(img, path, k); -} - -Evas_Object * -batman_configure(Instance *inst) -{ - Evas_Object *popup, *tb, *list, *frame, *box, *o, *group, *groupy, *lbl; - Evas_Object *slider, *check, *but, *img; - Elm_Object_Item *it; - Eina_Bool show_alert; - E_Zone *zone = e_zone_current_get(); - Batman_Config *bc = E_NEW(Batman_Config, 1); - - bc->inst = inst; - - if (inst->cfg->batman.alert > 0 || inst->cfg->batman.alert_p > 0) - show_alert = EINA_TRUE; - else - show_alert = EINA_FALSE; - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - lbl = elm_label_add(tb); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("Batman Configuration")); - elm_table_pack(tb, lbl, 0, 0, 2, 1); - evas_object_show(lbl); - - list = elm_list_add(tb); - E_ALIGN(list, 0, EVAS_HINT_FILL); - E_WEIGHT(list, 0, EVAS_HINT_EXPAND); - elm_table_pack(tb, list, 0, 1, 1, 1); - elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(list, 1, 1); - it = elm_list_item_append(list, _("General"), NULL, NULL, - _config_show_general, bc); - elm_list_item_selected_set(it, 1); - it = elm_list_item_append(list, _("Alert"), NULL, NULL, - _config_show_alert, bc); - it = elm_list_item_append(list, _("Power"), NULL, NULL, - _config_show_power, bc); - elm_list_go(list); - evas_object_show(list); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("General")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - bc->general_page = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Update Poll Interval:")); - E_ALIGN(lbl, 0.0, 0.0); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, bc); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, bc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, bc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, bc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, bc); - evas_object_show(o); - - switch (inst->cfg->batman.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Alert")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - bc->alert_page = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - check = elm_check_add(box); - elm_object_text_set(check, _("Show low battery alert")); - elm_check_state_set(check, show_alert); - E_ALIGN(check, 0.0, 0.0); - E_WEIGHT(check, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(check, "changed", _check_changed, bc); - elm_box_pack_end(box, check); - evas_object_show(check); - bc->alert_check = check; - - check = elm_check_add(box); - elm_object_text_set(check, _("Show alert as a desktop notification")); - elm_check_state_set(check, inst->cfg->batman.desktop_notifications); - E_ALIGN(check, 0.0, 0.0); - E_WEIGHT(check, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(check, "changed", _check_desktop_changed, bc); - elm_object_disabled_set(check, !show_alert); - elm_box_pack_end(box, check); - evas_object_show(check); - bc->alert_desktop = check; - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Alert when time left is at:")); - E_ALIGN(lbl, 0.0, 0.0); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - slider = elm_slider_add(box); - elm_slider_unit_format_set(slider, "%1.0f min"); - elm_slider_indicator_format_set(slider, "%1.0f min"); - elm_slider_min_max_set(slider, 0, 60); - elm_slider_value_set(slider, inst->cfg->batman.alert); - elm_slider_step_set(slider, 0.01); - elm_slider_span_size_set(slider, 100); - E_ALIGN(slider, 0.0, 0.0); - E_WEIGHT(slider, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(slider, "delay,changed", _update_alert_time, bc); - elm_object_disabled_set(slider, !show_alert); - elm_box_pack_end(box, slider); - evas_object_show(slider); - bc->alert_time = slider; - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Alert when percent left is at:")); - E_ALIGN(lbl, 0.0, 0.0); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - slider = elm_slider_add(box); - elm_slider_unit_format_set(slider, "%1.0f %%"); - elm_slider_indicator_format_set(slider, "%1.0f %%"); - elm_slider_min_max_set(slider, 0, 100); - elm_slider_value_set(slider, inst->cfg->batman.alert_p); - elm_slider_step_set(slider, 0.01); - elm_slider_span_size_set(slider, 100); - E_ALIGN(slider, 0.0, 0.0); - E_WEIGHT(slider, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(slider, "delay,changed", _update_alert_percent, bc); - elm_object_disabled_set(slider, !show_alert); - elm_box_pack_end(box, slider); - evas_object_show(slider); - bc->alert_percent = slider; - - lbl = elm_label_add(box); - elm_object_text_set(lbl, _("Alert timeout:")); - E_ALIGN(lbl, 0.0, 0.0); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - slider = elm_slider_add(box); - elm_slider_unit_format_set(slider, "%1.0f s"); - elm_slider_indicator_format_set(slider, "%1.0f s"); - elm_slider_min_max_set(slider, 1, 300); - elm_slider_value_set(slider, inst->cfg->batman.alert_timeout); - elm_slider_step_set(slider, 0.01); - elm_slider_span_size_set(slider, 100); - E_ALIGN(slider, 0.0, 0.0); - E_WEIGHT(slider, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(slider, "delay,changed", _update_alert_timeout, bc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - bc->alert_timeout = slider; - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Power Management")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - bc->power_page = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Suspend when below:")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _suspend_changed, bc); - evas_object_show(o); - groupy = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, groupy); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Hibernate when below:")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _suspend_changed, bc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, groupy); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Shutdown when below:")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _suspend_changed, bc); - evas_object_show(o); - - switch (inst->cfg->batman.suspend_method) - { - case SUSPEND: - elm_radio_value_set(groupy, 0); - break; - - case HIBERNATE: - elm_radio_value_set(groupy, 1); - break; - - case SHUTDOWN: - elm_radio_value_set(groupy, 2); - break; - - default: - elm_radio_value_set(groupy, 0); - } - - slider = elm_slider_add(box); - elm_slider_unit_format_set(slider, "%1.0f %%"); - elm_slider_indicator_format_set(slider, "%1.0f %%"); - elm_slider_min_max_set(slider, 0, 100); - elm_slider_value_set(slider, inst->cfg->batman.suspend_below); - elm_slider_step_set(slider, 0.05); - elm_slider_span_size_set(slider, 100); - E_ALIGN(slider, 0.0, 0.0); - E_WEIGHT(slider, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(slider, "delay,changed", _update_suspend_percent, bc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - - img = elm_icon_add(box); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - _icon_theme_file_set(img, "preferences-system-power-management"); - evas_object_show(img); - - but = elm_button_add(box); - elm_object_part_content_set(but, "icon", img); - elm_object_text_set(but, _("Power Management Timing")); - E_ALIGN(but, 0.0, 0.0); - E_WEIGHT(but, EVAS_HINT_EXPAND, 0); - E_FILL(but); - evas_object_data_set(but, "popup", popup); - evas_object_smart_callback_add(but, "clicked", _power_management_cb, popup); - elm_box_pack_end(box, but); - evas_object_show(but); - - elm_object_content_set(frame, box); - - _config_show_general(bc, NULL, NULL); - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, bc); - - return inst->cfg->batman.configure = popup; -} - diff --git a/src/modules/sysinfo/batman/batman_fallback.c b/src/modules/sysinfo/batman/batman_fallback.c deleted file mode 100644 index 1e5774547..000000000 --- a/src/modules/sysinfo/batman/batman_fallback.c +++ /dev/null @@ -1,1291 +0,0 @@ -#include "batman.h" - -#if defined(HAVE_CFBASE_H) -# include -# include -# include -# include -# include -# include -# include -#endif - -/* supported battery system schemes - irrespective of OS */ -#define CHECK_NONE 0 -#define CHECK_ACPI 1 -#define CHECK_APM 2 -#define CHECK_PMU 3 -#define CHECK_SYS_CLASS_POWER_SUPPLY 4 - -#define SYS_PWR - -static Ecore_Poller *poller = NULL; - -static int mode = CHECK_NONE; - -static int time_left = -2; -static int battery_full = -2; -static int have_battery = -2; -static int have_power = -2; - -static const char *sys_power_dir = "/sys/class/power_supply"; -static Eina_Bool _batman_fallback_poll_cb(void *data EINA_UNUSED); - -static int -int_file_get(const char *file) -{ - int val = -1; - FILE *f = fopen(file, "r"); - if (f) - { - char buf[256]; - char *str = fgets(buf, sizeof(buf), f); - if (str) val = atoi(str); - fclose(f); - } - return val; -} - -static char * -str_file_get(const char *file) -{ - char *val = NULL; - FILE *f = fopen(file, "r"); - if (f) - { - char buf[4096]; - char *str = fgets(buf, sizeof(buf), f); - if (str) - { - size_t len = strlen(str); - if ((len > 0) && (str[len - 1] == '\n')) - { - len--; - str[len] = 0; - } - val = malloc(len + 1); - if (val) memcpy(val, str, len + 1); - } - fclose(f); - } - return val; -} - -static int -int_get(const char *buf) -{ - const char *p = strchr(buf, ':'); - if (!p) return 0; - p++; - while (*p == ' ') - p++; - return atoi(p); -} - -static char * -str_get(const char *buf) -{ - const char *p = strchr(buf, ':'); - const char *q; - char *ret; - - if (!p) return NULL; - p++; - while (*p == ' ') - p++; - - q = p + strlen(p) - 1; - while ((q > p) && ((*q == ' ') || (*q == '\n'))) - q--; - - if (q < p) return NULL; - q++; - ret = malloc(q - p + 1); - if (!ret) return NULL; - memcpy(ret, p, q - p); - ret[q - p] = '\0'; - return ret; -} - -static char * -file_str_entry_get(FILE *f, - const char *entry) -{ - char buf[4096]; - char *tmp; - - tmp = fgets(buf, sizeof(buf), f); - if (!tmp) - { - EINA_LOG_ERR("unexpected end of file, expected: '%s'", entry); - return NULL; - } - if (strcmp(tmp, entry) != 0) - { - EINA_LOG_ERR("unexpected file entry, expected: '%s'", entry); - return NULL; - } - tmp = str_get(tmp); - if (!tmp) - { - EINA_LOG_ERR("unexpected file entry, missing value for '%s'", entry); - return NULL; - } - return tmp; -} - -#if defined(HAVE_CFBASE_H) /* OS X */ -/***---***/ -static void darwin_init(void); -static void darwin_check(void); - -static void -darwin_init(void) -{ - /* nothing to do */ -} - -static void -darwin_check(void) -{ - const void *values; - int device_num, device_count; - int currentval = 0, maxval = 0; - CFTypeRef blob; - CFArrayRef sources; - CFDictionaryRef device_dict; - - time_left = -1; - battery_full = -1; - have_battery = 0; - have_power = 0; - - /* Retrieve the power source data and the array of sources. */ - blob = IOPSCopyPowerSourcesInfo(); - sources = IOPSCopyPowerSourcesList(blob); - device_count = CFArrayGetCount(sources); - for (device_num = 0; device_num < device_count; device_num++) - { - CFTypeRef ps; - - /* Retrieve a dictionary of values for this device and the count of keys in the dictionary. */ - ps = CFArrayGetValueAtIndex(sources, device_num); - device_dict = IOPSGetPowerSourceDescription(blob, ps); - /* Retrieve the charging key and save the present charging value if one exists. */ - if (CFDictionaryGetValueIfPresent(device_dict, - CFSTR(kIOPSIsChargingKey), &values)) - { - have_battery = 1; - if (CFBooleanGetValue(values) > 0) have_power = 1; - break; - } - } - - if (!have_battery) - { - CFRelease(sources); - CFRelease(blob); - have_power = 1; - return; - } - - /* Retrieve the current capacity key. */ - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSCurrentCapacityKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - /* Retrieve the max capacity key. */ - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSMaxCapacityKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, &maxval); - /* Calculate the percentage charged. */ - battery_full = (currentval * 100) / maxval; - - /* Retrieve the remaining battery power or time until charged in minutes. */ - if (!have_power) - { - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSTimeToEmptyKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - time_left = currentval * 60; - } - else - { - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSTimeToFullChargeKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - time_left = currentval * 60; - } - CFRelease(sources); - CFRelease(blob); -} - -#else - -/***---***/ -/* new linux power class api to get power info - brand new and this code - * may have bugs, but it is a good attempt to get it right */ -#if 0 -static Eina_Bool linux_sys_class_power_supply_cb_event_fd_active(void *data, - Ecore_Fd_Handler *fd_handler); -static void linux_sys_class_power_supply_check(void); -#endif -static void linux_sys_class_power_supply_init(void); - -typedef struct _Sys_Class_Power_Supply_Uevent Sys_Class_Power_Supply_Uevent; - -#define BASIS_CHARGE 1 -#define BASIS_ENERGY 2 -#define BASIS_VOLTAGE 3 - -struct _Sys_Class_Power_Supply_Uevent -{ - char *name; - int fd; - Ecore_Fd_Handler *fd_handler; - - int present; - - int basis; - int basis_empty; - int basis_full; - - unsigned char have_current_avg E_BITFIELD; - unsigned char have_current_now E_BITFIELD; -}; - -static Eina_List *events = NULL; - -#if 0 -static Ecore_Timer *sys_class_delay_check = NULL; - -static Eina_Bool -linux_sys_class_power_supply_cb_delay_check(void *data) -{ - linux_sys_class_power_supply_init(); - _batman_fallback_poll_cb(NULL); - sys_class_delay_check = NULL; - return ECORE_CALLBACK_CANCEL; -} - -static Ecore_Timer *re_init_timer = NULL; - -static Eina_Bool -linux_sys_class_power_supply_cb_re_init(void *data) -{ - Sys_Class_Power_Supply_Uevent *sysev; - - if (events) - { - EINA_LIST_FREE(events, sysev) - { -// if (sysev->fd_handler) -// ecore_main_fd_handler_del(sysev->fd_handler); -// if (sysev->fd >= 0) close(sysev->fd); - E_FREE(sysev->name); - E_FREE(sysev); - } - } - linux_sys_class_power_supply_init(); - re_init_timer = NULL; - return ECORE_CALLBACK_CANCEL; -} - -static Eina_Bool -linux_sys_class_power_supply_cb_event_fd_active(void *data, - Ecore_Fd_Handler *fd_handler) -{ - Sys_Class_Power_Supply_Uevent *sysev; - - sysev = data; - if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) - { - int lost = 0; - for (;; ) - { - char buf[1024]; - int num; - - if ((num = read(sysev->fd, buf, sizeof(buf))) < 1) - { - lost = ((errno == EIO) || - (errno == EBADF) || - (errno == EPIPE) || - (errno == EINVAL) || - (errno == ENOSPC) || - (errno == ENODEV)); - if (num <= 0) break; - } - } - if (lost) - { - events = eina_list_remove(events, sysev); - -// if (sysev->fd_handler) -// ecore_main_fd_handler_del(sysev->fd_handler); -// if (sysev->fd >= 0) close(sysev->fd); - E_FREE(sysev->name); - E_FREE(sysev); - - if (re_init_timer) ecore_timer_del(re_init_timer); - re_init_timer = ecore_timer_loop_add(1.0, linux_sys_class_power_supply_cb_re_init, NULL); - } - else - { - if (sys_class_delay_check) ecore_timer_del(sys_class_delay_check); - sys_class_delay_check = ecore_timer_loop_add(0.2, linux_sys_class_power_supply_cb_delay_check, NULL); - } - } - return ECORE_CALLBACK_CANCEL; -} - -#endif -static void -linux_sys_class_power_supply_sysev_init(Sys_Class_Power_Supply_Uevent *sysev) -{ - char buf[4096]; - const char *dir = sys_power_dir; - - sysev->basis = 0; - sysev->have_current_avg = 0; - sysev->have_current_now = 0; - snprintf(buf, sizeof(buf), "%s/%s/present", dir, sysev->name); - sysev->present = int_file_get(buf); - if (!sysev->present) return; - snprintf(buf, sizeof(buf), "%s/%s/current_avg", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->have_current_avg = 1; - snprintf(buf, sizeof(buf), "%s/%s/current_now", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->have_current_now = 1; - - snprintf(buf, sizeof(buf), "%s/%s/voltage_max", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_VOLTAGE; - snprintf(buf, sizeof(buf), "%s/%s/voltage_max_design", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_VOLTAGE; - - snprintf(buf, sizeof(buf), "%s/%s/energy_full", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_ENERGY; - snprintf(buf, sizeof(buf), "%s/%s/energy_full_design", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_ENERGY; - - snprintf(buf, sizeof(buf), "%s/%s/charge_full", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_CHARGE; - snprintf(buf, sizeof(buf), "%s/%s/charge_full_design", dir, sysev->name); - if (ecore_file_exists(buf)) sysev->basis = BASIS_CHARGE; - - if (sysev->basis == BASIS_CHARGE) - { - snprintf(buf, sizeof(buf), "%s/%s/charge_full", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - snprintf(buf, sizeof(buf), "%s/%s/charge_empty", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - if (sysev->basis_full < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/charge_full_design", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - } - if (sysev->basis_empty < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/charge_empty_design", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - } - } - else if (sysev->basis == BASIS_ENERGY) - { - snprintf(buf, sizeof(buf), "%s/%s/energy_full", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - snprintf(buf, sizeof(buf), "%s/%s/energy_empty", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - if (sysev->basis_full < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/energy_full_design", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - } - if (sysev->basis_empty < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/energy_empty_design", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - } - } - else if (sysev->basis == BASIS_VOLTAGE) - { - snprintf(buf, sizeof(buf), "%s/%s/voltage_max", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - snprintf(buf, sizeof(buf), "%s/%s/voltage_min", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - if (sysev->basis_full < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/voltage_max_design", dir, sysev->name); - sysev->basis_full = int_file_get(buf); - } - if (sysev->basis_empty < 0) - { - snprintf(buf, sizeof(buf), "%s/%s/voltage_min_design", dir, sysev->name); - sysev->basis_empty = int_file_get(buf); - } - } -} - -static int -linux_sys_class_power_supply_is_battery(char *name) -{ - int fd; - int ret = 0; - char buf[256]; - const char *dir = sys_power_dir; - - snprintf(buf, sizeof(buf), "%s/%s/type", dir, name); - fd = open(buf, O_RDONLY); - if (fd < 0) - { - ret = 0; - goto NO_OPEN; - } - else if (read(fd, buf, sizeof(buf)) < 1) - ret = 0; - else if (!strncmp(buf, "Battery", 7)) - ret = 1; - - close(fd); - -NO_OPEN: - return ret; -} - -static void -linux_sys_class_power_supply_init(void) -{ - Eina_List *l; - - if (events) - { - Sys_Class_Power_Supply_Uevent *sysev; - - EINA_LIST_FOREACH(events, l, sysev) - linux_sys_class_power_supply_sysev_init(sysev); - } - else - { - Eina_List *bats; - char *name; -// char buf[4096]; - - bats = ecore_file_ls("/sys/class/power_supply/"); -// bats = ecore_file_ls("./TST"); - if (bats) - { - events = NULL; - - EINA_LIST_FREE(bats, name) - { - Sys_Class_Power_Supply_Uevent *sysev; - - if (!(linux_sys_class_power_supply_is_battery(name))) - { - E_FREE(name); - continue; - } - sysev = (Sys_Class_Power_Supply_Uevent *)calloc(1, sizeof(Sys_Class_Power_Supply_Uevent)); - sysev->name = name; -// snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/uevent", name); -// sysev->fd = open(buf, O_RDONLY); -// if (sysev->fd >= 0) -// sysev->fd_handler = ecore_main_fd_handler_add(sysev->fd, -// ECORE_FD_READ, -// linux_sys_class_power_supply_cb_event_fd_active, -// sysev, -// NULL, NULL); -// - events = eina_list_append(events, sysev); - linux_sys_class_power_supply_sysev_init(sysev); - } - } - } -} - -static void -linux_sys_class_power_supply_check(void) -{ - Eina_List *l; - char *name; - char buf[4096]; - const char *dir = sys_power_dir; - - battery_full = -1; - time_left = -1; - have_battery = 0; - have_power = 0; - - if (events) - { - Sys_Class_Power_Supply_Uevent *sysev; - int total_pwr_now; - int total_pwr_max; - int nofull = 0; - - total_pwr_now = 0; - total_pwr_max = 0; - time_left = 0; - EINA_LIST_FOREACH(events, l, sysev) - { - char *tmp; - int present = 0; - int charging = -1; - int capacity = -1; - int current = -1; - int time_to_full = -1; - int time_to_empty = -1; - int full = -1; - int pwr_now = -1; - int pwr_empty = -1; - int pwr_full = -1; - int pwr = 0; - - name = sysev->name; - - /* fetch more generic info */ - // init - present = sysev->present; - if (!present) continue; - snprintf(buf, sizeof(buf), "%s/%s/capacity", dir, name); - capacity = int_file_get(buf); - if (sysev->have_current_avg) - { - snprintf(buf, sizeof(buf), "%s/%s/current_avg", dir, name); - current = int_file_get(buf); - } - else if (sysev->have_current_now) - { - snprintf(buf, sizeof(buf), "%s/%s/current_now", dir, name); - current = int_file_get(buf); - } - - /* FIXME: do we get a uevent on going from charging to full? - * if so, move this to init */ - snprintf(buf, sizeof(buf), "%s/%s/status", dir, name); - tmp = str_file_get(buf); - if (tmp) - { - full = 0; - if (!strncasecmp("discharging", tmp, 11)) charging = 0; - else if (!strncasecmp("unknown", tmp, 7)) - charging = 0; - else if (!strncasecmp("not charging", tmp, 12)) - charging = 0; - else if (!strncasecmp("charging", tmp, 8)) - charging = 1; - else if (!strncasecmp("full", tmp, 4)) - { - full = 1; - charging = 0; - } - E_FREE(tmp); - } - /* some batteries can/will/want to predict how long they will - * last. if so - take what the battery says. too bad if it's - * wrong. that's a buggy battery or driver */ - if (!full) - { - nofull++; - if (charging) - { - snprintf(buf, sizeof(buf), "%s/%s/time_to_full_now", dir, name); - time_to_full = int_file_get(buf); - } - else - { - snprintf(buf, sizeof(buf), "%s/%s/time_to_empty_now", dir, name); - time_to_empty = int_file_get(buf); - } - } - - /* now get charge, energy and voltage. take the one that provides - * the best info (charge first, then energy, then voltage */ - if (sysev->basis == BASIS_CHARGE) - snprintf(buf, sizeof(buf), "%s/%s/charge_now", dir, name); - else if (sysev->basis == BASIS_ENERGY) - snprintf(buf, sizeof(buf), "%s/%s/energy_now", dir, name); - else if (sysev->basis == BASIS_VOLTAGE) - snprintf(buf, sizeof(buf), "%s/%s/voltage_now", dir, name); - pwr_now = int_file_get(buf); - pwr_empty = sysev->basis_empty; - pwr_full = sysev->basis_full; - if ((sysev->basis == BASIS_VOLTAGE) && - (capacity >= 0)) - { - /* if we use voltage as basis.. we're not very accurate - * so we should prefer capacity readings */ - pwr_empty = -1; - pwr_full = -1; - pwr_now = -1; - } - - if (pwr_empty < 0) pwr_empty = 0; - - if ((pwr_full > 0) && (pwr_full > pwr_empty)) - { - if (full) pwr_now = pwr_full; - else - { - if (pwr_now < 0) - pwr_now = (((long long)capacity * ((long long)pwr_full - (long long)pwr_empty)) / 100) + pwr_empty; - } - - if (sysev->present) have_battery = 1; - if (charging) - { - have_power = 1; - if (time_to_full >= 0) - { - if (time_to_full > time_left) - time_left = time_to_full; - } - else - { - if (current == 0) time_left = 0; - else if (current < 0) - time_left = -1; - else - { - pwr = (((long long)pwr_full - (long long)pwr_now) * 3600) / -current; - if (pwr > time_left) time_left = pwr; - } - } - } - else - { - have_power = 0; - if (time_to_empty >= 0) time_left += time_to_empty; - else - { - if (time_to_empty < 0) - { - if (current > 0) - { - pwr = (((long long)pwr_now - (long long)pwr_empty) * 3600) / current; - time_left += pwr; - } - } - } - } - total_pwr_now += pwr_now - pwr_empty; - total_pwr_max += pwr_full - pwr_empty; - } - /* simple current battery fallback */ - else - { - if (sysev->present) have_battery = 1; - if (charging) have_power = 1; - total_pwr_max = 100; - total_pwr_now = capacity; - if (total_pwr_now < 100) nofull = 1; - } - } - if (total_pwr_max > 0) - battery_full = ((long long)total_pwr_now * 100) / total_pwr_max; - if (nofull == 0) - time_left = -1; - } -} - -/***---***/ -/* "here and now" ACPI based power checking. is there for linux and most - * modern laptops. as of linux 2.6.24 it is replaced with - * linux_sys_class_power_supply_init/check() though as this is the new - * power class api to poll for power stuff - */ -static Eina_Bool linux_acpi_cb_acpid_add(void *data, - int type, - void *event); -static Eina_Bool linux_acpi_cb_acpid_del(void *data, - int type, - void *event); -static Eina_Bool linux_acpi_cb_acpid_data(void *data, - int type, - void *event); -static void linux_acpi_init(void); -static void linux_acpi_check(void); - -static int acpi_max_full = -1; -static int acpi_max_design = -1; -static Ecore_Con_Server *acpid = NULL; -static Ecore_Event_Handler *acpid_handler_add = NULL; -static Ecore_Event_Handler *acpid_handler_del = NULL; -static Ecore_Event_Handler *acpid_handler_data = NULL; -static Ecore_Timer *delay_check = NULL; -static int event_fd = -1; -static Ecore_Fd_Handler *event_fd_handler = NULL; - -static Eina_Bool -linux_acpi_cb_delay_check(void *data EINA_UNUSED) -{ - linux_acpi_init(); - _batman_fallback_poll_cb(NULL); - delay_check = NULL; - return ECORE_CALLBACK_CANCEL; -} - -static Eina_Bool -linux_acpi_cb_acpid_add(void *data EINA_UNUSED, - int type EINA_UNUSED, - void *event EINA_UNUSED) -{ - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -linux_acpi_cb_acpid_del(void *data EINA_UNUSED, - int type EINA_UNUSED, - void *event EINA_UNUSED) -{ - ecore_con_server_del(acpid); - acpid = NULL; - if (acpid_handler_add) ecore_event_handler_del(acpid_handler_add); - acpid_handler_add = NULL; - if (acpid_handler_del) ecore_event_handler_del(acpid_handler_del); - acpid_handler_del = NULL; - if (acpid_handler_data) ecore_event_handler_del(acpid_handler_data); - acpid_handler_data = NULL; - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -linux_acpi_cb_acpid_data(void *data EINA_UNUSED, - int type EINA_UNUSED, - void *event EINA_UNUSED) -{ - if (delay_check) ecore_timer_del(delay_check); - delay_check = ecore_timer_loop_add(0.2, linux_acpi_cb_delay_check, NULL); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -linux_acpi_cb_event_fd_active(void *data EINA_UNUSED, - Ecore_Fd_Handler *fd_handler) -{ - if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) - { - int lost = 0; - for (;; ) - { - char buf[1024]; - int num; - - if ((num = read(event_fd, buf, sizeof(buf))) < 1) - { - lost = ((errno == EIO) || - (errno == EBADF) || - (errno == EPIPE) || - (errno == EINVAL) || - (errno == ENOSPC)); - if (num == 0) break; - } - } - if (lost) - { - ecore_main_fd_handler_del(event_fd_handler); - event_fd_handler = NULL; - close(event_fd); - event_fd = -1; - } - else - { - if (delay_check) ecore_timer_del(delay_check); - delay_check = ecore_timer_loop_add(0.2, linux_acpi_cb_delay_check, NULL); - } - } - return ECORE_CALLBACK_RENEW; -} - -static void -linux_acpi_init(void) -{ - Eina_Iterator *powers; - Eina_Iterator *bats; - - bats = eina_file_direct_ls("/proc/acpi/battery"); - if (bats) - { - Eina_File_Direct_Info *info; - FILE *f; - char *tmp; - char buf[(PATH_MAX * 2) + 128]; - - have_power = 0; - powers = eina_file_direct_ls("/proc/acpi/ac_adapter"); - if (powers) - { - EINA_ITERATOR_FOREACH(powers, info) - { - if (info->name_length + sizeof("/state") >= sizeof(buf)) continue; - snprintf(buf, sizeof(buf), "%s/state", info->path); - f = fopen(buf, "r"); - if (f) - { - /* state */ - tmp = fgets(buf, sizeof(buf), f); - if (tmp) tmp = str_get(tmp); - if (tmp) - { - if (!strcmp(tmp, "on-line")) have_power = 1; - E_FREE(tmp); - } - fclose(f); - } - } - eina_iterator_free(powers); - } - - have_battery = 0; - acpi_max_full = 0; - acpi_max_design = 0; - EINA_ITERATOR_FOREACH(bats, info) - { - snprintf(buf, sizeof(buf), "%s/info", info->path); - f = fopen(buf, "r"); - if (f) - { - /* present */ - tmp = fgets(buf, sizeof(buf), f); - if (tmp) tmp = str_get(tmp); - if (tmp) - { - if (!strcmp(tmp, "yes")) have_battery = 1; - E_FREE(tmp); - } - /* design cap */ - tmp = fgets(buf, sizeof(buf), f); - if (tmp) tmp = str_get(tmp); - if (tmp) - { - if (strcmp(tmp, "unknown")) acpi_max_design += atoi(tmp); - E_FREE(tmp); - } - /* last full cap */ - tmp = fgets(buf, sizeof(buf), f); - if (tmp) tmp = str_get(tmp); - if (tmp) - { - if (strcmp(tmp, "unknown")) acpi_max_full += atoi(tmp); - E_FREE(tmp); - } - fclose(f); - } - } - - eina_iterator_free(bats); - } - if (!acpid) - { - acpid = ecore_con_server_connect(ECORE_CON_LOCAL_SYSTEM, - "/var/run/acpid.socket", -1, NULL); - if (acpid) - { - acpid_handler_add = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, - linux_acpi_cb_acpid_add, NULL); - acpid_handler_del = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, - linux_acpi_cb_acpid_del, NULL); - acpid_handler_data = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, - linux_acpi_cb_acpid_data, NULL); - } - else - { - if (event_fd < 0) - { - event_fd = open("/proc/acpi/event", O_RDONLY); - if (event_fd >= 0) - event_fd_handler = ecore_main_fd_handler_add(event_fd, - ECORE_FD_READ, - linux_acpi_cb_event_fd_active, - NULL, - NULL, NULL); - } - } - } -} - -static void -linux_acpi_check(void) -{ - Eina_List *bats; - - battery_full = -1; - time_left = -1; - have_battery = 0; - have_power = 0; - - bats = ecore_file_ls("/proc/acpi/battery"); - if (bats) - { - char *name; - int rate = 0; - int capacity = 0; - - EINA_LIST_FREE(bats, name) - { - char buf[4096]; - char *tmp; - FILE *f; - - snprintf(buf, sizeof(buf), "/proc/acpi/battery/%s/state", name); - E_FREE(name); - f = fopen(buf, "r"); - if (!f) continue; - - tmp = file_str_entry_get(f, "present:"); - if (!tmp) goto fclose_and_continue; - if (!strcasecmp(tmp, "yes")) have_battery = 1; - E_FREE(tmp); - - tmp = file_str_entry_get(f, "capacity state:"); - if (!tmp) goto fclose_and_continue; - E_FREE(tmp); - - tmp = file_str_entry_get(f, "charging state:"); - if (!tmp) goto fclose_and_continue; - if ((have_power == 0) && (!strcasecmp(tmp, "charging"))) - have_power = 1; - E_FREE(tmp); - - tmp = file_str_entry_get(f, "present rate:"); - if (!tmp) goto fclose_and_continue; - if (strcasecmp(tmp, "unknown")) rate += atoi(tmp); - E_FREE(tmp); - - tmp = file_str_entry_get(f, "remaining capacity:"); - if (!tmp) goto fclose_and_continue; - if (strcasecmp(tmp, "unknown")) capacity += atoi(tmp); - E_FREE(tmp); - -fclose_and_continue: - fclose(f); - } - - if (acpi_max_full > 0) - battery_full = 100 * (long long)capacity / acpi_max_full; - else if (acpi_max_design > 0) - battery_full = 100 * (long long)capacity / acpi_max_design; - else - battery_full = -1; - if (rate <= 0) time_left = -1; - else - { - if (have_power) - time_left = (3600 * ((long long)acpi_max_full - (long long)capacity)) / rate; - else - time_left = (3600 * (long long)capacity) / rate; - } - } -} - -/* old school apm support - very old laptops and some devices support this. - * this is here for legacy support and i wouldn't suggest spending any - * effort on it as it is complete below as best i know, but could have missed - * one or 2 things, but not worth fixing */ -static void linux_apm_init(void); -static void linux_apm_check(void); - -static void -linux_apm_init(void) -{ - /* nothing to do */ -} - -static void -linux_apm_check(void) -{ - FILE *f; - char s1[32], s2[32], s3[32], *endptr; - int apm_flags, ac_stat, bat_stat, bat_flags, bat_val, time_val; - - battery_full = -1; - time_left = -1; - have_battery = 0; - have_power = 0; - - f = fopen("/proc/apm", "r"); - if (!f) return; - - if (fscanf(f, "%*s %*s %x %x %x %x %31s %31s %31s", - &apm_flags, &ac_stat, &bat_stat, &bat_flags, s1, s2, s3) != 7) - { - fclose(f); - return; - } - fclose(f); - - bat_val = strtol(s1, &endptr, 10); - if (*endptr != '%') return; - - else if (!strcmp(s3, "min")) - time_val = atoi(s2) * 60; - else time_val = 0; - - if ((bat_flags != 0xff) && (bat_flags & 0x80)) - { - have_battery = 0; - have_power = 0; - battery_full = 100; - time_left = 0; - return; - } - - if (bat_val >= 0) - { - have_battery = 1; - have_power = ac_stat; - battery_full = bat_val; - if (battery_full > 100) battery_full = 100; - if (ac_stat == 1) time_left = -1; - else time_left = time_val; - } - else - { - switch (bat_stat) - { - case 0: /* high */ - have_battery = 1; - have_power = ac_stat; - battery_full = 100; - time_left = -1; - break; - - case 1: /* medium */ - have_battery = 1; - have_power = ac_stat; - battery_full = 50; - time_left = -1; - break; - - case 2: /* low */ - have_battery = 1; - have_power = ac_stat; - battery_full = 25; - time_left = -1; - break; - - case 3: /* charging */ - have_battery = 1; - have_power = ac_stat; - battery_full = 100; - time_left = -1; - break; - } - } -} - -/* for older mac powerbooks. legacy as well like linux_apm_init/check. leave - * it alone unless you have to touch it */ -static void linux_pmu_init(void); -static void linux_pmu_check(void); - -static void -linux_pmu_init(void) -{ - /* nothing to do */ -} - -static void -linux_pmu_check(void) -{ - FILE *f; - char buf[4096]; - Eina_List *bats; - char *name; - int ac = 0; - int charge = 0; - int max_charge = 0; - int seconds = 0; - int curcharge = 0; - int curmax = 0; - - f = fopen("/proc/pmu/info", "r"); - if (f) - { - char *tmp; - /* Skip driver */ - tmp = fgets(buf, sizeof(buf), f); - if (!tmp) - { - EINA_LOG_ERR("no driver info in /proc/pmu/info"); - goto fclose_and_continue; - } - /* Skip firmware */ - tmp = fgets(buf, sizeof(buf), f); - if (!tmp) - { - EINA_LOG_ERR("no firmware info in /proc/pmu/info"); - goto fclose_and_continue; - } - /* Read ac */ - tmp = fgets(buf, sizeof(buf), f); - if (!tmp) - { - EINA_LOG_ERR("no AC info in /proc/pmu/info"); - goto fclose_and_continue; - } - ac = int_get(buf); -fclose_and_continue: - fclose(f); - } - bats = ecore_file_ls("/proc/pmu"); - if (bats) - { - have_battery = 1; - have_power = ac; - EINA_LIST_FREE(bats, name) - { - if (strncmp(name, "battery", 7)) continue; - snprintf(buf, sizeof(buf), "/proc/pmu/%s", name); - f = fopen(buf, "r"); - if (f) - { - int timeleft = 0; - int current = 0; - - while (fgets(buf, sizeof (buf), f)) - { - char *token; - - if ((token = strtok(buf, ":"))) - { - if (!strncmp("charge", token, 6)) - charge = atoi(strtok(0, ": ")); - else if (!strncmp("max_charge", token, 9)) - max_charge = atoi(strtok(0, ": ")); - else if (!strncmp("current", token, 7)) - current = atoi(strtok(0, ": ")); - else if (!strncmp("time rem", token, 8)) - timeleft = atoi(strtok(0, ": ")); - else - strtok(0, ": "); - } - } - curmax += max_charge; - curcharge += charge; - fclose(f); - if (!current) - { - /* Neither charging nor discharging */ - } - else if (!ac) - { - /* When on dc, we are discharging */ - seconds += timeleft; - } - else - { - /* Charging - works in parallel */ - seconds = MAX(timeleft, seconds); - } - } - - E_FREE(name); - } - if (max_charge > 0) battery_full = ((long long)charge * 100) / max_charge; - else battery_full = 0; - time_left = seconds; - } - else - { - have_power = ac; - have_battery = 0; - battery_full = -1; - time_left = -1; - } -} - -#endif - -static Eina_Bool -_batman_fallback_poll_cb(void *data) -{ - Instance *inst = data; - -#if defined(HAVE_CFBASE_H) /* OS X */ - darwin_check(); - return ECORE_CALLBACK_RENEW; -#else - switch (mode) - { - case CHECK_ACPI: - linux_acpi_check(); - break; - - case CHECK_APM: - linux_apm_check(); - break; - - case CHECK_PMU: - linux_pmu_check(); - break; - - case CHECK_SYS_CLASS_POWER_SUPPLY: - linux_sys_class_power_supply_check(); - break; - - default: - battery_full = -1; - time_left = -1; - have_battery = 0; - have_power = 0; - break; - } -#endif - - _batman_update(inst, battery_full, time_left, have_battery, have_power); - - return EINA_TRUE; -} - -static int -dir_has_contents(const char *dir) -{ - Eina_List *bats; - char *file; - int count; - - bats = ecore_file_ls(dir); - - count = eina_list_count(bats); - EINA_LIST_FREE(bats, file) - E_FREE(file); - if (count > 0) return 1; - return 0; -} - -int -_batman_fallback_start(Instance *inst) -{ -#if defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) - return 0; -#elif defined(HAVE_CFBASE_H) /* OS X */ - darwin_init(); -#else - if ((ecore_file_is_dir(sys_power_dir)) && (dir_has_contents(sys_power_dir))) - { - mode = CHECK_SYS_CLASS_POWER_SUPPLY; - linux_sys_class_power_supply_init(); - } - else if (ecore_file_is_dir("/proc/acpi")) /* <= 2.6.24 */ - { - mode = CHECK_ACPI; - linux_acpi_init(); - } - else if (ecore_file_exists("/proc/apm")) - { - mode = CHECK_APM; - linux_apm_init(); - } - else if (ecore_file_is_dir("/proc/pmu")) - { - mode = CHECK_PMU; - linux_pmu_init(); - } -#endif - - poller = ecore_poller_add(ECORE_POLLER_CORE, inst->cfg->batman.poll_interval, _batman_fallback_poll_cb, inst); - - return 1; -} - -void -_batman_fallback_stop(void) -{ - E_FREE_FUNC(poller, ecore_poller_del); -} - diff --git a/src/modules/sysinfo/batman/batman_sysctl.c b/src/modules/sysinfo/batman/batman_sysctl.c deleted file mode 100644 index 39d71d115..000000000 --- a/src/modules/sysinfo/batman/batman_sysctl.c +++ /dev/null @@ -1,398 +0,0 @@ -#include "batman.h" - -#include -#include - -#if defined(__FreeBSD__) || defined(__DragonFly__) -# include -# include -#endif - -#if defined(__OpenBSD__) || defined(__NetBSD__) -# include -# include -#endif - -EINTERN extern Eina_List *batman_device_batteries; -EINTERN extern Eina_List *batman_device_ac_adapters; - -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -static Eina_Bool _batman_sysctl_battery_update_poll(void *data); -static int _batman_sysctl_battery_update(Instance *inst); -#endif - -int -_batman_sysctl_start(Instance *inst) -{ -#if defined(__OpenBSD__) || defined(__NetBSD__) - int mib[] = {CTL_HW, HW_SENSORS, 0, 0, 0}; - int devn, i = 0; - struct sensordev snsrdev; - size_t sdlen = sizeof(struct sensordev); - char name[256]; - - if (eina_list_count(batman_device_batteries) != 0) - { - _batman_sysctl_battery_update(inst); - return 1; - } - - for (devn = 0;; devn++) - { - mib[2] = devn; - if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1) - { - if (errno == ENXIO) - continue; - if (errno == ENOENT) - break; - } - - snprintf(name, sizeof(name), "acpibat%d", i); - if (!strcmp(name, snsrdev.xname)) - { - Battery *bat = E_NEW(Battery, 1); - if (!bat) - return 0; - bat->inst = inst; - bat->udi = eina_stringshare_add(name), - bat->mib = malloc(sizeof(int) * 5); - if (!bat->mib) return 0; - bat->mib[0] = mib[0]; - bat->mib[1] = mib[1]; - bat->mib[2] = mib[2]; - bat->technology = eina_stringshare_add("Unknown"); - bat->model = eina_stringshare_add("Unknown"); - bat->last_update = ecore_time_get(); - bat->vendor = eina_stringshare_add("Unknown"); - bat->poll = ecore_poller_add(ECORE_POLLER_CORE, - inst->cfg->batman.poll_interval, - _batman_sysctl_battery_update_poll, inst); - batman_device_batteries = eina_list_append(batman_device_batteries, bat); - ++i; - } - - if (!strcmp("acpiac0", snsrdev.xname)) - { - Ac_Adapter *ac = E_NEW(Ac_Adapter, 1); - if (!ac) return 0; - ac->inst = inst; - ac->udi = eina_stringshare_add("acpiac0"); - ac->mib = malloc(sizeof(int) * 5); - if (!ac->mib) return 0; - ac->mib[0] = mib[0]; - ac->mib[1] = mib[1]; - ac->mib[2] = mib[2]; - batman_device_ac_adapters = eina_list_append(batman_device_ac_adapters, ac); - } - } -#elif defined(__FreeBSD__) || defined(__DragonFly__) - size_t len; - int i, count, fd; - union acpi_battery_ioctl_arg battio; - - if (eina_list_count(batman_device_batteries) != 0) - { - _batman_sysctl_battery_update(inst); - return 1; - } - - if ((fd = open("/dev/acpi", O_RDONLY)) == -1) - return 0; - - if (ioctl(fd, ACPIIO_BATT_GET_UNITS, &count) == -1) - { - close(fd); - return 0; - } - - for (i = 0; i < count; i++) - { - battio.unit = i; - if (ioctl(fd, ACPIIO_BATT_GET_BIF, &battio) != -1) - { - Battery *bat = E_NEW(Battery, 1); - if (!bat) return 0; - - bat->inst = inst; - bat->last_update = ecore_time_get(); - bat->last_full_charge = battio.bif.lfcap; - bat->model = eina_stringshare_add(battio.bif.model); - bat->vendor = eina_stringshare_add(battio.bif.oeminfo); - bat->technology = eina_stringshare_add(battio.bif.type); - bat->poll = ecore_poller_add(ECORE_POLLER_CORE, - inst->cfg->batman.poll_interval, - _batman_sysctl_battery_update_poll, inst); - - batman_device_batteries = eina_list_append(batman_device_batteries, bat); - } - } - - close(fd); - - if ((sysctlbyname("hw.acpi.acline", NULL, &len, NULL, 0)) != -1) - { - Ac_Adapter *ac = E_NEW(Ac_Adapter, 1); - if (!ac) - return 0; - ac->inst = inst; - ac->mib = malloc(sizeof(int) * 3); - if (!ac->mib) return 0; - len = sizeof(ac->mib); - sysctlnametomib("hw.acpi.acline", ac->mib, &len); - - ac->udi = eina_stringshare_add("hw.acpi.acline"); - - batman_device_ac_adapters = eina_list_append(batman_device_ac_adapters, ac); - } -#endif - _batman_sysctl_battery_update(inst); - - return 1; -} - -void -_batman_sysctl_stop(Instance *inst) -{ - Instance *child; - Eina_List *l; - Battery *bat; - Ac_Adapter *ac; - int bat_num = 0; - - /* This is a dummy battery we return here. */ - if (inst->cfg->batman.have_battery != 1) - { - return; - } - - /* If this is NOT the last batman gadget then we return before - * freeing everything. This is NOT optimal but is allows us to have - * many gadgets and share the same data between multiple batman - * gadget instances. The instance will be deleted. - */ - - EINA_LIST_FOREACH(sysinfo_instances, l, child) - { - if (inst->cfg->esm == E_SYSINFO_MODULE_BATMAN || - inst->cfg->esm == E_SYSINFO_MODULE_SYSINFO) - { - if (child != inst) - { - bat_num++; - } - } - } - - /* This is not the last batman gadget. */ - if (bat_num > 0) return; - - /* We have no batman or sysinfo gadgets remaining. We can safely - remove these batteries and adapters. */ - - EINA_LIST_FREE(batman_device_ac_adapters, ac) - { - E_FREE_FUNC(ac->udi, eina_stringshare_del); - E_FREE(ac->mib); - E_FREE(ac); - } - - EINA_LIST_FREE(batman_device_batteries, bat) - { - E_FREE_FUNC(bat->udi, eina_stringshare_del); - E_FREE_FUNC(bat->technology, eina_stringshare_del); - E_FREE_FUNC(bat->model, eina_stringshare_del); - E_FREE_FUNC(bat->vendor, eina_stringshare_del); - E_FREE_FUNC(bat->poll, ecore_poller_del); - E_FREE(bat->mib); - E_FREE(bat); - } -} - -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -static Eina_Bool -_batman_sysctl_battery_update_poll(void *data EINA_UNUSED) -{ - Eina_List *l; - Instance *inst; - - /* We need to ensure we update both batman and sysinfo instances. */ - EINA_LIST_FOREACH(sysinfo_instances, l, inst) - { - if (inst->cfg->esm == E_SYSINFO_MODULE_BATMAN || - inst->cfg->esm == E_SYSINFO_MODULE_SYSINFO) - _batman_sysctl_battery_update(inst); - } - - return EINA_TRUE; -} - -#endif - -static int -_batman_sysctl_battery_update(Instance *inst) -{ - Battery *bat; - Ac_Adapter *ac; - Eina_List *l; -#if defined(__OpenBSD__) || defined(__NetBSD__) - double _time, charge; - struct sensor s; - size_t slen = sizeof(struct sensor); -#elif defined(__FreeBSD__) || defined(__DragonFly__) - union acpi_battery_ioctl_arg battio; - size_t len; - int value, fd, i = 0; -#endif - - EINA_LIST_FOREACH(batman_device_batteries, l, bat) - { - /* update the poller interval */ - ecore_poller_poller_interval_set(bat->poll, - inst->cfg->batman.poll_interval); -#if defined(__OpenBSD__) || defined(__NetBSD__) - /* last full capacity */ - bat->mib[3] = 7; - bat->mib[4] = 0; - if (sysctl(bat->mib, 5, &s, &slen, NULL, 0) != -1) - { - bat->last_full_charge = (double)s.value; - } - - /* remaining capacity */ - bat->mib[3] = 7; - bat->mib[4] = 3; - if (sysctl(bat->mib, 5, &s, &slen, NULL, 0) != -1) - { - charge = (double)s.value; - } - - /* This is a workaround because there's an ACPI bug */ - if ((EINA_FLT_EQ(charge, 0.0)) || (EINA_FLT_EQ(bat->last_full_charge, 0.0))) - { - /* last full capacity */ - bat->mib[3] = 8; - bat->mib[4] = 0; - if (sysctl(bat->mib, 5, &s, &slen, NULL, 0) != -1) - { - bat->last_full_charge = (double)s.value; - if (bat->last_full_charge < 0) return EINA_TRUE; - } - - /* remaining capacity */ - bat->mib[3] = 8; - bat->mib[4] = 3; - if (sysctl(bat->mib, 5, &s, &slen, NULL, 0) != -1) - { - charge = (double)s.value; - } - } - - bat->got_prop = 1; - - _time = ecore_time_get(); - if ((bat->got_prop) && (!EINA_FLT_EQ(charge, bat->current_charge))) - bat->charge_rate = ((charge - bat->current_charge) / (_time - bat->last_update)); - bat->last_update = _time; - bat->current_charge = charge; - bat->percent = 100 * (bat->current_charge / bat->last_full_charge); - if (bat->current_charge >= bat->last_full_charge) - bat->percent = 100; - - if (bat->got_prop) - { - if (bat->charge_rate > 0) - { - if (inst->cfg->batman.fuzzy && (++inst->cfg->batman.fuzzcount <= 10) && (bat->time_full > 0)) - bat->time_full = (((bat->last_full_charge - bat->current_charge) / bat->charge_rate) + bat->time_full) / 2; - else - bat->time_full = (bat->last_full_charge - bat->current_charge) / bat->charge_rate; - bat->time_left = -1; - } - else - { - if (inst->cfg->batman.fuzzy && (inst->cfg->batman.fuzzcount <= 10) && (bat->time_left > 0)) - bat->time_left = (((0 - bat->current_charge) / bat->charge_rate) + bat->time_left) / 2; - else - bat->time_left = (0 - bat->current_charge) / bat->charge_rate; - bat->time_full = -1; - } - } - else - { - bat->time_full = -1; - bat->time_left = -1; - } - - /* battery state 1: discharge, 2: charge */ - bat->mib[3] = 10; - bat->mib[4] = 0; - if (sysctl(bat->mib, 5, &s, &slen, NULL, 0) == -1) - { - if (s.value == 2) - bat->charging = 1; - else - bat->charging = 0; - } - _batman_device_update(bat->inst); -#elif defined(__FreeBSD__) || defined(__DragonFly__) - - if ((fd = open("/dev/acpi", O_RDONLY)) != -1) - { - battio.unit = i; - - if (ioctl(fd, ACPIIO_BATT_GET_BATTINFO, &battio) != -1) - { - bat->got_prop = 1; - - bat->percent = battio.battinfo.cap; - - if (battio.battinfo.state & ACPI_BATT_STAT_CHARGING) - bat->charging = EINA_TRUE; - else - bat->charging = EINA_FALSE; - - bat->time_left = battio.battinfo.min * 60; - if (bat->charge_rate > 0) - { - bat->time_full = (bat->last_full_charge - bat->current_charge) / bat->charge_rate; - } - } - else - { - bat->time_full = bat->time_left = -1; - } - - close(fd); - } - - _batman_device_update(inst); - i++; -#endif - } - - EINA_LIST_FOREACH(batman_device_ac_adapters, l, ac) - { -#if defined(__OpenBSD__) || defined(__NetBSD__) - /* AC State */ - ac->mib[3] = 9; - ac->mib[4] = 0; - if (sysctl(ac->mib, 5, &s, &slen, NULL, 0) != -1) - { - if (s.value) - ac->present = 1; - else - ac->present = 0; - } -#elif defined(__FreeBSD__) || defined(__DragonFly__) - len = sizeof(value); - if ((sysctl(ac->mib, 3, &value, &len, NULL, 0)) != -1) - { - ac->present = value; - } -#endif - } - - return EINA_TRUE; -} - diff --git a/src/modules/sysinfo/batman/batman_udev.c b/src/modules/sysinfo/batman/batman_udev.c deleted file mode 100644 index 3281b2a9d..000000000 --- a/src/modules/sysinfo/batman/batman_udev.c +++ /dev/null @@ -1,393 +0,0 @@ -#include "batman.h" - -static void _batman_udev_event_battery(const char *syspath, Eeze_Udev_Event event, void *data, Eeze_Udev_Watch *watch); -static void _batman_udev_event_ac(const char *syspath, Eeze_Udev_Event event, void *data, Eeze_Udev_Watch *watch); -static void _batman_udev_battery_add(const char *syspath, Instance *inst); -static void _batman_udev_ac_add(const char *syspath, Instance *inst); -static void _batman_udev_battery_del(const char *syspath, Instance *inst); -static void _batman_udev_ac_del(const char *syspath, Instance *inst); -static Eina_Bool _batman_udev_battery_update_poll(void *data); -static void _batman_udev_battery_update(const char *syspath, Battery *bat, Instance *inst); -static void _batman_udev_ac_update(const char *syspath, Ac_Adapter *ac, Instance *inst); - -EINTERN extern Eina_List *batman_device_batteries; -EINTERN extern Eina_List *batman_device_ac_adapters; -EINTERN extern double batman_init_time; - -int -_batman_udev_start(Instance *inst) -{ - Eina_List *devices; - const char *dev; - - devices = eeze_udev_find_by_type(EEZE_UDEV_TYPE_POWER_BAT, NULL); - EINA_LIST_FREE(devices, dev) - _batman_udev_battery_add(dev, inst); - - devices = eeze_udev_find_by_type(EEZE_UDEV_TYPE_POWER_AC, NULL); - EINA_LIST_FREE(devices, dev) - _batman_udev_ac_add(dev, inst); - - if (!inst->cfg->batman.batwatch) - inst->cfg->batman.batwatch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_BAT, EEZE_UDEV_EVENT_NONE, _batman_udev_event_battery, inst); - if (!inst->cfg->batman.acwatch) - inst->cfg->batman.acwatch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_AC, EEZE_UDEV_EVENT_NONE, _batman_udev_event_ac, inst); - - batman_init_time = ecore_time_get(); - return 1; -} - -void -_batman_udev_stop(Instance *inst) -{ - Ac_Adapter *ac; - Battery *bat; - Eina_List *l; - Instance *child; - int bat_num = 0; - - /* This is a dummy battery we return here. */ - if (inst->cfg->batman.have_battery != 1) - { - return; - } - - if (inst->cfg->batman.batwatch) - E_FREE_FUNC(inst->cfg->batman.batwatch, eeze_udev_watch_del); - if (inst->cfg->batman.acwatch) - E_FREE_FUNC(inst->cfg->batman.acwatch, eeze_udev_watch_del); - - /* If this is NOT the last batman gadget then we return before - * freeing everything. This is NOT optimal but is allows us to have - * many gadgets and share the same data between multiple batman - * gadget instances. The instance will be deleted. - */ - - EINA_LIST_FOREACH(sysinfo_instances, l, child) - { - if (inst->cfg->esm == E_SYSINFO_MODULE_BATMAN || - inst->cfg->esm == E_SYSINFO_MODULE_SYSINFO) - { - if (child != inst) - { - bat_num++; - } - } - } - - /* This is not the last batman gadget. */ - if (bat_num > 0) return; - - /* We have no batman or sysinfo gadgets remaining. We can safely - remove these batteries and adapters. */ - - EINA_LIST_FREE(batman_device_ac_adapters, ac) - { - E_FREE(ac); - } - EINA_LIST_FREE(batman_device_batteries, bat) - { - eina_stringshare_del(bat->udi); - eina_stringshare_del(bat->technology); - eina_stringshare_del(bat->model); - eina_stringshare_del(bat->vendor); - E_FREE_FUNC(bat->poll, ecore_poller_del); - E_FREE(bat); - } -} - -static void -_batman_udev_event_battery(const char *syspath, Eeze_Udev_Event event, void *data, Eeze_Udev_Watch *watch EINA_UNUSED) -{ - Instance *inst = data; - - if ((event & EEZE_UDEV_EVENT_ADD) || - (event & EEZE_UDEV_EVENT_ONLINE)) - _batman_udev_battery_add(syspath, inst); - else if ((event & EEZE_UDEV_EVENT_REMOVE) || - (event & EEZE_UDEV_EVENT_OFFLINE)) - _batman_udev_battery_del(syspath, inst); - else /* must be change */ - _batman_udev_battery_update(syspath, NULL, inst); -} - -static void -_batman_udev_event_ac(const char *syspath, Eeze_Udev_Event event, void *data, Eeze_Udev_Watch *watch EINA_UNUSED) -{ - Instance *inst = data; - - if ((event & EEZE_UDEV_EVENT_ADD) || - (event & EEZE_UDEV_EVENT_ONLINE)) - _batman_udev_ac_add(syspath, inst); - else if ((event & EEZE_UDEV_EVENT_REMOVE) || - (event & EEZE_UDEV_EVENT_OFFLINE)) - _batman_udev_ac_del(syspath, inst); - else /* must be change */ - _batman_udev_ac_update(syspath, NULL, inst); -} - -static void -_batman_udev_battery_add(const char *syspath, Instance *inst) -{ - Battery *bat; - Eina_List *batteries = _batman_battery_find(syspath), *l; - Eina_Bool exists = EINA_FALSE; - - if (eina_list_count(batteries)) - { - EINA_LIST_FOREACH(batteries, l, bat) - { - if (inst == bat->inst) - { - _batman_udev_battery_update(NULL, bat, inst); - exists = EINA_TRUE; - } - } - if (exists) - { - eina_stringshare_del(syspath); - eina_list_free(batteries); - return; - } - } - - if (!(bat = E_NEW(Battery, 1))) - { - eina_stringshare_del(syspath); - return; - } - bat->inst = inst; - bat->last_update = ecore_time_get(); - bat->udi = eina_stringshare_add(syspath); - bat->poll = ecore_poller_add(ECORE_POLLER_CORE, - bat->inst->cfg->batman.poll_interval, - _batman_udev_battery_update_poll, bat); - batman_device_batteries = eina_list_append(batman_device_batteries, bat); - _batman_udev_battery_update(syspath, bat, inst); -} - -static void -_batman_udev_ac_add(const char *syspath, Instance *inst) -{ - Ac_Adapter *ac; - Eina_List *adapters = _batman_ac_adapter_find(syspath), *l; - Eina_Bool exists = EINA_FALSE; - - if (eina_list_count(adapters)) - { - EINA_LIST_FOREACH(adapters, l, ac) - { - if (inst == ac->inst) - { - _batman_udev_ac_update(NULL, ac, inst); - exists = EINA_TRUE; - } - } - if (exists) - { - eina_stringshare_del(syspath); - eina_list_free(adapters); - return; - } - } - - if (!(ac = E_NEW(Ac_Adapter, 1))) - { - eina_stringshare_del(syspath); - return; - } - ac->inst = inst; - ac->udi = eina_stringshare_add(syspath); - batman_device_ac_adapters = eina_list_append(batman_device_ac_adapters, ac); - _batman_udev_ac_update(syspath, ac, inst); -} - -static void -_batman_udev_battery_del(const char *syspath, Instance *inst) -{ - Battery *bat; - Eina_List *batteries = _batman_battery_find(syspath), *l; - if (!eina_list_count(batteries)) - { - eina_stringshare_del(syspath); - return; - } - - EINA_LIST_FOREACH(batman_device_batteries, l, bat) - { - if ((inst == bat->inst) && (eina_streq(bat->udi, syspath))) - { - batman_device_batteries = eina_list_remove_list(batman_device_batteries, l); - eina_stringshare_del(bat->udi); - eina_stringshare_del(bat->technology); - eina_stringshare_del(bat->model); - eina_stringshare_del(bat->vendor); - E_FREE_FUNC(bat->poll, ecore_poller_del); - E_FREE(bat); - } - } - eina_stringshare_del(syspath); - eina_list_free(batteries); -} - -static void -_batman_udev_ac_del(const char *syspath, Instance *inst) -{ - Ac_Adapter *ac; - Eina_List *adapters = _batman_ac_adapter_find(syspath), *l; - - if (!eina_list_count(adapters)) - { - eina_stringshare_del(syspath); - return; - } - EINA_LIST_FOREACH(batman_device_ac_adapters, l, ac) - { - if (inst == ac->inst) - { - batman_device_ac_adapters = eina_list_remove_list(batman_device_ac_adapters, l); - eina_stringshare_del(ac->udi); - E_FREE(ac); - } - } - eina_stringshare_del(syspath); - eina_list_free(adapters); -} - -static Eina_Bool -_batman_udev_battery_update_poll(void *data) -{ - Battery *bat = data; - - _batman_udev_battery_update(NULL, bat, bat->inst); - - return EINA_TRUE; -} - -#define GET_NUM(TYPE, VALUE, PROP) \ - do \ - { \ - test = eeze_udev_syspath_get_property(TYPE->udi, #PROP); \ - if (test) \ - { \ - TYPE->VALUE = strtod(test, NULL); \ - eina_stringshare_del(test); \ - } \ - } \ - while (0) - -#define GET_STR(TYPE, VALUE, PROP) TYPE->VALUE = eeze_udev_syspath_get_property(TYPE->udi, #PROP) - -static void -_batman_udev_battery_update(const char *syspath, Battery *bat, Instance *inst) -{ - const char *test; - double t, charge; - - if (!bat) - { - _batman_udev_battery_add(syspath, inst); - return; - } - /* update the poller interval */ - ecore_poller_poller_interval_set(bat->poll, bat->inst->cfg->batman.poll_interval); - - GET_NUM(bat, present, POWER_SUPPLY_PRESENT); - if (!bat->got_prop) /* only need to get these once */ - { - GET_STR(bat, technology, POWER_SUPPLY_TECHNOLOGY); - GET_STR(bat, model, POWER_SUPPLY_MODEL_NAME); - GET_STR(bat, vendor, POWER_SUPPLY_MANUFACTURER); - GET_NUM(bat, design_charge, POWER_SUPPLY_ENERGY_FULL_DESIGN); - if (eina_dbl_exact(bat->design_charge, 0)) - GET_NUM(bat, design_charge, POWER_SUPPLY_CHARGE_FULL_DESIGN); - } - GET_NUM(bat, last_full_charge, POWER_SUPPLY_ENERGY_FULL); - if (eina_dbl_exact(bat->last_full_charge, 0)) - GET_NUM(bat, last_full_charge, POWER_SUPPLY_CHARGE_FULL); - test = eeze_udev_syspath_get_property(bat->udi, "POWER_SUPPLY_ENERGY_NOW"); - if (!test) - test = eeze_udev_syspath_get_property(bat->udi, "POWER_SUPPLY_CHARGE_NOW"); - if (test) - { - double charge_rate = 0; - - charge = strtod(test, NULL); - eina_stringshare_del(test); - t = ecore_time_get(); - if ((bat->got_prop) && (!eina_dbl_exact(charge, bat->current_charge)) && (!eina_dbl_exact(bat->current_charge, 0))) - charge_rate = ((charge - bat->current_charge) / (t - bat->last_update)); - if ((!eina_dbl_exact(charge_rate, 0)) || eina_dbl_exact(bat->last_update, 0) || eina_dbl_exact(bat->current_charge, 0)) - { - bat->last_update = t; - bat->current_charge = charge; - bat->charge_rate = charge_rate; - } - bat->percent = 100 * (bat->current_charge / bat->last_full_charge); - if (bat->got_prop) - { - if (bat->charge_rate > 0) - { - if (bat->inst->cfg->batman.fuzzy && (++bat->inst->cfg->batman.fuzzcount <= 10) && (bat->time_full > 0)) - bat->time_full = (((bat->last_full_charge - bat->current_charge) / bat->charge_rate) + bat->time_full) / 2; - else - bat->time_full = (bat->last_full_charge - bat->current_charge) / bat->charge_rate; - bat->time_left = -1; - } - else - { - if (bat->inst->cfg->batman.fuzzy && (bat->inst->cfg->batman.fuzzcount <= 10) && (bat->time_left > 0)) - bat->time_left = (((0 - bat->current_charge) / bat->charge_rate) + bat->time_left) / 2; - else - bat->time_left = (0 - bat->current_charge) / bat->charge_rate; - bat->time_full = -1; - } - } - else - { - bat->time_full = -1; - bat->time_left = -1; - } - } - if (bat->inst->cfg->batman.fuzzcount > 10) bat->inst->cfg->batman.fuzzcount = 0; - test = eeze_udev_syspath_get_property(bat->udi, "POWER_SUPPLY_STATUS"); - if (test) - { - if (!strcmp(test, "Charging")) - bat->charging = 1; - else if ((!strcmp(test, "Unknown")) && (bat->charge_rate > 0)) - bat->charging = 1; - else if ((!strcmp(test, "Unknown")) && (bat->charge_rate <= 0) && (bat->last_full_charge <= 0)) - { - _batman_udev_battery_del(syspath, inst); - eina_stringshare_del(test); - return; - } - else - bat->charging = 0; - eina_stringshare_del(test); - } - else - bat->charging = 0; - if (bat->got_prop) - _batman_device_update(bat->inst); - bat->got_prop = 1; -} - -static void -_batman_udev_ac_update(const char *syspath, Ac_Adapter *ac, Instance *inst) -{ - const char *test; - - if (!ac) - { - _batman_udev_ac_add(syspath, inst); - return; - } - - GET_NUM(ac, present, POWER_SUPPLY_ONLINE); - /* yes, it's really that simple. */ - - _batman_device_update(inst); -} - diff --git a/src/modules/sysinfo/batman/batman_upower.c b/src/modules/sysinfo/batman/batman_upower.c deleted file mode 100644 index 7fe8493d4..000000000 --- a/src/modules/sysinfo/batman/batman_upower.c +++ /dev/null @@ -1,419 +0,0 @@ -#include "batman.h" - -#define BUS "org.freedesktop.UPower" -#define PATH "/org/freedesktop/UPower" -#define IFACE "org.freedesktop.UPower" -# define IFACE_DEVICE "org.freedesktop.UPower.Device" -# define IFACE_PROPERTIES "org.freedesktop.DBus.Properties" - -EINTERN extern Eina_List *batman_device_batteries; -EINTERN extern Eina_List *batman_device_ac_adapters; -EINTERN extern double batman_init_time; - -static Eldbus_Connection *conn; -static Eldbus_Proxy *upower_proxy; -static Eldbus_Proxy *upower_proxy_bat; -static Eldbus_Proxy *upower_proxy_ac; - -typedef struct _Upower_Data Upower_Data; -struct _Upower_Data -{ - Eldbus_Proxy *proxy; - Instance *inst; -}; - -static void -_battery_free(Battery *bat) -{ - Eldbus_Object *obj = eldbus_proxy_object_get(bat->proxy); - eldbus_proxy_unref(bat->proxy); - eldbus_object_unref(obj); - - batman_device_batteries = eina_list_remove(batman_device_batteries, bat); - eina_stringshare_del(bat->udi); - if (bat->model) - eina_stringshare_del(bat->model); - if (bat->vendor) - eina_stringshare_del(bat->vendor); - E_FREE(bat); -} - -static void -_ac_free(Ac_Adapter *ac) -{ - Eldbus_Object *obj = eldbus_proxy_object_get(ac->proxy); - eldbus_proxy_unref(ac->proxy); - eldbus_object_unref(obj); - - batman_device_ac_adapters = eina_list_remove(batman_device_ac_adapters, ac); - eina_stringshare_del(ac->udi); - E_FREE(ac); -} - -static void -_ac_get_all_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Ac_Adapter *ac = data; - Eldbus_Message_Iter *array, *dict, *variant; - - if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) - return; - - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - const char *key; - - if (!eldbus_message_iter_arguments_get(dict, "sv", &key, &variant)) - continue; - - if (!strcmp(key, "Online")) - { - Eina_Bool b; - eldbus_message_iter_arguments_get(variant, "b", &b); - ac->present = b; - break; - } - } - _batman_device_update(ac->inst); -} - -static void -_ac_changed_cb(void *data, const Eldbus_Message *msg EINA_UNUSED) -{ - Ac_Adapter *ac = data; - eldbus_proxy_property_get_all(ac->proxy, _ac_get_all_cb, ac); -} - -static void -_process_ac(Eldbus_Proxy *proxy, Instance *inst) -{ - Ac_Adapter *ac; - ac = E_NEW(Ac_Adapter, 1); - if (!ac) goto error; - ac->inst = inst; - ac->proxy = proxy; - ac->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy))); - eldbus_proxy_property_get_all(proxy, _ac_get_all_cb, ac); - eldbus_proxy_signal_handler_add(upower_proxy_ac, "PropertiesChanged", _ac_changed_cb, ac); - batman_device_ac_adapters = eina_list_append(batman_device_ac_adapters, ac); - return; - -error: - eldbus_object_unref(eldbus_proxy_object_get(proxy)); - eldbus_proxy_unref(proxy); - return; -} - -static const char *bat_techologies[] = { - "Unknown", - "Lithium ion", - "Lithium polymer", - "Lithium iron phosphate", - "Lead acid", - "Nickel cadmium", - "Nickel metal hydride" -}; - -static void -_bat_get_all_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Battery *bat = data; - Eldbus_Message_Iter *array, *dict, *variant; - - bat->got_prop = EINA_TRUE; - if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) - return; - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - const char *key; - union - { - Eina_Bool b; - int64_t i64; - unsigned u; - double d; - const char *s; - } val; - - if (!eldbus_message_iter_arguments_get(dict, "sv", &key, &variant)) - continue; - if (!strcmp(key, "IsPresent")) - { - eldbus_message_iter_arguments_get(variant, "b", &val.b); - bat->present = val.b; - } - else if (!strcmp(key, "TimeToEmpty")) - { - eldbus_message_iter_arguments_get(variant, "x", &val.i64); - bat->time_left = (int)val.i64; - if (bat->time_left > 0) - bat->charging = EINA_FALSE; - else - bat->charging = EINA_TRUE; - } - else if (!strcmp(key, "Percentage")) - { - eldbus_message_iter_arguments_get(variant, "d", &val.d); - bat->percent = (int)val.d; - } - else if (!strcmp(key, "Energy")) - { - eldbus_message_iter_arguments_get(variant, "d", &val.d); - bat->current_charge = (int)val.d; - } - else if (!strcmp(key, "EnergyFullDesign")) - { - eldbus_message_iter_arguments_get(variant, "d", &val.d); - bat->design_charge = (int)val.d; - } - else if (!strcmp(key, "EnergyFull")) - { - eldbus_message_iter_arguments_get(variant, "d", &val.d); - bat->last_full_charge = (int)val.d; - } - else if (!strcmp(key, "TimeToFull")) - { - eldbus_message_iter_arguments_get(variant, "x", &val.i64); - bat->time_full = (int)val.i64; - } - else if (!strcmp(key, "Technology")) - { - eldbus_message_iter_arguments_get(variant, "u", &val.u); - if (val.u > EINA_C_ARRAY_LENGTH(bat_techologies)) - val.u = 0; - bat->technology = bat_techologies[val.u]; - } - else if (!strcmp(key, "Model")) - { - if (!eldbus_message_iter_arguments_get(variant, "s", &val.s)) - continue; - eina_stringshare_replace(&bat->model, val.s); - } - else if (!strcmp(key, "Vendor")) - { - if (!eldbus_message_iter_arguments_get(variant, "s", &val.s)) - continue; - if (bat->vendor) - eina_stringshare_del(bat->vendor); - bat->vendor = eina_stringshare_add(val.s); - } - } - _batman_device_update(bat->inst); -} - -static void -_bat_changed_cb(void *data, const Eldbus_Message *msg EINA_UNUSED) -{ - Battery *bat = data; - eldbus_proxy_property_get_all(bat->proxy, _bat_get_all_cb, bat); -} - -static void -_process_battery(Eldbus_Proxy *proxy, Instance *inst) -{ - Battery *bat; - - bat = E_NEW(Battery, 1); - if (!bat) - { - eldbus_object_unref(eldbus_proxy_object_get(proxy)); - eldbus_proxy_unref(proxy); - return; - } - bat->inst = inst; - bat->proxy = proxy; - bat->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy))); - eldbus_proxy_property_get_all(proxy, _bat_get_all_cb, bat); - eldbus_proxy_signal_handler_add(upower_proxy_bat, "PropertiesChanged", _bat_changed_cb, bat); - batman_device_batteries = eina_list_append(batman_device_batteries, bat); - _batman_device_update(bat->inst); -} - -static void -_device_type_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) -{ - Upower_Data *ud = data; - Eldbus_Message_Iter *variant; - Eldbus_Object *obj; - unsigned int type; - - const char *path = eldbus_pending_path_get (pending); - if (!eldbus_message_arguments_get(msg, "v", &variant)) - goto error; - - eldbus_message_iter_arguments_get(variant, "u", &type); - if (type == 1) - { - obj = eldbus_object_get(conn, BUS, path); - EINA_SAFETY_ON_FALSE_RETURN(obj); - upower_proxy_ac = eldbus_proxy_get(obj, IFACE_PROPERTIES); - _process_ac(ud->proxy, ud->inst); - } - else if (type == 2) - { - obj = eldbus_object_get(conn, BUS, path); - EINA_SAFETY_ON_FALSE_RETURN(obj); - upower_proxy_bat = eldbus_proxy_get(obj, IFACE_PROPERTIES); - _process_battery(ud->proxy, ud->inst); - } - else - goto error; - - E_FREE(ud); - - return; - -error: - obj = eldbus_proxy_object_get(ud->proxy); - eldbus_proxy_unref(ud->proxy); - eldbus_object_unref(obj); - E_FREE(ud); - return; -} - -static void -_process_enumerate_path(const char *path, Instance *inst) -{ - Eldbus_Object *obj; - Eldbus_Proxy *proxy; - Upower_Data *ud; - - obj = eldbus_object_get(conn, BUS, path); - EINA_SAFETY_ON_FALSE_RETURN(obj); - proxy = eldbus_proxy_get(obj, IFACE_DEVICE); - ud = E_NEW(Upower_Data, 1); - if (!ud) - { - eldbus_object_unref(eldbus_proxy_object_get(proxy)); - eldbus_proxy_unref(proxy); - return; - } - ud->proxy = proxy; - ud->inst = inst; - eldbus_proxy_property_get(proxy, "Type", _device_type_cb, ud); -} - -static void -_enumerate_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Instance *inst = data; - const char *path; - Eldbus_Message_Iter *array; - - if (!eldbus_message_arguments_get(msg, "ao", &array)) - return; - - while (eldbus_message_iter_get_and_next(array, 'o', &path)) - _process_enumerate_path(path, inst); -} - -static void -_device_added_cb(void *data, const Eldbus_Message *msg) -{ - const char *path; - Instance *inst = data; - - if (!eldbus_message_arguments_get(msg, "o", &path)) - return; - _process_enumerate_path(path, inst); -} - -static void -_device_removed_cb(void *data, const Eldbus_Message *msg) -{ - Battery *bat; - Ac_Adapter *ac; - const char *path; - Instance *inst = data; - Eina_List *batteries, *adapters, *l; - Eina_Bool exists = EINA_FALSE; - - if (!eldbus_message_arguments_get(msg, "o", &path)) - return; - batteries = _batman_battery_find(path); - if (eina_list_count(batteries)) - { - EINA_LIST_FOREACH(batteries, l, bat) - { - if (inst == bat->inst) - { - inst = bat->inst; - _battery_free(bat); - _batman_device_update(inst); - exists = EINA_TRUE; - } - } - if (exists) - { - eina_list_free(batteries); - return; - } - } - exists = EINA_FALSE; - adapters = _batman_ac_adapter_find(path); - if (eina_list_count(adapters)) - { - EINA_LIST_FOREACH(adapters, l, ac) - { - if (ac->inst == inst) - { - inst = ac->inst; - _ac_free(ac); - _batman_device_update(inst); - exists = EINA_TRUE; - } - } - eina_list_free(adapters); - } -} - -int -_batman_upower_start(Instance *inst) -{ - Eldbus_Object *obj; - - conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM); - EINA_SAFETY_ON_NULL_RETURN_VAL(conn, 0); - - obj = eldbus_object_get(conn, BUS, PATH); - EINA_SAFETY_ON_NULL_GOTO(obj, obj_error); - upower_proxy = eldbus_proxy_get(obj, IFACE); - EINA_SAFETY_ON_NULL_GOTO(upower_proxy, proxy_error); - - eldbus_proxy_signal_handler_add(upower_proxy, "DeviceAdded", _device_added_cb, inst); - eldbus_proxy_signal_handler_add(upower_proxy, "DeviceRemoved", _device_removed_cb, inst); - eldbus_proxy_call(upower_proxy, "EnumerateDevices", _enumerate_cb, inst, -1, ""); - return 1; - -proxy_error: - eldbus_object_unref(obj); -obj_error: - eldbus_connection_unref(conn); - return 0; -} - -void -_batman_upower_stop(void) -{ - Eina_List *list, *list2; - Battery *bat; - Ac_Adapter *ac; - Eldbus_Object *obj; - - EINA_LIST_FOREACH_SAFE(batman_device_batteries, list, list2, bat) - E_FREE_FUNC(bat, _battery_free); - EINA_LIST_FOREACH_SAFE(batman_device_ac_adapters, list, list2, ac) - E_FREE_FUNC(ac, _ac_free); - - obj = eldbus_proxy_object_get(upower_proxy); - E_FREE_FUNC(upower_proxy, eldbus_proxy_unref); - E_FREE_FUNC(obj, eldbus_object_unref); - obj = eldbus_proxy_object_get(upower_proxy_ac); - E_FREE_FUNC(upower_proxy_ac, eldbus_proxy_unref); - E_FREE_FUNC(obj, eldbus_object_unref); - obj = eldbus_proxy_object_get(upower_proxy_bat); - E_FREE_FUNC(upower_proxy_bat, eldbus_proxy_unref); - E_FREE_FUNC(obj, eldbus_object_unref); - E_FREE_FUNC(conn, eldbus_connection_unref); -} - diff --git a/src/modules/sysinfo/cpuclock/cpuclock.c b/src/modules/sysinfo/cpuclock/cpuclock.c deleted file mode 100644 index df2cb717d..000000000 --- a/src/modules/sysinfo/cpuclock/cpuclock.c +++ /dev/null @@ -1,1168 +0,0 @@ -#include "cpuclock.h" -#if defined(__OpenBSD__) || defined(__NetBSD__) -#include -#include -#endif - -#if defined(__FreeBSD__) || defined(__DragonFly__) - #include - #include -#endif - -EINTERN void _cpuclock_poll_interval_update(Instance *inst); - -typedef struct _Thread_Config Thread_Config; -struct _Thread_Config -{ - int interval; - Instance *inst; - E_Powersave_Sleeper *sleeper; -}; - -typedef struct _Pstate_Config Pstate_Config; -struct _Pstate_Config -{ - Instance *inst; - int min; - int max; - int turbo; -}; - -static Cpu_Status * -_cpuclock_status_new(void) -{ - Cpu_Status *s; - - s = E_NEW(Cpu_Status, 1); - if (!s) return NULL; - s->active = -1; - return s; -} - -static void -_cpuclock_status_free(Cpu_Status *s) -{ - Eina_List *l; - - if (eina_list_count(s->frequencies)) eina_list_free(s->frequencies); - if (s->governors) - { - for (l = s->governors; l; l = l->next) - E_FREE(l->data); - eina_list_free(s->governors); - } - E_FREE(s->cur_governor); - if (s->orig_governor) eina_stringshare_del(s->orig_governor); - E_FREE(s); -} - -#if defined(__linux__) -static int -_cpuclock_cb_sort(const void *item1, const void *item2) -{ - int a, b; - - a = (long)item1; - b = (long)item2; - if (a < b) return -1; - else if (a > b) - return 1; - return 0; -} - -#endif -void -_cpuclock_set_governor(const char *governor) -{ - e_system_send("cpufreq-governor", "%s", governor); -} - -void -_cpuclock_set_frequency(int frequency) -{ -#if defined(__FreeBSD__) || defined(__DragonFly__) - frequency /= 1000; -#endif - e_system_send("cpufreq-freq", "%i", frequency); -} - -void -_cpuclock_set_pstate(int min, int max, int turbo) -{ - e_system_send("cpufreq-pstate", "%i %i %i", min, max, turbo); -} - -static void -_cpuclock_face_cb_set_frequency(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *src EINA_UNUSED) -{ - Eina_List *l; - int next_frequency = 0; - Instance *inst = data; - - for (l = inst->cfg->cpuclock.status->frequencies; l; l = l->next) - { - if (inst->cfg->cpuclock.status->cur_frequency == (long)l->data) - { - if (!strcmp(emission, "e,action,frequency,increase")) - { - if (l->next) next_frequency = (long)l->next->data; - break; - } - else if (!strcmp(emission, "e,action,frequency,decrease")) - { - if (l->prev) next_frequency = (long)l->prev->data; - break; - } - else - break; - } - } - if (inst->cfg->cpuclock.status->can_set_frequency && next_frequency) - _cpuclock_set_frequency(next_frequency); -} - -static void -_cpuclock_face_cb_set_governor(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *src EINA_UNUSED) -{ - Eina_List *l; - char *next_governor = NULL; - Instance *inst = data; - - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - if (!strcmp(l->data, inst->cfg->cpuclock.status->cur_governor)) - { - if (l->next) - next_governor = l->next->data; - else - next_governor = inst->cfg->cpuclock.status->governors->data; - break; - } - } - if (next_governor) _cpuclock_set_governor(next_governor); -} - -static Eina_Bool -_cpuclock_event_cb_powersave(void *data, int type, void *event) -{ - Instance *inst = data; - E_Event_Powersave_Update *ev; - Eina_List *l; - Eina_Bool has_powersave = EINA_FALSE; - Eina_Bool has_conservative = EINA_FALSE; - - if (type != E_EVENT_POWERSAVE_UPDATE) return ECORE_CALLBACK_PASS_ON; - if (!inst->cfg->cpuclock.auto_powersave) return ECORE_CALLBACK_PASS_ON; - if (inst->cfg->id == -1) return ECORE_CALLBACK_RENEW; - - ev = event; - if (!inst->cfg->cpuclock.status->orig_governor) - inst->cfg->cpuclock.status->orig_governor = eina_stringshare_add(inst->cfg->cpuclock.status->cur_governor); - - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - if (!strcmp(l->data, "conservative")) - has_conservative = EINA_TRUE; - else if (!strcmp(l->data, "powersave")) - has_powersave = EINA_TRUE; - else if (!strcmp(l->data, "interactive")) - has_powersave = EINA_TRUE; - } - - switch (ev->mode) - { - case E_POWERSAVE_MODE_NONE: - case E_POWERSAVE_MODE_LOW: - _cpuclock_set_governor(inst->cfg->cpuclock.status->orig_governor); - eina_stringshare_del(inst->cfg->cpuclock.status->orig_governor); - inst->cfg->cpuclock.status->orig_governor = NULL; - break; - - case E_POWERSAVE_MODE_MEDIUM: - case E_POWERSAVE_MODE_HIGH: - if ((inst->cfg->cpuclock.powersave_governor) || (has_conservative)) - { - if (inst->cfg->cpuclock.powersave_governor) - _cpuclock_set_governor(inst->cfg->cpuclock.powersave_governor); - else - _cpuclock_set_governor("conservative"); - break; - } - EINA_FALLTHROUGH; - /* no break */ - - case E_POWERSAVE_MODE_EXTREME: - default: - if (has_powersave) - _cpuclock_set_governor("powersave"); - break; - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Evas_Object * -_cpuclock_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - return cpuclock_configure(inst); -} - -static void -_cpuclock_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - - inst->cfg->cpuclock.popup = NULL; - inst->cfg->cpuclock.popup_pbar = NULL; -} - -static void -_cpuclock_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->cpuclock.popup = NULL; -} - -static Evas_Object * -_cpuclock_popup_create(Instance *inst) -{ - Evas_Object *popup, *table, *label, *pbar; - double f = inst->cfg->cpuclock.status->cur_frequency; - char buf[4096], text[4096], *u; - - if (f < 1000000) - { - f += 500; - f /= 1000; - u = _("MHz"); - } - else - { - f += 50000; - f /= 1000000; - u = _("GHz"); - } - - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", - _cpuclock_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, - _cpuclock_popup_deleted, inst); - - table = elm_table_add(popup); - E_EXPAND(table); - E_FILL(table); - elm_object_content_set(popup, table); - evas_object_show(table); - - snprintf(text, sizeof(text), "%s", _("Frequency")); - - label = elm_label_add(table); - E_EXPAND(label); - E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, text); - elm_table_pack(table, label, 0, 0, 2, 1); - evas_object_show(label); - - snprintf(buf, sizeof(buf), "%1.1f %s (%d %%%%)", f, u, - inst->cfg->cpuclock.percent); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)inst->cfg->cpuclock.percent / 100); - elm_table_pack(table, pbar, 0, 1, 2, 1); - evas_object_show(pbar); - inst->cfg->cpuclock.popup_pbar = pbar; - - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->cpuclock.o_gadget); - evas_object_show(popup); - - return popup; -} - -static void -_cpuclock_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->cpuclock.popup) - elm_ctxpopup_dismiss(inst->cfg->cpuclock.popup); - else - inst->cfg->cpuclock.popup = _cpuclock_popup_create(inst); - } -} - -void -_cpuclock_config_updated(Instance *inst) -{ - Edje_Message_Int_Set *frequency_msg; - Edje_Message_String_Set *governor_msg; - Eina_List *l; - int i; - unsigned int count; - - if (inst->cfg->id == -1) - { - inst->cfg->cpuclock.status->cur_frequency = 3000000; - inst->cfg->cpuclock.status->can_set_frequency = 1000000; - inst->cfg->cpuclock.status->cur_min_frequency = 500000; - inst->cfg->cpuclock.status->cur_max_frequency = 3500000; - return; - } - if (inst->cfg->cpuclock.status->frequencies) - { - count = eina_list_count(inst->cfg->cpuclock.status->frequencies); - frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * sizeof(int)); - EINA_SAFETY_ON_NULL_RETURN(frequency_msg); - frequency_msg->count = count; - for (l = inst->cfg->cpuclock.status->frequencies, i = 0; l; l = l->next, i++) - frequency_msg->val[i] = (long)l->data; - edje_object_message_send(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), EDJE_MESSAGE_INT_SET, 1, frequency_msg); - E_FREE(frequency_msg); - } - - if (inst->cfg->cpuclock.status->governors) - { - count = eina_list_count(inst->cfg->cpuclock.status->governors); - governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * sizeof(char *)); - governor_msg->count = count; - for (l = inst->cfg->cpuclock.status->governors, i = 0; l; l = l->next, i++) - governor_msg->str[i] = (char *)l->data; - edje_object_message_send(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), EDJE_MESSAGE_STRING_SET, 2, governor_msg); - E_FREE(governor_msg); - } - _cpuclock_poll_interval_update(inst); -} - -static void -_cpuclock_face_update_current(Instance *inst) -{ - Edje_Message_Int_Set *frequency_msg; - Edje_Message_String governor_msg; - - frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (sizeof(int) * 4)); - EINA_SAFETY_ON_NULL_RETURN(frequency_msg); - frequency_msg->count = 5; - frequency_msg->val[0] = inst->cfg->cpuclock.status->cur_frequency; - frequency_msg->val[1] = inst->cfg->cpuclock.status->can_set_frequency; - frequency_msg->val[2] = inst->cfg->cpuclock.status->cur_min_frequency; - frequency_msg->val[3] = inst->cfg->cpuclock.status->cur_max_frequency; - frequency_msg->val[4] = 0; // pad - edje_object_message_send(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), EDJE_MESSAGE_INT_SET, 3, - frequency_msg); - E_FREE(frequency_msg); - if (inst->cfg->cpuclock.tot_min_frequency == 0) - inst->cfg->cpuclock.tot_min_frequency = inst->cfg->cpuclock.status->cur_frequency; - if (inst->cfg->cpuclock.status->cur_frequency > - inst->cfg->cpuclock.tot_max_frequency) - { - inst->cfg->cpuclock.tot_max_frequency = inst->cfg->cpuclock.status->cur_frequency; - inst->cfg->cpuclock.percent = 100; - } - if (inst->cfg->cpuclock.status->cur_frequency < - inst->cfg->cpuclock.tot_min_frequency) - { - inst->cfg->cpuclock.tot_min_frequency = inst->cfg->cpuclock.status->cur_frequency; - inst->cfg->cpuclock.percent = 0; - } - if ((inst->cfg->cpuclock.tot_min_frequency > 0) && - (inst->cfg->cpuclock.tot_max_frequency >= - inst->cfg->cpuclock.tot_min_frequency)) - { - inst->cfg->cpuclock.percent = ((double)(inst->cfg->cpuclock.status->cur_frequency - - inst->cfg->cpuclock.tot_min_frequency) / - (double)(inst->cfg->cpuclock.tot_max_frequency - - inst->cfg->cpuclock.tot_min_frequency)) * 100; - } - else - inst->cfg->cpuclock.percent = 0; - -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - inst->cfg->cpuclock.percent = inst->cfg->cpuclock.status->cur_percent; -#endif - - /* BSD crashes here without the if-condition - * since it has no governors (yet) */ - if (inst->cfg->cpuclock.status->cur_governor) - { - governor_msg.str = inst->cfg->cpuclock.status->cur_governor; - edje_object_message_send(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), EDJE_MESSAGE_STRING, 4, - &governor_msg); - } - - if (inst->cfg->cpuclock.popup) - { - double f = inst->cfg->cpuclock.status->cur_frequency; - char buf[4096], *u; - - if (f < 1000000) - { - f += 500; - f /= 1000; - u = _("MHz"); - } - else - { - f += 50000; - f /= 1000000; - u = _("GHz"); - } - snprintf(buf, sizeof(buf), "%1.1f %s (%d %%%%)", f, u, - inst->cfg->cpuclock.percent); - elm_progressbar_unit_format_set(inst->cfg->cpuclock.popup_pbar, buf); - elm_progressbar_value_set(inst->cfg->cpuclock.popup_pbar, - (float)inst->cfg->cpuclock.percent / 100); - } -} - -static void -_cpuclock_status_check_available(Cpu_Status *s) -{ -#if !defined(__OpenBSD__) - char buf[4096]; - Eina_List *l; -#endif - // FIXME: this assumes all cores accept the same freqs/ might be wrong - -#if defined(__OpenBSD__) - int p; - - if (s->frequencies) - { - eina_list_free(s->frequencies); - s->frequencies = NULL; - } - - /* storing percents */ - p = 100; - s->frequencies = eina_list_append(s->frequencies, (void *)(long int)p); - p = 75; - s->frequencies = eina_list_append(s->frequencies, (void *)(long int)p); - p = 50; - s->frequencies = eina_list_append(s->frequencies, (void *)(long int)p); - p = 25; - s->frequencies = eina_list_append(s->frequencies, (void *)(long int)p); -#elif defined(__FreeBSD__) || defined(__DragonFly__) - int freq; - size_t len = sizeof(buf); - char *pos, *q; - - /* read freq_levels sysctl and store it in freq */ - if (sysctlbyname("dev.cpu.0.freq_levels", buf, &len, NULL, 0) == 0) - { - /* sysctl returns 0 on success */ - if (s->frequencies) - { - eina_list_free(s->frequencies); - s->frequencies = NULL; - } - - /* parse freqs and store the frequencies in s->frequencies */ - pos = buf; - while (pos) - { - q = strchr(pos, '/'); - if (!q) break; - - *q = '\0'; - freq = atoi(pos); - freq *= 1000; - - s->frequencies = eina_list_append(s->frequencies, (void *)(long)freq); - pos = q + 1; - pos = strchr(pos, ' '); - } - } - - /* sort is not necessary because freq_levels is already sorted */ - /* freebsd doesn't have governors */ - if (s->governors) - { - for (l = s->governors; l; l = l->next) - E_FREE(l->data); - eina_list_free(s->governors); - s->governors = NULL; - } -#else - FILE *f; - - f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", "r"); - if (f) - { - char *freq; - - if (s->frequencies) - { - eina_list_free(s->frequencies); - s->frequencies = NULL; - } - - if (fgets(buf, sizeof(buf), f) == NULL) - { - fclose(f); - return; - } - fclose(f); - - freq = strtok(buf, " "); - do - { - if (atoi(freq) != 0) - { - s->frequencies = eina_list_append(s->frequencies, - (void *)(long)atoi(freq)); - } - freq = strtok(NULL, " "); - } - while (freq); - - s->frequencies = eina_list_sort(s->frequencies, - eina_list_count(s->frequencies), - _cpuclock_cb_sort); - } - else - do - { -#define CPUFREQ_SYSFSDIR "/sys/devices/system/cpu/cpu0/cpufreq" - f = fopen(CPUFREQ_SYSFSDIR "/scaling_cur_freq", "r"); - if (!f) break; - fclose(f); - - f = fopen(CPUFREQ_SYSFSDIR "/scaling_driver", "r"); - if (!f) break; - if (fgets(buf, sizeof(buf), f) == NULL) - { - fclose(f); - break; - } - fclose(f); - if (strcmp(buf, "intel_pstate\n")) break; - - if (s->frequencies) - { - eina_list_free(s->frequencies); - s->frequencies = NULL; - } -#define CPUFREQ_ADDF(filename) \ - f = fopen(CPUFREQ_SYSFSDIR filename, "r"); \ - if (f) \ - { \ - if (fgets(buf, sizeof(buf), f) != NULL) \ - s->frequencies = eina_list_append(s->frequencies, \ - (void *)(long)(atoi(buf))); \ - fclose(f); \ - } - CPUFREQ_ADDF("/cpuinfo_min_freq"); - CPUFREQ_ADDF("/cpuinfo_max_freq"); - } - while (0); - - f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors", "r"); - if (f) - { - char *gov; - int len; - - if (s->governors) - { - for (l = s->governors; l; l = l->next) - E_FREE(l->data); - eina_list_free(s->governors); - s->governors = NULL; - } - - if (fgets(buf, sizeof(buf), f) == NULL) - { - fclose(f); - return; - } - fclose(f); - len = strlen(buf); - if (len > 0) - { - gov = buf + len - 1; - while ((gov > buf) && (isspace(*gov))) - { - *gov = 0; - gov--; - } - } - gov = strtok(buf, " "); - do - { - while ((*gov) && (isspace(*gov))) - gov++; - if (strlen(gov) != 0) - s->governors = eina_list_append(s->governors, strdup(gov)); - gov = strtok(NULL, " "); - } - while (gov); - - s->governors = - eina_list_sort(s->governors, eina_list_count(s->governors), - (int (*)(const void *, const void *))strcmp); - } -#endif -} - -static int -_cpuclock_status_check_current(Cpu_Status *s) -{ - int ret = 0; - int frequency = 0; - -#if defined(__OpenBSD__) - size_t len = sizeof(frequency); - int percent, mib[] = {CTL_HW, HW_CPUSPEED}; - s->active = 0; - - _cpuclock_status_check_available(s); - - if (sysctl(mib, 2, &frequency, &len, NULL, 0) == 0) - { - frequency *= 1000; - if (frequency != s->cur_frequency) ret = 1; - s->cur_frequency = frequency; - s->active = 1; - } - - mib[1] = HW_SETPERF; - - if (sysctl(mib, 2, &percent, &len, NULL, 0) == 0) - { - s->cur_percent = percent; - } - - s->can_set_frequency = 1; - s->cur_governor = NULL; - -#elif defined(__FreeBSD__) || defined(__DragonFly__) - float ratio; - size_t len = sizeof(frequency); - s->active = 0; - - _cpuclock_status_check_available(s); - - s->can_set_frequency = eina_list_count(s->frequencies); - - /* frequency is stored in dev.cpu.0.freq */ - if (sysctlbyname("dev.cpu.0.freq", &frequency, &len, NULL, 0) == 0) - { - frequency *= 1000; - if (frequency != s->cur_frequency) ret = 1; - if (!frequency) frequency = 1; - s->cur_frequency = frequency; - s->active = 1; - if (s->can_set_frequency) - { - s->cur_max_frequency = (int) eina_list_nth(s->frequencies, 0); - if (!s->cur_max_frequency) s->cur_max_frequency = 1; - s->cur_min_frequency = (int) eina_list_nth(s->frequencies, eina_list_count(s->frequencies) - 1); - ratio = (s->cur_max_frequency) / 100.0; - s->cur_percent = s->cur_frequency / ratio; - } - } - - s->cur_governor = NULL; - -#else - char buf[4096]; - FILE *f; - int frequency_min = 0x7fffffff; - int frequency_max = 0; - int freqtot = 0; - int i; - - s->active = 0; - - _cpuclock_status_check_available(s); - // average out frequencies of all cores - for (i = 0; i < 64; i++) - { - snprintf(buf, sizeof(buf), "/sys/devices/system/cpu/cpu%i/cpufreq/scaling_cur_freq", i); - f = fopen(buf, "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) == NULL) - { - fclose(f); - continue; - } - fclose(f); - - frequency = atoi(buf); - if (frequency > frequency_max) frequency_max = frequency; - if (frequency < frequency_min) frequency_min = frequency; - freqtot += frequency; - s->active = 1; - } - else - break; - } - if (i < 1) i = 1; - frequency = freqtot / i; - if (frequency != s->cur_frequency) ret = 1; - if (frequency_min != s->cur_min_frequency) ret = 1; - if (frequency_max != s->cur_max_frequency) ret = 1; - s->cur_frequency = frequency; - s->cur_min_frequency = frequency_min; - s->cur_max_frequency = frequency_max; - -// printf("%i | %i %i\n", frequency, frequency_min, frequency_max); - - // FIXME: this assumes all cores are on the same governor - f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r"); - if (f) - { - s->can_set_frequency = 1; - fclose(f); - } - else - { - s->can_set_frequency = 0; - } - - f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "r"); - if (f) - { - char *p; - - if (fgets(buf, sizeof(buf), f) == NULL) - { - fclose(f); - return ret; - } - fclose(f); - - for (p = buf; (*p != 0) && (isalnum(*p)); p++) ; - *p = 0; - - if ((!s->cur_governor) || (strcmp(buf, s->cur_governor))) - { - ret = 1; - - E_FREE(s->cur_governor); - s->cur_governor = strdup(buf); - - for (i = strlen(s->cur_governor) - 1; i >= 0; i--) - { - if (isspace(s->cur_governor[i])) - s->cur_governor[i] = 0; - else - break; - } - } - } - f = fopen("/sys/devices/system/cpu/intel_pstate/min_perf_pct", "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) != NULL) - { - s->pstate_min = atoi(buf); - s->pstate = 1; - } - fclose(f); - } - f = fopen("/sys/devices/system/cpu/intel_pstate/max_perf_pct", "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) != NULL) - { - s->pstate_max = atoi(buf); - s->pstate = 1; - } - fclose(f); - } - f = fopen("/sys/devices/system/cpu/intel_pstate/no_turbo", "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) != NULL) - { - s->pstate_turbo = atoi(buf); - if (s->pstate_turbo) s->pstate_turbo = 0; - else s->pstate_turbo = 1; - s->pstate = 1; - } - fclose(f); - } -#endif - return ret; -} - -static void -_cpuclock_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - if (inst->cfg->esm == E_SYSINFO_MODULE_CPUCLOCK) - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); - else - evas_object_size_hint_aspect_set(inst->cfg->cpuclock.o_gadget, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_cpuclock_cb_frequency_check_main(void *data, Ecore_Thread *th) -{ - Thread_Config *thc = data; - for (;; ) - { - Cpu_Status *status; - - if (ecore_thread_check(th)) break; - status = _cpuclock_status_new(); - if (_cpuclock_status_check_current(status)) - ecore_thread_feedback(th, status); - else - _cpuclock_status_free(status); - if (ecore_thread_check(th)) break; - e_powersave_sleeper_sleep(thc->sleeper, thc->interval); - if (ecore_thread_check(th)) break; - } -} - -static void -_cpuclock_cb_frequency_check_notify(void *data, - Ecore_Thread *th EINA_UNUSED, - void *msg) -{ - Cpu_Status *status = msg; - Eina_Bool freq_changed = EINA_FALSE; - Eina_Bool init_set = EINA_FALSE; - Thread_Config *thc = data; - - if (!thc->inst) return; - if (!thc->inst->cfg) return; - if (thc->inst->cfg->esm != E_SYSINFO_MODULE_CPUCLOCK && thc->inst->cfg->esm != E_SYSINFO_MODULE_SYSINFO) return; - - if ((thc->inst->cfg->cpuclock.status) && (status) && - ( -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - (status->cur_percent != thc->inst->cfg->cpuclock.status->cur_percent) || -#endif - (status->cur_frequency != thc->inst->cfg->cpuclock.status->cur_frequency) || - (status->cur_min_frequency != thc->inst->cfg->cpuclock.status->cur_min_frequency) || - (status->cur_max_frequency != thc->inst->cfg->cpuclock.status->cur_max_frequency) || - (status->can_set_frequency != thc->inst->cfg->cpuclock.status->can_set_frequency))) - freq_changed = EINA_TRUE; - E_FREE_FUNC(thc->inst->cfg->cpuclock.status, _cpuclock_status_free); - thc->inst->cfg->cpuclock.status = status; - if (freq_changed) - { - _cpuclock_face_update_current(thc->inst); - } - if (thc->inst->cfg->cpuclock.status->active == 0) - elm_layout_signal_emit(thc->inst->cfg->cpuclock.o_gadget, "e,state,disabled", "e"); - else if (thc->inst->cfg->cpuclock.status->active == 1) - elm_layout_signal_emit(thc->inst->cfg->cpuclock.o_gadget, "e,state,enabled", "e"); - - if (!init_set) - { - _cpuclock_set_pstate(thc->inst->cfg->cpuclock.pstate_min - 1, - thc->inst->cfg->cpuclock.pstate_max - 1, - thc->inst->cfg->cpuclock.status->pstate_turbo); - init_set = EINA_TRUE; - } -} - -static void -_cpuclock_cb_frequency_check_end(void *data, Ecore_Thread *th EINA_UNUSED) -{ - Thread_Config *thc = data; - - e_powersave_sleeper_free(thc->sleeper); - E_FREE(thc); -} - -EINTERN void -_cpuclock_poll_interval_update(Instance *inst) -{ - Thread_Config *thc; - - if (inst->cfg->cpuclock.frequency_check_thread) - { - ecore_thread_cancel(inst->cfg->cpuclock.frequency_check_thread); - inst->cfg->cpuclock.frequency_check_thread = NULL; - } - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->sleeper = e_powersave_sleeper_new(); - thc->interval = inst->cfg->cpuclock.poll_interval; - inst->cfg->cpuclock.frequency_check_thread = - ecore_thread_feedback_run(_cpuclock_cb_frequency_check_main, - _cpuclock_cb_frequency_check_notify, - _cpuclock_cb_frequency_check_end, - _cpuclock_cb_frequency_check_end, thc, EINA_TRUE); - } - e_config_save_queue(); -} - -static Eina_Bool -_screensaver_on(void *data) -{ - Instance *inst = data; - - if (inst->cfg->cpuclock.frequency_check_thread) - { - ecore_thread_cancel(inst->cfg->cpuclock.frequency_check_thread); - inst->cfg->cpuclock.frequency_check_thread = NULL; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _cpuclock_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -static void -_cpuclock_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - - if (inst->cfg->cpuclock.popup_pbar) - E_FREE_FUNC(inst->cfg->cpuclock.popup_pbar, evas_object_del); - if (inst->cfg->cpuclock.popup) - E_FREE_FUNC(inst->cfg->cpuclock.popup, evas_object_del); - if (inst->cfg->cpuclock.configure) - E_FREE_FUNC(inst->cfg->cpuclock.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->cpuclock.handlers, handler) - ecore_event_handler_del(handler); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpuclock_remove, data); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _cpuclock_removed_cb, inst); - if (inst->cfg->cpuclock.frequency_check_thread) - { - ecore_thread_cancel(inst->cfg->cpuclock.frequency_check_thread); - inst->cfg->cpuclock.frequency_check_thread = NULL; - return; - } - if (inst->cfg->cpuclock.governor) - eina_stringshare_del(inst->cfg->cpuclock.governor); - E_FREE_FUNC(inst->cfg->cpuclock.status, _cpuclock_status_free); - - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_cpuclock_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->cpuclock.popup_pbar) - E_FREE_FUNC(inst->cfg->cpuclock.popup_pbar, evas_object_del); - if (inst->cfg->cpuclock.popup) - E_FREE_FUNC(inst->cfg->cpuclock.popup, evas_object_del); - if (inst->cfg->cpuclock.configure) - E_FREE_FUNC(inst->cfg->cpuclock.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->cpuclock.handlers, handler) - ecore_event_handler_del(handler); - if (inst->cfg->cpuclock.frequency_check_thread) - { - ecore_thread_cancel(inst->cfg->cpuclock.frequency_check_thread); - inst->cfg->cpuclock.frequency_check_thread = NULL; - } - if (inst->cfg->cpuclock.governor) - eina_stringshare_del(inst->cfg->cpuclock.governor); - E_FREE_FUNC(inst->cfg->cpuclock.status, _cpuclock_status_free); -} - -static void -_cpuclock_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - Eina_List *l = NULL; - - e_gadget_configure_cb_set(inst->o_main, _cpuclock_configure_cb); - - if (inst->cfg->cpuclock.pstate_min == 0) inst->cfg->cpuclock.pstate_min = 1; - if (inst->cfg->cpuclock.pstate_max == 0) inst->cfg->cpuclock.pstate_max = 101; - inst->cfg->cpuclock.percent = 0; - inst->cfg->cpuclock.tot_min_frequency = 0; - inst->cfg->cpuclock.tot_max_frequency = 0; - - inst->cfg->cpuclock.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->cpuclock.o_gadget, - "base/theme/gadget/cpuclock", - "e/gadget/cpuclock/main_vert"); - else - e_theme_edje_object_set(inst->cfg->cpuclock.o_gadget, "base/theme/gadget/cpuclock", - "e/gadget/cpuclock/main"); - E_EXPAND(inst->cfg->cpuclock.o_gadget); - E_FILL(inst->cfg->cpuclock.o_gadget); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,governor,next", "*", - _cpuclock_face_cb_set_governor, inst); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,frequency,increase", "*", - _cpuclock_face_cb_set_frequency, inst); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,frequency,decrease", "*", - _cpuclock_face_cb_set_frequency, inst); - evas_object_event_callback_add(inst->cfg->cpuclock.o_gadget, EVAS_CALLBACK_RESIZE, _cpuclock_resize_cb, inst); - elm_box_pack_end(inst->o_main, inst->cfg->cpuclock.o_gadget); - evas_object_event_callback_add(inst->cfg->cpuclock.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _cpuclock_mouse_up_cb, inst); - evas_object_show(inst->cfg->cpuclock.o_gadget); - evas_object_smart_callback_del_full(obj, "gadget_created", _cpuclock_created_cb, data); - - inst->cfg->cpuclock.status = _cpuclock_status_new(); - _cpuclock_status_check_available(inst->cfg->cpuclock.status); - - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_POWERSAVE_UPDATE, _cpuclock_event_cb_powersave, inst); - - _cpuclock_config_updated(inst); - if ((inst->cfg->cpuclock.restore_governor) && (inst->cfg->cpuclock.governor)) - { - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - if (!strcmp(l->data, inst->cfg->cpuclock.governor)) - { - _cpuclock_set_governor(inst->cfg->cpuclock.governor); - break; - } - } - } -} - -Evas_Object * -sysinfo_cpuclock_create(Evas_Object *parent, Instance *inst) -{ - Eina_List *l = NULL; - - if (inst->cfg->cpuclock.pstate_min == 0) inst->cfg->cpuclock.pstate_min = 1; - if (inst->cfg->cpuclock.pstate_max == 0) inst->cfg->cpuclock.pstate_max = 101; - inst->cfg->cpuclock.percent = 0; - inst->cfg->cpuclock.tot_min_frequency = 0; - inst->cfg->cpuclock.tot_max_frequency = 0; - - inst->cfg->cpuclock.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->cpuclock.o_gadget, "base/theme/gadget/cpuclock", - "e/gadget/cpuclock/main"); - E_EXPAND(inst->cfg->cpuclock.o_gadget); - E_FILL(inst->cfg->cpuclock.o_gadget); - evas_object_event_callback_add(inst->cfg->cpuclock.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _cpuclock_mouse_up_cb, inst); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,governor,next", "*", - _cpuclock_face_cb_set_governor, inst); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,frequency,increase", "*", - _cpuclock_face_cb_set_frequency, inst); - edje_object_signal_callback_add(elm_layout_edje_get(inst->cfg->cpuclock.o_gadget), "e,action,frequency,decrease", "*", - _cpuclock_face_cb_set_frequency, inst); - evas_object_event_callback_add(inst->cfg->cpuclock.o_gadget, EVAS_CALLBACK_RESIZE, _cpuclock_resize_cb, inst); - evas_object_show(inst->cfg->cpuclock.o_gadget); - - inst->cfg->cpuclock.status = _cpuclock_status_new(); - _cpuclock_status_check_available(inst->cfg->cpuclock.status); - - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpuclock.handlers, E_EVENT_POWERSAVE_UPDATE, _cpuclock_event_cb_powersave, inst); - - _cpuclock_config_updated(inst); - if ((inst->cfg->cpuclock.restore_governor) && (inst->cfg->cpuclock.governor)) - { - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - if (!strcmp(l->data, inst->cfg->cpuclock.governor)) - { - _cpuclock_set_governor(inst->cfg->cpuclock.governor); - break; - } - } - } - - return inst->cfg->cpuclock.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_CPUCLOCK) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_CPUCLOCK; - ci->cpuclock.poll_interval = 32; - ci->cpuclock.restore_governor = 0; - ci->cpuclock.auto_powersave = 1; - ci->cpuclock.powersave_governor = NULL; - ci->cpuclock.governor = NULL; - ci->cpuclock.pstate_min = 1; - ci->cpuclock.pstate_max = 101; - ci->cpuclock.configure = NULL; - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -cpuclock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", _cpuclock_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _cpuclock_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpuclock_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/cpuclock/cpuclock.h b/src/modules/sysinfo/cpuclock/cpuclock.h deleted file mode 100644 index 911b49b7c..000000000 --- a/src/modules/sysinfo/cpuclock/cpuclock.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CPUCLOCK_H -#define CPUCLOCK_H - -#include "../sysinfo.h" - -typedef struct _Cpuclock_Config Cpuclock_Config; - -struct _Cpuclock_Config -{ - Instance *inst; - Evas_Object *max; - Evas_Object *min; - Evas_Object *general; - Evas_Object *policy; - Evas_Object *saving; - Evas_Object *freq; - Evas_Object *ps; - Eina_List *powersaves; - Eina_Bool frequencies; - Eina_Bool pstate; -}; - - -EINTERN Evas_Object *cpuclock_configure(Instance *inst); -EINTERN void _cpuclock_config_updated(Instance *inst); -EINTERN void _cpuclock_set_governor(const char *governor); -EINTERN void _cpuclock_set_frequency(int frequency); -EINTERN void _cpuclock_set_pstate(int min, int max, int turbo); -#if defined(__OpenBSD__) || defined(__FreeBSD__) -EINTERN int _cpuclock_sysctl_frequency(int new_perf); -#endif - -#endif diff --git a/src/modules/sysinfo/cpuclock/cpuclock_config.c b/src/modules/sysinfo/cpuclock/cpuclock_config.c deleted file mode 100644 index 5477fb84a..000000000 --- a/src/modules/sysinfo/cpuclock/cpuclock_config.c +++ /dev/null @@ -1,633 +0,0 @@ -#include "cpuclock.h" - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - - E_FREE_FUNC(inst->cfg->cpuclock.configure, evas_object_del); - E_FREE_FUNC(cc->powersaves, eina_list_free); - E_FREE(cc); - e_config_save_queue(); -} - -static void -_config_show_general(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - - evas_object_hide(cc->policy); - evas_object_hide(cc->saving); - if (cc->pstate) - evas_object_hide(cc->ps); - if (cc->frequencies) - evas_object_hide(cc->freq); - evas_object_show(cc->general); -} - -static void -_config_show_policy(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - - evas_object_hide(cc->general); - evas_object_hide(cc->saving); - if (cc->pstate) - evas_object_hide(cc->ps); - if (cc->frequencies) - evas_object_hide(cc->freq); - evas_object_show(cc->policy); -} - -static void -_config_show_saving(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - - evas_object_hide(cc->general); - evas_object_hide(cc->policy); - if (cc->pstate) - evas_object_hide(cc->ps); - if (cc->frequencies) - evas_object_hide(cc->freq); - evas_object_show(cc->saving); -} - -static void -_config_show_frequencies(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - - evas_object_hide(cc->general); - evas_object_hide(cc->policy); - evas_object_hide(cc->saving); - if (cc->pstate) - evas_object_hide(cc->ps); - evas_object_show(cc->freq); -} - -static void -_config_show_pstate(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - - evas_object_hide(cc->general); - evas_object_hide(cc->policy); - evas_object_hide(cc->saving); - if (cc->frequencies) - evas_object_hide(cc->freq); - evas_object_show(cc->ps); -} - -static void -_update_max_power(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - int value = elm_slider_value_get(cc->max); - - inst->cfg->cpuclock.pstate_max = value; - _cpuclock_set_pstate(inst->cfg->cpuclock.pstate_min - 1, - inst->cfg->cpuclock.pstate_max - 1, inst->cfg->cpuclock.status->pstate_turbo); - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_update_min_power(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - int value = elm_slider_value_get(cc->min); - - inst->cfg->cpuclock.pstate_min = value; - _cpuclock_set_pstate(inst->cfg->cpuclock.pstate_min - 1, - inst->cfg->cpuclock.pstate_max - 1, inst->cfg->cpuclock.status->pstate_turbo); - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_auto_powersave(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - Eina_List *l = NULL; - Evas_Object *o = NULL; - - inst->cfg->cpuclock.auto_powersave = elm_check_state_get(obj); - EINA_LIST_FOREACH(cc->powersaves, l, o) - elm_object_disabled_set(o, inst->cfg->cpuclock.auto_powersave); - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_restore_governor(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - - inst->cfg->cpuclock.restore_governor = elm_check_state_get(obj); - if ((!inst->cfg->cpuclock.governor) || - (strcmp(inst->cfg->cpuclock.status->cur_governor, inst->cfg->cpuclock.governor))) - { - eina_stringshare_replace(&inst->cfg->cpuclock.governor, inst->cfg->cpuclock.status->cur_governor); - } - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_frequency_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - const char *value = elm_object_text_get(obj); - int frequency = atol(value); - -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - frequency = (int) evas_object_data_get(obj, "frequency"); -#endif - if (frequency > 0) - _cpuclock_set_frequency(frequency); -} - -static void -_powersave_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - const char *value = evas_object_data_get(obj, "governor"); - - if (value) - eina_stringshare_replace(&inst->cfg->cpuclock.powersave_governor, value); - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_governor_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - const char *value = evas_object_data_get(obj, "governor"); - - if (value) - { - eina_stringshare_replace(&inst->cfg->cpuclock.governor, value); - _cpuclock_set_governor(inst->cfg->cpuclock.governor); - } - - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -static void -_poll_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Cpuclock_Config *cc = data; - Instance *inst = cc->inst; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->cpuclock.poll_interval = 4; - break; - - case 1: - inst->cfg->cpuclock.poll_interval = 8; - break; - - case 2: - inst->cfg->cpuclock.poll_interval = 32; - break; - - case 3: - inst->cfg->cpuclock.poll_interval = 64; - break; - - case 4: - inst->cfg->cpuclock.poll_interval = 256; - break; - - default: - inst->cfg->cpuclock.poll_interval = 32; - } - - e_config_save_queue(); - _cpuclock_config_updated(inst); -} - -Evas_Object * -cpuclock_configure(Instance *inst) -{ - Evas_Object *popup, *tb, *frame, *box, *o, *group, *lbl, *slider, *list, *check; - Evas_Object *groupg = NULL, *groups = NULL, *groupf = NULL; - Elm_Object_Item *it; - E_Zone *zone = e_zone_current_get(); - Eina_List *l = NULL; - Cpuclock_Config *cc = E_NEW(Cpuclock_Config, 1); - int i = 0, value = 0; - - cc->inst = inst; - cc->powersaves = NULL; - cc->frequencies = EINA_FALSE; - cc->pstate = EINA_FALSE; - - if ((inst->cfg->cpuclock.status->frequencies) && - (inst->cfg->cpuclock.status->can_set_frequency) && - (!inst->cfg->cpuclock.status->pstate)) - { - cc->frequencies = EINA_TRUE; - } - if ((inst->cfg->cpuclock.status) && (inst->cfg->cpuclock.status->pstate)) - { - cc->pstate = EINA_TRUE; - } - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - lbl = elm_label_add(tb); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("CpuClock Configuration")); - elm_table_pack(tb, lbl, 0, 0, 2, 1); - evas_object_show(lbl); - - list = elm_list_add(tb); - E_ALIGN(list, 0, EVAS_HINT_FILL); - E_WEIGHT(list, 0, EVAS_HINT_EXPAND); - elm_table_pack(tb, list, 0, 1, 1, 1); - elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(list, 1, 1); - it = elm_list_item_append(list, _("General"), NULL, NULL, - _config_show_general, cc); - elm_list_item_selected_set(it, 1); - it = elm_list_item_append(list, _("Power Policy"), NULL, NULL, - _config_show_policy, cc); - it = elm_list_item_append(list, _("Power Saving"), NULL, NULL, - _config_show_saving, cc); - if (cc->pstate) - it = elm_list_item_append(list, _("Power State"), NULL, NULL, - _config_show_pstate, cc); - if (cc->frequencies) - it = elm_list_item_append(list, _("Frequencies"), NULL, NULL, - _config_show_frequencies, cc); - elm_list_go(list); - evas_object_show(list); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("General")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - cc->general = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - lbl = elm_label_add(tb); - E_ALIGN(lbl, 0.0, 0.0); - E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0); - elm_object_text_set(lbl, _("Update Poll Interval")); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, cc); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, cc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, cc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, cc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, cc); - evas_object_show(o); - - switch (inst->cfg->cpuclock.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Power Policy")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - cc->policy = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - i = 0; - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - o = elm_radio_add(box); - elm_radio_state_value_set(o, i); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - if (!strcmp(l->data, "ondemand")) - elm_object_text_set(o, _("Automatic")); - else if (!strcmp(l->data, "conservative")) - elm_object_text_set(o, _("Lower Power Automatic")); - else if (!strcmp(l->data, "interactive")) - elm_object_text_set(o, _("Automatic Interactive")); - else if (!strcmp(l->data, "powersave")) - elm_object_text_set(o, _("Minimum Speed")); - else if (!strcmp(l->data, "performance")) - elm_object_text_set(o, _("Maximum Speed")); - else - elm_object_text_set(o, l->data); - evas_object_data_set(o, "governor", strdup(l->data)); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _governor_changed, cc); - evas_object_show(o); - - if (!strcmp(inst->cfg->cpuclock.status->cur_governor, l->data)) - value = i; - - if (!groupg) - groupg = o; - else - elm_radio_group_add(o, groupg); - i++; - } - if (groupg) - elm_radio_value_set(groupg, value); - - check = elm_check_add(box); - elm_object_text_set(check, _("Restore CPU Power Policy")); - elm_check_state_set(check, inst->cfg->cpuclock.restore_governor); - E_ALIGN(check, 0.0, 0.0); - E_WEIGHT(check, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(check, "changed", _restore_governor, cc); - elm_box_pack_end(box, check); - evas_object_show(check); - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Power Saving")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - cc->saving = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - check = elm_check_add(box); - elm_object_text_set(check, _("Automatic Powersaving")); - elm_check_state_set(check, inst->cfg->cpuclock.auto_powersave); - E_ALIGN(check, 0.0, 0.0); - E_WEIGHT(check, EVAS_HINT_EXPAND, 0); - evas_object_smart_callback_add(check, "changed", _auto_powersave, cc); - elm_box_pack_end(box, check); - evas_object_show(check); - - i = 0; - for (l = inst->cfg->cpuclock.status->governors; l; l = l->next) - { - o = elm_radio_add(box); - elm_radio_state_value_set(o, i); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - if (!strcmp(l->data, "ondemand")) - elm_object_text_set(o, _("Automatic")); - else if (!strcmp(l->data, "conservative")) - elm_object_text_set(o, _("Lower Power Automatic")); - else if (!strcmp(l->data, "interactive")) - elm_object_text_set(o, _("Automatic Interactive")); - else if (!strcmp(l->data, "powersave")) - elm_object_text_set(o, _("Minimum Speed")); - else if (!strcmp(l->data, "performance")) - elm_object_text_set(o, _("Maximum Speed")); - else - elm_object_text_set(o, l->data); - elm_object_disabled_set(o, inst->cfg->cpuclock.auto_powersave); - evas_object_data_set(o, "governor", strdup(l->data)); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _powersave_changed, cc); - evas_object_show(o); - cc->powersaves = eina_list_append(cc->powersaves, o); - - if (inst->cfg->cpuclock.powersave_governor && !strcmp(inst->cfg->cpuclock.powersave_governor, l->data)) - value = i; - - if (!groups) - groups = o; - else - elm_radio_group_add(o, groups); - i++; - } - if (groups) - elm_radio_value_set(groups, value); - - elm_object_content_set(frame, box); - - if (cc->pstate) - { - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Power State")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - cc->ps = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("Maximum Power State:")); - elm_slider_unit_format_set(slider, "%3.0f"); - elm_slider_indicator_format_set(slider, "%3.0f"); - elm_slider_min_max_set(slider, 2, 100); - elm_slider_value_set(slider, inst->cfg->cpuclock.pstate_max); - elm_slider_step_set(slider, 1); - elm_slider_span_size_set(slider, 100); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_max_power, cc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - cc->max = slider; - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("Minimum Power State:")); - elm_slider_unit_format_set(slider, "%3.0f"); - elm_slider_indicator_format_set(slider, "%3.0f"); - elm_slider_min_max_set(slider, 0, 100); - elm_slider_value_set(slider, inst->cfg->cpuclock.pstate_min); - elm_slider_step_set(slider, 1); - elm_slider_span_size_set(slider, 100); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_min_power, cc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - cc->min = slider; - - elm_object_content_set(frame, box); - } - if (cc->frequencies) - { - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Frequencies")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 1, 1, 1, 1); - evas_object_show(frame); - cc->freq = frame; - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - i = 0; - for (l = inst->cfg->cpuclock.status->frequencies; l; l = l->next) - { - char buf[4096]; - int frequency; - - frequency = (long)l->data; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, i); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); -#if defined(__OpenBSD__) - snprintf(buf, sizeof(buf), "%i %%", frequency); -#else - if (frequency < 1000000) - snprintf(buf, sizeof(buf), _("%i MHz"), frequency / 1000); - else - snprintf(buf, sizeof(buf), _("%'.1f GHz"), - frequency / 1000000.); -#endif - elm_object_text_set(o, buf); - evas_object_data_set(o, "frequency", (void *) (long) frequency); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _frequency_changed, cc); - evas_object_show(o); - -#if defined(__OpenBSD__) - if (inst->cfg->cpuclock.status->cur_percent == frequency) - value = i; -#else - if (inst->cfg->cpuclock.status->cur_frequency == frequency) - value = i; -#endif - if (!groupf) - groupf = o; - else - elm_radio_group_add(o, groupf); - i++; - } - if (groupf) - elm_radio_value_set(groupf, value); - - elm_object_content_set(frame, box); - evas_object_hide(cc->freq); - } - if (cc->pstate) - evas_object_hide(cc->ps); - evas_object_hide(cc->policy); - evas_object_hide(cc->saving); - evas_object_show(cc->general); - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, cc); - - return inst->cfg->cpuclock.configure = popup; -} - diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor.c b/src/modules/sysinfo/cpumonitor/cpumonitor.c deleted file mode 100644 index 9618cbad6..000000000 --- a/src/modules/sysinfo/cpumonitor/cpumonitor.c +++ /dev/null @@ -1,502 +0,0 @@ -#include "cpumonitor.h" - -typedef struct _Thread_Config Thread_Config; - -struct _Thread_Config -{ - int interval; - int num_cores; - int percent; - unsigned long total; - unsigned long idle; - Instance *inst; - E_Powersave_Sleeper *sleeper; - Eina_List *cores; -}; - -static void -_cpumonitor_face_update(Thread_Config *thc) -{ - Eina_List *l; - CPU_Core *core; - - EINA_LIST_FOREACH(thc->cores, l, core) - { - Edje_Message_Int_Set *usage_msg; - usage_msg = malloc(sizeof(Edje_Message_Int_Set) + 1 * sizeof(int)); - EINA_SAFETY_ON_NULL_RETURN(usage_msg); - usage_msg->count = 1; - usage_msg->val[0] = core->percent; - edje_object_message_send(elm_layout_edje_get(core->layout), EDJE_MESSAGE_INT_SET, 1, - usage_msg); - E_FREE(usage_msg); - } - if (thc->inst->cfg->cpumonitor.popup) - { - elm_progressbar_value_set(thc->inst->cfg->cpumonitor.popup_pbar, - (float)thc->percent / 100); - } -} - -static Evas_Object * -_cpumonitor_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - return cpumonitor_configure(inst); -} - -static void -_cpumonitor_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->cfg->cpumonitor.popup = NULL; -} - -static void -_cpumonitor_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->cpumonitor.popup = NULL; -} - -static void -_cpumonitor_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Object *popup, *box, *pbar, *label; - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - char text[256]; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->cpumonitor.popup) - { - elm_ctxpopup_dismiss(inst->cfg->cpumonitor.popup); - return; - } - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", _cpumonitor_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _cpumonitor_popup_deleted, inst); - - box = elm_box_add(popup); - E_EXPAND(box); E_FILL(box); - elm_object_content_set(popup, box); - evas_object_show(box); - - snprintf(text, sizeof(text), "%s", _("Total CPU Usage")); - label = elm_label_add(box); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, text); - elm_box_pack_end(box, label); - evas_object_show(label); - - pbar = elm_progressbar_add(box); - E_EXPAND(pbar); E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_value_set(pbar, (float)inst->cfg->cpumonitor.percent / 100); - elm_box_pack_end(box, pbar); - evas_object_show(pbar); - inst->cfg->cpumonitor.popup_pbar = pbar; - - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->cpumonitor.o_gadget); - evas_object_show(popup); - inst->cfg->cpumonitor.popup = popup; - } -} - -static void -_cpumonitor_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Evas_Coord w = 1, h = 1, sw, sh; - Instance *inst = data; - int num_cores = inst->cfg->cpumonitor.cores; - - if (!num_cores || !inst->o_main) return; - - edje_object_parts_extends_calc(elm_layout_edje_get(obj), 0, 0, &w, &h); - evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _cpumonitor_resize_cb, inst); - if (inst->cfg->esm == E_SYSINFO_MODULE_CPUMONITOR) - { - evas_object_geometry_get(inst->o_main, 0, 0, &sw, &sh); - } - else - { - sw = w; - sh = h; - } - if (e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)) == E_GADGET_SITE_ORIENT_VERTICAL) - { - w = sw; - h *= num_cores; - } - else - { - w *= num_cores; - h = sh; - } - if (w < 1) w = 1; - if (h < 1) h = 1; - evas_object_size_hint_aspect_set(inst->cfg->cpumonitor.o_gadget_box, EVAS_ASPECT_CONTROL_BOTH, w, h); - if (inst->cfg->esm == E_SYSINFO_MODULE_CPUMONITOR) - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_cpumonitor_cb_usage_check_main(void *data, Ecore_Thread *th) -{ - Thread_Config *thc = data; - for (;; ) - { - if (ecore_thread_check(th)) break; -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - _cpumonitor_sysctl_getusage(&thc->total, &thc->idle, &thc->percent, thc->cores); -#else - _cpumonitor_proc_getusage(&thc->total, &thc->idle, &thc->percent, thc->cores); -#endif - ecore_thread_feedback(th, NULL); - if (ecore_thread_check(th)) break; - e_powersave_sleeper_sleep(thc->sleeper, thc->interval); - if (ecore_thread_check(th)) break; - } -} - -static void -_cpumonitor_cb_usage_check_notify(void *data, - Ecore_Thread *th EINA_UNUSED, - void *msg EINA_UNUSED) -{ - Thread_Config *thc = data; - - if (!thc->inst || !thc->inst->cfg) return; - if (thc->inst->cfg->esm != E_SYSINFO_MODULE_CPUMONITOR && thc->inst->cfg->esm != E_SYSINFO_MODULE_SYSINFO) return; - thc->inst->cfg->cpumonitor.percent = thc->percent; - _cpumonitor_face_update(thc); -} - -static void -_cpumonitor_cb_usage_check_end(void *data, Ecore_Thread *th EINA_UNUSED) -{ - Thread_Config *thc = data; - CPU_Core *core; - - e_powersave_sleeper_free(thc->sleeper); - EINA_LIST_FREE(thc->cores, core) - E_FREE(core); - E_FREE(thc); -} - -Evas_Object * -_cpumonitor_add_layout(Instance *inst) -{ - Evas_Object *layout; - int orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - layout = elm_layout_add(inst->cfg->cpumonitor.o_gadget_box); - edje_object_update_hints_set(elm_layout_edje_get(layout), EINA_TRUE); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(layout, "base/theme/gadget/cpumonitor", - "e/gadget/cpumonitor/core/main_vert"); - else - e_theme_edje_object_set(layout, "base/theme/gadget/cpumonitor", - "e/gadget/cpumonitor/core/main"); - E_EXPAND(layout); - E_FILL(layout); - elm_box_pack_end(inst->cfg->cpumonitor.o_gadget_box, layout); - evas_object_show(layout); - - return layout; -} - -static void -_cpumonitor_del_layouts(Instance *inst) -{ - elm_box_clear(inst->cfg->cpumonitor.o_gadget_box); -} - -static Eina_Bool -_screensaver_on(void *data) -{ - Instance *inst = data; - - if (!ecore_thread_check(inst->cfg->cpumonitor.usage_check_thread)) - { - _cpumonitor_del_layouts(inst); - ecore_thread_cancel(inst->cfg->cpumonitor.usage_check_thread); - inst->cfg->cpumonitor.usage_check_thread = NULL; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _cpumonitor_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -void -_cpumonitor_config_updated(Instance *inst) -{ - Thread_Config *thc; - CPU_Core *core; - int i = 0; - - if (inst->cfg->id == -1) - { - int percent = 15; - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->total = 0; - thc->idle = 0; - thc->percent = 60; - thc->num_cores = 4; - inst->cfg->cpumonitor.cores = thc->num_cores; - for (i = 0; i < 4; i++) - { - core = E_NEW(CPU_Core, 1); - core->layout = _cpumonitor_add_layout(inst); - if (i == 0) - evas_object_event_callback_add(core->layout, EVAS_CALLBACK_RESIZE, _cpumonitor_resize_cb, inst); - core->percent = percent; - core->total = 0; - core->idle = 0; - thc->cores = eina_list_append(thc->cores, core); - percent += 15; - } - _cpumonitor_face_update(thc); - EINA_LIST_FREE(thc->cores, core) - E_FREE(core); - E_FREE(thc); - } - return; - } - if (!ecore_thread_check(inst->cfg->cpumonitor.usage_check_thread)) - { - _cpumonitor_del_layouts(inst); - ecore_thread_cancel(inst->cfg->cpumonitor.usage_check_thread); - inst->cfg->cpumonitor.usage_check_thread = NULL; - } - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->total = 0; - thc->idle = 0; - thc->percent = 0; - thc->interval = inst->cfg->cpumonitor.poll_interval; - thc->sleeper = e_powersave_sleeper_new(); -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - thc->num_cores = _cpumonitor_sysctl_getcores(); -#else - thc->num_cores = _cpumonitor_proc_getcores(); -#endif - inst->cfg->cpumonitor.cores = thc->num_cores; - for (i = 0; i < thc->num_cores; i++) - { - core = E_NEW(CPU_Core, 1); - core->layout = _cpumonitor_add_layout(inst); - if (i == 0) - evas_object_event_callback_add(core->layout, EVAS_CALLBACK_RESIZE, _cpumonitor_resize_cb, inst); - core->percent = 0; - core->total = 0; - core->idle = 0; - thc->cores = eina_list_append(thc->cores, core); - } - inst->cfg->cpumonitor.usage_check_thread = - ecore_thread_feedback_run(_cpumonitor_cb_usage_check_main, - _cpumonitor_cb_usage_check_notify, - _cpumonitor_cb_usage_check_end, - _cpumonitor_cb_usage_check_end, thc, EINA_TRUE); - } - e_config_save_queue(); -} - -static void -_cpumonitor_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - - if (inst->cfg->cpumonitor.popup) - E_FREE_FUNC(inst->cfg->cpumonitor.popup, evas_object_del); - if (inst->cfg->cpumonitor.configure) - E_FREE_FUNC(inst->cfg->cpumonitor.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->cpumonitor.handlers, handler) - ecore_event_handler_del(handler); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _cpumonitor_removed_cb, inst); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpumonitor_remove, data); - if (!ecore_thread_check(inst->cfg->cpumonitor.usage_check_thread)) - { - _cpumonitor_del_layouts(inst); - ecore_thread_cancel(inst->cfg->cpumonitor.usage_check_thread); - inst->cfg->cpumonitor.usage_check_thread = NULL; - } - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_cpumonitor_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->cpumonitor.popup) - E_FREE_FUNC(inst->cfg->cpumonitor.popup, evas_object_del); - if (inst->cfg->cpumonitor.configure) - E_FREE_FUNC(inst->cfg->cpumonitor.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->cpumonitor.handlers, handler) - ecore_event_handler_del(handler); - if (!ecore_thread_check(inst->cfg->cpumonitor.usage_check_thread)) - { - _cpumonitor_del_layouts(inst); - ecore_thread_cancel(inst->cfg->cpumonitor.usage_check_thread); - inst->cfg->cpumonitor.usage_check_thread = NULL; - } -} - -static void -_cpumonitor_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - int orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - e_gadget_configure_cb_set(inst->o_main, _cpumonitor_configure_cb); - - inst->cfg->cpumonitor.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->cpumonitor.o_gadget, - "base/theme/gadget/cpumonitor", - "e/gadget/cpumonitor/main_vert"); - else - e_theme_edje_object_set(inst->cfg->cpumonitor.o_gadget, - "base/theme/gadget/cpumonitor", - "e/gadget/cpumonitor/main"); - E_EXPAND(inst->cfg->cpumonitor.o_gadget); - E_FILL(inst->cfg->cpumonitor.o_gadget); - elm_box_pack_end(inst->o_main, inst->cfg->cpumonitor.o_gadget); - evas_object_event_callback_add(inst->cfg->cpumonitor.o_gadget, EVAS_CALLBACK_MOUSE_UP, - _cpumonitor_mouse_up_cb, inst); - evas_object_show(inst->cfg->cpumonitor.o_gadget); - - inst->cfg->cpumonitor.o_gadget_box = elm_box_add(inst->cfg->cpumonitor.o_gadget); - elm_box_homogeneous_set(inst->cfg->cpumonitor.o_gadget_box, EINA_TRUE); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - elm_box_horizontal_set(inst->cfg->cpumonitor.o_gadget_box, EINA_FALSE); - else - elm_box_horizontal_set(inst->cfg->cpumonitor.o_gadget_box, EINA_TRUE); - E_EXPAND(inst->cfg->cpumonitor.o_gadget_box); - E_FILL(inst->cfg->cpumonitor.o_gadget_box); - elm_layout_content_set(inst->cfg->cpumonitor.o_gadget, "e.swallow.content", inst->cfg->cpumonitor.o_gadget_box); - evas_object_show(inst->cfg->cpumonitor.o_gadget_box); - - evas_object_smart_callback_del_full(obj, "gadget_created", _cpumonitor_created_cb, data); - - E_LIST_HANDLER_APPEND(inst->cfg->cpumonitor.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpumonitor.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _cpumonitor_config_updated(inst); -} - -Evas_Object * -sysinfo_cpumonitor_create(Evas_Object *parent, Instance *inst) -{ - inst->cfg->cpumonitor.percent = 0; - inst->cfg->cpumonitor.popup = NULL; - inst->cfg->cpumonitor.configure = NULL; - inst->cfg->cpumonitor.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->cpumonitor.o_gadget, - "base/theme/gadget/cpumonitor", - "e/gadget/cpumonitor/main"); - E_EXPAND(inst->cfg->cpumonitor.o_gadget); - E_FILL(inst->cfg->cpumonitor.o_gadget); - evas_object_event_callback_add(inst->cfg->cpumonitor.o_gadget, EVAS_CALLBACK_MOUSE_UP, - _cpumonitor_mouse_up_cb, inst); - evas_object_show(inst->cfg->cpumonitor.o_gadget); - - inst->cfg->cpumonitor.o_gadget_box = elm_box_add(inst->cfg->cpumonitor.o_gadget); - elm_box_homogeneous_set(inst->cfg->cpumonitor.o_gadget_box, EINA_TRUE); - elm_box_horizontal_set(inst->cfg->cpumonitor.o_gadget_box, EINA_TRUE); - E_EXPAND(inst->cfg->cpumonitor.o_gadget_box); - E_FILL(inst->cfg->cpumonitor.o_gadget_box); - elm_layout_content_set(inst->cfg->cpumonitor.o_gadget, "e.swallow.content", inst->cfg->cpumonitor.o_gadget_box); - evas_object_show(inst->cfg->cpumonitor.o_gadget_box); - - E_LIST_HANDLER_APPEND(inst->cfg->cpumonitor.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->cpumonitor.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _cpumonitor_config_updated(inst); - - return inst->cfg->cpumonitor.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_CPUMONITOR) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_CPUMONITOR; - ci->cpumonitor.poll_interval = 32; - ci->cpumonitor.popup = NULL; - ci->cpumonitor.configure = NULL; - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -cpumonitor_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->cfg->cpumonitor.popup = NULL; - inst->cfg->cpumonitor.configure = NULL; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", _cpumonitor_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _cpumonitor_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_cpumonitor_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor.h b/src/modules/sysinfo/cpumonitor/cpumonitor.h deleted file mode 100644 index 557f23f06..000000000 --- a/src/modules/sysinfo/cpumonitor/cpumonitor.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CPUMONITOR_H -#define CPUMONITOR_H - -#include "../sysinfo.h" - -EINTERN void _cpumonitor_config_updated(Instance *inst); -EINTERN int _cpumonitor_proc_getcores(void); -EINTERN void _cpumonitor_proc_getusage(unsigned long *prev_total, unsigned long *prev_idle, int *prev_precent, Eina_List *cores); -EINTERN int _cpumonitor_sysctl_getcores(void); -EINTERN void _cpumonitor_sysctl_getusage(unsigned long *prev_total, unsigned long *prev_idle, int *prev_precent, Eina_List *cores); -EINTERN Evas_Object *cpumonitor_configure(Instance *inst); -#endif diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor_config.c b/src/modules/sysinfo/cpumonitor/cpumonitor_config.c deleted file mode 100644 index f20a93635..000000000 --- a/src/modules/sysinfo/cpumonitor/cpumonitor_config.c +++ /dev/null @@ -1,171 +0,0 @@ -#include "cpumonitor.h" - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - E_FREE_FUNC(inst->cfg->cpumonitor.configure, evas_object_del); - e_config_save_queue(); -} - -static void -_config_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->cpumonitor.poll_interval = 4; - break; - - case 1: - inst->cfg->cpumonitor.poll_interval = 8; - break; - - case 2: - inst->cfg->cpumonitor.poll_interval = 32; - break; - - case 3: - inst->cfg->cpumonitor.poll_interval = 64; - break; - - case 4: - inst->cfg->cpumonitor.poll_interval = 256; - break; - - default: - inst->cfg->cpumonitor.poll_interval = 32; - } - e_config_save_queue(); - _cpumonitor_config_updated(inst); -} - -Evas_Object * -cpumonitor_configure(Instance *inst) -{ - Evas_Object *popup, *frame, *box, *o, *group, *lbl; - E_Zone *zone = e_zone_current_get(); - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - E_FILL(box); - evas_object_show(box); - elm_object_content_set(popup, box); - - lbl = elm_label_add(box); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("CpuMonitor Configuration")); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - frame = elm_frame_add(box); - elm_object_text_set(frame, _("Update Poll Interval")); - E_EXPAND(frame); - E_FILL(frame); - elm_box_pack_end(box, frame); - evas_object_show(frame); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - switch (inst->cfg->cpumonitor.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, inst); - - return inst->cfg->cpumonitor.configure = popup; -} - diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor_proc.c b/src/modules/sysinfo/cpumonitor/cpumonitor_proc.c deleted file mode 100644 index 075ec613a..000000000 --- a/src/modules/sysinfo/cpumonitor/cpumonitor_proc.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "cpumonitor.h" - -int -_cpumonitor_proc_getcores(void) -{ - char buf[4096], *tok; - FILE *f; - int cores = 0, i = 0; - - f = fopen("/proc/stat", "r"); - if (f) - { - while (fgets(buf, sizeof(buf), f)) - { - if (i > 0) - { - tok = strtok(buf, " "); - if (!strncmp(tok, "cpu", 3)) - cores++; - else - break; - } - i++; - } - fclose(f); - } - return cores; -} - -void -_cpumonitor_proc_getusage(unsigned long *prev_total, - unsigned long *prev_idle, - int *prev_percent, - Eina_List *cores) -{ - int k = 0, j = 0; - char buf[4096]; - FILE *f; - CPU_Core *core; - - f = fopen("/proc/stat", "r"); - if (f) - { - while (fgets(buf, sizeof(buf), f)) - { - if (k == 0) - { - unsigned long total = 0, idle = 0, use = 0, total_change = 0, idle_change = 0; - int percent = 0; - char *line, *tok; - int i = 0; - - line = strchr(buf, ' ') + 1; - tok = strtok(line, " "); - while (tok) - { - use = atol(tok); - total += use; - i++; - if (i == 4) - idle = use; - tok = strtok(NULL, " "); - } - total_change = total - *prev_total; - idle_change = idle - *prev_idle; - if (total_change != 0) - percent = 100 * (1 - ((float)idle_change / (float)total_change)); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - *prev_total = total; - *prev_idle = idle; - *prev_percent = percent; - } - if (k > 0) - { - unsigned long total = 0, idle = 0, use = 0, total_change = 0, idle_change = 0; - int percent = 0; - if (!strncmp(buf, "cpu", 3)) - { - char *line, *tok; - int i = 0; - line = strchr(buf, ' '); - tok = strtok(line, " "); - while (tok) - { - use = atol(tok); - total += use; - i++; - if (i == 4) - idle = use; - tok = strtok(NULL, " "); - } - } - else break; - core = eina_list_nth(cores, j); - total_change = total - core->total; - idle_change = idle - core->idle; - if (total_change != 0) - percent = 100 * (1 - ((float)idle_change / (float)total_change)); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - core->percent = percent; - core->total = total; - core->idle = idle; - j++; - } - k++; - } - fclose(f); - } -} - diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor_sysctl.c b/src/modules/sysinfo/cpumonitor/cpumonitor_sysctl.c deleted file mode 100644 index bdddd2f53..000000000 --- a/src/modules/sysinfo/cpumonitor/cpumonitor_sysctl.c +++ /dev/null @@ -1,125 +0,0 @@ -#include "cpumonitor.h" - -#if defined(__FreeBSD__) || defined (__DragonFly__) -# include -# include -# define CPU_STATES 5 -#endif - -#if defined(__OpenBSD__) -# include -# include -# define CPU_STATES 6 -#endif - -int -_cpumonitor_sysctl_getcores(void) -{ - int cores = 0; -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - size_t len; - int mib[2] = { CTL_HW, HW_NCPU }; - - len = sizeof(cores); - if (sysctl(mib, 2, &cores, &len, NULL, 0) < 0) return 0; -#endif - return cores; -} - -void -_cpumonitor_sysctl_getusage(unsigned long *prev_total, unsigned long *prev_idle, int *prev_percent, Eina_List *cores) -{ - CPU_Core *core; - size_t size; - unsigned long percent_all = 0, total_all = 0, idle_all = 0; - int i, j; -#if defined(__FreeBSD__) || defined(__DragonFly__) - int ncpu = _cpumonitor_sysctl_getcores(); - if (!ncpu) return; - size = sizeof(unsigned long) * (CPU_STATES * ncpu); - unsigned long cpu_times[ncpu][CPU_STATES]; - - if (sysctlbyname("kern.cp_times", cpu_times, &size, NULL, 0) < 0) - return; - - for (i = 0; i < ncpu; i++) - { - unsigned long *cpu = cpu_times[i]; - double total = 0; - - for (j = 0; j < CPU_STATES; j++) - total += cpu[j]; - - core = eina_list_nth(cores, i); - - int diff_total = total - core->total; - int diff_idle = cpu[4] - core->idle; - - if (diff_total == 0) diff_total = 1; - - double ratio = diff_total / 100.0; - unsigned long used = diff_total - diff_idle; - - int percent = used / ratio; - if (percent > 100) - percent = 100; - else if (percent < 0) - percent = 0; - - core->percent = percent; - core->total = total; - core->idle = cpu[4]; - - percent_all += (int)percent; - total_all += total; - idle_all += core->idle; - } - *prev_total = total_all / ncpu; - *prev_idle = idle_all / ncpu; - *prev_percent = (int)(percent_all / ncpu); -#elif defined(__OpenBSD__) - int ncpu = _cpumonitor_sysctl_getcores(); - struct cpustats cpu_times[CPU_STATES]; - memset(&cpu_times, 0, CPU_STATES * sizeof(struct cpustats)); - if (!ncpu) return; - for (i = 0; i < ncpu; i++) - { - unsigned long total = 0, idle; - int diff_total, diff_idle; - int cpu_time_mib[] = { CTL_KERN, KERN_CPUSTATS, 0 }; - - size = sizeof(struct cpustats); - cpu_time_mib[2] = i; - if (sysctl(cpu_time_mib, 3, &cpu_times[i], &size, NULL, 0) < 0) - return; - - for (j = 0; j < CPU_STATES; j++) - total += cpu_times[i].cs_time[j]; - - idle = cpu_times[i].cs_time[CP_IDLE]; - core = eina_list_nth(cores, i); - diff_total = total - core->total; - diff_idle = idle - core->idle; - - core->total = total; - core->idle = idle; - - if (diff_total == 0) diff_total = 1; - - double ratio = diff_total / 100; - unsigned long used = diff_total - diff_idle; - int percent = used / ratio; - - core->percent = percent; - - percent_all += (int)percent; - total_all += total; - idle_all += core->idle; - - *prev_total = (total_all / ncpu); - *prev_idle = (idle_all / ncpu); - *prev_percent = (percent_all / ncpu) + (percent_all % ncpu); - } -#endif -} - diff --git a/src/modules/sysinfo/e-module-sysinfo.edj b/src/modules/sysinfo/e-module-sysinfo.edj deleted file mode 100644 index b861ae1b1..000000000 Binary files a/src/modules/sysinfo/e-module-sysinfo.edj and /dev/null differ diff --git a/src/modules/sysinfo/memusage/memusage.c b/src/modules/sysinfo/memusage/memusage.c deleted file mode 100644 index 35a8cf162..000000000 --- a/src/modules/sysinfo/memusage/memusage.c +++ /dev/null @@ -1,586 +0,0 @@ -#include "memusage.h" - -typedef struct _Thread_Config Thread_Config; - -struct _Thread_Config -{ - int interval; - Instance *inst; - int mem_percent; - int swp_percent; - unsigned long mem_total; - unsigned long mem_used; - unsigned long mem_cached; - unsigned long mem_buffers; - unsigned long mem_shared; - unsigned long swp_total; - unsigned long swp_used; - E_Powersave_Sleeper *sleeper; -}; - -static void -_memusage_popup_update(Instance *inst) -{ - Evas_Object *pbar; - int val_mb, val_perc; - char buf[128]; - - if (!inst->cfg->memusage.popup) - return; - - if (inst->cfg->memusage.mem_total) - { - pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_used_pbar"); - val_mb = inst->cfg->memusage.mem_used / 1024; - val_perc = 100 * ((float)inst->cfg->memusage.mem_used / - (float)inst->cfg->memusage.mem_total); - snprintf(buf, sizeof(buf), "%d MB (%d %%%%)", val_mb, val_perc); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)val_perc / 100); - - pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_buffers_pbar"); - val_mb = inst->cfg->memusage.mem_buffers / 1024; - val_perc = 100 * ((float)inst->cfg->memusage.mem_buffers / - (float)inst->cfg->memusage.mem_total); - snprintf(buf, sizeof(buf), "%d MB (%d %%%%)", val_mb, val_perc); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)val_perc / 100); - - pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_cached_pbar"); - val_mb = inst->cfg->memusage.mem_cached / 1024; - val_perc = 100 * ((float)inst->cfg->memusage.mem_cached / - (float)inst->cfg->memusage.mem_total); - snprintf(buf, sizeof(buf), "%d MB (%d %%%%)", val_mb, val_perc); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)val_perc / 100); - - pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_shared_pbar"); - val_mb = inst->cfg->memusage.mem_shared / 1024; - val_perc = 100 * ((float)inst->cfg->memusage.mem_shared / - (float)inst->cfg->memusage.mem_total); - snprintf(buf, sizeof(buf), "%d MB (%d %%%%)", val_mb, val_perc); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)val_perc / 100); - } - - if (inst->cfg->memusage.swp_total) - { - pbar = evas_object_data_get(inst->cfg->memusage.popup, "swap_pbar"); - val_mb = inst->cfg->memusage.swp_used / 1024; - val_perc = 100 * ((float)inst->cfg->memusage.swp_used / - (float)inst->cfg->memusage.swp_total); - snprintf(buf, sizeof(buf), "%d MB (%d %%%%)", val_mb, val_perc); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)val_perc / 100); - } -} - -static void -_memusage_face_update(Instance *inst) -{ - Edje_Message_Int_Set *msg; - - msg = malloc(sizeof(Edje_Message_Int_Set) + 9 * sizeof(int)); - EINA_SAFETY_ON_NULL_RETURN(msg); - msg->count = 2; - msg->val[0] = inst->cfg->memusage.mem_percent; - msg->val[1] = inst->cfg->memusage.swp_percent; - msg->val[2] = inst->cfg->memusage.mem_total; - msg->val[3] = inst->cfg->memusage.mem_used; - msg->val[4] = inst->cfg->memusage.mem_cached; - msg->val[5] = inst->cfg->memusage.mem_buffers; - msg->val[6] = inst->cfg->memusage.mem_shared; - msg->val[7] = inst->cfg->memusage.swp_total; - msg->val[8] = inst->cfg->memusage.swp_used; - edje_object_message_send(elm_layout_edje_get(inst->cfg->memusage.o_gadget), - EDJE_MESSAGE_INT_SET, 1, msg); - E_FREE(msg); - - if (inst->cfg->memusage.popup) - _memusage_popup_update(inst); -} - -static Evas_Object * -_memusage_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - return memusage_configure(inst); -} - -static void -_memusage_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->cfg->memusage.popup = NULL; -} - -static void -_memusage_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->memusage.popup = NULL; -} - -static Evas_Object * -_memusage_popup_create(Instance *inst) -{ - Evas_Object *popup, *table, *label, *pbar; - char buf[128], buf2[128 + 100]; - - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", - _memusage_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, - _memusage_popup_deleted, inst); - - table = elm_table_add(popup); - E_EXPAND(table); - E_FILL(table); - elm_object_content_set(popup, table); - evas_object_show(table); - - snprintf(buf, sizeof(buf), _("Memory Usage (Available %ld MB)"), - inst->cfg->memusage.mem_total / 1024); - snprintf(buf2, sizeof(buf2), "%s", buf); - - label = elm_label_add(table); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, buf2); - elm_table_pack(table, label, 0, 0, 2, 1); - evas_object_show(label); - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Used")); - elm_table_pack(table, label, 0, 1, 1, 1); - evas_object_show(label); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_table_pack(table, pbar, 1, 1, 1, 1); - evas_object_show(pbar); - evas_object_data_set(popup, "mem_used_pbar", pbar); - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Buffers")); - elm_table_pack(table, label, 0, 2, 1, 1); - evas_object_show(label); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_table_pack(table, pbar, 1, 2, 1, 1); - evas_object_show(pbar); - evas_object_data_set(popup, "mem_buffers_pbar", pbar); - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Cached")); - elm_table_pack(table, label, 0, 3, 1, 1); - evas_object_show(label); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_table_pack(table, pbar, 1, 3, 1, 1); - evas_object_show(pbar); - evas_object_data_set(popup, "mem_cached_pbar", pbar); - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Shared")); - elm_table_pack(table, label, 0, 4, 1, 1); - evas_object_show(label); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_table_pack(table, pbar, 1, 4, 1, 1); - evas_object_show(pbar); - evas_object_data_set(popup, "mem_shared_pbar", pbar); - - snprintf(buf, sizeof(buf), _("Swap Usage (Available %ld MB)"), - inst->cfg->memusage.swp_total / 1024); - snprintf(buf2, sizeof(buf2), "%s", buf); - - label = elm_label_add(table); - E_EXPAND(label); - E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, buf2); - elm_table_pack(table, label, 0, 5, 2, 1); - evas_object_show(label); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_table_pack(table, pbar, 0, 6, 2, 1); - evas_object_show(pbar); - evas_object_data_set(popup, "swap_pbar", pbar); - - // place and show the popup - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->memusage.o_gadget); - evas_object_show(popup); - - return popup; -} - -static void -_memusage_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->memusage.popup) - elm_ctxpopup_dismiss(inst->cfg->memusage.popup); - else - { - inst->cfg->memusage.popup = _memusage_popup_create(inst); - _memusage_popup_update(inst); - } - } -} - -static void -_memusage_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->cfg->memusage.o_gadget), - 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - if (inst->cfg->esm == E_SYSINFO_MODULE_MEMUSAGE) - evas_object_size_hint_aspect_set(inst->o_main, - EVAS_ASPECT_CONTROL_BOTH, w, h); - else - evas_object_size_hint_aspect_set(inst->cfg->memusage.o_gadget, - EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_memusage_cb_usage_check_main(void *data, Ecore_Thread *th) -{ - Thread_Config *thc = data; - for (;; ) - { - if (ecore_thread_check(th)) break; -#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) - _memusage_sysctl_getusage(&thc->mem_total, &thc->mem_used, - &thc->mem_cached, &thc->mem_buffers, &thc->mem_shared, - &thc->swp_total, &thc->swp_used); -#else - _memusage_proc_getusage(&thc->mem_total, &thc->mem_used, - &thc->mem_cached, &thc->mem_buffers, &thc->mem_shared, - &thc->swp_total, &thc->swp_used); -#endif - if (thc->mem_total > 0) - thc->mem_percent = 100 * ((float)thc->mem_used / (float)thc->mem_total); - if (thc->swp_total > 0) - thc->swp_percent = 100 * ((float)thc->swp_used / (float)thc->swp_total); - - ecore_thread_feedback(th, NULL); - if (ecore_thread_check(th)) break; - e_powersave_sleeper_sleep(thc->sleeper, thc->interval); - if (ecore_thread_check(th)) break; - } -} - -static void -_memusage_cb_usage_check_end(void *data, Ecore_Thread *th EINA_UNUSED) -{ - Thread_Config *thc = data; - e_powersave_sleeper_free(thc->sleeper); - E_FREE(thc); -} - -static void -_memusage_cb_usage_check_notify(void *data, - Ecore_Thread *th EINA_UNUSED, - void *msg EINA_UNUSED) -{ - Thread_Config *thc = data; - - if (!thc->inst->cfg) return; - if (thc->inst->cfg->esm != E_SYSINFO_MODULE_MEMUSAGE && - thc->inst->cfg->esm != E_SYSINFO_MODULE_SYSINFO) return; - - thc->inst->cfg->memusage.mem_percent = thc->mem_percent; - thc->inst->cfg->memusage.swp_percent = thc->swp_percent; - thc->inst->cfg->memusage.mem_total = thc->mem_total; - thc->inst->cfg->memusage.mem_used = thc->mem_used; - thc->inst->cfg->memusage.mem_cached = thc->mem_cached; - thc->inst->cfg->memusage.mem_buffers = thc->mem_buffers; - thc->inst->cfg->memusage.mem_shared = thc->mem_shared; - thc->inst->cfg->memusage.swp_total = thc->swp_total; - thc->inst->cfg->memusage.swp_used = thc->swp_used; - _memusage_face_update(thc->inst); -} - -static Eina_Bool -_screensaver_on(void *data) -{ - Instance *inst = data; - - if (inst->cfg->memusage.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); - inst->cfg->memusage.usage_check_thread = NULL; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _memusage_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -void -_memusage_config_updated(Instance *inst) -{ - Thread_Config *thc; - - if (inst->cfg->id == -1) - { - inst->cfg->memusage.mem_percent = 75; - inst->cfg->memusage.swp_percent = 30; - _memusage_face_update(inst); - return; - } - if (inst->cfg->memusage.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); - inst->cfg->memusage.usage_check_thread = NULL; - } - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->sleeper = e_powersave_sleeper_new(); - thc->interval = inst->cfg->memusage.poll_interval; - thc->mem_percent = 0; - thc->swp_percent = 0; - inst->cfg->memusage.usage_check_thread = - ecore_thread_feedback_run(_memusage_cb_usage_check_main, - _memusage_cb_usage_check_notify, - _memusage_cb_usage_check_end, - _memusage_cb_usage_check_end, thc, EINA_TRUE); - } - e_config_save_queue(); -} - -static void -_memusage_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - - if (inst->cfg->memusage.popup) - E_FREE_FUNC(inst->cfg->memusage.popup, evas_object_del); - if (inst->cfg->memusage.configure) - E_FREE_FUNC(inst->cfg->memusage.configure, evas_object_del); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _memusage_removed_cb, inst); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, - sysinfo_memusage_remove, data); - EINA_LIST_FREE(inst->cfg->memusage.handlers, handler) - ecore_event_handler_del(handler); - if (inst->cfg->memusage.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); - inst->cfg->memusage.usage_check_thread = NULL; - } - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_memusage_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->memusage.popup) - E_FREE_FUNC(inst->cfg->memusage.popup, evas_object_del); - if (inst->cfg->memusage.configure) - E_FREE_FUNC(inst->cfg->memusage.configure, evas_object_del); - if (inst->cfg->memusage.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->memusage.usage_check_thread); - inst->cfg->memusage.usage_check_thread = NULL; - } - EINA_LIST_FREE(inst->cfg->memusage.handlers, handler) - ecore_event_handler_del(handler); -} - -static void -_memusage_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - int orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - e_gadget_configure_cb_set(inst->o_main, _memusage_configure_cb); - - inst->cfg->memusage.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->memusage.o_gadget, - "base/theme/gadget/memusage", - "e/gadget/memusage/main_vert"); - else - e_theme_edje_object_set(inst->cfg->memusage.o_gadget, - "base/theme/gadget/memusage", - "e/gadget/memusage/main"); - - E_EXPAND(inst->cfg->memusage.o_gadget); - E_FILL(inst->cfg->memusage.o_gadget); - elm_box_pack_end(inst->o_main, inst->cfg->memusage.o_gadget); - evas_object_event_callback_add(inst->cfg->memusage.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _memusage_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->memusage.o_gadget, - EVAS_CALLBACK_RESIZE, - _memusage_resize_cb, inst); - evas_object_show(inst->cfg->memusage.o_gadget); - evas_object_smart_callback_del_full(obj, "gadget_created", - _memusage_created_cb, data); - - E_LIST_HANDLER_APPEND(inst->cfg->memusage.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->memusage.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _memusage_config_updated(inst); -} - -Evas_Object * -sysinfo_memusage_create(Evas_Object *parent, Instance *inst) -{ - inst->cfg->memusage.mem_percent = 0; - inst->cfg->memusage.swp_percent = 0; - inst->cfg->memusage.mem_total = 0; - inst->cfg->memusage.mem_used = 0; - inst->cfg->memusage.mem_cached = 0; - inst->cfg->memusage.mem_buffers = 0; - inst->cfg->memusage.mem_shared = 0; - inst->cfg->memusage.swp_total = 0; - inst->cfg->memusage.swp_used = 0; - inst->cfg->memusage.popup = NULL; - inst->cfg->memusage.configure = NULL; - inst->cfg->memusage.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->memusage.o_gadget, - "base/theme/gadget/memusage", - "e/gadget/memusage/main"); - E_EXPAND(inst->cfg->memusage.o_gadget); - E_FILL(inst->cfg->memusage.o_gadget); - evas_object_event_callback_add(inst->cfg->memusage.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _memusage_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->memusage.o_gadget, - EVAS_CALLBACK_RESIZE, - _memusage_resize_cb, inst); - evas_object_show(inst->cfg->memusage.o_gadget); - - E_LIST_HANDLER_APPEND(inst->cfg->memusage.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->memusage.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _memusage_config_updated(inst); - - return inst->cfg->memusage.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_MEMUSAGE) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_MEMUSAGE; - ci->memusage.poll_interval = 32; - ci->memusage.mem_percent = 0; - ci->memusage.swp_percent = 0; - ci->memusage.mem_total = 0; - ci->memusage.mem_used = 0; - ci->memusage.mem_cached = 0; - ci->memusage.mem_buffers = 0; - ci->memusage.mem_shared = 0; - ci->memusage.swp_total = 0; - ci->memusage.swp_used = 0; - ci->memusage.popup = NULL; - ci->memusage.configure = NULL; - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -memusage_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->cfg->memusage.mem_percent = 0; - inst->cfg->memusage.swp_percent = 0; - inst->cfg->memusage.mem_total = 0; - inst->cfg->memusage.mem_used = 0; - inst->cfg->memusage.mem_cached = 0; - inst->cfg->memusage.mem_buffers = 0; - inst->cfg->memusage.mem_shared = 0; - inst->cfg->memusage.swp_total = 0; - inst->cfg->memusage.swp_used = 0; - inst->cfg->memusage.popup = NULL; - inst->cfg->memusage.configure = NULL; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", - _memusage_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", - _memusage_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, - sysinfo_memusage_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/memusage/memusage.h b/src/modules/sysinfo/memusage/memusage.h deleted file mode 100644 index 31002f2b3..000000000 --- a/src/modules/sysinfo/memusage/memusage.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef MEMUSAGE_H -#define MEMUSAGE_H - -#include "../sysinfo.h" - -EINTERN void _memusage_config_updated(Instance *inst); -EINTERN Evas_Object *memusage_configure(Instance *inst); - -EINTERN void _memusage_proc_getusage(unsigned long *mem_total, - unsigned long *mem_used, - unsigned long *mem_cached, - unsigned long *mem_buffers, - unsigned long *mem_shared, - unsigned long *swp_total, - unsigned long *swp_used); - -EINTERN void _memusage_sysctl_getusage(unsigned long *mem_total, - unsigned long *mem_used, - unsigned long *mem_cached, - unsigned long *mem_buffers, - unsigned long *mem_shared, - unsigned long *swp_total, - unsigned long *swp_used); - -#endif diff --git a/src/modules/sysinfo/memusage/memusage_config.c b/src/modules/sysinfo/memusage/memusage_config.c deleted file mode 100644 index 3e04da4ac..000000000 --- a/src/modules/sysinfo/memusage/memusage_config.c +++ /dev/null @@ -1,171 +0,0 @@ -#include "memusage.h" - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - E_FREE_FUNC(inst->cfg->memusage.configure, evas_object_del); - e_config_save_queue(); -} - -static void -_config_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->memusage.poll_interval = 4; - break; - - case 1: - inst->cfg->memusage.poll_interval = 8; - break; - - case 2: - inst->cfg->memusage.poll_interval = 32; - break; - - case 3: - inst->cfg->memusage.poll_interval = 64; - break; - - case 4: - inst->cfg->memusage.poll_interval = 256; - break; - - default: - inst->cfg->memusage.poll_interval = 32; - } - e_config_save_queue(); - _memusage_config_updated(inst); -} - -Evas_Object * -memusage_configure(Instance *inst) -{ - Evas_Object *popup, *frame, *box, *o, *group, *lbl; - E_Zone *zone = e_zone_current_get(); - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - E_FILL(box); - evas_object_show(box); - elm_object_content_set(popup, box); - - lbl = elm_label_add(box); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("MemUsage Configuration")); - elm_box_pack_end(box, lbl); - evas_object_show(lbl); - - frame = elm_frame_add(box); - elm_object_text_set(frame, _("Update Poll Interval")); - E_EXPAND(frame); - E_FILL(frame); - elm_box_pack_end(box, frame); - evas_object_show(frame); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _config_changed, inst); - evas_object_show(o); - - switch (inst->cfg->memusage.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, inst); - - return inst->cfg->memusage.configure = popup; -} - diff --git a/src/modules/sysinfo/memusage/memusage_proc.c b/src/modules/sysinfo/memusage/memusage_proc.c deleted file mode 100644 index bfbb45664..000000000 --- a/src/modules/sysinfo/memusage/memusage_proc.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "memusage.h" - -unsigned long -_line_parse(const char *line) -{ - char *p, *tok; - - p = strchr(line, ':') + 1; - while (isspace(*p)) - p++; - tok = strtok(p, " "); - return atol(tok); -} - -void -_memusage_proc_getusage(unsigned long *mem_total, - unsigned long *mem_used, - unsigned long *mem_cached, - unsigned long *mem_buffers, - unsigned long *mem_shared, - unsigned long *swp_total, - unsigned long *swp_used) -{ - char line[256]; - int found = 0; - unsigned long tmp_swp_total = 0; - unsigned long tmp_swp_free = 0; - unsigned long tmp_mem_free = 0; - unsigned long tmp_mem_cached = 0; - unsigned long tmp_mem_slab = 0; - FILE *f; - - *mem_total = 0; - *mem_used = 0; - *mem_cached = 0; - *mem_buffers = 0; - *mem_shared = 0; - *swp_total = 0; - *swp_used = 0; - - f = fopen("/proc/meminfo", "r"); - if (!f) return; - - while (fgets(line, sizeof(line), f) != NULL) - { - if (!strncmp("MemTotal:", line, 9)) - { - *mem_total = _line_parse(line); - found++; - } - else if (!strncmp("MemFree:", line, 8)) - { - tmp_mem_free = _line_parse(line); - found++; - } - else if (!strncmp("Cached:", line, 7)) - { - tmp_mem_cached = _line_parse(line); - found++; - } - else if (!strncmp("Slab:", line, 5)) - { - tmp_mem_slab = _line_parse(line); - found++; - } - else if (!strncmp("Buffers:", line, 8)) - { - *mem_buffers = _line_parse(line); - found++; - } - else if (!strncmp("Shmem:", line, 6)) - { - *mem_shared = _line_parse(line); - found++; - } - else if (!strncmp("SwapTotal:", line, 10)) - { - tmp_swp_total = _line_parse(line); - found++; - } - else if (!strncmp("SwapFree:", line, 9)) - { - tmp_swp_free = _line_parse(line); - found++; - } - - if (found >= 8) - break; - } - fclose(f); - - *mem_cached = tmp_mem_cached + tmp_mem_slab; - *mem_used = *mem_total - tmp_mem_free - *mem_cached - *mem_buffers; - - *swp_total = tmp_swp_total; - *swp_used = tmp_swp_total - tmp_swp_free; -} - diff --git a/src/modules/sysinfo/memusage/memusage_sysctl.c b/src/modules/sysinfo/memusage/memusage_sysctl.c deleted file mode 100644 index f4523aa75..000000000 --- a/src/modules/sysinfo/memusage/memusage_sysctl.c +++ /dev/null @@ -1,172 +0,0 @@ -#include "memusage.h" - -#if defined(__FreeBSD__) || defined(__DragonFly__) -# include -# include -# include -#endif - -#if defined(__OpenBSD__) -# include -# include -# include -# include -#endif - -#if defined(__FreeBSD__) || defined(__DragonFly__) -static long int -_sysctlfromname(const char *name, void *mib, int depth, size_t *len) -{ - long int result; - - if (sysctlnametomib(name, mib, len) < 0) return -1; - - *len = sizeof(result); - if (sysctl(mib, depth, &result, len, NULL, 0) < 0) return -1; - - return result; -} - -#endif - -void -_memsize_bytes_to_kb(unsigned long *bytes) -{ - *bytes = (unsigned int)*bytes >> 10; -} - -void -_memusage_sysctl_getusage(unsigned long *mem_total, - unsigned long *mem_used, - unsigned long *mem_cached, - unsigned long *mem_buffers, - unsigned long *mem_shared, - unsigned long *swp_total, - unsigned long *swp_used) -{ - size_t len; - int i = 0; - *mem_total = *mem_used = *mem_cached = *mem_buffers = *mem_shared = 0; - *swp_total = *swp_used = 0; -#if defined(__FreeBSD__) || defined(__DragonFly__) - size_t miblen; - int total_pages = 0, free_pages = 0, inactive_pages = 0; - long int result = 0; - int page_size = getpagesize(); - - int *mib = malloc(sizeof(int) * 4); - if (mib == NULL) return; - - mib[0] = CTL_HW; mib[1] = HW_PHYSMEM; - len = sizeof(*mem_total); - if (sysctl(mib, 2, mem_total, &len, NULL, 0) == -1) - return; - *mem_total /= 1024; - - total_pages = _sysctlfromname("vm.stats.vm.v_page_count", mib, 4, &len); - if (total_pages < 0) return; - - free_pages = _sysctlfromname("vm.stats.vm.v_free_count", mib, 4, &len); - if (free_pages < 0) return; - - inactive_pages = _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, &len); - if (inactive_pages < 0) return; - - *mem_used = (total_pages - free_pages - inactive_pages) * page_size; - _memsize_bytes_to_kb(mem_used); - - result = _sysctlfromname("vfs.bufspace", mib, 2, &len); - if (result < 0) return; - *mem_buffers = (result); - _memsize_bytes_to_kb(mem_buffers); - - result = _sysctlfromname("vm.stats.vm.v_active_count", mib, 4, &len); - if (result < 0) return; - *mem_cached = (result * page_size); - _memsize_bytes_to_kb(mem_cached); - - result = _sysctlfromname("vm.stats.vm.v_cache_count", mib, 4, &len); - if (result < 0) return; - *mem_shared = (result * page_size); - _memsize_bytes_to_kb(mem_shared); - - result = _sysctlfromname("vm.swap_total", mib, 2, &len); - if (result < 0) return; - *swp_total = (result / 1024); - - miblen = 3; - if (sysctlnametomib("vm.swap_info", mib, &miblen) == -1) return; - - struct xswdev xsw; - // previous mib is important for this one... - - for (i = 0; ; i++) - { - mib[miblen] = i; - len = sizeof(xsw); - if (sysctl(mib, miblen + 1, &xsw, &len, NULL, 0) == -1) break; - - *swp_used += (unsigned long)xsw.xsw_used * page_size; - } - - *swp_used >>= 10; - - E_FREE(mib); -#elif defined(__OpenBSD__) - static int mib[] = { CTL_HW, HW_PHYSMEM64 }; - static int bcstats_mib[] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT }; - struct bcachestats bcstats; - static int uvmexp_mib[] = { CTL_VM, VM_UVMEXP }; - struct uvmexp uvmexp; - int nswap, rnswap; - struct swapent *swdev = NULL; - - len = sizeof(*mem_total); - if (sysctl(mib, 2, mem_total, &len, NULL, 0) == -1) - return; - - len = sizeof(uvmexp); - if (sysctl(uvmexp_mib, 2, &uvmexp, &len, NULL, 0) == -1) - return; - - len = sizeof(bcstats); - if (sysctl(bcstats_mib, 3, &bcstats, &len, NULL, 0) == -1) - return; - - // Don't fail if there's not swap! - nswap = swapctl(SWAP_NSWAP, 0, 0); - if (nswap == 0) goto swap_out; - - swdev = calloc(nswap, sizeof(*swdev)); - if (swdev == NULL) goto swap_out; - - rnswap = swapctl(SWAP_STATS, swdev, nswap); - if (rnswap == -1) goto swap_out; - - for (i = 0; i < nswap; i++) // nswap; i++) - { - if (swdev[i].se_flags & SWF_ENABLE) - { - *swp_used += (swdev[i].se_inuse / (1024 / DEV_BSIZE)); - *swp_total += (swdev[i].se_nblks / (1024 / DEV_BSIZE)); - } - } -swap_out: - if (swdev) E_FREE(swdev); - - *mem_total /= 1024; - - *mem_cached = (uvmexp.pagesize * bcstats.numbufpages); - _memsize_bytes_to_kb(mem_cached); - - *mem_used = (uvmexp.active * uvmexp.pagesize); - _memsize_bytes_to_kb(mem_used); - - *mem_buffers = (uvmexp.pagesize * (uvmexp.npages - uvmexp.free)); - _memsize_bytes_to_kb(mem_buffers); - - *mem_shared = (uvmexp.pagesize * uvmexp.wired); - _memsize_bytes_to_kb(mem_shared); -#endif -} - diff --git a/src/modules/sysinfo/meson.build b/src/modules/sysinfo/meson.build deleted file mode 100644 index 443fb05d0..000000000 --- a/src/modules/sysinfo/meson.build +++ /dev/null @@ -1,44 +0,0 @@ -src = files( - 'mod.c', - 'sysinfo.c', - 'sysinfo.h', - 'batman/batman.h', - 'batman/batman.c', - 'batman/batman_fallback.c', - 'batman/batman_config.c', - 'thermal/thermal.h', - 'thermal/thermal.c', - 'thermal/thermal_config.c', - 'thermal/thermal_fallback.c', - 'cpuclock/cpuclock.h', - 'cpuclock/cpuclock.c', - 'cpuclock/cpuclock_config.c', - 'cpumonitor/cpumonitor.h', - 'cpumonitor/cpumonitor.c', - 'cpumonitor/cpumonitor_config.c', - 'cpumonitor/cpumonitor_proc.c', - 'memusage/memusage.h', - 'memusage/memusage.c', - 'memusage/memusage_config.c', - 'memusage/memusage_proc.c', - 'netstatus/netstatus.h', - 'netstatus/netstatus.c', - 'netstatus/netstatus_config.c', - 'netstatus/netstatus_proc.c' -) -if config_h.has('HAVE_EEZE') == true - src += files( - 'batman/batman_udev.c', - 'thermal/thermal_udev.c') -elif host_machine.system().contains('bsd') == true - src += files( - 'batman/batman_sysctl.c', - 'thermal/thermal_sysctl.c', - 'netstatus/netstatus_sysctl.c', - 'cpumonitor/cpumonitor_sysctl.c', - 'memusage/memusage_sysctl.c') -else - src += files( - 'batman/batman_upower.c', - 'thermal/thermal_sysctl.c') -endif diff --git a/src/modules/sysinfo/mod.c b/src/modules/sysinfo/mod.c deleted file mode 100644 index 0e23f6641..000000000 --- a/src/modules/sysinfo/mod.c +++ /dev/null @@ -1,222 +0,0 @@ -#include "sysinfo.h" - -#define CONFIG_VERSION 2 - -static E_Config_DD *conf_edd = NULL; -static E_Config_DD *conf_item_edd = NULL; -Eina_List *sysinfo_instances = NULL; -Config *sysinfo_config = NULL; - -EINTERN void -sysinfo_init(void) -{ - Eina_List *l; - Config_Item *ci; - - conf_item_edd = E_CONFIG_DD_NEW("Sysinfo_Config_Item", Config_Item); -#undef T -#undef D -#define T Config_Item -#define D conf_item_edd - E_CONFIG_VAL(D, T, id, INT); - E_CONFIG_VAL(D, T, version, INT); - E_CONFIG_VAL(D, T, esm, INT); - E_CONFIG_VAL(D, T, batman.poll_interval, INT); - E_CONFIG_VAL(D, T, batman.alert, INT); - E_CONFIG_VAL(D, T, batman.alert_p, INT); - E_CONFIG_VAL(D, T, batman.alert_timeout, INT); - E_CONFIG_VAL(D, T, batman.suspend_below, INT); - E_CONFIG_VAL(D, T, batman.suspend_method, INT); - E_CONFIG_VAL(D, T, batman.force_mode, INT); -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__) - E_CONFIG_VAL(D, T, batman.fuzzy, INT); -#endif - E_CONFIG_VAL(D, T, batman.desktop_notifications, INT); - E_CONFIG_VAL(D, T, thermal.poll_interval, INT); - E_CONFIG_VAL(D, T, thermal.low, INT); - E_CONFIG_VAL(D, T, thermal.high, INT); - E_CONFIG_VAL(D, T, thermal.sensor_type, INT); - E_CONFIG_VAL(D, T, thermal.sensor_name, STR); - E_CONFIG_VAL(D, T, thermal.units, INT); - E_CONFIG_VAL(D, T, cpuclock.poll_interval, INT); - E_CONFIG_VAL(D, T, cpuclock.restore_governor, INT); - E_CONFIG_VAL(D, T, cpuclock.auto_powersave, INT); - E_CONFIG_VAL(D, T, cpuclock.powersave_governor, STR); - E_CONFIG_VAL(D, T, cpuclock.governor, STR); - E_CONFIG_VAL(D, T, cpuclock.pstate_min, INT); - E_CONFIG_VAL(D, T, cpuclock.pstate_max, INT); - E_CONFIG_VAL(D, T, cpumonitor.poll_interval, INT); - E_CONFIG_VAL(D, T, memusage.poll_interval, INT); - E_CONFIG_VAL(D, T, netstatus.poll_interval, INT); - E_CONFIG_VAL(D, T, netstatus.automax, INT); - E_CONFIG_VAL(D, T, netstatus.inmax, INT); - E_CONFIG_VAL(D, T, netstatus.outmax, INT); - E_CONFIG_VAL(D, T, netstatus.receive_units, INT); - E_CONFIG_VAL(D, T, netstatus.send_units, INT); - - conf_edd = E_CONFIG_DD_NEW("Sysinfo_Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_LIST(D, T, items, conf_item_edd); - - sysinfo_config = e_config_domain_load("module.sysinfo", conf_edd); - - if (!sysinfo_config) - { - sysinfo_config = E_NEW(Config, 1); - ci = E_NEW(Config_Item, 1); - ci->id = 0; - ci->version = CONFIG_VERSION; - ci->esm = E_SYSINFO_MODULE_NONE; - - ci->batman.poll_interval = 512; - ci->batman.alert = 30; - ci->batman.alert_p = 10; - ci->batman.alert_timeout = 0; - ci->batman.suspend_below = 0; - ci->batman.suspend_method = 0; - ci->batman.force_mode = 0; - ci->batman.full = -2; - ci->batman.time_left = -2; - ci->batman.have_battery = -2; - ci->batman.have_power = -2; -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__) - ci->batman.fuzzy = 0; -#endif - ci->batman.desktop_notifications = 0; - ci->batman.popup = NULL; - ci->batman.configure = NULL; - ci->batman.done = EINA_FALSE; - ci->thermal.poll_interval = 128; - ci->thermal.low = 30; - ci->thermal.high = 80; - ci->thermal.sensor_type = SENSOR_TYPE_NONE; - ci->thermal.sensor_name = NULL; - ci->thermal.temp = -900; - ci->thermal.units = CELSIUS; - ci->thermal.popup = NULL; - ci->thermal.configure = NULL; - ci->cpuclock.poll_interval = 32; - ci->cpuclock.restore_governor = 0; - ci->cpuclock.auto_powersave = 1; - ci->cpuclock.powersave_governor = NULL; - ci->cpuclock.governor = NULL; - ci->cpuclock.pstate_min = 1; - ci->cpuclock.pstate_max = 101; - ci->cpuclock.popup = NULL; - ci->cpuclock.configure = NULL; - ci->cpumonitor.poll_interval = 32; - ci->cpumonitor.percent = 0; - ci->cpumonitor.popup = NULL; - ci->cpumonitor.configure = NULL; - ci->memusage.poll_interval = 32; - ci->memusage.mem_percent = 0; - ci->memusage.swp_percent = 0; - ci->memusage.popup = NULL; - ci->memusage.configure = NULL; - ci->netstatus.poll_interval = 32; - ci->netstatus.automax = EINA_TRUE; - ci->netstatus.inmax = 0; - ci->netstatus.outmax = 0; - ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.send_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.instring = NULL; - ci->netstatus.outstring = NULL; - ci->netstatus.popup = NULL; - ci->netstatus.configure = NULL; - - E_CONFIG_LIMIT(ci->batman.poll_interval, 4, 4096); - E_CONFIG_LIMIT(ci->batman.alert, 0, 60); - E_CONFIG_LIMIT(ci->batman.alert_p, 0, 100); - E_CONFIG_LIMIT(ci->batman.alert_timeout, 0, 300); - E_CONFIG_LIMIT(ci->batman.suspend_below, 0, 50); - E_CONFIG_LIMIT(ci->batman.force_mode, 0, 2); - E_CONFIG_LIMIT(ci->batman.desktop_notifications, 0, 1); - E_CONFIG_LIMIT(ci->thermal.poll_interval, 1, 1024); - E_CONFIG_LIMIT(ci->thermal.low, 0, 100); - E_CONFIG_LIMIT(ci->thermal.high, 0, 220); - E_CONFIG_LIMIT(ci->thermal.units, CELSIUS, FAHRENHEIT); - E_CONFIG_LIMIT(ci->cpuclock.poll_interval, 1, 1024); - E_CONFIG_LIMIT(ci->cpumonitor.poll_interval, 1, 1024); - E_CONFIG_LIMIT(ci->memusage.poll_interval, 1, 1024); - E_CONFIG_LIMIT(ci->netstatus.poll_interval, 1, 1024); - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - } - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - { - if (ci->esm == E_SYSINFO_MODULE_NETSTATUS || ci->esm == E_SYSINFO_MODULE_SYSINFO) - { - if (ci->version < CONFIG_VERSION) - { - ci->version = CONFIG_VERSION; - ci->netstatus.automax = EINA_TRUE; - ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.send_units = NETSTATUS_UNIT_BYTES; - } - } - } - e_gadget_type_add("Batman", batman_create, NULL); - e_gadget_type_add("Thermal", thermal_create, NULL); - e_gadget_type_add("CpuClock", cpuclock_create, NULL); - e_gadget_type_add("CpuMonitor", cpumonitor_create, NULL); - e_gadget_type_add("MemUsage", memusage_create, NULL); - e_gadget_type_add("NetStatus", netstatus_create, NULL); - e_gadget_type_add("SysInfo", sysinfo_create, NULL); -} - -EINTERN void -sysinfo_shutdown(void) -{ - if (sysinfo_config) - { - Config_Item *ci; - EINA_LIST_FREE(sysinfo_config->items, ci) - { - E_FREE(ci); - } - E_FREE(sysinfo_config); - } - E_CONFIG_DD_FREE(conf_edd); - E_CONFIG_DD_FREE(conf_item_edd); - - e_gadget_type_del("Batman"); - e_gadget_type_del("Thermal"); - e_gadget_type_del("CpuClock"); - e_gadget_type_del("CpuMonitor"); - e_gadget_type_del("MemUsage"); - e_gadget_type_del("NetStatus"); - e_gadget_type_del("SysInfo"); -} - -E_API E_Module_Api e_modapi = -{ - E_MODULE_API_VERSION, - "Sysinfo" -}; - -E_API void * -e_modapi_init(E_Module *m) -{ - sysinfo_init(); - - sysinfo_config->module = m; - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - sysinfo_shutdown(); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.sysinfo", conf_edd, sysinfo_config); - return 1; -} - diff --git a/src/modules/sysinfo/module.desktop b/src/modules/sysinfo/module.desktop deleted file mode 100644 index f37b35ca5..000000000 --- a/src/modules/sysinfo/module.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Sysinfo -Comment=A gadget to visualize your system info -Comment[fr]=Un gadget pour visualer les infos système -Comment[it]=Un gadget per visualizzare informazioni sul sistema -Icon=e-module-sysinfo -X-Enlightenment-ModuleType=system diff --git a/src/modules/sysinfo/netstatus/netstatus.c b/src/modules/sysinfo/netstatus/netstatus.c deleted file mode 100644 index 045724ea8..000000000 --- a/src/modules/sysinfo/netstatus/netstatus.c +++ /dev/null @@ -1,509 +0,0 @@ -#include "netstatus.h" - -typedef struct _Thread_Config Thread_Config; - -struct _Thread_Config -{ - int interval; - Instance *inst; - Eina_Bool automax; - time_t checktime; - int inpercent; - unsigned long in; - unsigned long incurrent; - unsigned long inmax; - Eina_Stringshare *instring; - int outpercent; - unsigned long out; - unsigned long outcurrent; - unsigned long outmax; - Eina_Stringshare *outstring; - E_Powersave_Sleeper *sleeper; -}; - -static void -_netstatus_face_update(Thread_Config *thc) -{ - Edje_Message_Int_Set *msg; - - msg = malloc(sizeof(Edje_Message_Int_Set) + 6 * sizeof(int)); - EINA_SAFETY_ON_NULL_RETURN(msg); - msg->count = 6; - msg->val[0] = thc->incurrent; - msg->val[1] = thc->inpercent; - msg->val[2] = thc->inmax; - msg->val[3] = thc->outcurrent; - msg->val[4] = thc->outpercent; - msg->val[5] = thc->outmax; - edje_object_message_send(elm_layout_edje_get(thc->inst->cfg->netstatus.o_gadget), - EDJE_MESSAGE_INT_SET, 1, msg); - E_FREE(msg); - - if (thc->inst->cfg->netstatus.popup) - { - char buf[4096]; - snprintf(buf, sizeof(buf), "%s (%d %%%%)", - thc->inst->cfg->netstatus.instring, - thc->inst->cfg->netstatus.inpercent); - elm_progressbar_unit_format_set(thc->inst->cfg->netstatus.popup_inpbar, buf); - elm_progressbar_value_set(thc->inst->cfg->netstatus.popup_inpbar, - (float)thc->inst->cfg->netstatus.inpercent / 100); - memset(buf, 0x00, sizeof(buf)); - snprintf(buf, sizeof(buf), "%s (%d %%%%)", - thc->inst->cfg->netstatus.outstring, - thc->inst->cfg->netstatus.outpercent); - elm_progressbar_unit_format_set(thc->inst->cfg->netstatus.popup_outpbar, buf); - elm_progressbar_value_set(thc->inst->cfg->netstatus.popup_outpbar, - (float)thc->inst->cfg->netstatus.outpercent / 100); - } -} - -static Evas_Object * -_netstatus_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - return netstatus_configure(inst); -} - -static void -_netstatus_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - inst->cfg->netstatus.popup = NULL; -} - -static void -_netstatus_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->netstatus.popup = NULL; -} - -static void -_netstatus_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Object *label, *popup, *table, *pbar; - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - char text[4096], buf[4096]; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->netstatus.popup) - { - elm_ctxpopup_dismiss(inst->cfg->netstatus.popup); - return; - } - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", _netstatus_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _netstatus_popup_deleted, inst); - - table = elm_table_add(popup); - E_EXPAND(table); - E_FILL(table); - elm_object_content_set(popup, table); - evas_object_show(table); - - snprintf(text, sizeof(text), "%s", _("Network Throughput")); - - label = elm_label_add(table); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, text); - elm_table_pack(table, label, 0, 0, 2, 1); - evas_object_show(label); - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Receiving")); - elm_table_pack(table, label, 0, 1, 1, 1); - evas_object_show(label); - - snprintf(buf, sizeof(buf), "%s (%d %%%%)", - inst->cfg->netstatus.instring, - inst->cfg->netstatus.inpercent); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)inst->cfg->netstatus.inpercent / 100); - elm_table_pack(table, pbar, 1, 1, 1, 1); - evas_object_show(pbar); - inst->cfg->netstatus.popup_inpbar = pbar; - - label = elm_label_add(table); - E_ALIGN(label, 0.0, 0.5); - elm_object_text_set(label, _("Sending")); - elm_table_pack(table, label, 0, 2, 1, 1); - evas_object_show(label); - - memset(buf, 0x00, sizeof(buf)); - snprintf(buf, sizeof(buf), "%s (%d %%%%)", - inst->cfg->netstatus.outstring, - inst->cfg->netstatus.outpercent); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); - E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)inst->cfg->netstatus.outpercent / 100); - elm_table_pack(table, pbar, 1, 2, 1, 1); - evas_object_show(pbar); - inst->cfg->netstatus.popup_outpbar = pbar; - - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->netstatus.o_gadget); - evas_object_show(popup); - inst->cfg->netstatus.popup = popup; - } -} - -static void -_netstatus_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->cfg->netstatus.o_gadget), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - if (inst->cfg->esm == E_SYSINFO_MODULE_NETSTATUS) - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); - else - evas_object_size_hint_aspect_set(inst->cfg->netstatus.o_gadget, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_netstatus_cb_usage_check_main(void *data, Ecore_Thread *th) -{ - Thread_Config *thc = data; - for (;; ) - { - char rin[4096], rout[4096]; - - if (ecore_thread_check(th)) break; -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - _netstatus_sysctl_getstatus(thc->automax, &thc->checktime, &thc->in, &thc->incurrent, - &thc->inmax, &thc->inpercent, &thc->out, &thc->outcurrent, &thc->outmax, - &thc->outpercent); -#else - _netstatus_proc_getstatus(thc->automax, &thc->checktime, &thc->in, &thc->incurrent, - &thc->inmax, &thc->inpercent, &thc->out, &thc->outcurrent, &thc->outmax, - &thc->outpercent); -#endif - if (!thc->incurrent) - { - snprintf(rin, sizeof(rin), "0 B/s"); - } - else - { - if (thc->incurrent > 1048576) - snprintf(rin, sizeof(rin), "%.2f MB/s", ((float)thc->incurrent / 1048576)); - else if ((thc->incurrent > 1024) && (thc->incurrent < 1048576)) - snprintf(rin, sizeof(rin), "%lu KB/s", (thc->incurrent / 1024)); - else - snprintf(rin, sizeof(rin), "%lu B/s", thc->incurrent); - } - eina_stringshare_replace(&thc->instring, rin); - if (!thc->outcurrent) - { - snprintf(rout, sizeof(rout), "0 B/s"); - } - else - { - if (thc->outcurrent > 1048576) - snprintf(rout, sizeof(rout), "%.2f MB/s", ((float)thc->outcurrent / 1048576)); - else if ((thc->outcurrent > 1024) && (thc->outcurrent < 1048576)) - snprintf(rout, sizeof(rout), "%lu KB/s", (thc->outcurrent / 1024)); - else - snprintf(rout, sizeof(rout), "%lu B/s", thc->outcurrent); - } - eina_stringshare_replace(&thc->outstring, rout); - ecore_thread_feedback(th, NULL); - if (ecore_thread_check(th)) break; - e_powersave_sleeper_sleep(thc->sleeper, thc->interval); - if (ecore_thread_check(th)) break; - } -} - -static void -_netstatus_cb_usage_check_notify(void *data, - Ecore_Thread *th EINA_UNUSED, - void *msg EINA_UNUSED) -{ - Thread_Config *thc = data; - - if (!thc->inst->cfg) return; - if (thc->inst->cfg->esm != E_SYSINFO_MODULE_NETSTATUS && thc->inst->cfg->esm != E_SYSINFO_MODULE_SYSINFO) return; - - eina_stringshare_replace(&thc->inst->cfg->netstatus.instring, thc->instring); - eina_stringshare_replace(&thc->inst->cfg->netstatus.outstring, thc->outstring); - thc->inst->cfg->netstatus.inpercent = thc->inpercent; - thc->inst->cfg->netstatus.outpercent = thc->outpercent; - _netstatus_face_update(thc); -} - -static void -_netstatus_cb_usage_check_end(void *data, Ecore_Thread *th EINA_UNUSED) -{ - Thread_Config *thc = data; - e_powersave_sleeper_free(thc->sleeper); - E_FREE_FUNC(thc->instring, eina_stringshare_del); - E_FREE_FUNC(thc->outstring, eina_stringshare_del); - E_FREE(thc); -} - -static Eina_Bool -_screensaver_on(void *data) -{ - Instance *inst = data; - - if (inst->cfg->netstatus.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); - inst->cfg->netstatus.usage_check_thread = NULL; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _netstatus_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -void -_netstatus_config_updated(Instance *inst) -{ - Thread_Config *thc; - - if (inst->cfg->id == -1) - { - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->inpercent = 75; - thc->outpercent = 30; - _netstatus_face_update(thc); - E_FREE(thc); - } - return; - } - if (inst->cfg->netstatus.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); - inst->cfg->netstatus.usage_check_thread = NULL; - } - thc = E_NEW(Thread_Config, 1); - if (thc) - { - thc->inst = inst; - thc->sleeper = e_powersave_sleeper_new(); - thc->interval = inst->cfg->netstatus.poll_interval; - thc->in = 0; - thc->inmax = inst->cfg->netstatus.inmax; - thc->incurrent = 0; - thc->inpercent = 0; - thc->instring = NULL; - thc->out = 0; - thc->outmax = inst->cfg->netstatus.outmax; - thc->outcurrent = 0; - thc->outpercent = 0; - thc->outstring = NULL; - thc->automax = inst->cfg->netstatus.automax; - inst->cfg->netstatus.usage_check_thread = - ecore_thread_feedback_run(_netstatus_cb_usage_check_main, - _netstatus_cb_usage_check_notify, - _netstatus_cb_usage_check_end, - _netstatus_cb_usage_check_end, thc, EINA_TRUE); - } - e_config_save_queue(); -} - -static void -_netstatus_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - - if (inst->cfg->netstatus.popup) - E_FREE_FUNC(inst->cfg->netstatus.popup, evas_object_del); - if (inst->cfg->netstatus.configure) - E_FREE_FUNC(inst->cfg->netstatus.configure, evas_object_del); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _netstatus_removed_cb, inst); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_netstatus_remove, data); - EINA_LIST_FREE(inst->cfg->netstatus.handlers, handler) - ecore_event_handler_del(handler); - if (inst->cfg->netstatus.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); - inst->cfg->netstatus.usage_check_thread = NULL; - } - E_FREE_FUNC(inst->cfg->netstatus.instring, eina_stringshare_del); - E_FREE_FUNC(inst->cfg->netstatus.outstring, eina_stringshare_del); - - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_netstatus_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->netstatus.popup) - E_FREE_FUNC(inst->cfg->netstatus.popup, evas_object_del); - if (inst->cfg->netstatus.configure) - E_FREE_FUNC(inst->cfg->netstatus.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->netstatus.handlers, handler) - ecore_event_handler_del(handler); - if (inst->cfg->netstatus.usage_check_thread) - { - ecore_thread_cancel(inst->cfg->netstatus.usage_check_thread); - inst->cfg->netstatus.usage_check_thread = NULL; - return; - } - E_FREE_FUNC(inst->cfg->netstatus.instring, eina_stringshare_del); - E_FREE_FUNC(inst->cfg->netstatus.outstring, eina_stringshare_del); -} - -static void -_netstatus_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - e_gadget_configure_cb_set(inst->o_main, _netstatus_configure_cb); - - inst->cfg->netstatus.popup = NULL; - inst->cfg->netstatus.instring = NULL; - inst->cfg->netstatus.outstring = NULL; - inst->cfg->netstatus.inpercent = 0; - inst->cfg->netstatus.outpercent = 0; - - inst->cfg->netstatus.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->netstatus.o_gadget, - "base/theme/gadget/netstatus", - "e/gadget/netstatus/main_vert"); - else - e_theme_edje_object_set(inst->cfg->netstatus.o_gadget, "base/theme/gadget/netstatus", - "e/gadget/netstatus/main"); - E_EXPAND(inst->cfg->netstatus.o_gadget); - E_FILL(inst->cfg->netstatus.o_gadget); - elm_box_pack_end(inst->o_main, inst->cfg->netstatus.o_gadget); - evas_object_event_callback_add(inst->cfg->netstatus.o_gadget, EVAS_CALLBACK_MOUSE_UP, _netstatus_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->netstatus.o_gadget, EVAS_CALLBACK_RESIZE, _netstatus_resize_cb, inst); - evas_object_show(inst->cfg->netstatus.o_gadget); - evas_object_smart_callback_del_full(obj, "gadget_created", _netstatus_created_cb, data); - - E_LIST_HANDLER_APPEND(inst->cfg->netstatus.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->netstatus.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _netstatus_config_updated(inst); -} - -Evas_Object * -sysinfo_netstatus_create(Evas_Object *parent, Instance *inst) -{ - inst->cfg->netstatus.popup = NULL; - inst->cfg->netstatus.instring = NULL; - inst->cfg->netstatus.outstring = NULL; - inst->cfg->netstatus.inpercent = 0; - inst->cfg->netstatus.outpercent = 0; - - inst->cfg->netstatus.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->netstatus.o_gadget, "base/theme/gadget/netstatus", - "e/gadget/netstatus/main"); - E_EXPAND(inst->cfg->netstatus.o_gadget); - E_FILL(inst->cfg->netstatus.o_gadget); - evas_object_event_callback_add(inst->cfg->netstatus.o_gadget, EVAS_CALLBACK_MOUSE_UP, _netstatus_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->netstatus.o_gadget, EVAS_CALLBACK_RESIZE, _netstatus_resize_cb, inst); - evas_object_show(inst->cfg->netstatus.o_gadget); - - E_LIST_HANDLER_APPEND(inst->cfg->netstatus.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->netstatus.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _netstatus_config_updated(inst); - - return inst->cfg->netstatus.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_NETSTATUS) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_NETSTATUS; - ci->netstatus.poll_interval = 32; - ci->netstatus.automax = EINA_TRUE; - ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.send_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.instring = NULL; - ci->netstatus.outstring = NULL; - ci->netstatus.popup = NULL; - ci->netstatus.configure = NULL; - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -netstatus_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->cfg->netstatus.instring = NULL; - inst->cfg->netstatus.outstring = NULL; - inst->cfg->netstatus.popup = NULL; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", _netstatus_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _netstatus_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_netstatus_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/netstatus/netstatus.h b/src/modules/sysinfo/netstatus/netstatus.h deleted file mode 100644 index c49ca1582..000000000 --- a/src/modules/sysinfo/netstatus/netstatus.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef NETSTATUS_H -#define NETSTATUS_H - -#include "../sysinfo.h" - -typedef struct _Netstatus_Config Netstatus_Config; -struct _Netstatus_Config -{ - Instance *inst; - Evas_Object *transfer_check; - Evas_Object *receive_max; - Evas_Object *receive_units; - Evas_Object *send_max; - Evas_Object *send_units; - int receive_unit_adjust; - int send_unit_adjust; -}; - -EINTERN void _netstatus_config_updated(Instance *inst); -EINTERN void _netstatus_proc_getstatus(Eina_Bool automax, time_t *last_checked, - unsigned long *prev_in, unsigned long *prev_incurrent, unsigned long *prev_inmax, - int *prev_inpercent, unsigned long *prev_out, unsigned long *prev_outcurrent, - unsigned long *prev_outmax, int *prev_outpercent); -EINTERN void _netstatus_sysctl_getstatus(Eina_Bool automax, time_t *last_checked, - unsigned long *prev_in, unsigned long *prev_incurrent, unsigned long *prev_inmax, - int *prev_inpercent, unsigned long *prev_out, unsigned long *prev_outcurrent, - unsigned long *prev_outmax, int *prev_outpercent); -EINTERN Evas_Object *netstatus_configure(Instance *inst); -#endif diff --git a/src/modules/sysinfo/netstatus/netstatus_config.c b/src/modules/sysinfo/netstatus/netstatus_config.c deleted file mode 100644 index 36aac0ceb..000000000 --- a/src/modules/sysinfo/netstatus/netstatus_config.c +++ /dev/null @@ -1,419 +0,0 @@ -#include "netstatus.h" - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - - E_FREE_FUNC(inst->cfg->netstatus.configure, evas_object_del); - E_FREE(nc); - e_config_save_queue(); -} - -static void -_poll_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->netstatus.poll_interval = 4; - break; - - case 1: - inst->cfg->netstatus.poll_interval = 8; - break; - - case 2: - inst->cfg->netstatus.poll_interval = 32; - break; - - case 3: - inst->cfg->netstatus.poll_interval = 64; - break; - - case 4: - inst->cfg->netstatus.poll_interval = 256; - break; - - default: - inst->cfg->netstatus.poll_interval = 32; - } - - e_config_save_queue(); - _netstatus_config_updated(inst); -} - -static void -_update_receive_maximums(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - int value = elm_slider_value_get(nc->receive_max); - - inst->cfg->netstatus.inmax = value * nc->receive_unit_adjust; - e_config_save_queue(); - _netstatus_config_updated(inst); -} - -static void -_update_send_maximums(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - int value = elm_slider_value_get(nc->send_max); - - inst->cfg->netstatus.outmax = value * nc->send_unit_adjust; - e_config_save_queue(); - _netstatus_config_updated(inst); -} - -static void -_receive_hover_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - const char *txt = elm_object_item_text_get(event_info); - - if (!strcmp(txt, _("Bytes"))) - { - inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_BYTES; - nc->receive_unit_adjust = 1; - } - if (!strcmp(txt, _("KB"))) - { - inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_KB; - nc->receive_unit_adjust = 1024; - } - if (!strcmp(txt, _("MB"))) - { - inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_MB; - nc->receive_unit_adjust = 2048; - } - if (!strcmp(txt, _("GB"))) - { - inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_GB; - nc->receive_unit_adjust = 3072; - } - _update_receive_maximums(nc, NULL, NULL); -} - -static void -_send_hover_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - const char *txt = elm_object_item_text_get(event_info); - - if (!strcmp(txt, _("Bytes"))) - { - inst->cfg->netstatus.send_units = NETSTATUS_UNIT_BYTES; - nc->send_unit_adjust = 1; - } - if (!strcmp(txt, _("KB"))) - { - inst->cfg->netstatus.send_units = NETSTATUS_UNIT_KB; - nc->send_unit_adjust = 1024; - } - if (!strcmp(txt, _("MB"))) - { - inst->cfg->netstatus.send_units = NETSTATUS_UNIT_MB; - nc->send_unit_adjust = 2048; - } - if (!strcmp(txt, _("GB"))) - { - inst->cfg->netstatus.send_units = NETSTATUS_UNIT_GB; - nc->send_unit_adjust = 3072; - } - _update_send_maximums(nc, NULL, NULL); -} - -static void -_check_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Netstatus_Config *nc = data; - Instance *inst = nc->inst; - - if (elm_check_state_get(nc->transfer_check)) - { - elm_object_disabled_set(nc->receive_max, EINA_TRUE); - elm_object_disabled_set(nc->receive_units, EINA_TRUE); - elm_object_disabled_set(nc->send_max, EINA_TRUE); - elm_object_disabled_set(nc->send_units, EINA_TRUE); - inst->cfg->netstatus.automax = EINA_TRUE; - } - else - { - elm_object_disabled_set(nc->receive_max, EINA_FALSE); - elm_object_disabled_set(nc->receive_units, EINA_FALSE); - elm_object_disabled_set(nc->send_max, EINA_FALSE); - elm_object_disabled_set(nc->send_units, EINA_FALSE); - inst->cfg->netstatus.automax = EINA_FALSE; - _update_receive_maximums(nc, NULL, NULL); - _update_send_maximums(nc, NULL, NULL); - } -} - -Evas_Object * -netstatus_configure(Instance *inst) -{ - Evas_Object *popup, *frame, *main_box, *box, *o, *group, *lbl; - Evas_Object *hover, *slider, *check; - E_Zone *zone = e_zone_current_get(); - Netstatus_Config *nc = E_NEW(Netstatus_Config, 1); - - nc->inst = inst; - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - main_box = elm_box_add(popup); - elm_box_horizontal_set(main_box, EINA_FALSE); - E_EXPAND(main_box); - E_FILL(main_box); - evas_object_show(main_box); - elm_object_content_set(popup, main_box); - - lbl = elm_label_add(main_box); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("NetStatus Configuration")); - elm_box_pack_end(main_box, lbl); - evas_object_show(lbl); - - frame = elm_frame_add(main_box); - elm_object_text_set(frame, _("Update Poll Interval")); - E_EXPAND(frame); - E_FILL(frame); - elm_box_pack_end(main_box, frame); - evas_object_show(frame); - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, nc); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, nc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, nc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, nc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_EXPAND(o); - E_ALIGN(o, 0, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, nc); - evas_object_show(o); - - switch (inst->cfg->netstatus.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - - frame = elm_frame_add(main_box); - elm_object_text_set(frame, _("Maximum Throughput")); - E_EXPAND(frame); - E_FILL(frame); - elm_box_pack_end(main_box, frame); - evas_object_show(frame); - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - check = elm_check_add(box); - elm_object_text_set(check, _("Use Automatic Maximums")); - elm_check_state_set(check, inst->cfg->netstatus.automax); - evas_object_size_hint_align_set(check, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(check, "changed", _check_changed, nc); - elm_box_pack_end(box, check); - evas_object_show(check); - nc->transfer_check = check; - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("Receive:")); - elm_slider_unit_format_set(slider, "%1.0f"); - elm_slider_indicator_format_set(slider, "%1.0f"); - elm_slider_min_max_set(slider, 0, 1000); - elm_slider_value_set(slider, inst->cfg->netstatus.inmax); - elm_slider_step_set(slider, 0.05); - elm_slider_span_size_set(slider, 100); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_receive_maximums, nc); - if (inst->cfg->netstatus.automax) elm_object_disabled_set(slider, EINA_TRUE); - elm_box_pack_end(box, slider); - evas_object_show(slider); - nc->receive_max = slider; - - hover = elm_hoversel_add(box); - elm_hoversel_auto_update_set(hover, EINA_TRUE); - elm_hoversel_hover_parent_set(hover, popup); - elm_hoversel_item_add(hover, _("Bytes"), NULL, ELM_ICON_NONE, NULL, NULL); - if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_BYTES) - { - elm_object_text_set(hover, _("Bytes")); - nc->receive_unit_adjust = 1; - } - elm_hoversel_item_add(hover, _("KB"), NULL, ELM_ICON_NONE, NULL, NULL); - if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_KB) - { - elm_object_text_set(hover, _("KB")); - nc->receive_unit_adjust = 1024; - } - elm_hoversel_item_add(hover, _("MB"), NULL, ELM_ICON_NONE, NULL, NULL); - if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_MB) - { - elm_object_text_set(hover, _("MB")); - nc->receive_unit_adjust = 2048; - } - elm_hoversel_item_add(hover, _("GB"), NULL, ELM_ICON_NONE, NULL, NULL); - if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_GB) - { - elm_object_text_set(hover, _("GB")); - nc->receive_unit_adjust = 3072; - } - evas_object_size_hint_align_set(hover, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(hover, EVAS_HINT_EXPAND, 0.0); - if (inst->cfg->netstatus.automax) elm_object_disabled_set(hover, EINA_TRUE); - evas_object_smart_callback_add(hover, "selected", _receive_hover_changed, nc); - elm_box_pack_end(box, hover); - evas_object_show(hover); - nc->receive_units = hover; - - elm_slider_value_set(nc->receive_max, ceil((double)inst->cfg->netstatus.inmax / (double)nc->receive_unit_adjust)); - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("Send:")); - elm_slider_unit_format_set(slider, "%1.0f"); - elm_slider_indicator_format_set(slider, "%1.0f"); - elm_slider_min_max_set(slider, 0, 1000); - elm_slider_value_set(slider, inst->cfg->netstatus.outmax); - elm_slider_step_set(slider, 0.05); - elm_slider_span_size_set(slider, 100); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_send_maximums, nc); - if (inst->cfg->netstatus.automax) elm_object_disabled_set(slider, EINA_TRUE); - elm_box_pack_end(box, slider); - evas_object_show(slider); - nc->send_max = slider; - - hover = elm_hoversel_add(box); - elm_hoversel_auto_update_set(hover, EINA_TRUE); - elm_hoversel_hover_parent_set(hover, popup); - elm_hoversel_item_add(hover, _("Bytes"), NULL, ELM_ICON_NONE, NULL, nc); - if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_BYTES) - { - elm_object_text_set(hover, _("Bytes")); - nc->send_unit_adjust = 1; - } - elm_hoversel_item_add(hover, _("KB"), NULL, ELM_ICON_NONE, NULL, nc); - if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_KB) - { - elm_object_text_set(hover, _("KB")); - nc->send_unit_adjust = 1024; - } - elm_hoversel_item_add(hover, _("MB"), NULL, ELM_ICON_NONE, NULL, nc); - if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_MB) - { - elm_object_text_set(hover, _("MB")); - nc->send_unit_adjust = 2048; - } - elm_hoversel_item_add(hover, _("GB"), NULL, ELM_ICON_NONE, NULL, nc); - if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_GB) - { - elm_object_text_set(hover, _("GB")); - nc->send_unit_adjust = 3072; - } - evas_object_size_hint_align_set(hover, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(hover, EVAS_HINT_EXPAND, 0.0); - if (inst->cfg->netstatus.automax) elm_object_disabled_set(hover, EINA_TRUE); - evas_object_smart_callback_add(hover, "selected", _send_hover_changed, nc); - elm_box_pack_end(box, hover); - evas_object_show(hover); - nc->send_units = hover; - - elm_slider_value_set(nc->send_max, ceil((double)inst->cfg->netstatus.outmax / (double)nc->send_unit_adjust)); - - elm_object_content_set(frame, box); - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, nc); - - return inst->cfg->netstatus.configure = popup; -} - diff --git a/src/modules/sysinfo/netstatus/netstatus_proc.c b/src/modules/sysinfo/netstatus/netstatus_proc.c deleted file mode 100644 index 29de6e39b..000000000 --- a/src/modules/sysinfo/netstatus/netstatus_proc.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "netstatus.h" - -void -_netstatus_proc_getstatus(Eina_Bool automax, - time_t *last_checked, - unsigned long *prev_in, - unsigned long *prev_incurrent, - unsigned long *prev_inmax, - int *prev_inpercent, - unsigned long *prev_out, - unsigned long *prev_outcurrent, - unsigned long *prev_outmax, - int *prev_outpercent) -{ - unsigned long in, out, dummy, tot_in = 0, tot_out = 0; - unsigned long diffin, diffout; - int percent = 0; - char buf[4096], dummys[64]; - FILE *f; - time_t current = time(NULL); - time_t diff = 0; - - if (!*last_checked) - *last_checked = current; - if ((current - *last_checked) < 1) - return; - else - diff = current - *last_checked; - - f = fopen("/proc/net/dev", "r"); - if (f) - { - while (fgets(buf, sizeof(buf), f) != NULL) - { - if (sscanf(buf, "%s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu " - "%lu %lu %lu %lu\n", dummys, &in, &dummy, &dummy, - &dummy, &dummy, &dummy, &dummy, &dummy, &out, &dummy, - &dummy, &dummy, &dummy, &dummy, &dummy, &dummy) < 17) - continue; - tot_in += in; - tot_out += out; - } - fclose(f); - } - - diffin = tot_in - *prev_in; - if (diff > 1) - diffin /= diff; - if (!*prev_in) - *prev_in = tot_in; - else - { - *prev_in = tot_in; - if (automax) - { - if (diffin > *prev_inmax) - *prev_inmax = diffin; - } - *prev_incurrent = diffin; - if (*prev_inmax > 0) - percent = 100 * ((float)*prev_incurrent / (float)*prev_inmax); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - *prev_inpercent = percent; - } - - percent = 0; - - diffout = tot_out - *prev_out; - if (diff > 1) - diffout /= diff; - if (!*prev_out) - *prev_out = tot_out; - else - { - *prev_out = tot_out; - if (automax) - { - if (diffout > *prev_outmax) - *prev_outmax = diffout; - } - *prev_outcurrent = diffout; - if (*prev_outcurrent > 0) - percent = 100 * ((float)*prev_outcurrent / (float)*prev_outmax); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - *prev_outpercent = percent; - } - *last_checked = current; -} - diff --git a/src/modules/sysinfo/netstatus/netstatus_sysctl.c b/src/modules/sysinfo/netstatus/netstatus_sysctl.c deleted file mode 100644 index 63cddb8cd..000000000 --- a/src/modules/sysinfo/netstatus/netstatus_sysctl.c +++ /dev/null @@ -1,188 +0,0 @@ -#include "netstatus.h" -#if defined(__FreeBSD__) || defined(__DragonFly__) -# include -# include -# include -# include -#endif - -#if defined(__OpenBSD__) -# include -# include -# include -# include -# include -# include -# include -# include -#endif - -#if defined(__FreeBSD__) || defined(__DragonFly__) - -static int -get_ifmib_general(int row, struct ifmibdata *data) -{ - int mib[6]; - size_t len; - - mib[0] = CTL_NET; - mib[1] = PF_LINK; - mib[2] = NETLINK_GENERIC; - mib[3] = IFMIB_IFDATA; - mib[4] = row; - mib[5] = IFDATA_GENERAL; - - len = sizeof(*data); - - return sysctl(mib, 6, data, &len, NULL, 0); -} - -static void -_freebsd_generic_network_status(unsigned long int *in, unsigned long int *out) -{ - struct ifmibdata *ifmd; - size_t len; - int i, count; - - len = sizeof(count); - if (sysctlbyname("net.link.generic.system.ifcount", &count, &len, NULL, 0) < 0) - return; - - ifmd = malloc(sizeof(struct ifmibdata)); - if (!ifmd) - return; - - for (i = 1; i <= count; i++) - { - get_ifmib_general(i, ifmd); - *in += ifmd->ifmd_data.ifi_ibytes; - *out += ifmd->ifmd_data.ifi_obytes; - } - - free(ifmd); -} - -#endif - -#if defined(__OpenBSD__) -static void -_openbsd_generic_network_status(unsigned long int *in, unsigned long int *out) -{ - struct ifaddrs *interfaces, *ifa; - - if (getifaddrs(&interfaces) < 0) - return; - - int sock = socket(AF_INET, SOCK_STREAM, 0); - if (sock < 0) - return; - - for (ifa = interfaces; ifa; ifa = ifa->ifa_next) - { - struct ifreq ifreq; - struct if_data if_data; - - ifreq.ifr_data = (void *)&if_data; - strncpy(ifreq.ifr_name, ifa->ifa_name, IFNAMSIZ - 1); - if (ioctl(sock, SIOCGIFDATA, &ifreq) < 0) - return; - - struct if_data *const ifi = &if_data; - if (ifi->ifi_type == IFT_ETHER || ifi->ifi_type == IFT_IEEE80211) - { - if (ifi->ifi_ibytes) - *in += ifi->ifi_ibytes; - else - *in += 0; - - if (ifi->ifi_obytes) - *out += ifi->ifi_obytes; - else - *out += 0; - } - } - close(sock); -} - -#endif - -void -_netstatus_sysctl_getstatus(Eina_Bool automax, - time_t *last_checked, - unsigned long *prev_in, - unsigned long *prev_incurrent, - unsigned long *prev_inmax, - int *prev_inpercent, - unsigned long *prev_out, - unsigned long *prev_outcurrent, - unsigned long *prev_outmax, - int *prev_outpercent) -{ - unsigned long tot_out = 0, tot_in = 0, diffin, diffout; - int percent = 0; - unsigned long int incoming = 0, outgoing = 0; - time_t current = time(NULL); - time_t diff = 0; -#if defined(__OpenBSD__) - _openbsd_generic_network_status(&incoming, &outgoing); -#elif defined(__FreeBSD__) || defined(__DragonFly__) - _freebsd_generic_network_status(&incoming, &outgoing); -#endif - if (!*last_checked) - *last_checked = current; - if ((current - *last_checked) < 1) - return; - else - diff = current - *last_checked; - - tot_in = incoming; - tot_out = outgoing; - - diffin = tot_in - *prev_in; - if (diff > 1) - diffin /= diff; - if (!*prev_in) - *prev_in = tot_in; - else - { - *prev_in = tot_in; - if (automax) - { - if (diffin > *prev_inmax) - *prev_inmax = diffin; - } - *prev_incurrent = diffin; - if (*prev_inmax > 0) - percent = 100 * ((float)*prev_incurrent / (float)*prev_inmax); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - *prev_inpercent = percent; - } - - percent = 0; - - diffout = tot_out - *prev_out; - if (diff > 1) - diffout /= diff; - if (!*prev_out) - *prev_out = tot_out; - else - { - *prev_out = tot_out; - if (automax) - { - if (diffout > *prev_outmax) - *prev_outmax = diffout; - } - *prev_outcurrent = diffout; - if (*prev_outcurrent > 0) - percent = 100 * ((float)*prev_outcurrent / (float)*prev_outmax); - if (percent > 100) percent = 100; - else if (percent < 0) - percent = 0; - *prev_outpercent = percent; - } - *last_checked = current; -} - diff --git a/src/modules/sysinfo/sysinfo.c b/src/modules/sysinfo/sysinfo.c deleted file mode 100644 index c5c42fa7b..000000000 --- a/src/modules/sysinfo/sysinfo.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "sysinfo.h" - -static void _sysinfo_deleted_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); - -static void -_sysinfo_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - - if (!inst) return; - if (inst->o_main != event_data) return; - sysinfo_batman_remove(inst, NULL, NULL, NULL); - sysinfo_thermal_remove(inst, NULL, NULL, NULL); - sysinfo_cpuclock_remove(inst, NULL, NULL, NULL); - sysinfo_cpumonitor_remove(inst, NULL, NULL, NULL); - sysinfo_memusage_remove(inst, NULL, NULL, NULL); - sysinfo_netstatus_remove(inst, NULL, NULL, NULL); - - evas_object_smart_callback_del_full(e_gadget_site_get(obj), "gadget_removed", _sysinfo_removed_cb, inst); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, _sysinfo_deleted_cb, data); - if (inst->cfg) - { - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); - } -} - -static void -_sysinfo_deleted_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - sysinfo_batman_remove(inst, NULL, NULL, NULL); - sysinfo_thermal_remove(inst, NULL, NULL, NULL); - sysinfo_cpuclock_remove(inst, NULL, NULL, NULL); - sysinfo_cpumonitor_remove(inst, NULL, NULL, NULL); - sysinfo_memusage_remove(inst, NULL, NULL, NULL); - sysinfo_netstatus_remove(inst, NULL, NULL, NULL); -} - -static void -_sysinfo_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - - inst->o_table = elm_table_add(inst->o_main); - elm_table_homogeneous_set(inst->o_table, EINA_FALSE); - E_EXPAND(inst->o_table); - elm_object_content_set(inst->o_main, inst->o_table); - evas_object_show(inst->o_table); - - inst->cfg->sysinfo.o_batman = sysinfo_batman_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_batman, 0, 0, 1, 1); - inst->cfg->sysinfo.o_cpuclock = sysinfo_cpuclock_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_cpuclock, 1, 0, 1, 1); - inst->cfg->sysinfo.o_cpumonitor = sysinfo_cpumonitor_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_cpumonitor, 0, 1, 1, 1); - inst->cfg->sysinfo.o_memusage = sysinfo_memusage_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_memusage, 1, 1, 1, 1); - inst->cfg->sysinfo.o_thermal = sysinfo_thermal_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_thermal, 0, 2, 1, 1); - inst->cfg->sysinfo.o_netstatus = sysinfo_netstatus_create(inst->o_table, inst); - elm_table_pack(inst->o_table, inst->cfg->sysinfo.o_netstatus, 1, 2, 1, 1); - - evas_object_smart_callback_del_full(obj, "gadget_created", _sysinfo_created_cb, data); -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_SYSINFO) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_SYSINFO; - ci->batman.poll_interval = 512; - ci->batman.alert = 30; - ci->batman.alert_p = 10; - ci->batman.alert_timeout = 0; - ci->batman.suspend_below = 0; - ci->batman.force_mode = 0; - ci->batman.full = -2; - ci->batman.time_left = -2; - ci->batman.have_battery = -2; - ci->batman.have_power = -2; -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__) - ci->batman.fuzzy = 0; -#endif - ci->batman.desktop_notifications = 0; - ci->batman.popup = NULL; - ci->batman.configure = NULL; - ci->thermal.poll_interval = 128; - ci->thermal.low = 30; - ci->thermal.high = 80; - ci->thermal.sensor_type = SENSOR_TYPE_NONE; - ci->thermal.sensor_name = NULL; - ci->thermal.units = CELSIUS; - ci->thermal.popup = NULL; - ci->thermal.configure = NULL; - ci->cpuclock.poll_interval = 32; - ci->cpuclock.restore_governor = 0; - ci->cpuclock.auto_powersave = 1; - ci->cpuclock.powersave_governor = NULL; - ci->cpuclock.governor = NULL; - ci->cpuclock.pstate_min = 1; - ci->cpuclock.pstate_max = 101; - ci->cpuclock.popup = NULL; - ci->cpuclock.configure = NULL; - ci->cpumonitor.poll_interval = 32; - ci->cpumonitor.percent = 0; - ci->cpumonitor.popup = NULL; - ci->cpumonitor.configure = NULL; - ci->memusage.poll_interval = 32; - ci->memusage.mem_percent = 0; - ci->memusage.swp_percent = 0; - ci->memusage.popup = NULL; - ci->memusage.configure = NULL; - ci->netstatus.poll_interval = 32; - ci->netstatus.instring = NULL; - ci->netstatus.outstring = NULL; - ci->netstatus.popup = NULL; - ci->netstatus.configure = NULL; - ci->netstatus.automax = EINA_TRUE; - ci->netstatus.inmax = 0; - ci->netstatus.outmax = 0; - ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES; - ci->netstatus.send_units = NETSTATUS_UNIT_BYTES; - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -sysinfo_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - if (orient) return NULL; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - - inst->o_main = elm_scroller_add(parent); - elm_object_style_set(inst->o_main, "no_inset_shadow"); - E_EXPAND(inst->o_main); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, _sysinfo_deleted_cb, inst); - evas_object_show(inst->o_main); - - evas_object_smart_callback_add(parent, "gadget_created", _sysinfo_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _sysinfo_removed_cb, inst); - - if (inst->cfg->id < 0) return inst->o_main; - - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h deleted file mode 100644 index c6a75daeb..000000000 --- a/src/modules/sysinfo/sysinfo.h +++ /dev/null @@ -1,302 +0,0 @@ -#ifndef SYSINFO_H -#define SYSINFO_H - -#include "e.h" -#if defined(HAVE_EEZE) -# include -#else -# include -#endif - -E_API extern E_Module_Api e_modapi; - -E_API void *e_modapi_init (E_Module *m); -E_API int e_modapi_shutdown (E_Module *m); -E_API int e_modapi_save (E_Module *m); - -typedef enum _E_Sysinfo_Module E_Sysinfo_Module; -enum _E_Sysinfo_Module -{ - E_SYSINFO_MODULE_NONE = 0, - E_SYSINFO_MODULE_BATMAN , - E_SYSINFO_MODULE_THERMAL, - E_SYSINFO_MODULE_CPUCLOCK, - E_SYSINFO_MODULE_CPUMONITOR, - E_SYSINFO_MODULE_MEMUSAGE, - E_SYSINFO_MODULE_NETSTATUS, - E_SYSINFO_MODULE_SYSINFO -}; - -typedef enum _Netstatus_Unit Netstatus_Unit; -enum _Netstatus_Unit -{ - NETSTATUS_UNIT_BYTES = 0, - NETSTATUS_UNIT_KB, - NETSTATUS_UNIT_MB, - NETSTATUS_UNIT_GB -}; - -typedef enum _Sensor_Type -{ - SENSOR_TYPE_NONE, -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) - SENSOR_TYPE_FREEBSD, - SENSOR_TYPE_OPENBSD, -#else - SENSOR_TYPE_OMNIBOOK, - SENSOR_TYPE_LINUX_MACMINI, - SENSOR_TYPE_LINUX_I2C, - SENSOR_TYPE_LINUX_ACPI, - SENSOR_TYPE_LINUX_PCI, - SENSOR_TYPE_LINUX_PBOOK, - SENSOR_TYPE_LINUX_INTELCORETEMP, - SENSOR_TYPE_LINUX_THINKPAD, - SENSOR_TYPE_LINUX_SYS -#endif -} Sensor_Type; - -typedef enum _Unit -{ - CELSIUS, - FAHRENHEIT -} Unit; - -typedef struct _Tempthread Tempthread; -typedef struct _Cpu_Status Cpu_Status; -typedef struct _CPU_Core CPU_Core; -typedef struct _Config Config; -typedef struct _Config_Item Config_Item; -typedef struct _Instance Instance; - -struct _Tempthread -{ - Instance *inst; - int poll_interval; - Sensor_Type sensor_type; - const char *sensor_name; - const char *sensor_path; - void *extn; - E_Powersave_Sleeper *sleeper; -#if defined(HAVE_EEZE) - Eina_List *tempdevs; -#endif - Eina_Bool initted E_BITFIELD; -}; - -struct _Cpu_Status -{ - Eina_List *frequencies; - Eina_List *governors; - int cur_frequency; -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - int cur_percent; -#endif - int cur_min_frequency; - int cur_max_frequency; - int can_set_frequency; - int pstate_min; - int pstate_max; - char *cur_governor; - const char *orig_governor; - unsigned char active; - unsigned char pstate; - unsigned char pstate_turbo; -}; - -struct _CPU_Core -{ - int percent; - long total; - long idle; - Evas_Object *layout; -}; - -struct _Config -{ - Eina_List *items; - - E_Module *module; - Evas_Object *config_dialog; -}; - -struct _Config_Item -{ - int id; - int version; - E_Sysinfo_Module esm; - struct - { - Evas_Object *o_gadget; - Evas_Object *popup; - Evas_Object *configure; - /* saved * loaded config values */ - int poll_interval; - int alert; /* Alert on minutes remaining */ - int alert_p; /* Alert on percentage remaining */ - int alert_timeout; /* Popup dismissal timeout */ - int suspend_below; /* Suspend if battery drops below this level */ - int suspend_method; /* Method used to suspend the machine */ - int force_mode; /* force use of batget or hal */ - /* just config state */ - Ecore_Timer *alert_timer; - int full; - int time_left; - int have_battery; - int have_power; - int desktop_notifications; - Eina_List *handlers; - Eina_Bool done; -#if defined(HAVE_EEZE) - Eeze_Udev_Watch *acwatch; - Eeze_Udev_Watch *batwatch; -#endif -#if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__) - Eina_Bool fuzzy; - int fuzzcount; -#endif - } batman; - struct - { - Evas_Object *o_gadget; - Evas_Object *configure; - Evas_Object *popup; - Evas_Object *popup_pbar; - int poll_interval; - int low, high; - int sensor_type; - int temp; - int percent; - const char *sensor_name; - Unit units; -#if defined(HAVE_EEZE) - Ecore_Poller *poller; - Tempthread *tth; -#endif - Ecore_Thread *th; - - Eina_Bool have_temp E_BITFIELD; - Eina_List *handlers; - Eina_Bool defer; - Eina_Bool done; - } thermal; - struct - { - Evas_Object *o_gadget; - Evas_Object *popup; - Evas_Object *popup_pbar; - Evas_Object *configure; - int poll_interval; - int restore_governor; - int auto_powersave; - int percent; - int tot_min_frequency; - int tot_max_frequency; - const char *powersave_governor; - const char *governor; - int pstate_min; - int pstate_max; - Cpu_Status *status; - Ecore_Thread *frequency_check_thread; - Eina_List *handlers; - } cpuclock; - struct - { - Evas_Object *o_gadget; - Evas_Object *o_gadget_box; - Evas_Object *event; - Evas_Object *popup; - Evas_Object *popup_pbar; - Evas_Object *configure; - int poll_interval; - int percent; - int cores; - - Ecore_Thread *usage_check_thread; - Eina_List *handlers; - } cpumonitor; - struct - { - Evas_Object *o_gadget; - Evas_Object *popup; - Evas_Object *configure; - int poll_interval; - int mem_percent; - int swp_percent; - unsigned long mem_total; - unsigned long mem_used; - unsigned long mem_cached; - unsigned long mem_buffers; - unsigned long mem_shared; - unsigned long swp_total; - unsigned long swp_used; - Ecore_Thread *usage_check_thread; - Eina_List *handlers; - } memusage; - struct - { - Evas_Object *o_gadget; - Evas_Object *popup; - Evas_Object *popup_inpbar; - Evas_Object *popup_outpbar; - Evas_Object *configure; - Eina_Bool automax; - Netstatus_Unit receive_units; - Netstatus_Unit send_units; - int poll_interval; - int inpercent; - int outpercent; - unsigned long inmax; - unsigned long outmax; - Ecore_Thread *usage_check_thread; - Eina_List *handlers; - Eina_Stringshare *instring; - Eina_Stringshare *outstring; - } netstatus; - struct { - Evas_Object *o_batman; - Evas_Object *o_thermal; - Evas_Object *o_cpuclock; - Evas_Object *o_cpumonitor; - Evas_Object *o_memusage; - Evas_Object *o_netstatus; - } sysinfo; -}; - -struct _Instance -{ - Evas_Object *o_main; - Evas_Object *o_table; - Evas_Object *popup_battery; - Evas_Object *warning; - Config_Item *cfg; - unsigned int notification_id; -}; - -EINTERN Evas_Object *config_sysinfo(E_Zone *zone, Instance *inst, E_Sysinfo_Module esm); -EINTERN Evas_Object *batman_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *thermal_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *cpuclock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *cpumonitor_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *memusage_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *netstatus_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *sysinfo_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); - -EINTERN Evas_Object *config_sysinfo(E_Zone *zone, Instance *inst, E_Sysinfo_Module esm); -EINTERN Evas_Object *sysinfo_batman_create(Evas_Object *parent, Instance *inst); -EINTERN Evas_Object *sysinfo_thermal_create(Evas_Object *parent, Instance *inst); -EINTERN Evas_Object *sysinfo_cpuclock_create(Evas_Object *parent, Instance *inst); -EINTERN Evas_Object *sysinfo_cpumonitor_create(Evas_Object *parent, Instance *inst); -EINTERN Evas_Object *sysinfo_memusage_create(Evas_Object *parent, Instance *inst); -EINTERN Evas_Object *sysinfo_netstatus_create(Evas_Object *parent, Instance *inst); - -EINTERN void sysinfo_batman_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); -EINTERN void sysinfo_thermal_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); -EINTERN void sysinfo_cpuclock_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); -EINTERN void sysinfo_cpumonitor_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); -EINTERN void sysinfo_memusage_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); -EINTERN void sysinfo_netstatus_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED); - -EINTERN extern Config *sysinfo_config; -EINTERN extern Eina_List *sysinfo_instances; - -#endif diff --git a/src/modules/sysinfo/thermal/thermal.c b/src/modules/sysinfo/thermal/thermal.c deleted file mode 100644 index 8cf533786..000000000 --- a/src/modules/sysinfo/thermal/thermal.c +++ /dev/null @@ -1,509 +0,0 @@ -#include "thermal.h" - -static void -_thermal_thread_free(Tempthread *tth) -{ -#if defined(HAVE_EEZE) - const char *s; -#endif - if (!tth) return; - - eina_stringshare_del(tth->sensor_name); - eina_stringshare_del(tth->sensor_path); -#if defined(HAVE_EEZE) - EINA_LIST_FREE(tth->tempdevs, s) - eina_stringshare_del(s); -#endif - e_powersave_sleeper_free(tth->sleeper); - E_FREE(tth->extn); - E_FREE(tth); -} - -static void -_thermal_face_level_set(Instance *inst, double level) -{ - Edje_Message_Float msg; - - if (level < 0.0) level = 0.0; - else if (level > 1.0) - level = 1.0; - inst->cfg->thermal.percent = level * 100; - msg.val = level; - edje_object_message_send(elm_layout_edje_get(inst->cfg->thermal.o_gadget), EDJE_MESSAGE_FLOAT, 1, &msg); -} - -static void -_thermal_apply(Instance *inst, int temp) -{ - if (inst->cfg->thermal.temp == temp) return; - inst->cfg->thermal.temp = temp; - if (temp != -999) - { - if (inst->cfg->thermal.units == FAHRENHEIT) temp = (temp * 9.0 / 5.0) + 32; - - if (!inst->cfg->thermal.have_temp) - { - /* enable therm object */ - elm_layout_signal_emit(inst->cfg->thermal.o_gadget, "e,state,known", ""); - inst->cfg->thermal.have_temp = EINA_TRUE; - } - - _thermal_face_level_set(inst, - (double)(temp - inst->cfg->thermal.low) / - (double)(inst->cfg->thermal.high - inst->cfg->thermal.low)); - } - else - { - if (inst->cfg->thermal.have_temp) - { - /* disable therm object */ - elm_layout_signal_emit(inst->cfg->thermal.o_gadget, "e,state,unknown", ""); - _thermal_face_level_set(inst, 0.5); - inst->cfg->thermal.have_temp = EINA_FALSE; - } - } - if (inst->cfg->thermal.popup) - { - char buf[4096]; - - if (inst->cfg->thermal.units == FAHRENHEIT) - snprintf(buf, sizeof(buf), "%d F (%d %%%%)", - (int)((inst->cfg->thermal.temp * 9.0 / 5.0) + 32), - inst->cfg->thermal.percent); - else - snprintf(buf, sizeof(buf), "%d C (%d %%%%)", - (int)inst->cfg->thermal.temp, - inst->cfg->thermal.percent); - elm_progressbar_unit_format_set(inst->cfg->thermal.popup_pbar, buf); - elm_progressbar_value_set(inst->cfg->thermal.popup_pbar, - (float)inst->cfg->thermal.percent / 100); - } -} - -#if defined(HAVE_EEZE) -static Eina_Bool -_thermal_udev_poll(void *data) -{ - Tempthread *tth = data; - int temp = thermal_udev_get(tth); - - _thermal_apply(tth->inst, temp); - return EINA_TRUE; -} - -#endif - -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) -static void -_thermal_check_sysctl(void *data, Ecore_Thread *th) -{ - Tempthread *tth = data; - int ptemp = -500, temp; - - for (;; ) - { - if (ecore_thread_check(th)) break; - temp = thermal_sysctl_get(tth); - if (ptemp != temp) ecore_thread_feedback(th, (void *)((long)temp)); - ptemp = temp; - e_powersave_sleeper_sleep(tth->sleeper, tth->poll_interval); - if (ecore_thread_check(th)) break; - } -} - -#endif - -#if !defined(HAVE_EEZE) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) -static void -_thermal_check_fallback(void *data, Ecore_Thread *th) -{ - Tempthread *tth = data; - int ptemp = -500, temp; - for (;; ) - { - if (ecore_thread_check(th)) break; - temp = thermal_fallback_get(tth); - if (ptemp != temp) ecore_thread_feedback(th, (void *)((long)temp)); - ptemp = temp; - e_powersave_sleeper_sleep(tth->sleeper, tth->poll_interval); - if (ecore_thread_check(th)) break; - } -} - -#endif - -#if !defined(HAVE_EEZE) -static void -_thermal_check_notify(void *data, Ecore_Thread *th, void *msg) -{ - Tempthread *tth = data; - int temp = (int)((long)msg); - if (th != tth->inst->cfg->thermal.th) return; - _thermal_apply(tth->inst, temp); -} - -static void -_thermal_check_done(void *data, Ecore_Thread *th EINA_UNUSED) -{ - Tempthread *tth = data; - _thermal_thread_free(tth); -} - -#endif - -static Evas_Object * -_thermal_configure_cb(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "Instance"); - - if (!sysinfo_config) return NULL; - return thermal_configure(inst); -} - -static void -_thermal_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - E_FREE_FUNC(obj, evas_object_del); - - inst->cfg->thermal.popup = NULL; - inst->cfg->thermal.popup_pbar = NULL; -} - -static void -_thermal_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->cfg->thermal.popup = NULL; -} - -static Evas_Object * -_thermal_popup_create(Instance *inst) -{ - Evas_Object *popup, *table, *label, *pbar; - char text[4096], buf[100]; - - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", - _thermal_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, - _thermal_popup_deleted, inst); - - table = elm_table_add(popup); - E_EXPAND(table); - E_FILL(table); - elm_object_content_set(popup, table); - evas_object_show(table); - - snprintf(text, sizeof(text), "%s", _("Temperature")); - - label = elm_label_add(table); - E_EXPAND(label); E_ALIGN(label, 0.5, 0.5); - elm_object_text_set(label, text); - elm_table_pack(table, label, 0, 0, 2, 1); - evas_object_show(label); - - if (inst->cfg->thermal.units == FAHRENHEIT) - snprintf(buf, sizeof(buf), "%d F (%d %%%%)", - (int)((inst->cfg->thermal.temp * 9.0 / 5.0) + 32), - inst->cfg->thermal.percent); - else - snprintf(buf, sizeof(buf), "%d C (%d %%%%)", - (int)inst->cfg->thermal.temp, - inst->cfg->thermal.percent); - - pbar = elm_progressbar_add(table); - E_EXPAND(pbar); E_FILL(pbar); - elm_progressbar_span_size_set(pbar, 200 * e_scale); - elm_progressbar_unit_format_set(pbar, buf); - elm_progressbar_value_set(pbar, (float)inst->cfg->thermal.percent / 100); - elm_table_pack(table, pbar, 0, 1, 2, 1); - evas_object_show(pbar); - inst->cfg->thermal.popup_pbar = pbar; - - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->thermal.o_gadget); - evas_object_show(popup); - - return popup; -} - -static void -_thermal_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Evas_Event_Mouse_Up *ev = event_data; - Instance *inst = data; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - if (ev->button == 1) - { - if (inst->cfg->thermal.popup) - elm_ctxpopup_dismiss(inst->cfg->thermal.popup); - else - inst->cfg->thermal.popup = _thermal_popup_create(inst); - } -} - -static Eina_Bool -_screensaver_on(void *data) -{ - Instance *inst = data; - - if (inst->cfg->thermal.th) - { - ecore_thread_cancel(inst->cfg->thermal.th); - inst->cfg->thermal.th = NULL; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_screensaver_off(void *data) -{ - Instance *inst = data; - - _thermal_config_updated(inst); - - return ECORE_CALLBACK_RENEW; -} - -void -_thermal_config_updated(Instance *inst) -{ - Tempthread *tth; - - if (inst->cfg->id == -1) - { - _thermal_face_level_set(inst, .60); - return; - } - if (inst->cfg->thermal.th) ecore_thread_cancel(inst->cfg->thermal.th); - - tth = calloc(1, sizeof(Tempthread)); - tth->poll_interval = inst->cfg->thermal.poll_interval; - tth->sensor_type = inst->cfg->thermal.sensor_type; - tth->inst = inst; - tth->sleeper = e_powersave_sleeper_new(); - if (inst->cfg->thermal.sensor_name) - tth->sensor_name = eina_stringshare_add(inst->cfg->thermal.sensor_name); - -#if defined(HAVE_EEZE) - _thermal_udev_poll(tth); - inst->cfg->thermal.poller = ecore_poller_add(ECORE_POLLER_CORE, inst->cfg->thermal.poll_interval, - _thermal_udev_poll, tth); - inst->cfg->thermal.tth = tth; -#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) - inst->cfg->thermal.th = ecore_thread_feedback_run(_thermal_check_sysctl, - _thermal_check_notify, - _thermal_check_done, - _thermal_check_done, - tth, EINA_TRUE); -#else - inst->cfg->thermal.th = ecore_thread_feedback_run(_thermal_check_fallback, - _thermal_check_notify, - _thermal_check_done, - _thermal_check_done, - tth, EINA_TRUE); -#endif -} - -static void -_thermal_face_shutdown(Instance *inst) -{ -#if defined(HAVE_EEZE) - if (inst->cfg->thermal.poller) - { - E_FREE_FUNC(inst->cfg->thermal.poller, ecore_poller_del); - _thermal_thread_free(inst->cfg->thermal.tth); - } -#endif - if (inst->cfg->thermal.sensor_name) eina_stringshare_del(inst->cfg->thermal.sensor_name); -} - -static void -_thermal_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Evas_Coord w, h; - Instance *inst = data; - - edje_object_parts_extends_calc(elm_layout_edje_get(inst->cfg->thermal.o_gadget), 0, 0, &w, &h); - if (w < 1) w = 1; - if (h < 1) h = 1; - if (inst->cfg->esm == E_SYSINFO_MODULE_THERMAL) - evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, w, h); - else - evas_object_size_hint_aspect_set(inst->cfg->thermal.o_gadget, EVAS_ASPECT_CONTROL_BOTH, w, h); -} - -static void -_thermal_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->o_main != event_data) return; - - if (inst->cfg->thermal.popup_pbar) - E_FREE_FUNC(inst->cfg->thermal.popup_pbar, evas_object_del); - if (inst->cfg->thermal.popup) - E_FREE_FUNC(inst->cfg->thermal.popup, evas_object_del); - if (inst->cfg->thermal.configure) - E_FREE_FUNC(inst->cfg->thermal.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->thermal.handlers, handler) - ecore_event_handler_del(handler); - evas_object_event_callback_del_full(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_thermal_remove, data); - evas_object_smart_callback_del_full(e_gadget_site_get(inst->o_main), "gadget_removed", - _thermal_removed_cb, inst); - if (inst->cfg->thermal.th) - { - ecore_thread_cancel(inst->cfg->thermal.th); - inst->cfg->thermal.th = NULL; - } - _thermal_face_shutdown(inst); - sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); - if (inst->cfg->id >= 0) - sysinfo_instances = eina_list_remove(sysinfo_instances, inst); - E_FREE(inst->cfg); - E_FREE(inst); -} - -void -sysinfo_thermal_remove(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - Ecore_Event_Handler *handler; - - if (inst->cfg->thermal.popup_pbar) - E_FREE_FUNC(inst->cfg->thermal.popup_pbar, evas_object_del); - if (inst->cfg->thermal.popup) - E_FREE_FUNC(inst->cfg->thermal.popup, evas_object_del); - if (inst->cfg->thermal.configure) - E_FREE_FUNC(inst->cfg->thermal.configure, evas_object_del); - EINA_LIST_FREE(inst->cfg->thermal.handlers, handler) - ecore_event_handler_del(handler); - if (inst->cfg->thermal.th) - { - ecore_thread_cancel(inst->cfg->thermal.th); - inst->cfg->thermal.th = NULL; - } - _thermal_face_shutdown(inst); -} - -static void -_thermal_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) -{ - Instance *inst = data; - E_Gadget_Site_Orient orient = e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)); - - e_gadget_configure_cb_set(inst->o_main, _thermal_configure_cb); - - inst->cfg->thermal.temp = 900; - inst->cfg->thermal.percent = 0; - inst->cfg->thermal.have_temp = EINA_FALSE; - - inst->cfg->thermal.o_gadget = elm_layout_add(inst->o_main); - if (orient == E_GADGET_SITE_ORIENT_VERTICAL) - e_theme_edje_object_set(inst->cfg->thermal.o_gadget, - "base/theme/gadget/thermal", - "e/gadget/thermal/main_vert"); - else - e_theme_edje_object_set(inst->cfg->thermal.o_gadget, "base/theme/gadget/thermal", - "e/gadget/thermal/main"); - E_EXPAND(inst->cfg->thermal.o_gadget); - E_FILL(inst->cfg->thermal.o_gadget); - elm_box_pack_end(inst->o_main, inst->cfg->thermal.o_gadget); - evas_object_event_callback_add(inst->cfg->thermal.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _thermal_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->thermal.o_gadget, EVAS_CALLBACK_RESIZE, _thermal_resize_cb, inst); - evas_object_show(inst->cfg->thermal.o_gadget); - evas_object_smart_callback_del_full(obj, "gadget_created", _thermal_created_cb, data); - - E_LIST_HANDLER_APPEND(inst->cfg->thermal.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->thermal.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _thermal_config_updated(inst); -} - -Evas_Object * -sysinfo_thermal_create(Evas_Object *parent, Instance *inst) -{ - inst->cfg->thermal.temp = 900; - inst->cfg->thermal.percent = 0; - inst->cfg->thermal.have_temp = EINA_FALSE; - - inst->cfg->thermal.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->thermal.o_gadget, "base/theme/gadget/thermal", - "e/gadget/thermal/main"); - E_EXPAND(inst->cfg->thermal.o_gadget); - E_FILL(inst->cfg->thermal.o_gadget); - evas_object_event_callback_add(inst->cfg->thermal.o_gadget, - EVAS_CALLBACK_MOUSE_UP, - _thermal_mouse_up_cb, inst); - evas_object_event_callback_add(inst->cfg->thermal.o_gadget, EVAS_CALLBACK_RESIZE, _thermal_resize_cb, inst); - evas_object_show(inst->cfg->thermal.o_gadget); - - E_LIST_HANDLER_APPEND(inst->cfg->thermal.handlers, E_EVENT_SCREENSAVER_ON, _screensaver_on, inst); - E_LIST_HANDLER_APPEND(inst->cfg->thermal.handlers, E_EVENT_SCREENSAVER_OFF, _screensaver_off, inst); - - _thermal_config_updated(inst); - - return inst->cfg->thermal.o_gadget; -} - -static Config_Item * -_conf_item_get(int *id) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(sysinfo_config->items, l, ci) - if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_THERMAL) return ci; - } - - ci = E_NEW(Config_Item, 1); - - if (*id != -1) - ci->id = eina_list_count(sysinfo_config->items) + 1; - else - ci->id = -1; - - ci->esm = E_SYSINFO_MODULE_THERMAL; - ci->thermal.poll_interval = 128; - ci->thermal.low = 30; - ci->thermal.high = 80; - ci->thermal.sensor_type = SENSOR_TYPE_NONE; - ci->thermal.sensor_name = NULL; - ci->thermal.units = CELSIUS; - ci->thermal.configure = NULL; - - sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); - - return ci; -} - -Evas_Object * -thermal_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id); - *id = inst->cfg->id; - inst->o_main = elm_box_add(parent); - evas_object_data_set(inst->o_main, "Instance", inst); - evas_object_smart_callback_add(parent, "gadget_created", _thermal_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _thermal_removed_cb, inst); - evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_DEL, sysinfo_thermal_remove, inst); - evas_object_show(inst->o_main); - - if (inst->cfg->id < 0) return inst->o_main; - sysinfo_instances = - eina_list_append(sysinfo_instances, inst); - - return inst->o_main; -} - diff --git a/src/modules/sysinfo/thermal/thermal.h b/src/modules/sysinfo/thermal/thermal.h deleted file mode 100644 index c0cb3238a..000000000 --- a/src/modules/sysinfo/thermal/thermal.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef THERMAL_H -#define THERMAL_H - -#include "../sysinfo.h" - -typedef struct _Thermal_Config Thermal_Config; - -struct _Thermal_Config -{ - Instance *inst; - Evas_Object *high; - Evas_Object *low; -}; - - -#if defined(HAVE_EEZE) -EINTERN int thermal_udev_get(Tempthread *tth); -#endif - -#if defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__) -EINTERN int thermal_sysctl_get(Tempthread *tth); -#endif - -EINTERN Evas_Object *thermal_configure(Instance *inst); -EINTERN int thermal_fallback_get(Tempthread *tth); -EINTERN void _thermal_config_updated(Instance *inst); - -#endif diff --git a/src/modules/sysinfo/thermal/thermal_config.c b/src/modules/sysinfo/thermal/thermal_config.c deleted file mode 100644 index 404f5d4b0..000000000 --- a/src/modules/sysinfo/thermal/thermal_config.c +++ /dev/null @@ -1,369 +0,0 @@ -#include "thermal.h" - -#define FAR_2_CEL(x) ((x - 32) / 9.0) * 5.0 -#define CEL_2_FAR(x) (x * 9.0 / 5.0) + 32 - -static void -_config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Thermal_Config *tc = data; - Instance *inst = tc->inst; - - E_FREE_FUNC(inst->cfg->thermal.configure, evas_object_del); - E_FREE(tc); - e_config_save_queue(); -} - -static void -_update_high_temperature(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Thermal_Config *tc = data; - Instance *inst = tc->inst; - int value = (int)elm_slider_value_get(tc->high); - - inst->cfg->thermal.high = value; - e_config_save_queue(); - _thermal_config_updated(inst); -} - -static void -_update_low_temperature(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Thermal_Config *tc = data; - Instance *inst = tc->inst; - int value = (int)elm_slider_value_get(tc->low); - - inst->cfg->thermal.low = value; - e_config_save_queue(); - _thermal_config_updated(inst); -} - -static void -_units_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Thermal_Config *tc = data; - Instance *inst = tc->inst; - int value = elm_radio_value_get(obj), val; - - switch (value) - { - case 0: - inst->cfg->thermal.units = CELSIUS; - break; - - case 1: - inst->cfg->thermal.units = FAHRENHEIT; - break; - - default: - inst->cfg->thermal.units = CELSIUS; - } - if (inst->cfg->thermal.units == FAHRENHEIT) - { - elm_slider_min_max_set(tc->low, 0, 200); - elm_slider_min_max_set(tc->high, 0, 230); - val = (int)elm_slider_value_get(tc->low); - elm_slider_value_set(tc->low, ceil(CEL_2_FAR(val))); - val = (int)elm_slider_value_get(tc->high); - elm_slider_value_set(tc->high, ceil(CEL_2_FAR(val))); - elm_slider_unit_format_set(tc->high, "%1.0f F"); - elm_slider_indicator_format_set(tc->high, "%1.0f F"); - elm_slider_unit_format_set(tc->low, "%1.0f F"); - elm_slider_indicator_format_set(tc->low, "%1.0f F"); - } - else - { - val = (int)elm_slider_value_get(tc->low); - elm_slider_value_set(tc->low, ceil(FAR_2_CEL(val))); - val = (int)elm_slider_value_get(tc->high); - elm_slider_value_set(tc->high, ceil(FAR_2_CEL(val))); - elm_slider_unit_format_set(tc->low, "%1.0f C"); - elm_slider_indicator_format_set(tc->low, "%1.0f C"); - elm_slider_unit_format_set(tc->high, "%1.0f C"); - elm_slider_indicator_format_set(tc->high, "%1.0f C"); - elm_slider_min_max_set(tc->low, 0, 95); - elm_slider_min_max_set(tc->high, 0, 110); - } - val = (int)elm_slider_value_get(tc->high); - inst->cfg->thermal.high = val; - val = (int)elm_slider_value_get(tc->low); - inst->cfg->thermal.low = val; - e_config_save_queue(); - _thermal_config_updated(inst); -} - -static void -_poll_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Thermal_Config *tc = data; - Instance *inst = tc->inst; - int value = elm_radio_value_get(obj); - - switch (value) - { - case 0: - inst->cfg->thermal.poll_interval = 4; - break; - - case 1: - inst->cfg->thermal.poll_interval = 8; - break; - - case 2: - inst->cfg->thermal.poll_interval = 32; - break; - - case 3: - inst->cfg->thermal.poll_interval = 64; - break; - - case 4: - inst->cfg->thermal.poll_interval = 256; - break; - - default: - inst->cfg->thermal.poll_interval = 32; - } - - e_config_save_queue(); - _thermal_config_updated(inst); -} - -Evas_Object * -thermal_configure(Instance *inst) -{ - Evas_Object *popup, *tb, *frame, *box, *o, *group, *groupu, *lbl, *slider; - E_Zone *zone = e_zone_current_get(); - Thermal_Config *tc = E_NEW(Thermal_Config, 1); - - tc->inst = inst; - - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - lbl = elm_label_add(tb); - evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_style_set(lbl, "marker"); - elm_object_text_set(lbl, _("Thermal Configuration")); - elm_table_pack(tb, lbl, 0, 0, 1, 1); - evas_object_show(lbl); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Temperature Units")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 0, 1, 1, 1); - evas_object_show(frame); - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Celsius")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _units_changed, tc); - evas_object_show(o); - groupu = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, groupu); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Fahrenheit")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _units_changed, tc); - evas_object_show(o); - - switch (inst->cfg->thermal.units) - { - case CELSIUS: - elm_radio_value_set(groupu, 0); - break; - - case FAHRENHEIT: - elm_radio_value_set(groupu, 1); - break; - - default: - elm_radio_value_set(groupu, 0); - } - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Update Poll Interval")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 0, 2, 1, 1); - evas_object_show(frame); - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 0); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Fast (4 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, tc); - evas_object_show(o); - group = o; - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 1); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Medium (8 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, tc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 2); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Normal (32 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, tc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 3); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Slow (64 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, tc); - evas_object_show(o); - - o = elm_radio_add(box); - elm_radio_state_value_set(o, 4); - elm_radio_group_add(o, group); - E_ALIGN(o, 0.0, 0.0); - E_WEIGHT(o, EVAS_HINT_EXPAND, 0); - elm_object_text_set(o, _("Very Slow (256 ticks)")); - elm_box_pack_end(box, o); - evas_object_smart_callback_add(o, "changed", _poll_changed, tc); - evas_object_show(o); - - switch (inst->cfg->thermal.poll_interval) - { - case 4: - elm_radio_value_set(group, 0); - break; - - case 8: - elm_radio_value_set(group, 1); - break; - - case 32: - elm_radio_value_set(group, 2); - break; - - case 64: - elm_radio_value_set(group, 3); - break; - - case 256: - elm_radio_value_set(group, 4); - break; - - default: - elm_radio_value_set(group, 2); - } - - elm_object_content_set(frame, box); - - frame = elm_frame_add(tb); - elm_object_text_set(frame, _("Temperature Limits")); - E_EXPAND(frame); - E_FILL(frame); - elm_table_pack(tb, frame, 0, 3, 1, 1); - evas_object_show(frame); - - box = elm_box_add(frame); - elm_box_horizontal_set(box, EINA_FALSE); - E_EXPAND(box); - evas_object_show(box); - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("High Temperature:")); - if (inst->cfg->thermal.units == FAHRENHEIT) - { - elm_slider_unit_format_set(slider, "%1.0f F"); - elm_slider_indicator_format_set(slider, "%1.0f F"); - elm_slider_min_max_set(slider, 0, 230); - } - else - { - elm_slider_unit_format_set(slider, "%1.0f C"); - elm_slider_indicator_format_set(slider, "%1.0f C"); - elm_slider_min_max_set(slider, 0, 110); - } - elm_slider_value_set(slider, inst->cfg->thermal.high); - elm_slider_step_set(slider, 0.05); - elm_slider_span_size_set(slider, 150); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_high_temperature, tc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - tc->high = slider; - - slider = elm_slider_add(box); - elm_object_text_set(slider, _("Low Temperature:")); - if (inst->cfg->thermal.units == FAHRENHEIT) - { - elm_slider_unit_format_set(slider, "%1.0f F"); - elm_slider_indicator_format_set(slider, "%1.0f F"); - elm_slider_min_max_set(slider, 0, 200); - } - else - { - elm_slider_unit_format_set(slider, "%1.0f C"); - elm_slider_indicator_format_set(slider, "%1.0f C"); - elm_slider_min_max_set(slider, 0, 95); - } - elm_slider_value_set(slider, inst->cfg->thermal.low); - elm_slider_step_set(slider, 0.05); - elm_slider_span_size_set(slider, 150); - evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); - evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); - evas_object_smart_callback_add(slider, "delay,changed", _update_low_temperature, tc); - elm_box_pack_end(box, slider); - evas_object_show(slider); - tc->low = slider; - - elm_object_content_set(frame, box); - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center_on_zone(popup, zone); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, tc); - - return inst->cfg->thermal.configure = popup; -} - diff --git a/src/modules/sysinfo/thermal/thermal_fallback.c b/src/modules/sysinfo/thermal/thermal_fallback.c deleted file mode 100644 index 3ed6a89db..000000000 --- a/src/modules/sysinfo/thermal/thermal_fallback.c +++ /dev/null @@ -1,435 +0,0 @@ -#if defined(__linux__) -#include "thermal.h" - -typedef struct -{ - int dummy; -} Extn; - -Eina_List * -temperature_get_bus_files(const char *bus) -{ - Eina_List *result; - Eina_List *therms; - char path[PATH_MAX + 3]; - char busdir[PATH_MAX]; - char *name; - - result = NULL; - - snprintf(busdir, sizeof(busdir), "/sys/bus/%s/devices", bus); - /* Look through all the devices for the given bus. */ - therms = ecore_file_ls(busdir); - - EINA_LIST_FREE(therms, name) - { - Eina_List *files; - char *file; - - /* Search each device for temp*_input, these should be - * temperature devices. */ - snprintf(path, sizeof(path), "%s/%s", busdir, name); - files = ecore_file_ls(path); - EINA_LIST_FREE(files, file) - { - if ((!strncmp("temp", file, 4)) && - (!strcmp("_input", &file[strlen(file) - 6]))) - { - char *f; - - snprintf(path, sizeof(path), - "%s/%s/%s", busdir, name, file); - f = strdup(path); - if (f) result = eina_list_append(result, f); - } - E_FREE(file); - } - E_FREE(name); - } - return result; -} - -static void -init(Tempthread *tth) -{ - Eina_List *therms; - char path[512]; - Extn *extn; - - if (tth->initted) return; - tth->initted = EINA_TRUE; - - extn = calloc(1, sizeof(Extn)); - tth->extn = extn; - - if ((!tth->sensor_type) || - ((!tth->sensor_name) || - (tth->sensor_name[0] == 0))) - { - eina_stringshare_del(tth->sensor_name); - tth->sensor_name = NULL; - eina_stringshare_del(tth->sensor_path); - tth->sensor_path = NULL; - therms = ecore_file_ls("/proc/acpi/thermal_zone"); - if (therms) - { - char *name; - - name = eina_list_data_get(therms); - tth->sensor_type = SENSOR_TYPE_LINUX_ACPI; - tth->sensor_name = eina_stringshare_add(name); - eina_list_free(therms); - } - else - { - eina_list_free(therms); - therms = ecore_file_ls("/sys/class/thermal"); - if (therms) - { - char *name; - Eina_List *l; - - EINA_LIST_FOREACH(therms, l, name) - { - if (!strncmp(name, "thermal", 7)) - { - tth->sensor_type = SENSOR_TYPE_LINUX_SYS; - tth->sensor_name = eina_stringshare_add(name); - eina_list_free(therms); - therms = NULL; - break; - } - } - if (therms) eina_list_free(therms); - } - if (therms) - { - if (ecore_file_exists("/proc/omnibook/temperature")) - { - tth->sensor_type = SENSOR_TYPE_OMNIBOOK; - tth->sensor_name = eina_stringshare_add("dummy"); - } - else if (ecore_file_exists("/sys/devices/temperatures/sensor1_temperature")) - { - tth->sensor_type = SENSOR_TYPE_LINUX_PBOOK; - tth->sensor_name = eina_stringshare_add("dummy"); - } - else if (ecore_file_exists("/sys/devices/temperatures/cpu_temperature")) - { - tth->sensor_type = SENSOR_TYPE_LINUX_MACMINI; - tth->sensor_name = eina_stringshare_add("dummy"); - } - else if (ecore_file_exists("/sys/devices/platform/coretemp.0/temp1_input")) - { - tth->sensor_type = SENSOR_TYPE_LINUX_INTELCORETEMP; - tth->sensor_name = eina_stringshare_add("dummy"); - } - else if (ecore_file_exists("/sys/devices/platform/thinkpad_hwmon/temp1_input")) - { - tth->sensor_type = SENSOR_TYPE_LINUX_THINKPAD; - tth->sensor_name = eina_stringshare_add("dummy"); - } - else - { - // try the i2c bus - therms = temperature_get_bus_files("i2c"); - if (therms) - { - char *name; - - if ((name = eina_list_data_get(therms))) - { - if (ecore_file_exists(name)) - { - int len; - - snprintf(path, sizeof(path), - "%s", ecore_file_file_get(name)); - len = strlen(path); - if (len > 6) path[len - 6] = '\0'; - tth->sensor_type = SENSOR_TYPE_LINUX_I2C; - tth->sensor_path = eina_stringshare_add(name); - tth->sensor_name = eina_stringshare_add(path); - } - } - eina_list_free(therms); - } - if (!tth->sensor_path) - { - // try the pci bus - therms = temperature_get_bus_files("pci"); - if (therms) - { - char *name; - - if ((name = eina_list_data_get(therms))) - { - if (ecore_file_exists(name)) - { - int len; - - snprintf(path, sizeof(path), - "%s", ecore_file_file_get(name)); - len = strlen(path); - if (len > 6) path[len - 6] = '\0'; - tth->sensor_type = SENSOR_TYPE_LINUX_PCI; - tth->sensor_path = eina_stringshare_add(name); - eina_stringshare_del(tth->sensor_name); - tth->sensor_name = eina_stringshare_add(path); - } - } - eina_list_free(therms); - } - } - } - } - } - } - if ((tth->sensor_type) && (tth->sensor_name) && (!tth->sensor_path)) - { - char *name; - - switch (tth->sensor_type) - { - case SENSOR_TYPE_NONE: - break; - - case SENSOR_TYPE_OMNIBOOK: - tth->sensor_path = eina_stringshare_add("/proc/omnibook/temperature"); - break; - - case SENSOR_TYPE_LINUX_MACMINI: - tth->sensor_path = eina_stringshare_add("/sys/devices/temperatures/cpu_temperature"); - break; - - case SENSOR_TYPE_LINUX_PBOOK: - tth->sensor_path = eina_stringshare_add("/sys/devices/temperatures/sensor1_temperature"); - break; - - case SENSOR_TYPE_LINUX_INTELCORETEMP: - tth->sensor_path = eina_stringshare_add("/sys/devices/platform/coretemp.0/temp1_input"); - break; - - case SENSOR_TYPE_LINUX_THINKPAD: - tth->sensor_path = eina_stringshare_add("/sys/devices/platform/thinkpad_hwmon/temp1_input"); - break; - - case SENSOR_TYPE_LINUX_I2C: - therms = ecore_file_ls("/sys/bus/i2c/devices"); - - EINA_LIST_FREE(therms, name) - { - snprintf(path, sizeof(path), - "/sys/bus/i2c/devices/%s/%s_input", - name, tth->sensor_name); - if (ecore_file_exists(path)) - { - tth->sensor_path = eina_stringshare_add(path); - /* We really only care about the first - * one for the default. */ - break; - } - E_FREE(name); - } - break; - - case SENSOR_TYPE_LINUX_PCI: - therms = ecore_file_ls("/sys/bus/pci/devices"); - - EINA_LIST_FREE(therms, name) - { - snprintf(path, sizeof(path), - "/sys/bus/pci/devices/%s/%s_input", - name, tth->sensor_name); - if (ecore_file_exists(path)) - { - tth->sensor_path = eina_stringshare_add(path); - /* We really only care about the first - * one for the default. */ - break; - } - E_FREE(name); - } - break; - - case SENSOR_TYPE_LINUX_ACPI: - snprintf(path, sizeof(path), - "/proc/acpi/thermal_zone/%s/temperature", - tth->sensor_name); - tth->sensor_path = eina_stringshare_add(path); - break; - - case SENSOR_TYPE_LINUX_SYS: - snprintf(path, sizeof(path), - "/sys/class/thermal/%s/temp", tth->sensor_name); - tth->sensor_path = eina_stringshare_add(path); - break; - - default: - break; - } - } -} - -static int -check(Tempthread *tth) -{ - FILE *f = NULL; - int ret = 0; - int temp = 0; - char buf[512]; - /* TODO: Make standard parser. Seems to be two types of temperature string: - * - Somename: C - * - - */ - switch (tth->sensor_type) - { - case SENSOR_TYPE_NONE: - /* TODO: Slow down poller? */ - break; - - case SENSOR_TYPE_OMNIBOOK: - f = fopen(tth->sensor_path, "r"); - if (f) - { - char dummy[4096]; - - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - if (sscanf(buf, "%s %s %i", dummy, dummy, &temp) == 3) - ret = 1; - else - goto error; - } - else - goto error; - break; - - case SENSOR_TYPE_LINUX_MACMINI: - case SENSOR_TYPE_LINUX_PBOOK: - f = fopen(tth->sensor_path, "rb"); - if (f) - { - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - if (sscanf(buf, "%i", &temp) == 1) - ret = 1; - else - goto error; - } - else - goto error; - break; - - case SENSOR_TYPE_LINUX_INTELCORETEMP: - case SENSOR_TYPE_LINUX_I2C: - case SENSOR_TYPE_LINUX_THINKPAD: - f = fopen(tth->sensor_path, "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - /* actually read the temp */ - if (sscanf(buf, "%i", &temp) == 1) - ret = 1; - else - goto error; - /* Hack for temp */ - temp = temp / 1000; - } - else - goto error; - break; - - case SENSOR_TYPE_LINUX_PCI: - f = fopen(tth->sensor_path, "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - /* actually read the temp */ - if (sscanf(buf, "%i", &temp) == 1) - ret = 1; - else - goto error; - /* Hack for temp */ - temp = temp / 1000; - } - else - goto error; - break; - - case SENSOR_TYPE_LINUX_ACPI: - f = fopen(tth->sensor_path, "r"); - if (f) - { - char *p, *q; - - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - 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; - - case SENSOR_TYPE_LINUX_SYS: - f = fopen(tth->sensor_path, "r"); - if (f) - { - if (fgets(buf, sizeof(buf), f) == NULL) goto error; - fclose(f); - f = NULL; - temp = atoi(buf); - temp /= 1000; - ret = 1; - } - else - goto error; - break; - - default: - break; - } - - if (ret) return temp; - - return -999; -error: - if (f) fclose(f); - tth->sensor_type = SENSOR_TYPE_NONE; - eina_stringshare_del(tth->sensor_name); - tth->sensor_name = NULL; - eina_stringshare_del(tth->sensor_path); - tth->sensor_path = NULL; - return -999; -} - -int -thermal_fallback_get(Tempthread *tth) -{ - int temp; - - init(tth); - temp = check(tth); - return temp; -} - -#endif diff --git a/src/modules/sysinfo/thermal/thermal_sysctl.c b/src/modules/sysinfo/thermal/thermal_sysctl.c deleted file mode 100644 index 35427c832..000000000 --- a/src/modules/sysinfo/thermal/thermal_sysctl.c +++ /dev/null @@ -1,212 +0,0 @@ -#include "thermal.h" - -#if defined(__FreeBSD__) || defined(__DragonFly__) -# include -# include -# include -#endif - -#if defined(__OpenBSD__) -# include -# include -# include -# include -# include -#endif - -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) -typedef struct -{ - int mib[CTL_MAXNAME]; -#if defined(__FreeBSD__) || defined(__DragonFly__) - unsigned int miblen; -#endif - int dummy; -} Extn; - -#if defined(__FreeBSD__) || defined(__DragonFly__) -static const char *sources[] = -{ - "hw.acpi.thermal.tz0.temperature", - "dev.cpu.0.temperature", - "dev.aibs.0.temp.0", - "dev.lm75.0.temperature", - NULL -}; -#endif - -#if defined(__OpenBSD__) -static struct sensor snsr; -static size_t slen = sizeof(snsr); -#endif - -static void -init(Tempthread *tth) -{ -#if defined(__OpenBSD__) - int dev, numt; - struct sensordev snsrdev; - size_t sdlen = sizeof(snsrdev); -#endif - -#if defined(__FreeBSD__) || defined(__DragonFly__) - unsigned i; - size_t len; - int rc; -#endif - - Extn *extn; - if (tth->initted) return; - tth->initted = EINA_TRUE; - - extn = calloc(1, sizeof(Extn)); - tth->extn = extn; - - if ((!tth->sensor_type) || - ((!tth->sensor_name) || - (tth->sensor_name[0] == 0))) - { - eina_stringshare_del(tth->sensor_name); - tth->sensor_name = NULL; - eina_stringshare_del(tth->sensor_path); - tth->sensor_path = NULL; - -#if defined(__FreeBSD__) || defined(__DragonFly__) - for (i = 0; sources[i]; i++) - { - rc = sysctlbyname(sources[i], NULL, NULL, NULL, 0); - if (rc == 0) - { - tth->sensor_type = SENSOR_TYPE_FREEBSD; - tth->sensor_name = eina_stringshare_add(sources[i]); - break; - } - } - -#elif defined(__OpenBSD__) - extn->mib[0] = CTL_HW; - extn->mib[1] = HW_SENSORS; - - for (dev = 0;; dev++) - { - extn->mib[2] = dev; - if (sysctl(extn->mib, 3, &snsrdev, &sdlen, NULL, 0) == -1) - { - if (errno == ENOENT) /* no further sensors */ - break; - else - continue; - } - if (strcmp(snsrdev.xname, "cpu0") == 0) - { - tth->sensor_type = SENSOR_TYPE_OPENBSD; - tth->sensor_name = eina_stringshare_add("cpu0"); - break; - } - else if (strcmp(snsrdev.xname, "km0") == 0) - { - tth->sensor_type = SENSOR_TYPE_OPENBSD; - tth->sensor_name = eina_stringshare_add("km0"); - break; - } - } -#endif - } - if ((tth->sensor_type) && (tth->sensor_name) && (!tth->sensor_path)) - { - if (tth->sensor_type == SENSOR_TYPE_FREEBSD) - { -#if defined(__FreeBSD__) || defined(__DragonFly__) - len = sizeof(extn->mib) / sizeof(extn->mib[0]); - rc = sysctlnametomib(tth->sensor_name, extn->mib, &len); - if (rc == 0) - { - extn->miblen = len; - tth->sensor_path = eina_stringshare_add(tth->sensor_name); - } -#endif - } - else if (tth->sensor_type == SENSOR_TYPE_OPENBSD) - { -#if defined(__OpenBSD__) - for (numt = 0; numt < snsrdev.maxnumt[SENSOR_TEMP]; numt++) - { - extn->mib[4] = numt; - slen = sizeof(snsr); - if (sysctl(extn->mib, 5, &snsr, &slen, NULL, 0) == -1) - continue; - if (slen > 0 && (snsr.flags & SENSOR_FINVALID) == 0) - { - break; - } - } -#endif - } - } -} - -static int -check(Tempthread *tth) -{ - int ret = 0; - int temp = 0; -#if defined(__FreeBSD__) || defined(__DragonFly__) - size_t len; - size_t ftemp = 0; -#endif -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) - Extn *extn = tth->extn; -#endif - - /* TODO: Make standard parser. Seems to be two types of temperature string: - * - Somename: C - * - - */ - if (tth->sensor_type == SENSOR_TYPE_FREEBSD) - { -#if defined(__FreeBSD__) || defined(__DragonFly__) - len = sizeof(ftemp); - if (sysctl(extn->mib, extn->miblen, &ftemp, &len, NULL, 0) == 0) - { - temp = (ftemp - 2732) / 10; - ret = 1; - } - else - goto error; -#endif - } - else if (tth->sensor_type == SENSOR_TYPE_OPENBSD) - { -#if defined(__OpenBSD__) - if (sysctl(extn->mib, 5, &snsr, &slen, NULL, 0) != -1) - { - temp = (snsr.value - 273150000) / 1000000.0; - ret = 1; - } - else - goto error; -#endif - } - if (ret) return temp; - - return -999; -error: - tth->sensor_type = SENSOR_TYPE_NONE; - eina_stringshare_del(tth->sensor_name); - tth->sensor_name = NULL; - eina_stringshare_del(tth->sensor_path); - tth->sensor_path = NULL; - return -999; -} - -int -thermal_sysctl_get(Tempthread *tth) -{ - int temp; - - init(tth); - temp = check(tth); - return temp; -} - -#endif diff --git a/src/modules/sysinfo/thermal/thermal_udev.c b/src/modules/sysinfo/thermal/thermal_udev.c deleted file mode 100644 index 6b817ac4f..000000000 --- a/src/modules/sysinfo/thermal/thermal_udev.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "thermal.h" - -int -thermal_udev_get(Tempthread *tth) -{ - Eina_List *l; - double cur, temp; - char *syspath; - const char *test; - char buf[256]; - int x, y, cpus = 0; - - temp = -999; - - if (!tth->tempdevs) - tth->tempdevs = - eeze_udev_find_by_type(EEZE_UDEV_TYPE_IS_IT_HOT_OR_IS_IT_COLD_SENSOR, - NULL); - if (tth->tempdevs) - { - temp = 0; - EINA_LIST_FOREACH(tth->tempdevs, l, syspath) - { - for (x = 1, y = 0; x < 15; x++) - { - if (y >= 2) break; - sprintf(buf, "temp%d_input", x); - if ((test = eeze_udev_syspath_get_sysattr(syspath, buf))) - { - y = 0; - cur = atoi(test); - if (cur > 0) - { - /* udev reports temp in (celsius * 1000) */ - temp += (cur / 1000); - cpus++; - } - } - /* keep checking for sensors until 2 in a row don't exist */ - else y++; - } - } - if (cpus > 0) - { - temp /= (double)cpus; - return temp; - } - } - return -999; -} - diff --git a/src/modules/teamwork/e-module-teamwork.edj b/src/modules/teamwork/e-module-teamwork.edj deleted file mode 100644 index a394dcb85..000000000 Binary files a/src/modules/teamwork/e-module-teamwork.edj and /dev/null differ diff --git a/src/modules/teamwork/e_mod_config.c b/src/modules/teamwork/e_mod_config.c deleted file mode 100644 index d40ef7b81..000000000 --- a/src/modules/teamwork/e_mod_config.c +++ /dev/null @@ -1,182 +0,0 @@ -#include "e_mod_main.h" - -struct _E_Config_Dialog_Data -{ - int disable_media_fetch; - int disable_video; - double allowed_media_size; - double allowed_media_fetch_size; - double allowed_media_age; - - double mouse_out_delay; - double popup_size; - double popup_opacity; -}; - -static void * -_create_data(E_Config_Dialog *cfd EINA_UNUSED) -{ - E_Config_Dialog_Data *cfdata; - - cfdata = E_NEW(E_Config_Dialog_Data, 1); -#define SET(X) \ - cfdata->X = tw_config->X - SET(disable_media_fetch); - SET(disable_video); - SET(allowed_media_size); - SET(allowed_media_fetch_size); - SET(allowed_media_age); - - SET(mouse_out_delay); - SET(popup_size); - SET(popup_opacity); -#undef SET - return cfdata; -} - -static void -_free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - tw_mod->cfd = NULL; - free(cfdata); -} - -static int -_basic_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ -#define CHECK(X) \ - if (cfdata->X != tw_config->X) return 1 - - CHECK(disable_media_fetch); - CHECK(disable_video); - if (lround(cfdata->allowed_media_age) != tw_config->allowed_media_age) return 1; - if (lround(cfdata->allowed_media_size) != tw_config->allowed_media_size) return 1; - if (lround(cfdata->allowed_media_fetch_size) != tw_config->allowed_media_fetch_size) return 1; - - if (fabs(cfdata->mouse_out_delay - tw_config->mouse_out_delay) > 0.45) return 1; - - if (fabs(cfdata->popup_size - tw_config->popup_size) > 0.9) return 1; - if (fabs(cfdata->popup_opacity - tw_config->popup_opacity) > 0.9) return 1; - -#undef CHECK - return 0; -} - -static Evas_Object * -_basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, - Evas *evas, - E_Config_Dialog_Data *cfdata) -{ - Evas_Object *ob, *ol, *otb, *tab, *oc; - - tab = e_widget_table_add(e_win_evas_win_get(evas), 0); - - otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale); - - /////////////////////////////////////////// - - ol = e_widget_list_add(evas, 0, 0); - - ob = e_widget_check_add(evas, _("Disable remote media fetching"), &cfdata->disable_media_fetch); - e_widget_list_object_append(ol, ob, 1, 0, 0.5); - - oc = e_widget_label_add(evas, _("Maximum media size to fetch")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%2.0f MiB"), 1, 50, 1, 0, &cfdata->allowed_media_fetch_size, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - oc = e_widget_label_add(evas, _("Maximum media cache size in RAM")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%4.0f MiB"), 0, 1024, 16, 0, &cfdata->allowed_media_size, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - oc = e_widget_label_add(evas, _("Maximum media cache age on disk")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%3.0f Days"), -1, 180, 1, 0, &cfdata->allowed_media_age, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - e_widget_toolbook_page_append(otb, NULL, _("Cache"), ol, 1, 1, 1, 1, 0.5, 0.5); - - /////////////////////////////////////////// - - ol = e_widget_list_add(evas, 0, 0); - - ob = e_widget_check_add(evas, _("Disable video previews"), &cfdata->disable_video); - e_widget_list_object_append(ol, ob, 1, 0, 0.5); - - oc = e_widget_label_add(evas, _("Mouse-out hide delay")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0, 5, 0.5, 0, &cfdata->mouse_out_delay, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - oc = e_widget_label_add(evas, _("Maximum size (Percentage of screens size)")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 10, 100, 1, 0, &cfdata->popup_size, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - oc = e_widget_label_add(evas, _("Opacity")); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - oc = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 10, 100, 1, 0, &cfdata->popup_opacity, NULL, 150); - e_widget_list_object_append(ol, oc, 1, 1, 0.5); - e_widget_check_widget_disable_on_checked_add(ob, oc); - - e_widget_toolbook_page_append(otb, NULL, _("Popups"), ol, 1, 1, 1, 1, 0.5, 0.5); - - e_widget_toolbook_page_show(otb, 0); - - e_widget_table_object_append(tab, otb, 0, 0, 1, 1, 1, 1, 1, 1); - return tab; -} - - -static int -_basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, - E_Config_Dialog_Data *cfdata) -{ - -#define SET(X) tw_config->X = cfdata->X - SET(disable_media_fetch); - SET(disable_video); - SET(allowed_media_size); - SET(allowed_media_fetch_size); - SET(allowed_media_age); - - SET(mouse_out_delay); - SET(popup_size); - if (fabs(cfdata->popup_opacity - tw_config->popup_opacity) > 0.9) - { - SET(popup_opacity); - tw_popup_opacity_set(); - } - - e_config_save_queue(); - return 1; -} - -EINTERN E_Config_Dialog * -e_int_config_teamwork_module(Evas_Object *parent EINA_UNUSED, const char *params EINA_UNUSED) -{ - E_Config_Dialog *cfd; - E_Config_Dialog_View *v; - char buf[4096]; - - if (tw_mod->cfd) return NULL; - snprintf(buf, sizeof(buf), "%s/e-module-teamwork.edj", e_module_dir_get(tw_mod->module)); - v = E_NEW(E_Config_Dialog_View, 1); - - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.apply_cfdata = _basic_apply_data; - v->basic.create_widgets = _basic_create_widgets; - v->basic.check_changed = _basic_check_changed; - - cfd = e_config_dialog_new(NULL, _("Teamwork Settings"), - "E", "applications/teamwork", buf, 32, v, tw_mod); - tw_mod->cfd = cfd; - return cfd; -} diff --git a/src/modules/teamwork/e_mod_main.c b/src/modules/teamwork/e_mod_main.c deleted file mode 100644 index 0be6ab4dd..000000000 --- a/src/modules/teamwork/e_mod_main.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "e_mod_main.h" - -EINTERN int _e_teamwork_log_dom = -1; -EINTERN Mod *tw_mod = NULL; -EINTERN Teamwork_Config *tw_config = NULL; - -E_API E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Teamwork"}; - -static E_Config_DD *conf_edd = NULL; - -static E_Action *e_tw_toggle = NULL; -static const char _act_toggle[] = "tw_toggle"; -static const char _e_tw_name[] = N_("Teamwork"); -static const char _lbl_toggle[] = N_("Toggle Popup Visibility"); - -static const char * -_sha1_to_string(const unsigned char *hashout) -{ - const char hextab[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - char sha1[41] = {0}; - unsigned int i = 0; - - for (i = 0; i < 20; i++) - { - sha1[2 * i] = hextab[(hashout[i] >> 4) & 0x0f]; - sha1[2 * i + 1] = hextab[hashout[i] & 0x0f]; - } - return eina_stringshare_add(sha1); -} - -const char * -sha1_encode(const Eina_Binbuf *data) -{ - unsigned char hashout[20]; - - emile_binbuf_sha1(data, hashout); - return _sha1_to_string(hashout); -} - -////////////////////////////// -static Teamwork_Config * -e_tw_config_new(void) -{ - Teamwork_Config *cf; - - cf = E_NEW(Teamwork_Config, 1); - cf->config_version = MOD_CONFIG_FILE_VERSION; - - cf->allowed_media_size = 10; // 10 megabytes - cf->allowed_media_fetch_size = 5; // 5 megabytes - cf->allowed_media_age = 3; // 3 days - - cf->mouse_out_delay = 0.0; // hide instantly - cf->popup_size = 60.0; // 60% screen size - cf->popup_opacity = 90.0; // 90% opacity - - return cf; -} - -static E_Config_DD * -e_tw_config_dd_new(void) -{ - conf_edd = E_CONFIG_DD_NEW("Teamwork_Config", Teamwork_Config); - -#undef T -#undef D -#define T Teamwork_Config -#define D conf_edd - E_CONFIG_VAL(D, T, config_version, UINT); - E_CONFIG_VAL(D, T, disable_media_fetch, UCHAR); - E_CONFIG_VAL(D, T, disable_video, UCHAR); - E_CONFIG_VAL(D, T, allowed_media_size, LL); - E_CONFIG_VAL(D, T, allowed_media_fetch_size, LL); - E_CONFIG_VAL(D, T, allowed_media_age, INT); - - E_CONFIG_VAL(D, T, mouse_out_delay, DOUBLE); - E_CONFIG_VAL(D, T, popup_size, DOUBLE); - E_CONFIG_VAL(D, T, popup_opacity, DOUBLE); - return conf_edd; -} -////////////////////////////// -static void -e_tw_act_toggle_cb(E_Object *obj EINA_UNUSED, const char *params) -{ - if (tw_mod->pop) - { - if (tw_mod->sticky) - tw_hide(NULL); - tw_mod->sticky = !tw_mod->sticky; - return; - } - if (params && params[0]) - { - tw_uri_show(params); - tw_mod->sticky = 1; - } -} -////////////////////////////// -static void -_e_modapi_shutdown(void) -{ - e_tw_shutdown(); - - E_CONFIG_DD_FREE(conf_edd); - eina_log_domain_unregister(_e_teamwork_log_dom); - _e_teamwork_log_dom = -1; - - e_configure_registry_item_del("applications/teamwork"); - e_configure_registry_category_del("applications"); - - e_action_predef_name_del(_e_tw_name, _lbl_toggle); - e_action_del(_act_toggle); - e_tw_toggle = NULL; - - E_FREE(tw_config); - E_FREE(tw_mod); -} - -E_API void * -e_modapi_init(E_Module *m) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), "%s/e-module-teamwork.edj", e_module_dir_get(m)); - e_configure_registry_category_add("applications", 20, _("Apps"), NULL, - "preferences-applications"); - e_configure_registry_item_add("applications/teamwork", 1, _("Teamwork"), NULL, - buf, e_int_config_teamwork_module); - - tw_mod = E_NEW(Mod, 1); - tw_mod->module = m; - m->data = tw_mod; - conf_edd = e_tw_config_dd_new(); - tw_config = e_config_domain_load("module.teamwork", conf_edd); - if (tw_config) - { - if (!e_util_module_config_check(_("Teamwork"), tw_config->config_version, MOD_CONFIG_FILE_VERSION)) - E_FREE_FUNC(tw_config, free); - } - - if (tw_config) - { - /* sanity checks */ - tw_config->mouse_out_delay = E_CLAMP(tw_config->mouse_out_delay, 0.0, 5.0); - tw_config->popup_size = E_CLAMP(tw_config->popup_size, 10.0, 100.0); - tw_config->popup_opacity = E_CLAMP(tw_config->popup_opacity, 10.0, 100.0); - tw_config->allowed_media_fetch_size = E_CLAMP(tw_config->allowed_media_fetch_size, 1, 50); - } - else - tw_config = e_tw_config_new(); - tw_config->config_version = MOD_CONFIG_FILE_VERSION; - - _e_teamwork_log_dom = eina_log_domain_register("teamwork", EINA_COLOR_ORANGE); - eina_log_domain_level_set("teamwork", EINA_LOG_LEVEL_DBG); - - if (!e_tw_init()) - { - _e_modapi_shutdown(); - return NULL; - } - e_tw_toggle = e_action_add(_act_toggle); - e_tw_toggle->func.go = e_tw_act_toggle_cb; - e_action_predef_name_set(_e_tw_name, _lbl_toggle, _act_toggle, NULL, NULL, 1); - - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - _e_modapi_shutdown(); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.teamwork", conf_edd, tw_config); - return 1; -} - diff --git a/src/modules/teamwork/e_mod_main.h b/src/modules/teamwork/e_mod_main.h deleted file mode 100644 index c570d3198..000000000 --- a/src/modules/teamwork/e_mod_main.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef E_MOD_MAIN_H -#define E_MOD_MAIN_H - -/* We want emil_binbuf_sha1 which is beta API */ -#define EFL_BETA_API_SUPPORT - -#include "e.h" - -/** - * https://phab.enlightenment.org/w/teamwork_api/ - */ - -/* Increment for Major Changes */ -#define MOD_CONFIG_FILE_EPOCH 1 -/* Increment for Minor Changes (ie: user doesn't need a new config) */ -#define MOD_CONFIG_FILE_GENERATION 0 -#define MOD_CONFIG_FILE_VERSION ((MOD_CONFIG_FILE_EPOCH * 1000000) + MOD_CONFIG_FILE_GENERATION) - -typedef struct Teamwork_Config -{ - unsigned int config_version; - - Eina_Bool disable_media_fetch; - Eina_Bool disable_video; - long long int allowed_media_size; - long long int allowed_media_fetch_size; - int allowed_media_age; - - double mouse_out_delay; - double popup_size; - double popup_opacity; -} Teamwork_Config; - -typedef struct Mod -{ - E_Module *module; - E_Config_Dialog *cfd; - size_t media_size; - Eina_Inlist *media_list; - Eina_Hash *media; - Evas_Object *pop; - Eina_Bool sticky E_BITFIELD; - Eina_Bool force E_BITFIELD; - Eina_Bool hidden E_BITFIELD; -} Mod; - -extern Teamwork_Config *tw_config; -extern Mod *tw_mod; -extern int _e_teamwork_log_dom; - -EINTERN const char *sha1_encode(const Eina_Binbuf *data); - -EINTERN int e_tw_init(void); -EINTERN void e_tw_shutdown(void); -EINTERN Eina_Bool tw_hide(void *d EINA_UNUSED); -EINTERN void tw_popup_opacity_set(void); -EINTERN void tw_uri_show(const char *uri); - -EINTERN void tw_link_detect(E_Client *ec, const char *uri); -EINTERN void tw_link_show(E_Client *ec, const char *uri, int x, int y); -EINTERN void tw_link_hide(E_Client *ec, const char *uri); -EINTERN void tw_link_open(E_Client *ec, const char *uri); - -typedef void (*Teamwork_Signal_Cb)(E_Client *, const char *); -typedef void (*Teamwork_Signal_Progress_Cb)(E_Client *, const char *, uint32_t); - -extern Teamwork_Signal_Cb tw_signal_link_complete[E_PIXMAP_TYPE_NONE]; -extern Teamwork_Signal_Cb tw_signal_link_invalid[E_PIXMAP_TYPE_NONE]; -extern Teamwork_Signal_Progress_Cb tw_signal_link_progress[E_PIXMAP_TYPE_NONE]; -extern Teamwork_Signal_Cb tw_signal_link_downloading[E_PIXMAP_TYPE_NONE]; - -EINTERN E_Config_Dialog *e_int_config_teamwork_module(Evas_Object *parent, const char *params EINA_UNUSED); - -E_API int e_modapi_shutdown(E_Module *m EINA_UNUSED); - -#ifdef HAVE_WAYLAND -EINTERN Eina_Bool wl_tw_init(void); -EINTERN void wl_tw_shutdown(void); -#endif - -#ifndef HAVE_WAYLAND_ONLY -EINTERN Eina_Bool x11_tw_init(void); -EINTERN void x11_tw_shutdown(void); -#endif - -#define E_TW_VERSION 2 - -#undef DBG -#undef INF -#undef WRN -#undef ERR -#undef CRIT -#define DBG(...) EINA_LOG_DOM_DBG(_e_teamwork_log_dom, __VA_ARGS__) -#define INF(...) EINA_LOG_DOM_INFO(_e_teamwork_log_dom, __VA_ARGS__) -#define WRN(...) EINA_LOG_DOM_WARN(_e_teamwork_log_dom, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(_e_teamwork_log_dom, __VA_ARGS__) -#define CRIT(...) EINA_LOG_DOM_CRIT(_e_teamwork_log_dom, __VA_ARGS__) - -#endif diff --git a/src/modules/teamwork/e_mod_tw.c b/src/modules/teamwork/e_mod_tw.c deleted file mode 100644 index bbf4dc4e6..000000000 --- a/src/modules/teamwork/e_mod_tw.c +++ /dev/null @@ -1,1297 +0,0 @@ -#include "e_mod_main.h" - -#define IMAGE_FETCH_TRIES 5 - -/** - * https://phab.enlightenment.org/w/teamwork_api/ - */ - -typedef struct -{ - const char *sha1; - unsigned long long timestamp; - Eina_Bool video; -} Media_Cache; - -typedef struct Media_Cache_List -{ - Eina_List *cache; - Eina_Bool video; -} Media_Cache_List; - -typedef struct Media -{ - Mod *mod; - EINA_INLIST; - Ecore_Con_Url *client; - Eina_Binbuf *buf; - const char *addr; - unsigned long long timestamp; - unsigned int tries; - Ecore_Thread *video_thread; - Eina_List *clients; - Eina_Stringshare *tmpfile; - Eina_Bool video; - Eina_Bool dummy E_BITFIELD; - Eina_Bool valid E_BITFIELD; - Eina_Bool show E_BITFIELD; -} Media; - -typedef enum -{ - MEDIA_CACHE_TYPE_IMAGE, - MEDIA_CACHE_TYPE_VIDEO, -} Media_Cache_Type; - -static Eet_File *media[2] = {NULL}; -static Eet_File *dummies = NULL; -static Eet_Data_Descriptor *cleaner_edd = NULL; -static Eet_Data_Descriptor *cache_edd = NULL; -static Ecore_Idler *media_cleaner[2] = {NULL}; -static Eina_List *handlers = NULL; -static Media_Cache_List *tw_cache_list[2] = {NULL}; - -static Evas_Point last_coords = {0, 0}; - -static E_Client *tw_win; - -static Ecore_Timer *tw_hide_timer = NULL; - -static Eina_Stringshare *tw_tmpfile = NULL; -static int tw_tmpfd = -1; -static Ecore_Thread *tw_tmpthread = NULL; -static Media *tw_tmpthread_media = NULL; -static Eina_Bool tw_tooltip = EINA_FALSE; - -typedef enum -{ - TEAMWORK_LINK_TYPE_NONE, - TEAMWORK_LINK_TYPE_LOCAL_FILE, - TEAMWORK_LINK_TYPE_LOCAL_DIRECTORY, - TEAMWORK_LINK_TYPE_REMOTE -} Teamwork_Link_Type; - -static void tw_show(Media *i); -static void tw_show_local_file(const char *uri); -static void tw_show_local_dir(const char *uri); -static int tw_media_add(const char *url, Eina_Binbuf *buf, unsigned long long timestamp, Eina_Bool video); -static void download_media_cleanup(void); -static void tw_dummy_add(const char *url); -static Eina_Bool tw_dummy_check(const char *url); -static void tw_media_ping(const char *url, unsigned long long timestamp, Eina_Bool video); -static Eina_Binbuf *tw_media_get(const char *url, unsigned long long timestamp, Eina_Bool *video); -static Eina_Bool tw_idler_start(void); - -EINTERN Teamwork_Signal_Cb tw_signal_link_complete[E_PIXMAP_TYPE_NONE]; -EINTERN Teamwork_Signal_Cb tw_signal_link_invalid[E_PIXMAP_TYPE_NONE]; -EINTERN Teamwork_Signal_Progress_Cb tw_signal_link_progress[E_PIXMAP_TYPE_NONE]; -EINTERN Teamwork_Signal_Cb tw_signal_link_downloading[E_PIXMAP_TYPE_NONE]; - -static void -media_client_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Media *i = data; - E_Client *ec = e_comp_object_client_get(obj); - - i->clients = eina_list_remove(i->clients, ec); -} - -static void -signal_link_complete(Media *i) -{ - E_Client *ec; - - if (i->show && (i->clients || (!tw_win))) tw_show(i); - i->show = 0; - - EINA_LIST_FREE(i->clients, ec) - { - E_Pixmap_Type type = e_pixmap_type_get(ec->pixmap); - if (e_client_has_xwindow(ec)) - type = E_PIXMAP_TYPE_X; - if (tw_signal_link_complete[type]) - tw_signal_link_complete[type](ec, i->addr); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, media_client_del, i); - } -} - -static void -signal_link_invalid(Media *i) -{ - E_Client *ec; - - EINA_LIST_FREE(i->clients, ec) - { - E_Pixmap_Type type = e_pixmap_type_get(ec->pixmap); - if (e_client_has_xwindow(ec)) - type = E_PIXMAP_TYPE_X; - if (tw_signal_link_invalid[type]) - tw_signal_link_invalid[type](ec, i->addr); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, media_client_del, i); - } -} - -static void -signal_link_progress(Media *i, double pr) -{ - Eina_List *l; - E_Client *ec; - - EINA_LIST_FOREACH(i->clients, l, ec) - { - E_Pixmap_Type type = e_pixmap_type_get(ec->pixmap); - if (e_client_has_xwindow(ec)) - type = E_PIXMAP_TYPE_X; - if (tw_signal_link_progress[type]) - tw_signal_link_progress[type](ec, i->addr, lround(pr)); - } -} - -static void -signal_link_downloading(Media *i) -{ - Eina_List *l; - E_Client *ec; - - EINA_LIST_FOREACH(i->clients, l, ec) - { - E_Pixmap_Type type = e_pixmap_type_get(ec->pixmap); - if (e_client_has_xwindow(ec)) - type = E_PIXMAP_TYPE_X; - if (tw_signal_link_downloading[type]) - tw_signal_link_downloading[type](ec, i->addr); - } -} - -static void -link_failure_show(void) -{ - tw_mod->pop = evas_object_rectangle_add(e_comp->evas); - evas_object_color_set(tw_mod->pop, 0, 0, 0, 0); - evas_object_pass_events_set(tw_mod->pop, 1); - evas_object_geometry_set(tw_mod->pop, 0, 0, 1, 1); - evas_object_show(tw_mod->pop); - tw_tooltip = 1; - elm_object_tooltip_text_set(e_comp->elm, _("Target URI could not be shown." - "Hold [Ctrl] to disable link fetching.")); - elm_object_tooltip_show(e_comp->elm); -} - -static Eina_Bool -download_media_complete(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Con_Event_Url_Complete *ev) -{ - Media *i; - void **test = ecore_con_url_data_get(ev->url_con); - - if ((!test) || (*test != tw_mod)) return ECORE_CALLBACK_RENEW; - i = (void *)test; - if (!i->valid) return ECORE_CALLBACK_DONE; - i->timestamp = (unsigned long long)ecore_time_unix_get(); - if (tw_media_add(i->addr, i->buf, i->timestamp, i->video) == 1) - tw_mod->media_size += eina_binbuf_length_get(i->buf); - E_FREE_FUNC(i->client, ecore_con_url_free); - signal_link_complete(i); - download_media_cleanup(); - DBG("MEDIA CACHE: %zu bytes", tw_mod->media_size); - return ECORE_CALLBACK_DONE; -} - -static Eina_Bool -download_media_data(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_Con_Event_Url_Data *ev) -{ - Media *i; - void **test = ecore_con_url_data_get(ev->url_con); - - if ((!test) || (*test != tw_mod)) return ECORE_CALLBACK_RENEW; - i = (void *)test; - if (i->dummy) return ECORE_CALLBACK_DONE; - if (!i->buf) i->buf = eina_binbuf_new(); - eina_binbuf_append_length(i->buf, ev->data, ev->size); - return ECORE_CALLBACK_DONE; -} - -static Eina_Bool -download_media_status(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_Con_Event_Url_Progress *ev) -{ - int status; - const char *h; - Media *i; - const Eina_List *l; - void **test = ecore_con_url_data_get(ev->url_con); - - if ((!test) || (*test != tw_mod)) return ECORE_CALLBACK_RENEW; - i = (void *)test; - - if (i->valid) - { - signal_link_progress(i, ev->down.now / ev->down.total); - return ECORE_CALLBACK_DONE; //already checked - } - status = ecore_con_url_status_code_get(ev->url_con); - if (!status) return ECORE_CALLBACK_DONE; //not ready yet - if (ev->down.total / 1024 / 1024 > tw_config->allowed_media_fetch_size) - { - DBG("Media larger than allowed!"); - goto invalid; - } - DBG("%i code for media: %s", status, i->addr); - if (status != 200) - { - E_FREE_FUNC(i->buf, eina_binbuf_free); - E_FREE_FUNC(i->client, ecore_con_url_free); - if ((status >= 400) || (status <= 301)) goto dummy; - if (++i->tries < IMAGE_FETCH_TRIES) - { - i->client = ecore_con_url_new(i->addr); - ecore_con_url_data_set(i->client, i); - if (!ecore_con_url_get(i->client)) goto dummy; - } - return ECORE_CALLBACK_DONE; - } - EINA_LIST_FOREACH(ecore_con_url_response_headers_get(ev->url_con), l, h) - { - const char *type; - - if (strncasecmp(h, "Content-Type: ", sizeof("Content-Type: ") - 1)) continue; - type = h + sizeof("Content-Type: ") - 1; - i->video = ((!strncasecmp(type, "video/", 6)) || (!strncasecmp(type, "application/ogg", sizeof("application/ogg") -1))); - if (i->video) break; - if (strncasecmp(type, "image/", 6)) goto dummy; - break; - } - i->valid = !i->dummy; - if (i->valid) signal_link_progress(i, ev->down.now / ev->down.total); - - return ECORE_CALLBACK_DONE; -dummy: - signal_link_invalid(i); - tw_dummy_add(i->addr); - i->dummy = EINA_TRUE; -invalid: - E_FREE_FUNC(i->buf, eina_binbuf_free); - E_FREE_FUNC(i->client, ecore_con_url_free); - if (i->show) - link_failure_show(); - i->show = 0; - return ECORE_CALLBACK_RENEW; -} - -static int -download_media_sort_cb(Media *a, Media *b) -{ - long long diff; - diff = a->timestamp - b->timestamp; - if (diff < 0) return -1; - if (!diff) return 0; - return 1; -} - -static Media * -download_media_add(const char *url) -{ - Media *i; - unsigned long long t; - Eina_Bool add = EINA_FALSE; - - t = (unsigned long long)ecore_time_unix_get(); - - i = eina_hash_find(tw_mod->media, url); - if (i) - { - if (i->buf) - { - i->timestamp = t; - tw_media_ping(url, i->timestamp, i->video); - } - else - { - /* randomly deleted during cache pruning */ - i->buf = tw_media_get(url, t, &i->video); - if (i->buf) tw_mod->media_size += eina_binbuf_length_get(i->buf); - } - if (i->buf) - { - tw_mod->media_list = eina_inlist_promote(tw_mod->media_list, EINA_INLIST_GET(i)); - download_media_cleanup(); - return i; - } - } - if (!i) - { - if (tw_dummy_check(url)) return NULL; - if (tw_config->disable_media_fetch) return NULL; - add = EINA_TRUE; - i = calloc(1, sizeof(Media)); - i->mod = tw_mod; - i->addr = eina_stringshare_add(url); - i->buf = tw_media_get(url, t, &i->video); - } - if (i->buf) - tw_mod->media_size += eina_binbuf_length_get(i->buf); - else - { - i->client = ecore_con_url_new(url); - ecore_con_url_data_set(i->client, i); - ecore_con_url_get(i->client); - signal_link_downloading(i); - } - if (!add) return i; - eina_hash_add(tw_mod->media, url, i); - tw_mod->media_list = eina_inlist_sorted_insert(tw_mod->media_list, EINA_INLIST_GET(i), (Eina_Compare_Cb)download_media_sort_cb); - return i; -} - -static void -download_media_free(Media *i) -{ - E_Client *ec; - - if (!i) return; - tw_mod->media_list = eina_inlist_remove(tw_mod->media_list, EINA_INLIST_GET(i)); - if (i->client) ecore_con_url_free(i->client); - if (i->buf) eina_binbuf_free(i->buf); - if (i->tmpfile) ecore_file_unlink(i->tmpfile); - EINA_LIST_FREE(i->clients, ec) - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, media_client_del, i); - eina_stringshare_del(i->tmpfile); - eina_stringshare_del(i->addr); - free(i); -} - -static void -download_media_cleanup(void) -{ - Media *i; - Eina_Inlist *l; - - if (tw_config->allowed_media_age) - { - if (tw_config->allowed_media_size < 0) return; - if ((size_t)tw_config->allowed_media_size > (tw_mod->media_size / 1024 / 1024)) return; - } - if (!tw_mod->media_list) return; - l = tw_mod->media_list->last; - while (l) - { - i = EINA_INLIST_CONTAINER_GET(l, Media); - l = l->prev; - if (!i->buf) continue; - if (i->video_thread) continue; //ignore currently-threaded media - /* only free the buffers here where possible to avoid having to deal with multiple list entries */ - if (tw_mod->media_size && (tw_mod->media_size >= eina_binbuf_length_get(i->buf))) - tw_mod->media_size -= eina_binbuf_length_get(i->buf); - E_FREE_FUNC(i->buf, eina_binbuf_free); - if (!tw_config->allowed_media_age) - /* if caching is disabled, just delete */ - eina_hash_del_by_key(tw_mod->media, i->addr); - if ((size_t)tw_config->allowed_media_size > (tw_mod->media_size / 1024 / 1024)) - break; - } -} - -static Teamwork_Link_Type -link_uri_local_type_get(const char *uri) -{ - size_t len = strlen(uri); - - if (uri[len - 1] == '/') return TEAMWORK_LINK_TYPE_LOCAL_DIRECTORY; - return TEAMWORK_LINK_TYPE_LOCAL_FILE; -} - -static Teamwork_Link_Type -link_uri_type_get(const char *uri) -{ - if (!uri[0]) return TEAMWORK_LINK_TYPE_NONE; //invalid - if (uri[0] == '/') return link_uri_local_type_get(uri + 1); //probably a file? - if ((!strncasecmp(uri, "http://", 7)) || (!strncasecmp(uri, "https://", 8))) return TEAMWORK_LINK_TYPE_REMOTE; - if (!strncmp(uri, "file://", 7)) return link_uri_local_type_get(uri + 7); - WRN("Unknown link type for '%s'", uri); - return TEAMWORK_LINK_TYPE_NONE; -} - -EINTERN void -tw_link_detect(E_Client *ec, const char *uri) -{ - Media *i; - - if (!tw_config->allowed_media_age) return; - - if (link_uri_type_get(uri) != TEAMWORK_LINK_TYPE_REMOTE) return; - i = download_media_add(uri); - if ((!i->clients) || (!eina_list_data_find(i->clients, ec))) - { - i->clients = eina_list_append(i->clients, ec); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_DEL, media_client_del, i); - } -} - -static void -link_show_helper(const char *uri, Eina_Bool signal_open) -{ - Teamwork_Link_Type type; - Eina_Bool dummy = EINA_TRUE; - - if (tw_mod->pop && (!e_util_strcmp(evas_object_data_get(tw_mod->pop, "uri"), uri))) return; - type = link_uri_type_get(uri); - switch (type) - { - case TEAMWORK_LINK_TYPE_NONE: - dummy = EINA_FALSE; - break; - case TEAMWORK_LINK_TYPE_LOCAL_DIRECTORY: - if (signal_open) tw_show_local_dir(uri); - break; - case TEAMWORK_LINK_TYPE_LOCAL_FILE: - tw_show_local_file(uri); - break; - case TEAMWORK_LINK_TYPE_REMOTE: - { - Media *i; - - i = eina_hash_find(tw_mod->media, uri); - if (!i) - { - if (tw_dummy_check(uri)) break; - i = download_media_add(uri); - if (i) - { - if (i->buf) - { - tw_show(i); - dummy = EINA_FALSE; - } - else if (i->dummy) break; - else - { - i->show = 1; - dummy = EINA_FALSE; - } - } - } - else if (!i->dummy) - { - tw_show(i); - dummy = EINA_FALSE; - } - break; - } - } - if (tw_mod->pop) tw_mod->force = signal_open; - else if (dummy) - link_failure_show(); -} - -EINTERN void -tw_link_show(E_Client *ec, const char *uri, int x, int y) -{ - if (evas_key_modifier_is_set(evas_key_modifier_get(e_comp->evas), "Control")) return; - tw_win = ec; - last_coords.x = x; - last_coords.y = y; - link_show_helper(uri, 0); - tw_mod->hidden = 0; -} - -EINTERN void -tw_link_hide(E_Client *ec, const char *uri) -{ - if (tw_tooltip) - elm_object_tooltip_hide(e_comp->elm); - if (ec != tw_win) return; - if (tw_mod->pop && (!tw_mod->sticky) && - ((tw_tmpfile && eina_streq(evas_object_data_get(tw_mod->pop, "uri"), tw_tmpfile)) || - eina_streq(evas_object_data_get(tw_mod->pop, "uri"), uri))) - { - if (EINA_DBL_NONZERO(tw_config->mouse_out_delay)) - { - if (tw_hide_timer) ecore_timer_loop_reset(tw_hide_timer); - else tw_hide_timer = ecore_timer_loop_add(tw_config->mouse_out_delay, tw_hide, NULL); - } - else - tw_hide(NULL); - tw_mod->force = 0; - } - else if (tw_tmpthread || tw_tmpfile) - tw_hide(NULL); - tw_mod->hidden = !tw_mod->pop; -} - -EINTERN void -tw_link_open(E_Client *ec, const char *uri) -{ - if (ec->focused) - e_util_open(uri, NULL); -} - -static Eet_Data_Descriptor * -media_cache_edd_new(void) -{ - Eet_Data_Descriptor *edd; - Eet_Data_Descriptor_Class eddc; - EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Media_Cache); - edd = eet_data_descriptor_stream_new(&eddc); -#define ADD(name, type) \ - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Media_Cache, #name, name, EET_T_##type) - - ADD(sha1, INLINED_STRING); - ADD(timestamp, ULONG_LONG); - ADD(video, UCHAR); -#undef ADD - return edd; -} - -static int -media_cache_compare(Media_Cache *a, Media_Cache *b) -{ - long long diff; - diff = a->timestamp - b->timestamp; - if (diff < 0) return -1; - if (!diff) return 0; - return 1; -} - -static void -media_cache_add(const char *sha1, unsigned long long timestamp, Eina_Bool video) -{ - Media_Cache *ic; - if (!tw_cache_list[0]) return; - ic = malloc(sizeof(Media_Cache)); - ic->sha1 = eina_stringshare_ref(sha1); - ic->timestamp = timestamp; - ic->video = video; - tw_cache_list[video]->cache = eina_list_sorted_insert(tw_cache_list[video]->cache, (Eina_Compare_Cb)media_cache_compare, ic); -} - -static void -media_cache_del(const char *sha1, Eina_Bool video) -{ - Eina_List *l, *l2; - Media_Cache *ic; - - if (!tw_cache_list[0]) return; - EINA_LIST_FOREACH_SAFE(tw_cache_list[video]->cache, l, l2, ic) - { - if (ic->sha1 == sha1) continue; - tw_cache_list[video]->cache = eina_list_remove_list(tw_cache_list[video]->cache, l); - return; - } -} - -static void -media_cache_update(const char *sha1, unsigned long long timestamp, Eina_Bool video) -{ - Media_Cache *ic; - Eina_List *l; - - if (!tw_cache_list[video]) return; - EINA_LIST_FOREACH(tw_cache_list[video]->cache, l, ic) - { - if (ic->sha1 != sha1) continue; - ic->timestamp = timestamp; - break; - } - tw_cache_list[video]->cache = eina_list_sort(tw_cache_list[video]->cache, 0, (Eina_Compare_Cb)media_cache_compare); -} - -static Eina_Bool -media_cleaner_cb(void *data) -{ - unsigned long long now; - Media_Cache_List *mcl = data; - Media_Cache *ic; - Eina_List *l, *l2; - int cleaned = 0; - if ((!cleaner_edd) || (!cache_edd) || (tw_config->allowed_media_age < 0) || (!mcl) || (!mcl->cache)) - { - if (mcl) - media_cleaner[mcl->video] = NULL; - return EINA_FALSE; - } - - if (tw_config->allowed_media_age) - { - now = (unsigned long long)ecore_time_unix_get(); - now -= tw_config->allowed_media_age * 24 * 60 * 60; - } - else - now = ULLONG_MAX; - EINA_LIST_FOREACH_SAFE(mcl->cache, l, l2, ic) - { - /* only clean up to 3 entries at a time to ensure responsiveness */ - if (cleaned >= 3) break; - if (ic->timestamp >= now) - { - /* stop the idler for now to avoid pointless spinning */ - ecore_timer_loop_add(24 * 60 * 60, (void *)tw_idler_start, NULL); - media_cleaner[mcl->video] = NULL; - tw_cache_list[mcl->video] = mcl; - return EINA_FALSE; - } - eet_delete(media[mcl->video], ic->sha1); - mcl->cache = eina_list_remove_list(mcl->cache, l); - eina_stringshare_del(ic->sha1); - free(ic); - cleaned++; - } - tw_cache_list[mcl->video] = mcl; - return EINA_TRUE; -} - -static void -tw_dummy_add(const char *url) -{ - if (!dummies) return; - eet_write(dummies, url, "0", 1, 0); - DBG("Added new dummy for url %s", url); -} - -static Eina_Bool -tw_dummy_check(const char *url) -{ - char **list; - int lsize; - - if (!dummies) return EINA_FALSE; - list = eet_list(dummies, url, &lsize); - if (lsize) - { - free(list); - return EINA_TRUE; - } - return EINA_FALSE; -} - -static int -tw_media_add(const char *url, Eina_Binbuf *buf, unsigned long long timestamp, Eina_Bool video) -{ - const char *sha1; - int lsize; - char **list; - - if (!media[video]) return -1; - if (!tw_config->allowed_media_age) return 0; //disk caching disabled - - sha1 = sha1_encode(buf); - DBG("Media: %s - %s", url, sha1); - - list = eet_list(media[video], url, &lsize); - if (lsize) - { - /* should never happen; corruption likely */ - eet_delete(media[video], url); - free(list); - } - list = eet_list(media[video], sha1, &lsize); - if (lsize) - { - eet_alias(media[video], url, sha1, 0); - eet_sync(media[video]); - DBG("Added new alias for media %s", sha1); - eina_stringshare_del(sha1); - free(list); - return 0; - } - - eet_write(media[video], sha1, eina_binbuf_string_get(buf), eina_binbuf_length_get(buf), 0); - eet_alias(media[video], url, sha1, 0); - eet_sync(media[video]); - media_cache_add(sha1, timestamp, video); - DBG("Added new media with length %zu: %s", eina_binbuf_length_get(buf), sha1); - eina_stringshare_del(sha1); - return 1; -} - -void -tw_media_del(const char *url, Eina_Bool video) -{ - const char *alias; - if (!media[video]) return; - alias = eet_alias_get(media[video], url); - eet_delete(media[video], alias); - media_cache_del(alias, video); - eina_stringshare_del(alias); -} - -static Eina_Binbuf * -tw_media_get(const char *url, unsigned long long timestamp, Eina_Bool *video) -{ - unsigned char *img; - Eina_Binbuf *buf = NULL; - const char *alias; - char **list; - int size, lsize; - - for (*video = 0; *video <= MEDIA_CACHE_TYPE_VIDEO; (*video)++) - { - if (!media[*video]) return NULL; - - list = eet_list(media[*video], url, &lsize); - if (!lsize) continue; - free(list); - - img = eet_read(media[*video], url, &size); - alias = eet_alias_get(media[*video], url); - buf = eina_binbuf_manage_new(img, size, EINA_FALSE); - media_cache_update(alias, timestamp, *video); - - eina_stringshare_del(alias); - return buf; - } - *video = 0; - return NULL; -} - -static void -tw_media_ping(const char *url, unsigned long long timestamp, Eina_Bool video) -{ - const char *alias; - - if (!media[video]) return; - - alias = eet_alias_get(media[video], url); - media_cache_update(alias, timestamp, video); - - eina_stringshare_del(alias); -} - -static Eina_Bool -tw_idler_start(void) -{ - if (!media[0]) return EINA_FALSE; - media_cleaner[0] = ecore_idler_add((Ecore_Task_Cb)media_cleaner_cb, tw_cache_list[0]); - media_cleaner[1] = ecore_idler_add((Ecore_Task_Cb)media_cleaner_cb, tw_cache_list[1]); - return EINA_FALSE; -} - -static void -tw_popup_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - eina_stringshare_del(evas_object_data_get(obj, "uri")); -} - -EINTERN void -tw_popup_opacity_set(void) -{ - int c = lround((double)255 * (tw_config->popup_opacity / 100.)); - if (tw_mod->pop) - evas_object_color_set(tw_mod->pop, c, c, c, c); -} - -static void -tw_show_helper(Evas_Object *o, int w, int h) -{ - int px, py, pw, ph; - double ratio = tw_config->popup_size / 100.; - E_Zone *zone = e_zone_current_get(); - - evas_object_hide(tw_mod->pop); - evas_object_del(tw_mod->pop); - tw_mod->sticky = 0; - tw_mod->pop = e_comp_object_util_add(o, E_COMP_OBJECT_TYPE_POPUP); - evas_object_pass_events_set(tw_mod->pop, 1); - pw = MIN(w, (ratio * (double)zone->w)); - pw = MIN(pw, zone->w); - if (pw == w) ph = h; - else - ph = lround((double)(pw * h) / ((double)w)); - if (ph > zone->h) - { - ph = zone->h; - pw = lround((double)(ph * w) / ((double)h)); - } - e_livethumb_vsize_set(o, pw, ph); - evas_object_layer_set(tw_mod->pop, E_LAYER_POPUP); - evas_object_resize(tw_mod->pop, pw, ph); - - if ((!tw_win) && (last_coords.x == last_coords.y) && (last_coords.x == -1)) - { - px = lround(ratio * (double)zone->w) - (pw / 2); - py = lround(ratio * (double)zone->h) - (ph / 2); - if (px + pw > zone->w) - px = zone->w - pw; - if (py + ph > zone->h) - py = zone->h - ph; - evas_object_move(tw_mod->pop, px, py); - } - else if (tw_win) - { - int x, y; - - x = tw_win->client.x + last_coords.x; - y = tw_win->client.y + last_coords.y; - /* prefer tooltip left of last_coords */ - px = x - pw - 3; - /* if it's offscreen, try right of last_coords */ - if (px < 0) px = x + 3; - /* fuck this, stick it right on the last_coords */ - if (px + pw + 3 > zone->w) - px = (x / 2) - (pw / 2); - /* give up */ - if (px < 0) px = 0; - - /* prefer tooltip above last_coords */ - py = y - ph - 3; - /* if it's offscreen, try below last_coords */ - if (py < 0) py = y + 3; - /* fuck this, stick it right on the last_coords */ - if (py + ph + 3 > zone->h) - py = (y / 2) - (ph / 2); - /* give up */ - if (py < 0) py = 0; - evas_object_move(tw_mod->pop, px, py); - } - else - { - e_comp_object_util_center_on(tw_mod->pop, zone->bg_clip_object); - } - evas_object_show(tw_mod->pop); - tw_popup_opacity_set(); - evas_object_event_callback_add(tw_mod->pop, EVAS_CALLBACK_DEL, tw_popup_del, NULL); -} - -static Eina_Bool -stupid_obj_del_workaround_hack(void *data) -{ - evas_object_del(data); - return EINA_FALSE; -} - -static void -tw_video_closed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - evas_object_hide(obj); - evas_object_hide(data); - emotion_object_play_set(obj, EINA_FALSE); - ecore_timer_loop_add(3.0, stupid_obj_del_workaround_hack, data); - if (!tw_tmpfile) return; - eina_stringshare_replace(&tw_tmpfile, NULL); -} - -static void -tw_video_opened_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int iw, ih, w, h; - double ratio = tw_config->popup_size / 100.; - E_Zone *zone; - - evas_object_smart_callback_del_full(obj, "frame_decode", tw_video_opened_cb, data); - if (tw_mod->hidden && (!tw_mod->sticky) && (!tw_mod->force)) - { - tw_video_closed_cb(data, obj, NULL); - return; - } - emotion_object_size_get(obj, &iw, &ih); - if ((iw <= 0) || (ih <= 0)) - { - tw_video_closed_cb(data, obj, NULL); - return; - } - - zone = e_zone_current_get(); - w = MIN(zone->w, (ratio * (double)zone->w)); - ratio = emotion_object_ratio_get(obj); - if (ratio > 0.0) iw = (ih * ratio) + 0.5; - if (iw < 1) iw = 1; - - h = (w * ih) / iw; - e_livethumb_thumb_set(data, obj); - tw_show_helper(data, w, h); - evas_object_data_set(tw_mod->pop, "uri", eina_stringshare_add(emotion_object_file_get(obj))); -} - -static void -tw_video_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - if (emotion_object_file_get(obj) != tw_tmpfile) return; - if (!tw_tmpfile) return; - eina_stringshare_replace(&tw_tmpfile, NULL); -} - -static void -tw_show_video(Evas_Object *prev, const char *uri) -{ - Evas_Object *o; - - o = emotion_object_add(e_livethumb_evas_get(prev)); - emotion_object_init(o, "gstreamer1"); - emotion_object_file_set(o, uri); - emotion_object_play_set(o, EINA_TRUE); - evas_object_smart_callback_add(o, "frame_decode", tw_video_opened_cb, prev); - evas_object_smart_callback_add(o, "decode_stop", tw_video_closed_cb, prev); - evas_object_resize(o, 1, 1); - if (uri == tw_tmpfile) - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, tw_video_del_cb, NULL); -} - -static void -tw_video_thread_cancel_cb(void *data, Ecore_Thread *eth) -{ - Media *i; - - if (ecore_thread_local_data_find(eth, "dead")) return; - i = data; - tw_tmpthread = i->video_thread = NULL; - tw_tmpthread_media = NULL; - close(tw_tmpfd); - tw_tmpfd = -1; - download_media_cleanup(); -} - -static void -tw_video_thread_done_cb(void *data, Ecore_Thread *eth) -{ - Media *i; - Evas_Object *prev; - - if (ecore_thread_local_data_find(eth, "dead")) return; - i = data; - tw_tmpthread = i->video_thread = NULL; - tw_tmpthread_media = NULL; - close(tw_tmpfd); - tw_tmpfd = -1; - i->tmpfile = eina_stringshare_ref(tw_tmpfile); - prev = e_livethumb_add(e_comp->evas); - tw_show_video(prev, tw_tmpfile); - download_media_cleanup(); -} - -static void -tw_video_thread_cb(void *data, Ecore_Thread *eth) -{ - int fd; - Media *i; - const void *buf; - size_t pos = 0, tot; - - if (ecore_thread_local_data_find(eth, "dead")) return; - i = data; - fd = (intptr_t)ecore_thread_global_data_find("teamwork_media_file"); - - if (ftruncate(fd, 0)) - { - ERR("TRUNCATE FAILED: %s", strerror(errno)); - ecore_thread_cancel(eth); - return; //fail if file can't be zeroed - } - tot = eina_binbuf_length_get(i->buf); - buf = eina_binbuf_string_get(i->buf); - while (pos < tot) - { - unsigned int num = 4096; - - if (pos + num >= tot) - num = tot - pos; - if (write(fd, (char*)buf + pos, num) < 0) - { - ERR("WRITE FAILED: %s", strerror(errno)); - ecore_thread_cancel(eth); - return; - } - pos += num; - if (ecore_thread_local_data_find(eth, "dead")) break; - } -} - -static void -tw_show(Media *i) -{ - Evas_Object *o, *ic, *prev; - int w, h; - - if (!i->buf) i->buf = tw_media_get(i->addr, ecore_time_unix_get(), &i->video); - if (!i->buf) - { - download_media_add(i->addr); - return; - } - if (i->video) - { - char buf[PATH_MAX]; - Eina_Tmpstr *tmpfile; - - if (tw_config->disable_video) return; - while (i->tmpfile) - { - if (!ecore_file_exists(i->tmpfile)) - { - eina_stringshare_replace(&i->tmpfile, NULL); - break; - } - if (tw_tmpthread) - { - ecore_thread_local_data_add(tw_tmpthread, "dead", (void*)1, NULL, 0); - E_FREE_FUNC(tw_tmpthread, ecore_thread_cancel); - tw_tmpthread_media->video_thread = NULL; - } - if (tw_tmpfd != -1) - { - close(tw_tmpfd); - tw_tmpfd = -1; - } - eina_stringshare_del(tw_tmpfile); - tw_tmpfile = eina_stringshare_ref(i->tmpfile); - prev = e_livethumb_add(e_comp->evas); - tw_show_video(prev, tw_tmpfile); - return; - } - snprintf(buf, sizeof(buf), "teamwork-%s-XXXXXX", ecore_file_file_get(i->addr)); - if (tw_tmpfile) - { - if (tw_tmpthread) - { - ecore_thread_local_data_add(tw_tmpthread, "dead", (void*)1, NULL, 0); - E_FREE_FUNC(tw_tmpthread, ecore_thread_cancel); - tw_tmpthread_media->video_thread = NULL; - } - close(tw_tmpfd); - } - tw_tmpfd = eina_file_mkstemp(buf, &tmpfile); - eina_stringshare_replace(&tw_tmpfile, tmpfile); - if (tw_tmpfd < 0) - { - ERR("ERROR: %s", strerror(errno)); - download_media_cleanup(); - eina_stringshare_replace(&tw_tmpfile, NULL); - tw_tmpthread_media = NULL; - eina_tmpstr_del(tmpfile); - return; - } - tw_tmpthread_media = i; - ecore_thread_global_data_add("teamwork_media_file", (intptr_t*)(long)tw_tmpfd, NULL, 0); - i->video_thread = tw_tmpthread = ecore_thread_run(tw_video_thread_cb, tw_video_thread_done_cb, tw_video_thread_cancel_cb, i); - return; - } - else - { - prev = e_livethumb_add(e_comp->evas); - o = evas_object_image_filled_add(e_livethumb_evas_get(prev)); - evas_object_image_memfile_set(o, (void*)eina_binbuf_string_get(i->buf), eina_binbuf_length_get(i->buf), NULL, NULL); - evas_object_image_size_get(o, &w, &h); - ic = e_icon_add(e_livethumb_evas_get(prev)); - e_icon_image_object_set(ic, o); - } - e_livethumb_thumb_set(prev, ic); - tw_show_helper(prev, w, h); - evas_object_data_set(tw_mod->pop, "uri", eina_stringshare_ref(i->addr)); -} - -static void -tw_show_local_dir(const char *uri) -{ - E_Action *act; - - act = e_action_find("fileman"); - if (act) act->func.go(NULL, uri); -} - -static void -tw_show_local_file(const char *uri) -{ - Evas_Object *o, *prev; - int w, h; - Eina_Bool video = EINA_FALSE; - - video = emotion_object_extension_may_play_get(uri); - if (video) - { - if (tw_config->disable_video) return; - } - else - { - if (!evas_object_image_extension_can_load_get(uri)) return; - } - prev = e_livethumb_add(e_comp->evas); - if (video) - { - tw_show_video(prev, uri); - return; - } - else - { - o = e_icon_add(e_livethumb_evas_get(prev)); - e_icon_file_set(o, uri); - e_icon_preload_set(o, 1); - e_icon_size_get(o, &w, &h); - } - e_livethumb_thumb_set(prev, o); - tw_show_helper(prev, w, h); - evas_object_data_set(tw_mod->pop, "uri", eina_stringshare_add(uri)); -} - -static void -tw_handler_hide(void) -{ - if (tw_mod->force || tw_mod->sticky) return; - if (EINA_DBL_NONZERO(tw_config->mouse_out_delay)) - { - if (tw_hide_timer) ecore_timer_loop_reset(tw_hide_timer); - else tw_hide_timer = ecore_timer_loop_add(tw_config->mouse_out_delay, tw_hide, NULL); - } - else - tw_hide(NULL); - tw_mod->force = 0; -} - -static Eina_Bool -button_press(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED) -{ - if (tw_mod->pop) tw_handler_hide(); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Desk_Show *ev EINA_UNUSED) -{ - if (tw_mod->pop) tw_handler_hide(); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Client *ev EINA_UNUSED) -{ - if (e_config->focus_policy == E_FOCUS_CLICK) return ECORE_CALLBACK_RENEW; - if (tw_mod->pop) tw_handler_hide(); - return ECORE_CALLBACK_RENEW; -} - -EINTERN Eina_Bool -tw_hide(void *d EINA_UNUSED) -{ - if (tw_tmpthread) - { - ecore_thread_local_data_add(tw_tmpthread, "dead", (void*)1, NULL, 0); - E_FREE_FUNC(tw_tmpthread, ecore_thread_cancel); - tw_tmpthread_media->video_thread = NULL; - } - if (tw_tmpfd != -1) - { - close(tw_tmpfd); - tw_tmpfd = -1; - } - eina_stringshare_replace(&tw_tmpfile, NULL); - tw_win = NULL; - evas_object_hide(tw_mod->pop); - E_FREE_FUNC(tw_mod->pop, evas_object_del); - last_coords.x = last_coords.y = 0; - E_FREE_FUNC(tw_hide_timer, ecore_timer_del); - download_media_cleanup(); - return EINA_FALSE; -} - -EINTERN int -e_tw_init(void) -{ - char buf[PATH_MAX]; - Eet_Data_Descriptor_Class eddc; - -#ifdef HAVE_WAYLAND - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - wl_tw_init(); -#endif -#ifndef HAVE_WAYLAND_ONLY - if (e_comp_util_has_x()) - x11_tw_init(); -#endif - - e_user_dir_concat_static(buf, "images/tw_cache_images.eet"); - media[MEDIA_CACHE_TYPE_IMAGE] = eet_open(buf, EET_FILE_MODE_READ_WRITE); - if (!media[MEDIA_CACHE_TYPE_IMAGE]) - { - ERR("Could not open image cache file!"); - return 0; - } - - e_user_dir_concat_static(buf, "images/tw_cache_video.eet"); - media[MEDIA_CACHE_TYPE_VIDEO] = eet_open(buf, EET_FILE_MODE_READ_WRITE); - if (!media[MEDIA_CACHE_TYPE_VIDEO]) - { - ERR("Could not open video cache file!"); - E_FREE_FUNC(media[MEDIA_CACHE_TYPE_IMAGE], eet_close); - return 0; - } - - cache_edd = media_cache_edd_new(); - EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Media_Cache_List); - cleaner_edd = eet_data_descriptor_file_new(&eddc); - EET_DATA_DESCRIPTOR_ADD_LIST(cleaner_edd, Media_Cache_List, "cache", cache, cache_edd); - EET_DATA_DESCRIPTOR_ADD_BASIC(cleaner_edd, Media_Cache_List, "video", video, EET_T_UCHAR); - tw_cache_list[MEDIA_CACHE_TYPE_IMAGE] = eet_data_read(media[MEDIA_CACHE_TYPE_IMAGE], cleaner_edd, "media_cache"); - if (!tw_cache_list[MEDIA_CACHE_TYPE_IMAGE]) - tw_cache_list[MEDIA_CACHE_TYPE_IMAGE] = E_NEW(Media_Cache_List, 1); - tw_cache_list[MEDIA_CACHE_TYPE_VIDEO] = eet_data_read(media[MEDIA_CACHE_TYPE_VIDEO], cleaner_edd, "media_cache"); - if (!tw_cache_list[MEDIA_CACHE_TYPE_VIDEO]) - { - tw_cache_list[MEDIA_CACHE_TYPE_VIDEO] = E_NEW(Media_Cache_List, 1); - tw_cache_list[MEDIA_CACHE_TYPE_VIDEO]->video = 1; - } - - e_user_dir_concat_static(buf, "images/dummies.eet"); - dummies = eet_open(buf, EET_FILE_MODE_READ_WRITE); - - E_LIST_HANDLER_APPEND(handlers, ECORE_CON_EVENT_URL_COMPLETE, download_media_complete, tw_mod); - E_LIST_HANDLER_APPEND(handlers, ECORE_CON_EVENT_URL_PROGRESS, download_media_status, tw_mod); - E_LIST_HANDLER_APPEND(handlers, ECORE_CON_EVENT_URL_DATA, download_media_data, tw_mod); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_FOCUS_OUT, focus_out, tw_mod); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_DESK_SHOW, desk_show, tw_mod); - E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, button_press, tw_mod); - E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_UP, button_press, tw_mod); - - tw_mod->media = eina_hash_string_superfast_new((Eina_Free_Cb)download_media_free); - return 1; -} - -EINTERN void -e_tw_shutdown(void) -{ - unsigned int x; - -#ifdef HAVE_WAYLAND - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - wl_tw_shutdown(); -#endif -#ifndef HAVE_WAYLAND_ONLY - if (e_comp_util_has_x()) - x11_tw_shutdown(); -#endif - E_FREE_LIST(handlers, ecore_event_handler_del); - for (x = 0; x <= MEDIA_CACHE_TYPE_VIDEO; x++) - { - if (media[x]) - { - if (tw_cache_list[x]) - { - Media_Cache *ic; - eet_data_write(media[x], cleaner_edd, "media_cache", tw_cache_list[x], 1); - EINA_LIST_FREE(tw_cache_list[x]->cache, ic) - { - eina_stringshare_del(ic->sha1); - free(ic); - } - free(tw_cache_list[x]); - } - E_FREE_FUNC(media[x], eet_close); - } - } - E_FREE_FUNC(dummies, eet_close); - E_FREE_FUNC(cleaner_edd, eet_data_descriptor_free); - E_FREE_FUNC(cache_edd, eet_data_descriptor_free); - if (tw_tmpfd != -1) - { - close(tw_tmpfd); - tw_tmpfd = -1; - } - eina_stringshare_replace(&tw_tmpfile, NULL); - E_FREE_FUNC(tw_tmpthread, ecore_thread_cancel); - tw_tmpthread_media = NULL; - tw_hide(NULL); - last_coords.x = last_coords.y = 0; - eina_hash_free(tw_mod->media); - evas_object_hide(tw_mod->pop); - E_FREE_FUNC(tw_mod->pop, evas_object_del); -} - -EINTERN void -tw_uri_show(const char *uri) -{ - link_show_helper(uri, 1); -} diff --git a/src/modules/teamwork/meson.build b/src/modules/teamwork/meson.build deleted file mode 100644 index 111ec4242..000000000 --- a/src/modules/teamwork/meson.build +++ /dev/null @@ -1,17 +0,0 @@ -deps = [dependency('emile')] - -src = files( - 'e_mod_main.c', - 'e_mod_config.c', - 'e_mod_tw.c', - 'wl.c', - 'x11.c', - 'e_mod_main.h' - ) - -if config_h.has('HAVE_WAYLAND') == true - src += files( - 'wl_teamwork.c', - 'wl_teamwork.h' - ) -endif diff --git a/src/modules/teamwork/module.desktop b/src/modules/teamwork/module.desktop deleted file mode 100644 index 3c69d1df0..000000000 --- a/src/modules/teamwork/module.desktop +++ /dev/null @@ -1,24 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Teamwork -Name[ca]=Treball en equip -Name[fi]=Tiimityö -Name[gl]=Traballo en equipo -Name[ms]=Teamwork -Name[pl]=Praca zespołowa -Name[ru]=Командная работа -Name[sr]=Тимски рад -Name[tr]=Takı Çalışması -Comment=Enlightenment Is A Team Player -Comment[ca]=Enlightenment és un jugador d'equip -Comment[de]=Enlightenment ist ein Mannschaftsspieler -Comment[eo]=Enlightenment estas skipa ludanto -Comment[fi]=Enlightenment on tiimipelaaja -Comment[fr]=Enlightenment joue en équipe -Comment[it]=Enlightenment è giocatore in un team -Comment[ms]=Enlightenment Adalah Pemain Pasukan -Comment[ru]=Enlightenment — командный игрок -Comment[sr]=Просвећење је тимски играч -Comment[tr]=Enlightenment bir takım oyunu -Icon=e-module-teamwork -X-Enlightenment-ModuleType=core diff --git a/src/modules/teamwork/wl.c b/src/modules/teamwork/wl.c deleted file mode 100644 index b6ffa2598..000000000 --- a/src/modules/teamwork/wl.c +++ /dev/null @@ -1,138 +0,0 @@ -#define E_COMP_WL -#include "e_mod_main.h" -#ifdef HAVE_WAYLAND -#include "wl_teamwork.h" - -static struct wl_resource *tw_resource; -static struct wl_global *tw_global; - -static void -tw_preload_uri(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, - struct wl_resource *surface, const char *uri) -{ - E_Client *ec; - - ec = wl_resource_get_user_data(surface); - if (ec) - tw_link_detect(ec, uri); -} - -static void -tw_activate_uri(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, - struct wl_resource *surface, const char *uri, wl_fixed_t x, wl_fixed_t y) -{ - E_Client *ec; - - ec = wl_resource_get_user_data(surface); - if (ec) - tw_link_show(ec, uri, wl_fixed_to_int(x), wl_fixed_to_int(y)); -} - -static void -tw_deactivate_uri(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, - struct wl_resource *surface, const char *uri) -{ - E_Client *ec; - - ec = wl_resource_get_user_data(surface); - if (ec) - tw_link_hide(ec, uri); -} - -static void -tw_open_uri(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, - struct wl_resource *surface, const char *uri) -{ - E_Client *ec; - - ec = wl_resource_get_user_data(surface); - if (ec) - tw_link_open(ec, uri); -} - -static const struct zwp_teamwork_interface tw_interface = -{ - tw_preload_uri, - tw_activate_uri, - tw_deactivate_uri, - tw_open_uri, -}; - -static void -wl_tw_cb_unbind(struct wl_resource *resource EINA_UNUSED) -{ - tw_resource = NULL; -} - -static void -wl_tw_cb_bind(struct wl_client *client, void *data EINA_UNUSED, uint32_t version EINA_UNUSED, uint32_t id) -{ - struct wl_resource *res; - - if (!(res = wl_resource_create(client, &zwp_teamwork_interface, E_TW_VERSION, id))) - { - ERR("Could not create zwp_teamwork_interface interface"); - wl_client_post_no_memory(client); - return; - } - - tw_resource = res; - wl_resource_set_implementation(res, &tw_interface, NULL, wl_tw_cb_unbind); -} - -static void -wl_tw_link_complete(E_Client *ec, const char *uri) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - zwp_teamwork_send_completed_uri(tw_resource, ec->comp_data->surface, uri, 1); -} - -static void -wl_tw_link_invalid(E_Client *ec, const char *uri) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - zwp_teamwork_send_completed_uri(tw_resource, ec->comp_data->surface, uri, 0); -} - -static void -wl_tw_link_progress(E_Client *ec, const char *uri, uint32_t pct) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - zwp_teamwork_send_fetch_info(tw_resource, ec->comp_data->surface, uri, pct); -} - -static void -wl_tw_link_downloading(E_Client *ec, const char *uri) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - zwp_teamwork_send_fetching_uri(tw_resource, ec->comp_data->surface, uri); -} - -EINTERN Eina_Bool -wl_tw_init(void) -{ - tw_global = wl_global_create(e_comp_wl->wl.disp, &zwp_teamwork_interface, E_TW_VERSION, - NULL, wl_tw_cb_bind); - if (!tw_global) - { - ERR("Could not add zwp_teamwork to wayland globals"); - return EINA_FALSE; - } - tw_signal_link_complete[E_PIXMAP_TYPE_WL] = wl_tw_link_complete; - tw_signal_link_invalid[E_PIXMAP_TYPE_WL] = wl_tw_link_invalid; - tw_signal_link_progress[E_PIXMAP_TYPE_WL] = wl_tw_link_progress; - tw_signal_link_downloading[E_PIXMAP_TYPE_WL] = wl_tw_link_downloading; - return EINA_TRUE; -} - -EINTERN void -wl_tw_shutdown(void) -{ - E_FREE_FUNC(tw_resource, wl_resource_destroy); - E_FREE_FUNC(tw_global, wl_global_destroy); - tw_signal_link_complete[E_PIXMAP_TYPE_WL] = NULL; - tw_signal_link_invalid[E_PIXMAP_TYPE_WL] = NULL; - tw_signal_link_progress[E_PIXMAP_TYPE_WL] = NULL; - tw_signal_link_downloading[E_PIXMAP_TYPE_WL] = NULL; -} -#endif diff --git a/src/modules/teamwork/wl_teamwork.c b/src/modules/teamwork/wl_teamwork.c deleted file mode 100644 index baca23d3b..000000000 --- a/src/modules/teamwork/wl_teamwork.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include "wayland-util.h" - -extern const struct wl_interface wl_surface_interface; - -static const struct wl_interface *types[] = { - &wl_surface_interface, - NULL, - &wl_surface_interface, - NULL, - NULL, - NULL, - &wl_surface_interface, - NULL, - &wl_surface_interface, - NULL, - &wl_surface_interface, - NULL, - &wl_surface_interface, - NULL, - NULL, - &wl_surface_interface, - NULL, - NULL, -}; - -static const struct wl_message zwp_teamwork_requests[] = { - { "preload_uri", "os", types + 0 }, - { "activate_uri", "osff", types + 2 }, - { "deactivate_uri", "os", types + 6 }, - { "open_uri", "os", types + 8 }, -}; - -static const struct wl_message zwp_teamwork_events[] = { - { "fetching_uri", "os", types + 10 }, - { "completed_uri", "osi", types + 12 }, - { "fetch_info", "osu", types + 15 }, -}; - -WL_EXPORT const struct wl_interface zwp_teamwork_interface = { - "zwp_teamwork", 2, - 4, zwp_teamwork_requests, - 3, zwp_teamwork_events, -}; - diff --git a/src/modules/teamwork/wl_teamwork.h b/src/modules/teamwork/wl_teamwork.h deleted file mode 100644 index f6a11d1a4..000000000 --- a/src/modules/teamwork/wl_teamwork.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef TEAMWORK_SERVER_PROTOCOL_H -#define TEAMWORK_SERVER_PROTOCOL_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "wayland-server.h" - -struct wl_client; -struct wl_resource; - -struct wl_surface; -struct zwp_teamwork; - -extern const struct wl_interface zwp_teamwork_interface; - -struct zwp_teamwork_interface { - /** - * preload_uri - (none) - * @surface: (none) - * @uri: (none) - */ - void (*preload_uri)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *surface, - const char *uri); - /** - * activate_uri - (none) - * @surface: (none) - * @uri: (none) - * @x: surface local coords - * @y: surface local coords - */ - void (*activate_uri)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *surface, - const char *uri, - wl_fixed_t x, - wl_fixed_t y); - /** - * deactivate_uri - (none) - * @surface: (none) - * @uri: (none) - */ - void (*deactivate_uri)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *surface, - const char *uri); - /** - * open_uri - (none) - * @surface: (none) - * @uri: (none) - */ - void (*open_uri)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *surface, - const char *uri); -}; - -#define ZWP_TEAMWORK_FETCHING_URI 0 -#define ZWP_TEAMWORK_COMPLETED_URI 1 -#define ZWP_TEAMWORK_FETCH_INFO 2 - -#define ZWP_TEAMWORK_FETCHING_URI_SINCE_VERSION 1 -#define ZWP_TEAMWORK_COMPLETED_URI_SINCE_VERSION 1 -#define ZWP_TEAMWORK_FETCH_INFO_SINCE_VERSION 1 - -static inline void -zwp_teamwork_send_fetching_uri(struct wl_resource *resource_, struct wl_resource *surface, const char *uri) -{ - wl_resource_post_event(resource_, ZWP_TEAMWORK_FETCHING_URI, surface, uri); -} - -static inline void -zwp_teamwork_send_completed_uri(struct wl_resource *resource_, struct wl_resource *surface, const char *uri, int32_t valid) -{ - wl_resource_post_event(resource_, ZWP_TEAMWORK_COMPLETED_URI, surface, uri, valid); -} - -static inline void -zwp_teamwork_send_fetch_info(struct wl_resource *resource_, struct wl_resource *surface, const char *uri, uint32_t progress) -{ - wl_resource_post_event(resource_, ZWP_TEAMWORK_FETCH_INFO, surface, uri, progress); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/modules/teamwork/x11.c b/src/modules/teamwork/x11.c deleted file mode 100644 index e80e2f8cc..000000000 --- a/src/modules/teamwork/x11.c +++ /dev/null @@ -1,143 +0,0 @@ -#define E_COMP_X -#include "e_mod_main.h" - -#ifndef HAVE_WAYLAND_ONLY -enum -{ - TEAMWORK_PRELOAD, - TEAMWORK_ACTIVATE, - TEAMWORK_DEACTIVATE, - TEAMWORK_OPEN, - TEAMWORK_NOPE, -}; - -enum -{ - TEAMWORK_COMPLETED, - TEAMWORK_PROGRESS, - TEAMWORK_STARTED, -}; - -static Ecore_Event_Handler *handler; -static Ecore_X_Atom atoms[4]; -static Ecore_X_Atom server_atoms[3]; -static Ecore_X_Atom prop; - -static Eina_Bool -x11_message_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event_Client_Message *ev) -{ - E_Client *ec; - int i; - char *uri; - - ec = e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->win); - if (!ec) return ECORE_CALLBACK_RENEW; - for (i = 0; i < TEAMWORK_NOPE; i++) - if (ev->message_type == atoms[i]) break; - if (i == TEAMWORK_NOPE) return ECORE_CALLBACK_RENEW; - - uri = ecore_x_window_prop_string_get(ev->win, prop); - if (!uri) return ECORE_CALLBACK_RENEW; - if (ev->message_type == atoms[TEAMWORK_PRELOAD]) - /* - format = 32 - data.l[0] = version - */ - tw_link_detect(ec, uri); - else if (ev->message_type == atoms[TEAMWORK_ACTIVATE]) - /* - format = 32 - data.l[0] = version - data.l[1] = window_x - data.l[2] = window_y - */ - tw_link_show(ec, uri, ev->data.l[1], ev->data.l[2]); - else if (ev->message_type == atoms[TEAMWORK_DEACTIVATE]) - /* - format = 32 - data.l[0] = version - */ - tw_link_hide(ec, uri); - else if (ev->message_type == atoms[TEAMWORK_OPEN]) - /* - format = 32 - data.l[0] = version - */ - tw_link_open(ec, uri); - free(uri); - return ECORE_CALLBACK_RENEW; -} - -static void -x11_tw_link_complete(E_Client *ec, const char *uri EINA_UNUSED) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - ecore_x_client_message32_send(e_client_util_win_get(ec), server_atoms[TEAMWORK_COMPLETED], - ECORE_X_EVENT_MASK_WINDOW_MANAGE | ECORE_X_EVENT_MASK_WINDOW_CHILD_CONFIGURE, E_TW_VERSION, 1, 0, 0, 0); -} - -static void -x11_tw_link_invalid(E_Client *ec, const char *uri EINA_UNUSED) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - ecore_x_client_message32_send(e_client_util_win_get(ec), server_atoms[TEAMWORK_COMPLETED], - ECORE_X_EVENT_MASK_WINDOW_MANAGE | ECORE_X_EVENT_MASK_WINDOW_CHILD_CONFIGURE, E_TW_VERSION, 0, 0, 0, 0); -} - -static void -x11_tw_link_progress(E_Client *ec, const char *uri EINA_UNUSED, uint32_t pct) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - ecore_x_client_message32_send(e_client_util_win_get(ec), server_atoms[TEAMWORK_PROGRESS], - ECORE_X_EVENT_MASK_WINDOW_MANAGE | ECORE_X_EVENT_MASK_WINDOW_CHILD_CONFIGURE, E_TW_VERSION, pct, 0, 0, 0); -} - -static void -x11_tw_link_downloading(E_Client *ec, const char *uri EINA_UNUSED) -{ - if (e_object_is_del(E_OBJECT(ec))) return; - ecore_x_client_message32_send(e_client_util_win_get(ec), server_atoms[TEAMWORK_STARTED], - ECORE_X_EVENT_MASK_WINDOW_MANAGE | ECORE_X_EVENT_MASK_WINDOW_CHILD_CONFIGURE, E_TW_VERSION, 0, 0, 0, 0); -} - -EINTERN Eina_Bool -x11_tw_init(void) -{ - const char *atom_names[] = - { - "_TEAMWORK_PRELOAD", - "_TEAMWORK_ACTIVATE", - "_TEAMWORK_DEACTIVATE", - "_TEAMWORK_OPEN", - "_TEAMWORK_COMPLETED", - "_TEAMWORK_PROGRESS", - "_TEAMWORK_STARTED", - "_TEAMWORK_PROP", - }; - Ecore_X_Atom at[EINA_C_ARRAY_LENGTH(atom_names)]; - int i; - - ecore_x_atoms_get(atom_names, EINA_C_ARRAY_LENGTH(atom_names), at); - for (i = 0; i < 4; i++) - atoms[i] = at[i]; - for (i = 4; i < 7; i++) - server_atoms[i - 4] = at[i]; - prop = at[7]; - handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, (Ecore_Event_Handler_Cb)x11_message_handler, NULL); - tw_signal_link_complete[E_PIXMAP_TYPE_X] = x11_tw_link_complete; - tw_signal_link_invalid[E_PIXMAP_TYPE_X] = x11_tw_link_invalid; - tw_signal_link_progress[E_PIXMAP_TYPE_X] = x11_tw_link_progress; - tw_signal_link_downloading[E_PIXMAP_TYPE_X] = x11_tw_link_downloading; - return EINA_TRUE; -} - -EINTERN void -x11_tw_shutdown(void) -{ - E_FREE_FUNC(handler, ecore_event_handler_del); - tw_signal_link_complete[E_PIXMAP_TYPE_X] = NULL; - tw_signal_link_invalid[E_PIXMAP_TYPE_X] = NULL; - tw_signal_link_progress[E_PIXMAP_TYPE_X] = NULL; - tw_signal_link_downloading[E_PIXMAP_TYPE_X] = NULL; -} -#endif diff --git a/src/modules/time/clock.c b/src/modules/time/clock.c deleted file mode 100644 index 630ca4f30..000000000 --- a/src/modules/time/clock.c +++ /dev/null @@ -1,516 +0,0 @@ -#include "clock.h" - -EINTERN Config *time_config = NULL; -EINTERN Eina_List *clock_instances = NULL; -static Ecore_Timer *clock_timer; - -static void -_clock_calendar_month_update(Instance *inst) -{ - Evas_Object *od, *oi; - int x, y; - - oi = elm_layout_edje_get(inst->o_cal); - edje_object_part_text_set(oi, "e.text.month", inst->month); - edje_object_part_text_set(oi, "e.text.year", inst->year); - for (x = 0; x < 7; x++) - { - od = edje_object_part_table_child_get(oi, "e.table.daynames", x, 0); - edje_object_part_text_set(od, "e.text.label", inst->daynames[x]); - edje_object_message_signal_process(od); - if (inst->dayweekends[x][0]) - edje_object_signal_emit(od, "e,state,weekend", "e"); - else - edje_object_signal_emit(od, "e,state,weekday", "e"); - } - - for (y = 0; y < 6; y++) - { - for (x = 0; x < 7; x++) - { - char buf[32]; - - od = edje_object_part_table_child_get(oi, "e.table.days", x, y); - snprintf(buf, sizeof(buf), "%i", (int)inst->daynums[x][y]); - edje_object_part_text_set(od, "e.text.label", buf); - if (inst->dayweekends[x][y]) - edje_object_signal_emit(od, "e,state,weekend", "e"); - else - edje_object_signal_emit(od, "e,state,weekday", "e"); - if (inst->dayvalids[x][y]) - edje_object_signal_emit(od, "e,state,visible", "e"); - else - edje_object_signal_emit(od, "e,state,hidden", "e"); - if (inst->daytoday[x][y]) - edje_object_signal_emit(od, "e,state,today", "e"); - else - edje_object_signal_emit(od, "e,state,someday", "e"); - edje_object_message_signal_process(od); - } - } - edje_object_message_signal_process(oi); -} - -static void -_clock_month_prev_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) -{ - Instance *inst = data; - inst->madj--; - time_instance_update(inst); - _clock_calendar_month_update(inst); -} - -static void -_clock_month_next_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) -{ - Instance *inst = data; - inst->madj++; - time_instance_update(inst); - _clock_calendar_month_update(inst); -} - -static void -_clock_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Instance *inst = data; - Evas_Event_Mouse_Wheel *ev = event_info; - - if (ev->z < 0) - _clock_month_prev_cb(inst, NULL, NULL, NULL); - else if (ev->z > 0) - _clock_month_next_cb(inst, NULL, NULL, NULL); -} - -static void -_clock_popup_dismissed(void *data EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED) -{ - evas_object_del(obj); -} - -static void -_eval_instance_size(Instance *inst) -{ - Evas_Coord mw, mh; - int sw = 0, sh = 0; - Evas_Object *ed = elm_layout_edje_get(inst->o_clock); - - edje_object_size_min_get(ed, &mw, &mh); - - if ((mw < 1) || (mh < 1)) - { - if (edje_object_part_exists(ed, "e.sizer")) - { - edje_object_part_geometry_get(ed, "e.sizer", NULL, NULL, &mw, &mh); - } - else - { - Evas_Object *owner; - - owner = e_gadget_site_get(inst->o_clock); - switch (e_gadget_site_orient_get(owner)) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - evas_object_geometry_get(owner, NULL, NULL, NULL, &sh); - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - evas_object_geometry_get(owner, NULL, NULL, &sw, NULL); - break; - - default: break; - } - - evas_object_resize(inst->o_clock, sw, sh); - edje_object_message_signal_process(ed); - - edje_object_parts_extends_calc(ed, NULL, NULL, &mw, &mh); - } - } - - if (mw < 4) mw = 4; - if (mh < 4) mh = 4; - - if (mw < sw) mw = sw; - if (mh < sh) mh = sh; - - evas_object_size_hint_aspect_set(inst->o_clock, EVAS_ASPECT_CONTROL_BOTH, mw, mh); -} - -static void -_clock_edje_init(Instance *inst, Evas_Object *o) -{ - char datestr[128]; - const char *digital[] = - { - "e/gadget/clock/digital", - "e/gadget/clock/digital/advanced", - }; - - time_datestring_format(inst, datestr, sizeof(datestr) - 1); - if (inst->cfg->digital_clock) - e_theme_edje_object_set(o, NULL, digital[inst->cfg->advanced]); - else - e_theme_edje_object_set(o, NULL, "e/gadget/clock/analog"); - if (inst->cfg->show_date) - elm_layout_signal_emit(o, "e,state,date,on", "e"); - else - elm_layout_signal_emit(o, "e,state,date,off", "e"); - if (inst->cfg->digital_24h) - elm_layout_signal_emit(o, "e,state,24h,on", "e"); - else - elm_layout_signal_emit(o, "e,state,24h,off", "e"); - if (inst->cfg->show_seconds) - elm_layout_signal_emit(o, "e,state,seconds,on", "e"); - else - elm_layout_signal_emit(o, "e,state,seconds,off", "e"); - - elm_object_part_text_set(o, "e.text.sub", datestr); - if (inst->cfg->timezone) - { - Edje_Message_String msg; - - msg.str = (char*)inst->cfg->timezone; - edje_object_message_send(elm_layout_edje_get(o), EDJE_MESSAGE_STRING, 1, &msg); - } - { - Edje_Message_String_Int msg; - msg.str = (char*)inst->cfg->colorclass[0] ?: ""; - msg.val = !!inst->cfg->colorclass[0]; - edje_object_message_send(elm_layout_edje_get(o), EDJE_MESSAGE_STRING_INT, 2, &msg); - msg.str = (char*)inst->cfg->colorclass[1] ?: ""; - msg.val = !!inst->cfg->colorclass[1]; - edje_object_message_send(elm_layout_edje_get(o), EDJE_MESSAGE_STRING_INT, 3, &msg); - } - edje_object_message_signal_process(elm_layout_edje_get(o)); -} - -static Eina_Bool -_clock_timer(void *d EINA_UNUSED) -{ - Eina_List *l; - Instance *inst; - Eina_Bool seconds = EINA_FALSE; - int sec = 0; - char buf[128]; - - EINA_LIST_FOREACH(clock_instances, l, inst) - { - if (!inst->cfg->advanced) continue; - seconds |= inst->cfg->show_seconds; - sec = time_string_format(inst, buf, sizeof(buf)); - elm_object_part_text_set(inst->o_clock, "e.text", buf); - time_datestring_format(inst, buf, sizeof(buf) - 1); - elm_object_part_text_set(inst->o_clock, "e.text.sub", buf); - _eval_instance_size(inst); - } - sec = seconds ? 1 : (61 - sec); - if (clock_timer) - ecore_timer_interval_set(clock_timer, sec); - else - clock_timer = ecore_timer_loop_add(sec, _clock_timer, NULL); - return EINA_TRUE; -} - -static void -_clock_popup_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - if (obj != inst->popup) return; - inst->popup = inst->o_table = inst->o_cal = NULL; -} - -EINTERN void -clock_popup_new(Instance *inst) -{ - Evas_Object *oi; - - if (inst->popup) return; - - inst->madj = 0; - - time_instance_update(inst); - - inst->popup = elm_ctxpopup_add(inst->o_clock); - elm_object_style_set(inst->popup, "noblock"); - evas_object_smart_callback_add(inst->popup, "dismissed", _clock_popup_dismissed, inst); - evas_object_event_callback_add(inst->popup, EVAS_CALLBACK_DEL, _clock_popup_del, inst); - evas_object_event_callback_add(inst->popup, EVAS_CALLBACK_MOUSE_WHEEL, - _clock_mouse_wheel_cb, inst); - - inst->o_table = elm_table_add(inst->popup); - - oi = elm_layout_add(inst->o_table); - inst->o_cal = oi; - e_theme_edje_object_set(oi, "base/theme/gadget/clock", - "e/gadget/clock/calendar"); - _clock_calendar_month_update(inst); - - elm_object_signal_callback_add(oi, "e,action,prev", "*", - _clock_month_prev_cb, inst); - elm_object_signal_callback_add(oi, "e,action,next", "*", - _clock_month_next_cb, inst); - edje_object_message_signal_process(elm_layout_edje_get(oi)); - elm_layout_sizing_eval(oi); - elm_table_pack(inst->o_table, oi, 0, 1, 1, 1); - evas_object_show(oi); - - elm_object_content_set(inst->popup, inst->o_table); - e_gadget_util_ctxpopup_place(inst->o_clock, inst->popup, NULL); - evas_object_show(inst->popup); -} - -void -clock_instances_redo(void) -{ - Eina_List *l; - Instance *inst; - - EINA_LIST_FOREACH(clock_instances, l, inst) - { - _clock_edje_init(inst, inst->o_clock); - _eval_instance_size(inst); - } -} - -static void -_clock_cb_mouse_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event) -{ - Instance *inst = data; - Evas_Event_Mouse_Up *ev = event; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ev->button == 1) - { - if (inst->popup) elm_ctxpopup_dismiss(inst->popup); - else clock_popup_new(inst); - } -} - -static void -_clock_sizing_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) -{ - _eval_instance_size(data); -} - -static void -_clock_gadget_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Instance *inst = data; - - if (inst->o_clock != event_info) return; - if (!inst->cfg) return; - time_config->items = eina_list_remove(time_config->items, inst->cfg); - eina_stringshare_del(inst->cfg->timezone); - eina_stringshare_del(inst->cfg->time_str[0]); - eina_stringshare_del(inst->cfg->time_str[1]); - E_FREE(inst->cfg); -} - -static void -clock_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - Eina_List *l; - Eina_Bool advanced = EINA_FALSE, seconds = EINA_FALSE; - - evas_object_smart_callback_del_full(e_gadget_site_get(obj), "gadget_removed", _clock_gadget_removed_cb, inst); - clock_instances = eina_list_remove(clock_instances, inst); - evas_object_del(inst->popup); - time_daynames_clear(inst); - if (inst->cfg) - { - advanced |= !!inst->cfg->advanced; - seconds |= !!inst->cfg->show_seconds; - if (inst->cfg->inst == inst) inst->cfg->inst = NULL; - } - free(inst); - if ((!advanced) && (!seconds)) return; - EINA_LIST_FOREACH(clock_instances, l, inst) - { - advanced |= !!inst->cfg->advanced; - seconds |= !!inst->cfg->show_seconds; - if (seconds) break; - } - if (seconds) return; //no change possible - E_FREE_FUNC(clock_timer, ecore_timer_del); - if (advanced) - _clock_timer(NULL); -} - -static Config_Item * -_conf_item_get(int *id, Eina_Bool digital) -{ - Config_Item *ci; - Eina_List *l; - - if (*id > 0) - { - EINA_LIST_FOREACH(time_config->items, l, ci) - if (*id == ci->id) return ci; - } - - ci = E_NEW(Config_Item, 1); - if (!*id) - *id = ci->id = time_config->items ? eina_list_count(time_config->items) + 1 : 1; - else if (*id < 0) - ci->id = -1; - else - ci->id = *id; - - ci->weekend.start = 6; - ci->weekend.len = 2; - ci->week.start = 1; - ci->digital_clock = digital; - ci->digital_24h = 0; - ci->show_seconds = 0; - ci->show_date = 0; - ci->time_str[0] = eina_stringshare_add("%I:%M"); - ci->time_str[1] = eina_stringshare_add("%F"); - - if (ci->id < 1) return ci; - time_config->items = eina_list_append(time_config->items, ci); - e_config_save_queue(); - - return ci; -} - -static Evas_Object * -_clock_gadget_configure(Evas_Object *g) -{ - Instance *inst = evas_object_data_get(g, "clock"); - inst->cfg->inst = inst; - return config_clock(inst->cfg, e_comp_object_util_zone_get(g)); -} - -static void -_clock_gadget_created_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - - e_gadget_configure_cb_set(inst->o_clock, _clock_gadget_configure); - evas_object_smart_callback_del_full(obj, "gadget_created", _clock_gadget_created_cb, data); - if (inst->cfg->advanced) - { - _clock_timer(NULL); - ecore_timer_loop_reset(clock_timer); - } - _eval_instance_size(inst); -} - -static Evas_Object * -clock_create(Evas_Object *parent, Instance *inst, E_Gadget_Site_Orient orient) -{ - Evas_Object *o; - const char *sig = NULL; - - inst->o_clock = o = elm_layout_add(parent); - elm_layout_signal_callback_add(o, "e,state,sizing,changed", "*", - _clock_sizing_changed_cb, inst); - - _clock_edje_init(inst, o); - - switch (orient) - { - case E_GADGET_SITE_ORIENT_HORIZONTAL: - sig = "e,state,horizontal"; - break; - - case E_GADGET_SITE_ORIENT_VERTICAL: - sig = "e,state,vertical"; - break; - - default: - sig = "e,state,float"; - } - - elm_layout_signal_emit(inst->o_clock, sig, "e"); - - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, clock_del, inst); - evas_object_smart_callback_add(parent, "gadget_created", _clock_gadget_created_cb, inst); - evas_object_smart_callback_add(parent, "gadget_removed", _clock_gadget_removed_cb, inst); - evas_object_data_set(o, "clock", inst); - - evas_object_event_callback_add(inst->o_clock, - EVAS_CALLBACK_MOUSE_UP, - _clock_cb_mouse_up, - inst); - - if (inst->cfg->id < 0) return o; - clock_instances = eina_list_append(clock_instances, inst); - - return o; -} - -EINTERN Evas_Object * -digital_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id, 1); - return clock_create(parent, inst, orient); -} - -EINTERN Evas_Object * -analog_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) -{ - Instance *inst; - - inst = E_NEW(Instance, 1); - inst->cfg = _conf_item_get(id, 0); - return clock_create(parent, inst, orient); -} - -EINTERN void -time_config_update(Config_Item *ci) -{ - Eina_List *l; - Instance *inst; - Eina_Bool advanced = EINA_FALSE; - - ci->week.start = (ci->weekend.start + ci->weekend.len) % 7; - EINA_LIST_FOREACH(clock_instances, l, inst) - { - if (inst->cfg != ci) continue; - _clock_edje_init(inst, inst->o_clock); - if (!advanced) - { - advanced |= inst->cfg->advanced; - if (!inst->cfg->advanced) continue; - _clock_timer(NULL); - ecore_timer_loop_reset(clock_timer); - } - _eval_instance_size(inst); - } - if (!advanced) - E_FREE_FUNC(clock_timer, ecore_timer_del); - e_config_save_queue(); -} - -EINTERN void -clock_timer_set(Eina_Bool set) -{ - if (set) - { - if (clock_instances) _clock_timer(NULL); - } - else - E_FREE_FUNC(clock_timer, ecore_timer_del); -} - -EINTERN void -clock_date_update(void) -{ - Eina_List *l; - Instance *inst; - char buf[128]; - - EINA_LIST_FOREACH(clock_instances, l, inst) - { - time_datestring_format(inst, buf, sizeof(buf) - 1); - elm_object_part_text_set(inst->o_clock, "e.text.sub", buf); - _eval_instance_size(inst); - } -} diff --git a/src/modules/time/clock.h b/src/modules/time/clock.h deleted file mode 100644 index 7e5338ffd..000000000 --- a/src/modules/time/clock.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef CLOCK_H -#define CLOCK_H - -#include "e.h" - -E_API extern E_Module_Api e_modapi; - -E_API void *e_modapi_init (E_Module *m); -E_API int e_modapi_shutdown (E_Module *m); -E_API int e_modapi_save (E_Module *m); - -typedef struct _Config Config; -typedef struct _Config_Item Config_Item; -typedef struct _Instance Instance; - -typedef enum -{ - CLOCK_DATE_DISPLAY_NONE, - CLOCK_DATE_DISPLAY_FULL, - CLOCK_DATE_DISPLAY_NUMERIC, - CLOCK_DATE_DISPLAY_DATE_ONLY, - CLOCK_DATE_DISPLAY_ISO8601, - CLOCK_DATE_DISPLAY_CUSTOM, -} Clock_Date_Display; - -struct _Config -{ - Eina_List *items; - - E_Module *module; - Evas_Object *config_dialog; -}; - -struct _Config_Item -{ - int id; - Instance *inst; - struct { - int start, len; // 0->6 0 == sun, 6 == sat, number of days - } weekend; - struct { - int start; // 0->6 0 == sun, 6 == sat - } week; - Eina_Bool digital_clock; - Eina_Bool digital_24h; - Eina_Bool show_seconds; - Clock_Date_Display show_date; - Eina_Bool advanced; - Eina_Stringshare *timezone; - Eina_Stringshare *time_str[2]; - Eina_Stringshare *colorclass[2]; -}; - - -struct _Instance -{ - Evas_Object *o_clock, *o_table, *o_cal; - Evas_Object *popup; - - int madj; - - char year[8]; - char month[64]; - const char *daynames[7]; - unsigned char daynums[7][6]; - Eina_Bool dayweekends[7][6]; - Eina_Bool dayvalids[7][6]; - Eina_Bool daytoday[7][6]; - Config_Item *cfg; -}; - -EINTERN Evas_Object *config_clock(Config_Item *, E_Zone*); -EINTERN void config_timezone_populate(Evas_Object *obj, const char *name); -void clock_instances_redo(void); - -EINTERN void time_daynames_clear(Instance *inst); -EINTERN void time_datestring_format(Instance *inst, char *buf, int bufsz); -EINTERN int time_string_format(Instance *inst, char *buf, int bufsz); -EINTERN void time_instance_update(Instance *inst); -EINTERN void time_init(void); -EINTERN void time_shutdown(void); -EINTERN void time_zoneinfo_scan(Evas_Object *obj); - -EINTERN Evas_Object *digital_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN Evas_Object *analog_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); -EINTERN void clock_popup_new(Instance *inst); -EINTERN void time_config_update(Config_Item *ci); -EINTERN void clock_timer_set(Eina_Bool set); -EINTERN void clock_date_update(void); - -extern Config *time_config; -extern Eina_List *clock_instances; - -#endif diff --git a/src/modules/time/config.c b/src/modules/time/config.c deleted file mode 100644 index 153a84640..000000000 --- a/src/modules/time/config.c +++ /dev/null @@ -1,634 +0,0 @@ -#include "clock.h" -#include - -static const char *datecfg[] = -{ - N_("None"), - N_("Full"), - N_("Numeric"), - N_("Date-only"), - N_("ISO 8601"), - N_("Custom"), -}; - - -static void -_config_rect_click(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *ev = event_info; - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - evas_object_del(data); -} - -static Evas_Object * -_config_autoclose_rect_add(Evas_Object *obj) -{ - Evas_Object *rect; - - rect = evas_object_rectangle_add(e_comp->evas); - e_comp_object_util_fullscreen(rect); - evas_object_color_set(rect, 0, 0, 0, 0); - evas_object_layer_set(rect, E_LAYER_MENU - 1); - evas_object_show(rect); - evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _config_rect_click, obj); - return rect; -} - -static void -_config_close(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - time_config->config_dialog = NULL; -} - -static void -_config_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - time_config_update(data); -} - -static void -_clock_color_dismissed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - evas_object_del(obj); -} - -static void -_config_color_reset(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - Evas_Object *cs; - int num; - - num = !evas_object_data_get(obj, "bg_color"); - if (ci->colorclass[num]) - { - elm_config_color_overlay_unset(ci->colorclass[num]); - edje_color_class_del(ci->colorclass[num]); - } - eina_stringshare_replace(&ci->colorclass[num], NULL); - cs = evas_object_data_get(obj, "colorselector"); - elm_colorselector_color_set(cs, 0, 0, 0, 0); - elm_colorselector_palette_item_color_set(evas_object_data_get(cs, "colorselector_it"), - 0, 0, 0, 0); - time_config_update(data); -} - -static void -_config_color_change(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - int r, g, b, a; - int num; - char buf[1024]; - - num = !evas_object_data_get(obj, "bg_color"); - elm_colorselector_color_get(obj, &r, &g, &b, &a); - - if (!ci->colorclass[num]) - { - snprintf(buf, sizeof(buf), "e.clock_color_%s.%d", num ? "fg" : "bg", ci->id); - eina_stringshare_replace(&ci->colorclass[num], buf); - } - elm_config_color_overlay_set(ci->colorclass[num], r, g, b, a, 0, 0, 0, 0, 0, 0, 0, 0); - edje_color_class_set(ci->colorclass[num], r, g, b, a, 0, 0, 0, 0, 0, 0, 0, 0); - elm_colorselector_palette_item_color_set(evas_object_data_get(obj, "colorselector_it"), r, g, b, a); - time_config_update(data); -} - -static void -_config_color_setup(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - Evas_Object *cs, *ctx, *bx, *bt, *rect; - int r, g, b, a, x, y; - Eina_Bool bg; - const char *ccname, *ccnames[] = - { - "e.clock_color_bg", - "e.clock_color_fg", - }; - - bg = !!evas_object_data_get(obj, "bg_color"); - ccname = ci->colorclass[!bg]; - if (!ccname) ccname = ccnames[!bg]; - edje_color_class_get(ccname, &r, &g, &b, &a, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - - bx = elm_box_add(obj); - E_FILL(bx); - evas_object_show(bx); - - cs = elm_colorselector_add(obj); - evas_object_data_set(cs, "colorselector_bt", evas_object_data_get(obj, "colorselector_tt")); - evas_object_data_set(cs, "bg_color", (void*)(long)bg); - evas_object_smart_callback_add(cs, "changed,user", _config_color_change, ci); - elm_colorselector_mode_set(cs, ELM_COLORSELECTOR_COMPONENTS); - elm_colorselector_color_set(cs, r, g, b, a); - E_FILL(cs); - elm_box_pack_end(bx, cs); - evas_object_show(cs); - - bt = elm_button_add(bx); - evas_object_data_set(bt, "colorselector", cs); - evas_object_data_set(bt, "bg_color", (void*)(long)bg); - elm_object_text_set(bt, _("Reset")); - evas_object_smart_callback_add(bt, "clicked", _config_color_reset, ci); - evas_object_show(bt); - elm_box_pack_end(bx, bt); - - /* size hints: the final frontier */ - rect = evas_object_rectangle_add(e_comp->elm); - evas_object_geometry_get(time_config->config_dialog, NULL, NULL, &x, &y); - evas_object_size_hint_min_set(rect, x - 10, 1); - e_comp_object_util_del_list_append(bx, rect); - elm_box_pack_end(bx, rect); - - ctx = elm_ctxpopup_add(obj); - elm_ctxpopup_hover_parent_set(ctx, e_comp->elm); - evas_object_layer_set(ctx, E_LAYER_MENU); - elm_object_style_set(ctx, "noblock"); - rect = _config_autoclose_rect_add(ctx); - evas_object_smart_callback_call(ci->inst->o_clock, "gadget_popup", rect); - e_comp_object_util_del_list_append(ctx, rect); - evas_object_smart_callback_add(ctx, "dismissed", _clock_color_dismissed, NULL); - elm_object_content_set(ctx, bx); - evas_pointer_canvas_xy_get(e_comp->evas, &x, &y); - evas_object_move(ctx, x, y); - evas_object_show(ctx); -} - -static void -_config_digital_timestr_update(Config_Item *ci, Evas_Object *obj, int idx) -{ - const char *str, *p; - char seconds[] = - { - 'S', - 's', - 'r', - 'T', - }; - unsigned int i; - - str = elm_entry_entry_get(obj); - eina_stringshare_replace(&ci->time_str[idx], str); - ci->show_seconds = 0; - for (p = strchr(str, '%'); p; p = strchr(p + 1, '%')) - { - for (i = 0; i < EINA_C_ARRAY_LENGTH(seconds); i++) - if (p[1] == seconds[i]) - { - ci->show_seconds = 1; - time_config_update(ci); - return; - } - } - - time_config_update(ci); -} - -static void -_config_digital_datestr_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - _config_digital_timestr_update(data, obj, 1); -} - -static Evas_Object * -_config_date_custom(Config_Item *ci, Evas_Object *bx) -{ - Evas_Object *o; - - o = elm_entry_add(bx); - elm_entry_single_line_set(o, 1); - elm_object_tooltip_text_set(o, _("strftime() format string")); - elm_entry_entry_set(o, ci->time_str[1]); - evas_object_smart_callback_add(o, "changed,user", _config_digital_datestr_changed, ci); - E_FILL(o); - E_EXPAND(o); - evas_object_show(o); - elm_box_pack_end(bx, o); - return o; -} - -static void -_config_date_changed(void *data, Evas_Object *obj, void *event_info) -{ - Config_Item *ci = data; - Evas_Object *bx = elm_object_parent_widget_get(obj); - Eina_Bool custom; - - custom = ci->show_date == CLOCK_DATE_DISPLAY_CUSTOM; - ci->show_date = (intptr_t)elm_object_item_data_get(event_info); - if (custom) - { - elm_box_unpack(bx, obj); - elm_box_clear(bx); - E_FILL(obj); - E_EXPAND(obj); - elm_box_pack_end(bx, obj); - } - else if (ci->show_date == CLOCK_DATE_DISPLAY_CUSTOM) - { - E_WEIGHT(obj, 0, 0); - E_ALIGN(obj, 0, 0.5); - elm_object_focus_set(_config_date_custom(ci, bx), 1); - } - time_config_update(ci); -} - -static void -_config_weekend_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Config_Item *ci = data; - - ci->weekend.start = (intptr_t)elm_object_item_data_get(event_info); - time_config_update(ci); -} - -static void -_config_weekend_end_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Config_Item *ci = data; - int end; - - end = (intptr_t)elm_object_item_data_get(event_info); - if (end < ci->weekend.start) end += 7; - ci->weekend.len = end - ci->weekend.start + 1; - time_config_update(ci); -} - -static void -_config_date_populate(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - unsigned int i; - - elm_hoversel_clear(obj); - for (i = 0; i <= 5; i++) - if (ci->show_date != i) - elm_hoversel_item_add(obj, datecfg[i], NULL, ELM_ICON_NONE, NULL, (uintptr_t*)(unsigned long)i); -} - -static void -_config_weekend_populate(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - char daynames[7][64]; - struct tm tm; - int i; - - memset(&tm, 0, sizeof(struct tm)); - for (i = 0; i < 7; i++) - { - tm.tm_wday = i; - strftime(daynames[i], sizeof(daynames[i]), "%A", &tm); - } - - elm_hoversel_clear(obj); - for (i = ci->weekend.start + 1; i <= 6; i++) - if (ci->weekend.start != i) - elm_hoversel_item_add(obj, daynames[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); - for (i = 0; i < ci->weekend.start; i++) - elm_hoversel_item_add(obj, daynames[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); -} - -static void -_config_weekend_end_populate(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - char daynames[7][64]; - struct tm tm; - int i, end; - - memset(&tm, 0, sizeof(struct tm)); - for (i = 0; i < 7; i++) - { - tm.tm_wday = i; - strftime(daynames[i], sizeof(daynames[i]), "%A", &tm); - } - - elm_hoversel_clear(obj); - end = (ci->weekend.start + ci->weekend.len - 1) % 7; - for (i = end + 1; i <= 6; i++) - if (end != i) - elm_hoversel_item_add(obj, daynames[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); - for (i = 0; i < end; i++) - elm_hoversel_item_add(obj, daynames[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); -} - -static void -_config_timezone_setup(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Evas_Object *hover, *gl, *r; - Config_Item *ci = data; - - hover = elm_hover_add(e_comp->elm); - evas_object_layer_set(hover, E_LAYER_MENU); - elm_hover_parent_set(hover, elm_object_parent_widget_get(obj)); - elm_hover_target_set(hover, elm_object_parent_widget_get(obj)); - - gl = elm_genlist_add(hover); - evas_object_layer_set(gl, E_LAYER_MENU); - evas_object_data_set(gl, "config_item", data); - evas_object_data_set(gl, "button", obj); - elm_genlist_mode_set(gl, ELM_LIST_COMPRESS); - elm_genlist_homogeneous_set(gl, 1); - elm_scroller_bounce_set(gl, 0, 0); - evas_object_show(gl); - elm_object_part_content_set(hover, "middle", gl); - time_zoneinfo_scan(gl); - e_comp_object_util_del_list_append(gl, hover); - r = _config_autoclose_rect_add(gl); - evas_object_smart_callback_call(ci->inst->o_clock, "gadget_popup", r); - e_comp_object_util_del_list_append(gl, r); - evas_object_show(hover); -} - -static void -_config_digital_timestr_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - _config_digital_timestr_update(data, obj, 0); -} - -static void -_config_label_add(Evas_Object *tb, const char *txt, int row) -{ - Evas_Object *o; - - o = elm_label_add(tb); - E_ALIGN(o, 0, 0.5); - elm_object_text_set(o, txt); - evas_object_show(o); - elm_table_pack(tb, o, 0, row, 1, 1); -} - -static void -_config_digital_rows_setup(Config_Item *ci, Evas_Object *tb) -{ - int row = 1; - Evas_Object *o; - - evas_object_del(elm_table_child_get(tb, 0, 1)); - evas_object_del(elm_table_child_get(tb, 1, 1)); - evas_object_del(elm_table_child_get(tb, 0, 2)); - evas_object_del(elm_table_child_get(tb, 1, 2)); - if (ci->advanced) - { - _config_label_add(tb, _("Time string:"), row); - o = elm_entry_add(tb); - E_FILL(o); - evas_object_show(o); - elm_entry_single_line_set(o, 1); - elm_entry_entry_set(o, ci->time_str[0]); - elm_object_focus_set(o, 1); - evas_object_smart_callback_add(o, "changed,user", _config_digital_timestr_changed, ci); - elm_table_pack(tb, o, 1, row++, 1, 1); - - o = elm_separator_add(tb); - E_EXPAND(o); - E_FILL(o); - elm_separator_horizontal_set(o, 1); - evas_object_show(o); - elm_table_pack(tb, o, 0, row++, 2, 1); - return; - } - if (ci->digital_clock) - { - _config_label_add(tb, _("24-hour Display:"), row); - o = elm_check_add(tb); - E_FILL(o); - evas_object_show(o); - elm_object_style_set(o, "toggle"); - elm_object_part_text_set(o, "on", "On"); - elm_object_part_text_set(o, "off", "Off"); - elm_check_state_pointer_set(o, &ci->digital_24h); - evas_object_smart_callback_add(o, "changed", _config_changed, ci); - elm_table_pack(tb, o, 1, row++, 1, 1); - } - - _config_label_add(tb, _("Show Seconds:"), row); - o = elm_check_add(tb); - E_FILL(o); - evas_object_show(o); - elm_object_style_set(o, "toggle"); - elm_object_part_text_set(o, "on", _("On")); - elm_object_part_text_set(o, "off", _("Off")); - elm_check_state_pointer_set(o, &ci->show_seconds); - evas_object_smart_callback_add(o, "changed", _config_changed, ci); - elm_table_pack(tb, o, 1, row++, 1, 1); -} - -static void -_config_advanced_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Config_Item *ci = data; - - _config_digital_rows_setup(data, evas_object_data_get(obj, "table")); - time_config_update(ci); -} - -EINTERN Evas_Object * -config_clock(Config_Item *ci, E_Zone *zone) -{ - Evas_Object *popup, *tb, *o, *bx; - int i, row = 0; - char daynames[7][64]; - struct tm tm; - - if (!zone) zone = e_zone_current_get(); - memset(&tm, 0, sizeof(struct tm)); - for (i = 0; i < 7; i++) - { - tm.tm_wday = i; - strftime(daynames[i], sizeof(daynames[i]), "%A", &tm); - } - popup = elm_popup_add(e_comp->elm); - E_EXPAND(popup); - evas_object_layer_set(popup, E_LAYER_POPUP); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - tb = elm_table_add(popup); - E_EXPAND(tb); - evas_object_show(tb); - elm_object_content_set(popup, tb); - - if (ci->digital_clock) - { - _config_label_add(tb, _("Mode"), row); - o = elm_check_add(tb); - E_FILL(o); - evas_object_show(o); - elm_object_style_set(o, "toggle"); - elm_object_part_text_set(o, "on", _("Advanced")); - elm_object_part_text_set(o, "off", _("Simple")); - elm_check_state_pointer_set(o, &ci->advanced); - evas_object_smart_callback_add(o, "changed", _config_advanced_changed, ci); - evas_object_data_set(o, "table", tb); - elm_table_pack(tb, o, 1, row++, 1, 1); - } - _config_digital_rows_setup(ci, tb); - row = 3; - - _config_label_add(tb, _("Date Display:"), row); - bx = elm_box_add(tb); - elm_box_horizontal_set(bx, 1); - evas_object_show(bx); - elm_table_pack(tb, bx, 1, row++, 1, 1); - E_FILL(bx); - E_EXPAND(bx); - o = elm_hoversel_add(tb); - elm_box_pack_end(bx, o); - elm_hoversel_hover_parent_set(o, popup); - elm_hoversel_auto_update_set(o, 1); - evas_object_show(o); - evas_object_smart_callback_add(o, "clicked", _config_date_populate, ci); - evas_object_smart_callback_add(o, "selected", _config_date_changed, ci); - elm_object_text_set(o, datecfg[ci->show_date]); - if (ci->show_date == CLOCK_DATE_DISPLAY_CUSTOM) - { - E_ALIGN(o, 0, 0.5); - E_WEIGHT(o, 0, 0); - _config_date_custom(ci, bx); - } - else - { - E_FILL(o); - E_EXPAND(o); - } - - _config_label_add(tb, _("Weekend Start:"), row); - o = elm_hoversel_add(tb); - E_FILL(o); - elm_hoversel_hover_parent_set(o, popup); - elm_hoversel_auto_update_set(o, 1); - evas_object_show(o); - elm_table_pack(tb, o, 1, row++, 1, 1); - elm_object_text_set(o, daynames[ci->weekend.start]); - evas_object_smart_callback_add(o, "clicked", _config_weekend_populate, ci); - evas_object_smart_callback_add(o, "selected", _config_weekend_changed, ci); - - _config_label_add(tb, _("Weekend End:"), row); - o = elm_hoversel_add(tb); - E_FILL(o); - elm_hoversel_hover_parent_set(o, popup); - elm_hoversel_auto_update_set(o, 1); - evas_object_show(o); - elm_table_pack(tb, o, 1, row++, 1, 1); - elm_object_text_set(o, daynames[(ci->weekend.start + ci->weekend.len - 1) % 7]); - evas_object_smart_callback_add(o, "clicked", _config_weekend_end_populate, ci); - evas_object_smart_callback_add(o, "selected", _config_weekend_end_changed, ci); - - _config_label_add(tb, _("Timezone:"), row); - o = elm_button_add(tb); - E_FILL(o); - elm_object_text_set(o, ci->timezone ?: _("System")); - evas_object_show(o); - evas_object_smart_callback_add(o, "clicked", _config_timezone_setup, ci); - elm_table_pack(tb, o, 1, row++, 1, 1); - - for (i = 0; i <= 1; i++) - { - const char *ccname, *names[] = - { - N_("Background"), - N_("Foreground"), - }; - const char *ccnames[] = - { - "e.clock_color_bg", - "e.clock_color_fg", - }; - Evas_Object *cs; - Elm_Object_Item *it; - int r, g, b, a; - - cs = elm_colorselector_add(tb); - elm_colorselector_mode_set(cs, ELM_COLORSELECTOR_PALETTE); - ccname = ci->colorclass[i]; - if (!ccname) ccname = ccnames[i]; - edje_color_class_get(ccname, &r, &g, &b, &a, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - - it = elm_colorselector_palette_color_add(cs, r, g, b, a); - o = elm_button_add(tb); - elm_object_text_set(o, names[i]); - elm_object_content_set(o, cs); - E_FILL(o); - if (!i) - evas_object_data_set(o, "bg_color", (void*)1L); - evas_object_data_set(o, "colorselector_it", it); - evas_object_smart_callback_add(o, "clicked", _config_color_setup, ci); - evas_object_show(o); - elm_table_pack(tb, o, i, row, 1, 1); - } - - popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(popup, E_LAYER_POPUP); - evas_object_move(popup, zone->x, zone->y); - evas_object_resize(popup, zone->w / 4, zone->h / 3); - e_comp_object_util_center(popup); - evas_object_show(popup); - e_comp_object_util_autoclose(popup, NULL, e_comp_object_util_autoclose_on_escape, NULL); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, NULL); - - return time_config->config_dialog = popup; -} - - -static char * -_config_timezone_text_get(const char *str, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) -{ - return strdup(str); -} - -static void -_config_timezone_text_del(void *d, Evas_Object *obj EINA_UNUSED) -{ - free(d); -} - -static int -_config_timezone_sort(void *ita, void *itb) -{ - const char *a, *b; - a = elm_object_item_data_get(ita); - b = elm_object_item_data_get(itb); - return strcmp(a, b); -} - -static void -_config_timezone_set(void *data EINA_UNUSED, Evas_Object *obj, void *event_info) -{ - char *tz = elm_object_item_data_get(event_info); - Config_Item *ci; - Evas_Object *bt; - - ci = evas_object_data_get(obj, "config_item"); - bt = evas_object_data_get(obj, "button"); - eina_stringshare_replace(&ci->timezone, tz); - elm_object_text_set(bt, tz); - time_config_update(ci); - evas_object_del(obj); -} - -EINTERN void -config_timezone_populate(Evas_Object *obj, const char *name) -{ - static const Elm_Genlist_Item_Class itc = - { - .item_style = "default", - .func = { - .text_get = (Elm_Genlist_Item_Text_Get_Cb)_config_timezone_text_get, - .del = _config_timezone_text_del, - }, - .version = ELM_GENLIST_ITEM_CLASS_VERSION - }; - Config_Item *ci; - Elm_Object_Item *it; - - it = elm_genlist_item_sorted_insert(obj, &itc, strdup(name), NULL, 0, (Eina_Compare_Cb)_config_timezone_sort, _config_timezone_set, NULL); - ci = evas_object_data_get(obj, "config_item"); - if (eina_streq(name, ci->timezone)) - elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); -} diff --git a/src/modules/time/e-module-time.edj b/src/modules/time/e-module-time.edj deleted file mode 100644 index 756669888..000000000 Binary files a/src/modules/time/e-module-time.edj and /dev/null differ diff --git a/src/modules/time/meson.build b/src/modules/time/meson.build deleted file mode 100644 index 43392cbf9..000000000 --- a/src/modules/time/meson.build +++ /dev/null @@ -1,7 +0,0 @@ -src = files( - 'mod.c', - 'clock.c', - 'config.c', - 'time.c', - 'clock.h' - ) diff --git a/src/modules/time/mod.c b/src/modules/time/mod.c deleted file mode 100644 index 9a74f8d9d..000000000 --- a/src/modules/time/mod.c +++ /dev/null @@ -1,142 +0,0 @@ -#include "clock.h" -static E_Config_DD *conf_edd = NULL; -static E_Config_DD *conf_item_edd = NULL; -static E_Action *act = NULL; - -static void -_e_mod_action_cb(E_Object *obj EINA_UNUSED, const char *params, ...) -{ - Eina_List *l; - Instance *inst; - - if (!eina_streq(params, "show_calendar")) return; - - EINA_LIST_FOREACH(clock_instances, l, inst) - if (inst->popup) - { - elm_ctxpopup_dismiss(inst->popup); - inst->popup = NULL; - } - else - clock_popup_new(inst); -} - -EINTERN void -clock_init(void) -{ - conf_item_edd = E_CONFIG_DD_NEW("Config_Item", Config_Item); -#undef T -#undef D -#define T Config_Item -#define D conf_item_edd - E_CONFIG_VAL(D, T, id, INT); - E_CONFIG_VAL(D, T, weekend.start, INT); - E_CONFIG_VAL(D, T, weekend.len, INT); - E_CONFIG_VAL(D, T, week.start, INT); - E_CONFIG_VAL(D, T, digital_clock, INT); - E_CONFIG_VAL(D, T, digital_24h, INT); - E_CONFIG_VAL(D, T, show_seconds, INT); - E_CONFIG_VAL(D, T, show_date, INT); - E_CONFIG_VAL(D, T, advanced, UCHAR); - E_CONFIG_VAL(D, T, timezone, STR); - E_CONFIG_VAL(D, T, time_str[0], STR); - E_CONFIG_VAL(D, T, time_str[1], STR); - E_CONFIG_VAL(D, T, colorclass[0], STR); - E_CONFIG_VAL(D, T, colorclass[1], STR); - - conf_edd = E_CONFIG_DD_NEW("Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_LIST(D, T, items, conf_item_edd); - - time_config = e_config_domain_load("module.time", conf_edd); - - if (!time_config) - time_config = E_NEW(Config, 1); - - act = e_action_add("clock"); - if (act) - { - act->func.go = (void*)_e_mod_action_cb; - act->func.go_key = (void*)_e_mod_action_cb; - act->func.go_mouse = (void*)_e_mod_action_cb; - act->func.go_edge = (void*)_e_mod_action_cb; - - e_action_predef_name_set(N_("Clock"), N_("Toggle calendar"), "clock", "show_calendar", NULL, 0); - } - - e_gadget_type_add("Digital Clock", digital_clock_create, NULL); - e_gadget_type_add("Analog Clock", analog_clock_create, NULL); - time_init(); -} - -EINTERN void -clock_shutdown(void) -{ - if (act) - { - e_action_predef_name_del("Clock", "Toggle calendar"); - e_action_del("clock"); - act = NULL; - } - if (time_config) - { - Config_Item *ci; - - if (time_config->config_dialog) - { - evas_object_hide(time_config->config_dialog); - evas_object_del(time_config->config_dialog); - } - - EINA_LIST_FREE(time_config->items, ci) - { - eina_stringshare_del(ci->timezone); - eina_stringshare_del(ci->time_str[0]); - eina_stringshare_del(ci->time_str[1]); - eina_stringshare_del(ci->colorclass[0]); - eina_stringshare_del(ci->colorclass[1]); - free(ci); - } - - E_FREE(time_config); - } - E_CONFIG_DD_FREE(conf_edd); - E_CONFIG_DD_FREE(conf_item_edd); - - e_gadget_type_del("Digital Clock"); - e_gadget_type_del("Analog Clock"); - time_shutdown(); -} - -/* module setup */ -E_API E_Module_Api e_modapi = -{ - E_MODULE_API_VERSION, - "Time" -}; - -E_API void * -e_modapi_init(E_Module *m) -{ - clock_init(); - - time_config->module = m; - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - clock_shutdown(); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.time", conf_edd, time_config); - return 1; -} diff --git a/src/modules/time/module.desktop b/src/modules/time/module.desktop deleted file mode 100644 index 38bb45779..000000000 --- a/src/modules/time/module.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Time -Name[fr]=Temps -Comment=Time-related gadgets and utilities -Comment[fr]=Gadgets et utilitaires liés au temps -Comment[it]=Gadget e utilità correlate al tempo -Icon=e-module-time -X-Enlightenment-ModuleType=utils diff --git a/src/modules/time/time.c b/src/modules/time/time.c deleted file mode 100644 index c1ee09210..000000000 --- a/src/modules/time/time.c +++ /dev/null @@ -1,385 +0,0 @@ -#include "clock.h" - -#include -#include - -static Eio_Monitor *clock_te_monitor = NULL; -static Eio_Monitor *clock_tz2_monitor = NULL; -static Eio_Monitor *clock_tzetc_monitor = NULL; -static Eina_List *handlers = NULL; - -static Ecore_Timer *update_today = NULL; - -#define ZONEINFO_DIR "/usr/share/zoneinfo/posix" -#define ZONEINFO_DIR_LEN sizeof(ZONEINFO_DIR) - 1 - -#define TE_DECL \ - const char *tzenv; \ - char prevtz[128] = {0} - -#define TZSET(inst) \ - tzenv = getenv("TZ"); \ - if (tzenv) \ - strncpy(prevtz, tzenv, sizeof(prevtz) - 1); \ - if (inst->cfg->timezone) \ - e_util_env_set("TZ", inst->cfg->timezone); \ - tzset() - -#define TZUNSET() \ - if (prevtz[0]) \ - e_util_env_set("TZ", prevtz); \ - else \ - e_util_env_set("TZ", NULL); \ - tzset() - -static void -_zoneinfo_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - eio_file_cancel(data); -} - -static void -_zoneinfo_done(void *data, Eio_File *handler EINA_UNUSED) -{ - evas_object_event_callback_del(data, EVAS_CALLBACK_DEL, _zoneinfo_del); -} - -static void -_zoneinfo_error(void *data, Eio_File *handler EINA_UNUSED, int error EINA_UNUSED) -{ - evas_object_event_callback_del(data, EVAS_CALLBACK_DEL, _zoneinfo_del); -} - -static Eina_Bool -_zoneinfo_filter(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, const Eina_File_Direct_Info *info) -{ - return (info->type == EINA_FILE_REG) || (info->type == EINA_FILE_DIR); -} - -static void -_zoneinfo_main(void *data, Eio_File *handler EINA_UNUSED, const Eina_File_Direct_Info *info) -{ - if (info->type == EINA_FILE_REG) - config_timezone_populate(data, &info->path[ZONEINFO_DIR_LEN + 1]); - else - { - Eio_File *ls; - - ls = eio_file_direct_ls(info->path, _zoneinfo_filter, _zoneinfo_main, _zoneinfo_done, _zoneinfo_error, data); - evas_object_event_callback_add(data, EVAS_CALLBACK_DEL, _zoneinfo_del, ls); - } -} - -EINTERN void -time_zoneinfo_scan(Evas_Object *obj) -{ - Eio_File *ls; - - ls = eio_file_direct_ls(ZONEINFO_DIR, _zoneinfo_filter, _zoneinfo_main, _zoneinfo_done, _zoneinfo_error, obj); - evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _zoneinfo_del, ls); -} - -EINTERN void -time_daynames_clear(Instance *inst) -{ - int x; - - for (x = 0; x < 7; x++) - eina_stringshare_replace(&inst->daynames[x], NULL); -} - -EINTERN void -time_datestring_format(Instance *inst, char *buf, int bufsz) -{ - struct timeval timev; - struct tm *tm; - time_t tt; - const char *default_str = "%F"; - TE_DECL; - - buf[0] = 0; - if (!inst->cfg->show_date) return; - TZSET(inst); - gettimeofday(&timev, NULL); - tt = (time_t)(timev.tv_sec); - tm = localtime(&tt); - TZUNSET(); - switch (inst->cfg->show_date) - { - case CLOCK_DATE_DISPLAY_FULL: - strftime(buf, bufsz, _("%a, %e %b, %Y"), (const struct tm *)tm); - break; - case CLOCK_DATE_DISPLAY_NUMERIC: - strftime(buf, bufsz, _("%a, %x"), (const struct tm *)tm); - break; - case CLOCK_DATE_DISPLAY_DATE_ONLY: - strftime(buf, bufsz, "%x", (const struct tm *)tm); - break; - case CLOCK_DATE_DISPLAY_ISO8601: - strftime(buf, bufsz, "%F", (const struct tm *)tm); - break; - case CLOCK_DATE_DISPLAY_CUSTOM: -/* disable warning for known-safe code */ -DISABLE_WARNING(format-nonliteral, format-nonliteral, format-nonliteral) - if (!strftime(buf, bufsz, inst->cfg->time_str[1] ?: default_str, (const struct tm *)tm)) - strncpy(buf, "ERROR", bufsz - 1); -ENABLE_WARNING(format-nonliteral, format-nonliteral, format-nonliteral) - break; - default: break; - } -} - -EINTERN int -time_string_format(Instance *inst, char *buf, int bufsz) -{ - struct timeval timev; - struct tm *tm; - time_t tt; - const char *default_fmt = "%R"; - TE_DECL; - - buf[0] = 0; - TZSET(inst); - gettimeofday(&timev, NULL); - tt = (time_t)(timev.tv_sec); - tm = localtime(&tt); - TZUNSET(); -/* disable warning for known-safe code */ -DISABLE_WARNING(format-nonliteral, format-nonliteral, format-nonliteral) - if (!strftime(buf, bufsz, inst->cfg->time_str[0] ?: default_fmt, (const struct tm *)tm)) - strncpy(buf, "ERROR", bufsz - 1); -ENABLE_WARNING(format-nonliteral, format-nonliteral, format-nonliteral) - return tm->tm_sec; -} - -EINTERN void -time_instance_update(Instance *inst) -{ - struct timeval timev; - struct tm *tm, tms, tmm, tm2; - time_t tt; - int started = 0, num, i; - int day; - - tzset(); - gettimeofday(&timev, NULL); - tt = (time_t)(timev.tv_sec); - tm = localtime(&tt); - - time_daynames_clear(inst); - if (!tm) return; - - // tms == current date time "saved" - // tm2 == date to look at adjusting for madj - // tm2 == month baseline @ 1st - memcpy(&tms, tm, sizeof(struct tm)); - num = 0; - for (day = (0 - 6); day < (31 + 16); day++) - { - memcpy(&tmm, &tms, sizeof(struct tm)); - tmm.tm_sec = 0; - tmm.tm_min = 0; - tmm.tm_hour = 10; - tmm.tm_mon += inst->madj; - tmm.tm_mday = 1; // start at the 1st of the month - tmm.tm_wday = 0; // ignored by mktime - tmm.tm_yday = 0; // ignored by mktime - tmm.tm_isdst = 0; // ignored by mktime - tt = mktime(&tmm); - tm = localtime(&tt); - memcpy(&tm2, tm, sizeof(struct tm)); - - tt = mktime(&tmm); - tt += (day * 60 * 60 * 24); - tm = localtime(&tt); - memcpy(&tmm, tm, sizeof(struct tm)); - if (!started) - { - if (tm->tm_wday == inst->cfg->week.start) - { - char buf[32]; - - for (i = 0; i < 7; i++, tm->tm_wday = (tm->tm_wday + 1) % 7) - { - strftime(buf, sizeof(buf), "%a", tm); - inst->daynames[i] = eina_stringshare_add(buf); - } - started = 1; - } - } - if (started) - { - int y = num / 7; - int x = num % 7; - - if (y < 6) - { - inst->daynums[x][y] = tmm.tm_mday; - - inst->dayvalids[x][y] = 0; - if (tmm.tm_mon == tm2.tm_mon) inst->dayvalids[x][y] = 1; - - inst->daytoday[x][y] = 0; - if ((tmm.tm_mon == tms.tm_mon) && - (tmm.tm_year == tms.tm_year) && - (tmm.tm_mday == tms.tm_mday)) - inst->daytoday[x][y] = 1; - - inst->dayweekends[x][y] = 0; - for (i = inst->cfg->weekend.start; - i < (inst->cfg->weekend.start + inst->cfg->weekend.len); - i++) - { - if (tmm.tm_wday == (i % 7)) - { - inst->dayweekends[x][y] = 1; - break; - } - } - } - num++; - } - } - - memcpy(&tmm, &tms, sizeof(struct tm)); - tmm.tm_sec = 0; - tmm.tm_min = 0; - tmm.tm_hour = 10; - tmm.tm_mon += inst->madj; - tmm.tm_mday = 1; // start at the 1st of the month - tmm.tm_wday = 0; // ignored by mktime - tmm.tm_yday = 0; // ignored by mktime - tmm.tm_isdst = 0; // ignored by mktime - tt = mktime(&tmm); - tm = localtime(&tt); - memcpy(&tm2, tm, sizeof(struct tm)); - inst->year[sizeof(inst->year) - 1] = 0; - strftime(inst->year, sizeof(inst->year) - 1, "%Y", (const struct tm *)&tm2); - inst->month[sizeof(inst->month) - 1] = 0; - strftime(inst->month, sizeof(inst->month) - 1, "%B", (const struct tm *)&tm2); // %b for short month -} - - -static Eina_Bool -_update_today_timer(void *data EINA_UNUSED) -{ - time_t t, t_tomorrow; - const struct tm *now; - struct tm today; - - t = time(NULL); - now = localtime(&t); - memcpy(&today, now, sizeof(today)); - today.tm_sec = 1; - today.tm_min = 0; - today.tm_hour = 0; - - t_tomorrow = mktime(&today) + 24 * 60 * 60; - if (update_today) ecore_timer_interval_set(update_today, t_tomorrow - t); - else update_today = ecore_timer_loop_add(t_tomorrow - t, _update_today_timer, NULL); - clock_date_update(); - return EINA_TRUE; -} - -static void -_time_changed(void) -{ - _update_today_timer(NULL); - clock_instances_redo(); -} - -static Eina_Bool -_clock_eio_update(void *d EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Eio_Monitor_Event *ev = event; - - if ((ev->monitor == clock_te_monitor) || - (ev->monitor == clock_tz2_monitor) || - (ev->monitor == clock_tzetc_monitor)) - { - if (eina_streq(ev->filename, "/etc/localtime") || - eina_streq(ev->filename, "/etc/timezone")) - { - _time_changed(); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_clock_time_update(void *d EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - _time_changed(); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_clock_eio_error(void *d EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Eio_Monitor_Event *ev = event; - - if ((ev->monitor == clock_te_monitor) || - (ev->monitor == clock_tz2_monitor) || - (ev->monitor == clock_tzetc_monitor)) - { - E_FREE_FUNC(clock_te_monitor, eio_monitor_del); - if (ecore_file_exists("/etc/localtime")) - clock_te_monitor = eio_monitor_add("/etc/localtime"); - - E_FREE_FUNC(clock_tz2_monitor, eio_monitor_del); - if (ecore_file_exists("/etc/timezone")) - clock_tz2_monitor = eio_monitor_add("/etc/timezone"); - - E_FREE_FUNC(clock_tzetc_monitor, eio_monitor_del); - if (ecore_file_is_dir("/etc")) - clock_tzetc_monitor = eio_monitor_add("/etc"); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_clock_screensaver_on() -{ - clock_timer_set(0); - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_clock_screensaver_off() -{ - clock_timer_set(1); - return ECORE_CALLBACK_RENEW; -} - -EINTERN void -time_init(void) -{ - if (ecore_file_exists("/etc/localtime")) - clock_te_monitor = eio_monitor_add("/etc/localtime"); - if (ecore_file_exists("/etc/timezone")) - clock_tz2_monitor = eio_monitor_add("/etc/timezone"); - if (ecore_file_is_dir("/etc")) - clock_tzetc_monitor = eio_monitor_add("/etc"); - - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL); - E_LIST_HANDLER_APPEND(handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL); - E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, _clock_screensaver_on, NULL); - E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _clock_screensaver_off, NULL); - _update_today_timer(NULL); -} - -EINTERN void -time_shutdown(void) -{ - E_FREE_FUNC(update_today, ecore_timer_del); - E_FREE_FUNC(clock_te_monitor, eio_monitor_del); - E_FREE_FUNC(clock_tz2_monitor, eio_monitor_del); - E_FREE_FUNC(clock_tzetc_monitor, eio_monitor_del); -} diff --git a/src/modules/wireless/connman.c b/src/modules/wireless/connman.c deleted file mode 100644 index 21fa98e8a..000000000 --- a/src/modules/wireless/connman.c +++ /dev/null @@ -1,1673 +0,0 @@ -#include "wireless.h" - -#define CONNMAN_BUS_NAME "net.connman" -#define CONNMAN_MANAGER_IFACE CONNMAN_BUS_NAME ".Manager" -#define CONNMAN_SERVICE_IFACE CONNMAN_BUS_NAME ".Service" -#define CONNMAN_TECHNOLOGY_IFACE CONNMAN_BUS_NAME ".Technology" -#define CONNMAN_TECHNOLOGY_PATH_ETHERNET "/net/connman/technology/ethernet" -#define CONNMAN_TECHNOLOGY_PATH_WIFI "/net/connman/technology/wifi" -#define CONNMAN_TECHNOLOGY_PATH_BT "/net/connman/technology/bluetooth" -#define CONNMAN_TECHNOLOGY_PATH_CELLULAR "/net/connman/technology/cellular" -#define CONNMAN_AGENT_IFACE "net.connman.Agent" -#define CONNMAN_AGENT_PATH "/org/enlightenment/wireless/agent" - -#define CONNMAN_SERVICE_TYPE_ITER(i) \ - for ((i) = 0; (i) < CONNMAN_SERVICE_TYPE_LAST; (i)++) - -#define MILLI_PER_SEC 1000 -#define CONNMAN_CONNECTION_TIMEOUT 60 * MILLI_PER_SEC - -#undef DBG -#undef INF -#undef WRN -#undef ERR - -#define DBG(...) EINA_LOG_DOM_DBG(_connman_log_dom, __VA_ARGS__) -#define INF(...) EINA_LOG_DOM_INFO(_connman_log_dom, __VA_ARGS__) -#define WRN(...) EINA_LOG_DOM_WARN(_connman_log_dom, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(_connman_log_dom, __VA_ARGS__) - -typedef enum -{ - CONNMAN_STATE_NONE = -1, /* All unknown states */ - CONNMAN_STATE_OFFLINE, - CONNMAN_STATE_IDLE, - CONNMAN_STATE_ASSOCIATION, - CONNMAN_STATE_CONFIGURATION, - CONNMAN_STATE_READY, - CONNMAN_STATE_ONLINE, - CONNMAN_STATE_DISCONNECT, - CONNMAN_STATE_FAILURE, -} Connman_State; - -typedef enum -{ - CONNMAN_SERVICE_TYPE_NONE = -1, /* All non-supported types */ - CONNMAN_SERVICE_TYPE_ETHERNET = 0, - CONNMAN_SERVICE_TYPE_WIFI = 1, - CONNMAN_SERVICE_TYPE_BLUETOOTH = 2, - CONNMAN_SERVICE_TYPE_CELLULAR = 3, - CONNMAN_SERVICE_TYPE_LAST = 4, -} Connman_Service_Type; - -typedef struct Connman_Technology -{ - Connman_Service_Type type; - Eldbus_Proxy *proxy; - Eina_Stringshare *tethering_ssid; - Eina_Stringshare *tethering_passwd; - Eina_Bool powered E_BITFIELD; - Eina_Bool connected E_BITFIELD; - Eina_Bool tethering E_BITFIELD; -} Connman_Technology; - -typedef struct -{ - EINA_INLIST; - Eldbus_Proxy *proxy; - - /* Private */ - struct - { - Eldbus_Pending *connect; - Eldbus_Pending *disconnect; - Eldbus_Pending *remov; - void *data; - } pending; - Eldbus_Signal_Handler *handler; - - /* Properties */ - Eina_Stringshare *path; - Eina_Stringshare *name; - Wireless_Network_Security security; - Connman_State state; - Connman_Service_Type type; - uint8_t strength; - - /* Connection */ - unsigned int method; - Eina_Stringshare *address; - Eina_Stringshare *gateway; - union - { - struct - { - Eina_Stringshare *netmask; - } v4; - struct - { - Eina_Stringshare *prefixlength; - Wireless_Network_IPv6_Privacy privacy; - } v6; - } ip; - - Eina_Array *domain_servers; - Eina_Array *name_servers; - Eina_Array *time_servers; - - /* Proxy */ - unsigned int proxy_type; - Eina_Stringshare *proxy_url; - Eina_Array *proxy_servers; - Eina_Array *proxy_excludes; - Eina_Bool ipv6 E_BITFIELD; - Eina_Bool favorite E_BITFIELD; -} Connman_Service; - -typedef enum -{ - CONNMAN_FIELD_STATE_MANDATORY, - CONNMAN_FIELD_STATE_OPTIONAL, - CONNMAN_FIELD_STATE_ALTERNATE, - CONNMAN_FIELD_STATE_INFO, -} Connman_Field_State; - -typedef struct Connman_Field -{ - const char *name; - - Connman_Field_State requirement; - const char *type; - const char *value; -} Connman_Field; - -static int _connman_log_dom = -1; - -static Eldbus_Proxy *proxy_manager; - -static Eldbus_Pending *pending_gettechnologies; -static Eldbus_Pending *pending_getservices; -static Eldbus_Pending *pending_getproperties_manager; - -static Eina_List *signal_handlers; - -static Eina_Inlist *connman_services_list[CONNMAN_SERVICE_TYPE_LAST]; -static Eina_Hash *connman_services[CONNMAN_SERVICE_TYPE_LAST]; -static Eldbus_Service_Interface *agent_iface; - -static Connman_Service *connman_current_service[CONNMAN_SERVICE_TYPE_LAST]; -static Wireless_Connection *connman_current_connection[CONNMAN_SERVICE_TYPE_LAST]; - -static Connman_Technology connman_technology[CONNMAN_SERVICE_TYPE_LAST]; - -/* connman -> wireless */ -static Eina_Hash *connman_services_map[CONNMAN_SERVICE_TYPE_LAST]; - -static inline Eina_Bool -_connman_service_is_connected(const Connman_Service *cs) -{ - return (cs->state >= CONNMAN_STATE_ASSOCIATION) && (cs->state <= CONNMAN_STATE_ONLINE); -} - -static void -_eldbus_proxy_del(Eldbus_Proxy *proxy) -{ - Eldbus_Object *obj; - - obj = eldbus_proxy_object_get(proxy); - eldbus_proxy_unref(proxy); - eldbus_object_unref(obj); -} - -static void -_connman_service_connect_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Connman_Service *cs = data; - const char *error; - - /* FIXME */ - cs->pending.connect = NULL; - eldbus_message_error_get(msg, NULL, &error); -} - -static Eina_Bool -_connman_service_connect(Wireless_Network *wn) -{ - Connman_Service *cs; - - cs = eina_hash_find(connman_services[wn->type], wn->path); - EINA_SAFETY_ON_NULL_RETURN_VAL(cs, EINA_FALSE); - if (!cs->pending.connect) - cs->pending.connect = eldbus_proxy_call(cs->proxy, "Connect", - _connman_service_connect_cb, cs, - CONNMAN_CONNECTION_TIMEOUT, ""); - return !!cs->pending.connect; -} - -static void -_connman_update_technologies(void) -{ - Eina_Bool avail[CONNMAN_SERVICE_TYPE_LAST]; - int i; - - CONNMAN_SERVICE_TYPE_ITER(i) - avail[i] = connman_technology[i].type > -1; - wireless_service_type_available_set(avail); -} - -static void -_connman_update_enabled_technologies(void) -{ - Eina_Bool enabled[CONNMAN_SERVICE_TYPE_LAST]; - int i; - - CONNMAN_SERVICE_TYPE_ITER(i) - enabled[i] = connman_technology[i].powered; - wireless_service_type_enabled_set(enabled); -} - -static Wireless_Network_State -_connman_wifi_state_convert(Connman_State state) -{ - Wireless_Network_State wifi_state; - switch (state) - { - case CONNMAN_STATE_ASSOCIATION: - case CONNMAN_STATE_CONFIGURATION: - wifi_state = WIRELESS_NETWORK_STATE_CONFIGURING; - break; - case CONNMAN_STATE_READY: - wifi_state = WIRELESS_NETWORK_STATE_CONNECTED; - break; - case CONNMAN_STATE_ONLINE: - wifi_state = WIRELESS_NETWORK_STATE_ONLINE; - break; - case CONNMAN_STATE_FAILURE: - wifi_state = WIRELESS_NETWORK_STATE_FAILURE; - break; - case CONNMAN_STATE_NONE: - case CONNMAN_STATE_OFFLINE: - case CONNMAN_STATE_IDLE: - case CONNMAN_STATE_DISCONNECT: - default: - wifi_state = WIRELESS_NETWORK_STATE_NONE; - } - return wifi_state; -} - -static Wireless_Network * -_connman_service_convert(Connman_Service *cs) -{ - Wireless_Network *wn; - - wn = E_NEW(Wireless_Network, 1); - wn->path = cs->path; - wn->name = cs->name; - wn->security = cs->security; - wn->state = _connman_wifi_state_convert(cs->state); - wn->type = (Wireless_Service_Type)cs->type; - wn->strength = cs->strength; - wn->connect_cb = _connman_service_connect; - return wn; -} - -static void -_connman_update_current_network(Connman_Service *cs, Connman_Service_Type type) -{ - if (connman_current_service[type] != cs) - { - E_FREE(connman_current_connection[type]); - if (cs) - connman_current_connection[type] = E_NEW(Wireless_Connection, 1); - } - connman_current_service[type] = cs; - if (cs) - { - connman_current_connection[type]->wn = eina_hash_find(connman_services_map[type], &cs); - memcpy(&connman_current_connection[type]->method, - &cs->method, sizeof(Wireless_Connection) - sizeof(void*)); - } - else - connman_current_connection[type] = NULL; - wireless_wifi_current_networks_set(connman_current_connection); -} - -static void -_connman_update_networks(Connman_Service_Type type) -{ - Eina_Array *arr; - Connman_Service *cs; - Wireless_Network *wn; - Eina_Hash *map; - Connman_Service *services[CONNMAN_SERVICE_TYPE_LAST] = {NULL}; - - map = connman_services_map[type]; - connman_services_map[type] = eina_hash_pointer_new(free); - arr = eina_array_new(eina_hash_population(connman_services[type])); - EINA_INLIST_FOREACH(connman_services_list[type], cs) - { - wn = _connman_service_convert(cs); - eina_hash_add(connman_services_map[type], &cs, wn); - eina_array_push(arr, wn); - if (connman_current_service[type] && _connman_service_is_connected(cs)) - services[type] = cs; - } - memcpy(&connman_current_service, services, CONNMAN_SERVICE_TYPE_LAST * sizeof(void*)); - arr = wireless_networks_set(arr); - _connman_update_current_network(connman_current_service[type], type); - eina_hash_free(map); - eina_array_free(arr); -} - -static void -_connman_update_airplane_mode(Eina_Bool offline) -{ - wireless_airplane_mode_set(offline); -} - -static Connman_State -str_to_state(const char *s) -{ - if (!strcmp(s, "offline")) - return CONNMAN_STATE_OFFLINE; - if (!strcmp(s, "idle")) - return CONNMAN_STATE_IDLE; - if (!strcmp(s, "association")) - return CONNMAN_STATE_ASSOCIATION; - if (!strcmp(s, "configuration")) - return CONNMAN_STATE_CONFIGURATION; - if (!strcmp(s, "ready")) - return CONNMAN_STATE_READY; - if (!strcmp(s, "online")) - return CONNMAN_STATE_ONLINE; - if (!strcmp(s, "disconnect")) - return CONNMAN_STATE_DISCONNECT; - if (!strcmp(s, "failure")) - return CONNMAN_STATE_FAILURE; - - ERR("Unknown state %s", s); - return CONNMAN_STATE_NONE; -} - -static Connman_Service_Type -str_to_type(const char *s) -{ - if (!strcmp(s, "ethernet")) - return CONNMAN_SERVICE_TYPE_ETHERNET; - if (!strcmp(s, "wifi")) - return CONNMAN_SERVICE_TYPE_WIFI; - if (!strcmp(s, "bluetooth")) - return CONNMAN_SERVICE_TYPE_BLUETOOTH; - if (!strcmp(s, "cellular")) - return CONNMAN_SERVICE_TYPE_CELLULAR; - - DBG("Unknown type %s", s); - return CONNMAN_SERVICE_TYPE_NONE; -} - -static Wireless_Network_Security -str_to_security(const char *s) -{ - if (!strcmp(s, "none")) return WIRELESS_NETWORK_SECURITY_NONE; - if (!strcmp(s, "wep")) return WIRELESS_NETWORK_SECURITY_WEP; - if (!strcmp(s, "psk")) return WIRELESS_NETWORK_SECURITY_PSK; - if (!strcmp(s, "ieee8021x")) return WIRELESS_NETWORK_SECURITY_IEEE8021X; - if (!strcmp(s, "wps")) return WIRELESS_NETWORK_SECURITY_WPS; - CRI("UNKNOWN TYPE %s", s); - return WIRELESS_NETWORK_SECURITY_NONE; -} - -static void -_connman_service_free(Connman_Service *cs) -{ - if (!cs) return; - - if (cs->pending.connect) - { - eldbus_pending_cancel(cs->pending.connect); - free(cs->pending.data); - } - else if (cs->pending.disconnect) - { - eldbus_pending_cancel(cs->pending.disconnect); - free(cs->pending.data); - } - else if (cs->pending.remov) - { - eldbus_pending_cancel(cs->pending.remov); - free(cs->pending.data); - } - eina_stringshare_del(cs->address); - eina_stringshare_del(cs->gateway); - if (cs->ipv6) - eina_stringshare_del(cs->ip.v6.prefixlength); - else - eina_stringshare_del(cs->ip.v4.netmask); - - eina_stringshare_del(cs->proxy_url); - - array_clear(cs->domain_servers); - array_clear(cs->name_servers); - array_clear(cs->time_servers); - - array_clear(cs->proxy_servers); - array_clear(cs->proxy_excludes); - - eina_stringshare_del(cs->name); - eina_stringshare_del(cs->path); - eldbus_signal_handler_del(cs->handler); - DBG("service free %p || proxy %p", cs, cs->proxy); - _eldbus_proxy_del(cs->proxy); - connman_services_list[cs->type] = eina_inlist_remove(connman_services_list[cs->type], EINA_INLIST_GET(cs)); - - free(cs); -} - -static void -_connman_service_parse_stringarray(Eldbus_Message_Iter *value, Eina_Array **arr) -{ - Eldbus_Message_Iter *itr_array; - const char *s; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, "as", - &itr_array)); - if (*arr) - { - while (eina_array_count(*arr)) - eina_stringshare_del(eina_array_pop(*arr)); - } - else - *arr = eina_array_new(1); - while (eldbus_message_iter_get_and_next(itr_array, 's', &s)) - eina_array_push(*arr, eina_stringshare_add(s)); -} - -static void -_connman_service_parse_prop_changed(Connman_Service *cs, const char *prop_name, Eldbus_Message_Iter *value) -{ - DBG("service %p %s prop %s", cs, cs->path, prop_name); - - if (!strcmp(prop_name, "State")) - { - const char *state; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, - "s", - &state)); - cs->state = str_to_state(state); - DBG("New state: %s %d", state, cs->state); - } - if (!strcmp(prop_name, "Favorite")) - { - Eina_Bool state; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, - "b", - &state)); - cs->favorite = !!state; - DBG("New favorite state: %d", cs->favorite); - } - else if (!strcmp(prop_name, "Name")) - { - const char *name; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, - "s", - &name)); - eina_stringshare_replace(&cs->name, name); - DBG("New name: %s", cs->name); - } - else if (!strcmp(prop_name, "Type")) - { - const char *type; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, - "s", - &type)); - cs->type = str_to_type(type); - DBG("New type: %s %d", type, cs->type); - } - else if (!strcmp(prop_name, "Strength")) - { - uint8_t strength; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, - "y", - &strength)); - cs->strength = strength; - DBG("New strength: %d", strength); - } - else if (!strcmp(prop_name, "Security")) - { - const char *s; - Eldbus_Message_Iter *itr_array; - - DBG("Old security: %u", cs->security); - cs->security = WIRELESS_NETWORK_SECURITY_NONE; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, "as", - &itr_array)); - while (eldbus_message_iter_get_and_next(itr_array, 's', &s)) - cs->security |= str_to_security(s); - DBG("New security %u", cs->security); - } - else if (!strcmp(prop_name, "IPv4")) - { - Eldbus_Message_Iter *array, *dict; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, "a{sv}", &array)); - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - const char *name, *val; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(dict, "sv", &name, &var)); - if (!strcmp(name, "Method")) - { - cs->method = WIRELESS_NETWORK_IPV4_METHOD_OFF; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - if (!strcmp(val, "off")) - cs->method = WIRELESS_NETWORK_IPV4_METHOD_OFF; - else if (!strcmp(val, "dhcp")) - cs->method = WIRELESS_NETWORK_IPV4_METHOD_DHCP; - else if (!strcmp(val, "manual")) - cs->method = WIRELESS_NETWORK_IPV4_METHOD_MANUAL; - else if (!strcmp(val, "fixed")) - cs->method = WIRELESS_NETWORK_IPV4_METHOD_FIXED; - } - else if (!strcmp(name, "Address")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->address, val); - } - else if (!strcmp(name, "Netmask")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->ip.v4.netmask, val); - } - else if (!strcmp(name, "Gateway")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->gateway, val); - } - } - } - else if (!strcmp(prop_name, "IPv6")) - { - Eldbus_Message_Iter *array, *dict; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, "a{sv}", &array)); - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - const char *name, *val; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(dict, "sv", &name, &var)); - if (!strcmp(name, "Method")) - { - cs->method = WIRELESS_NETWORK_IPV6_METHOD_OFF; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - if (!strcmp(val, "auto")) - cs->method = WIRELESS_NETWORK_IPV6_METHOD_AUTO; - else if (!strcmp(val, "manual")) - cs->method = WIRELESS_NETWORK_IPV6_METHOD_MANUAL; - else if (!strcmp(val, "6to4")) - cs->method = WIRELESS_NETWORK_IPV6_METHOD_6TO4; - else if (!strcmp(val, "fixed")) - cs->method = WIRELESS_NETWORK_IPV6_METHOD_FIXED; - } - else if (!strcmp(name, "Privacy")) - { - cs->ip.v6.privacy = WIRELESS_NETWORK_IPV6_PRIVACY_DISABLED; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - if (!strcmp(val, "disabled")) - cs->ip.v6.privacy = WIRELESS_NETWORK_IPV6_PRIVACY_DISABLED; - else if (!strcmp(val, "enabled")) - cs->ip.v6.privacy = WIRELESS_NETWORK_IPV6_PRIVACY_ENABLED; - else if (!strcmp(val, "preferred")) - cs->ip.v6.privacy = WIRELESS_NETWORK_IPV6_PRIVACY_PREFERRED; - } - else if (!strcmp(name, "Address")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->address, val); - } - else if (!strcmp(name, "PrefixLength")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->ip.v6.prefixlength, val); - } - else if (!strcmp(name, "Gateway")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->gateway, val); - } - } - } - else if (!strcmp(prop_name, "Proxy")) - { - Eldbus_Message_Iter *array, *dict; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(value, "a{sv}", &array)); - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - const char *name, *val; - - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(dict, "sv", &name, &var)); - if (!strcmp(name, "Method")) - { - cs->proxy_type = WIRELESS_PROXY_TYPE_DIRECT; - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - if (!strcmp(val, "manual")) - cs->proxy_type = WIRELESS_PROXY_TYPE_MANUAL; - else if (!strcmp(val, "auto")) - cs->proxy_type = WIRELESS_PROXY_TYPE_AUTO; - } - else if (!strcmp(name, "URL")) - { - EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(var, "s", &val)); - eina_stringshare_replace(&cs->proxy_url, val); - } - else if (!strcmp(name, "Servers")) - _connman_service_parse_stringarray(value, &cs->proxy_servers); - else if (!strcmp(name, "Excludes")) - _connman_service_parse_stringarray(value, &cs->proxy_excludes); - } - } - else if (!strcmp(prop_name, "Nameservers")) - _connman_service_parse_stringarray(value, &cs->name_servers); - else if (!strcmp(prop_name, "Timeservers")) - _connman_service_parse_stringarray(value, &cs->time_servers); - else if (!strcmp(prop_name, "Domains")) - _connman_service_parse_stringarray(value, &cs->domain_servers); -} - -static Eina_Bool -_connman_service_prop_dict_changed(Connman_Service *cs, Eldbus_Message_Iter *props) -{ - Eldbus_Message_Iter *dict; - - while (eldbus_message_iter_get_and_next(props, 'e', &dict)) - { - char *name; - Eldbus_Message_Iter *var; - - if (eldbus_message_iter_arguments_get(dict, "sv", &name, &var)) - _connman_service_parse_prop_changed(cs, name, var); - } - if ((cs->type <= CONNMAN_SERVICE_TYPE_NONE) || - (cs->type >= CONNMAN_SERVICE_TYPE_LAST)) - return EINA_FALSE; - else - { - if (_connman_service_is_connected(cs)) - _connman_update_current_network(cs, cs->type); - } - return EINA_TRUE; -} - -static void -_connman_service_property(void *data, const Eldbus_Message *msg) -{ - Connman_Service *cs = data; - Eldbus_Message_Iter *var; - const char *name; - - if (eldbus_message_arguments_get(msg, "sv", &name, &var)) - _connman_service_parse_prop_changed(cs, name, var); - if (_connman_service_is_connected(cs)) - _connman_update_current_network(cs, cs->type); -} - -static Connman_Service * -_connman_service_new(const char *path, Eldbus_Message_Iter *props) -{ - Connman_Service *cs; - Eldbus_Object *obj; - - cs = E_NEW(Connman_Service, 1); - cs->path = eina_stringshare_add(path); - - obj = eldbus_object_get(dbus_conn, CONNMAN_BUS_NAME, path); - cs->proxy = eldbus_proxy_get(obj, CONNMAN_SERVICE_IFACE); - cs->handler = eldbus_proxy_signal_handler_add(cs->proxy, "PropertyChanged", - _connman_service_property, cs); - - if (!_connman_service_prop_dict_changed(cs, props)) - { - ERR("Service added of invalid type"); - _connman_service_free(cs); - return NULL; - } - connman_services_list[cs->type] = eina_inlist_append(connman_services_list[cs->type], EINA_INLIST_GET(cs)); - eina_hash_add(connman_services[cs->type], cs->path, cs); - DBG("Added service: %p %s || proxy %p", cs, path, cs->proxy); - return cs; -} - -static void -_connman_manager_agent_register(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Pending *pending EINA_UNUSED) -{ - /* FIXME: should this do something? */ -} - -static Eina_Bool -_connman_technology_parse_prop_changed(Connman_Technology *ct, const char *name, Eldbus_Message_Iter *value) -{ - Eina_Bool val; - const char *str; - Eina_Bool ret = EINA_FALSE; - - if (!strcmp(name, "Powered")) - { - if (!eldbus_message_iter_arguments_get(value, "b", &val)) goto exit; - - val = !!val; - if (val != ct->powered) ret = EINA_TRUE; - ct->powered = !!val; - } - else if (!strcmp(name, "Connected")) - { - if (!eldbus_message_iter_arguments_get(value, "b", &val)) goto exit; - ct->connected = !!val; - } - else if (!strcmp(name, "Tethering")) - { - if (!eldbus_message_iter_arguments_get(value, "b", &val)) goto exit; - ct->tethering = !!val; - } - else if (!strcmp(name, "TetheringIdentifier")) - { - if (!eldbus_message_iter_arguments_get(value, "b", &str)) goto exit; - ct->tethering_ssid = eina_stringshare_add(str); - } - else if (!strcmp(name, "TetheringPassphrase")) - { - if (!eldbus_message_iter_arguments_get(value, "b", &str)) goto exit; - ct->tethering_passwd = eina_stringshare_add(str); - } - exit: - return ret; -} - -static void -_connman_technology_event_property(void *data, const Eldbus_Message *msg) -{ - Eldbus_Message_Iter *var; - const char *name; - Connman_Technology *ct = NULL; - int i; - - CONNMAN_SERVICE_TYPE_ITER(i) - if (data == connman_technology[i].proxy) - { - ct = &connman_technology[i]; - break; - } - if (!ct) return; - - if (!eldbus_message_arguments_get(msg, "sv", &name, &var)) - ERR("Could not parse message %p", msg); - else if (_connman_technology_parse_prop_changed(ct, name, var)) - _connman_update_enabled_technologies(); -} - -static Eina_Bool -_connman_manager_parse_prop_changed(const char *name, Eldbus_Message_Iter *value) -{ - if (!strcmp(name, "State")) - { - const char *state; - - if (!eldbus_message_iter_arguments_get(value, "s", &state)) - return EINA_FALSE; - DBG("New state: %s", state); - //_connman_update_state(str_to_state(state)); - } - else if (!strcmp(name, "OfflineMode")) - { - Eina_Bool offline; - if (!eldbus_message_iter_arguments_get(value, "b", &offline)) - return EINA_FALSE; - _connman_update_airplane_mode(offline); - } - else - return EINA_FALSE; - - return EINA_TRUE; -} - -static void -_connman_manager_getproperties(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Eldbus_Message_Iter *array, *dict; - const char *name, *text; - - pending_getproperties_manager = NULL; - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not get properties. %s: %s", name, text); - return; - } - - if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) - { - ERR("Error getting arguments."); - return; - } - - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - const char *key; - Eldbus_Message_Iter *var; - - if (eldbus_message_iter_arguments_get(dict, "sv", &key, &var)) - _connman_manager_parse_prop_changed(key, var); - } -} - -static void -_connman_manager_getservices(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Eldbus_Message_Iter *array, *s; - const char *name, *text; - int i; - Eina_Bool update[CONNMAN_SERVICE_TYPE_LAST] = {0}; - - pending_getservices = NULL; - CONNMAN_SERVICE_TYPE_ITER(i) - eina_hash_free_buckets(connman_services[i]); - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not get services. %s: %s", name, text); - return; - } - - if (!eldbus_message_arguments_get(msg, "a(oa{sv})", &array)) - { - ERR("Error getting array"); - return; - } - - while (eldbus_message_iter_get_and_next(array, 'r', &s)) - { - const char *path; - Eldbus_Message_Iter *inner_array; - Connman_Service *cs; - - if (!eldbus_message_iter_arguments_get(s, "oa{sv}", &path, &inner_array)) - continue; - - cs = _connman_service_new(path, inner_array); - if (cs) update[cs->type] = 1; - } - CONNMAN_SERVICE_TYPE_ITER(i) - if (update[i]) _connman_update_networks(i); -} - -static void -_connman_manager_gettechnologies(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - Eldbus_Message_Iter *array, *s; - const char *name, *text; - - pending_gettechnologies = NULL; - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not get technologies. %s: %s", name, text); - return; - } - - if (!eldbus_message_arguments_get(msg, "a(oa{sv})", &array)) - { - ERR("Error getting array"); - return; - } - - while (eldbus_message_iter_get_and_next(array, 'r', &s)) - { - const char *path; - Eldbus_Message_Iter *inner_array, *dict; - Connman_Technology *ct = NULL; - Eldbus_Object *obj; - int i; - const char *paths[] = - { - CONNMAN_TECHNOLOGY_PATH_ETHERNET, - CONNMAN_TECHNOLOGY_PATH_WIFI, - CONNMAN_TECHNOLOGY_PATH_BT, - CONNMAN_TECHNOLOGY_PATH_CELLULAR, - }; - - if (!eldbus_message_iter_arguments_get(s, "oa{sv}", &path, &inner_array)) - continue; - CONNMAN_SERVICE_TYPE_ITER(i) - { - if (strcmp(path, paths[i])) continue; - ct = &connman_technology[i]; - ct->type = i; - - obj = eldbus_object_get(dbus_conn, CONNMAN_BUS_NAME, paths[i]); - ct->proxy = eldbus_proxy_get(obj, CONNMAN_TECHNOLOGY_IFACE); - signal_handlers = eina_list_append(signal_handlers, - eldbus_proxy_signal_handler_add(ct->proxy, "PropertyChanged", - _connman_technology_event_property, ct->proxy)); - } - if (!ct) - { - ERR("No handler for technology: %s", path); - continue; - } - while (eldbus_message_iter_get_and_next(inner_array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - - if (eldbus_message_iter_arguments_get(dict, "sv", &name, &var)) - _connman_technology_parse_prop_changed(ct, name, var); - } - } - /* scan not supported on bluetooth */ - if (connman_technology[CONNMAN_SERVICE_TYPE_BLUETOOTH].proxy) - pending_getservices = eldbus_proxy_call(proxy_manager, "GetServices", _connman_manager_getservices, - NULL, -1, ""); - else if (connman_technology[CONNMAN_SERVICE_TYPE_WIFI].proxy) - eldbus_proxy_call(connman_technology[CONNMAN_SERVICE_TYPE_WIFI].proxy, "Scan", NULL, NULL, -1, ""); - _connman_update_technologies(); - _connman_update_enabled_technologies(); -} - -static void -_connman_manager_event_services(void *data EINA_UNUSED, const Eldbus_Message *msg) -{ - Eldbus_Message_Iter *changed, *removed, *s; - const char *path; - int i; - Eina_Bool update[CONNMAN_SERVICE_TYPE_LAST] = {0}; - - if (pending_getservices) return; - - if (!eldbus_message_arguments_get(msg, "a(oa{sv})ao", &changed, &removed)) - { - ERR("Error getting arguments"); - return; - } - - while (eldbus_message_iter_get_and_next(removed, 'o', &path)) - { - CONNMAN_SERVICE_TYPE_ITER(i) - { - if (!eina_hash_del_by_key(connman_services[i], path)) continue; - DBG("Removed service: %s", path); - update[i] = 1; - break; - } - } - - while (eldbus_message_iter_get_and_next(changed, 'r', &s)) - { - Connman_Service *cs; - Eldbus_Message_Iter *array; - Eina_Bool found = EINA_FALSE; - - if (!eldbus_message_iter_arguments_get(s, "oa{sv}", &path, &array)) - continue; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (!cs) continue; - if (!_connman_service_prop_dict_changed(cs, array)) - { - ERR("Service became an invalid type"); - cs->type = i; - _connman_service_free(cs); - continue; - } - found = update[cs->type] = 1; - DBG("Changed service: %p %s", cs, path); - break; - } - if (!found) - { - cs = _connman_service_new(path, array); - if (cs) update[cs->type] = 1; - } - } - CONNMAN_SERVICE_TYPE_ITER(i) - if (update[i]) _connman_update_networks(i); -} - -static void -_connman_manager_event_property(void *data EINA_UNUSED, const Eldbus_Message *msg) -{ - Eldbus_Message_Iter *var; - const char *name; - - if (pending_getproperties_manager) return; - if (!eldbus_message_arguments_get(msg, "sv", &name, &var)) - { - ERR("Could not parse message %p", msg); - return; - } - - _connman_manager_parse_prop_changed(name, var); -} - -static Eldbus_Message * -_connman_agent_release(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) -{ - DBG("Agent released"); - wireless_authenticate_cancel(); - return eldbus_message_method_return_new(msg); -} - -static Eldbus_Message * -_connman_agent_report_error(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED) -{ - const char *path, *err; - E_Notification_Notify n; - - if (!eldbus_message_arguments_get(msg, "ss", &path, &err)) - { - ERR("Could not parse message %p", msg); - return NULL; - } - /* TODO: need a generic "sticky" gadget popup */ - memset(&n, 0, sizeof(E_Notification_Notify)); - n.timeout = 3000; - n.summary = _("Connection Error"); - n.body = err; - n.urgency = E_NOTIFICATION_NOTIFY_URGENCY_NORMAL; - e_notification_client_send(&n, NULL, NULL); - - return NULL; -} - -static Eldbus_Message * -_connman_agent_request_browser(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) -{ - const char *path, *url; - int i; - Connman_Service *cs; - Wireless_Network *wn; - - if (!eldbus_message_arguments_get(msg, "ss", &path, &url)) - { - ERR("Could not parse message %p", msg); - return NULL; - } - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - if (!cs) return NULL; - wn = eina_hash_find(connman_services_map[i], &cs); - EINA_SAFETY_ON_NULL_RETURN_VAL(wn, NULL); - wireless_authenticate_external(wn, url); - return NULL; -} - -static Eina_Bool -_connman_field_parse_value(Connman_Field *field, const char *key, Eldbus_Message_Iter *value, const char *signature) -{ - if (!strcmp(key, "Type")) - { - EINA_SAFETY_ON_FALSE_RETURN_VAL(signature[0] == 's', EINA_FALSE); - eldbus_message_iter_basic_get(value, &field->type); - return EINA_TRUE; - } - - if (!strcmp(key, "Requirement")) - { - const char *req; - const char *types[] = - { - [CONNMAN_FIELD_STATE_MANDATORY] = "mandatory", - [CONNMAN_FIELD_STATE_OPTIONAL] = "optional", - [CONNMAN_FIELD_STATE_ALTERNATE] = "alternate", - [CONNMAN_FIELD_STATE_INFO] = "informational", - }; - int i; - EINA_SAFETY_ON_FALSE_RETURN_VAL(signature[0] == 's', EINA_FALSE); - eldbus_message_iter_basic_get(value, &req); - for (i = 0; i <= CONNMAN_FIELD_STATE_INFO; i++) - if (!strcmp(req, types[i])) - { - field->requirement = i; - break; - } - return EINA_TRUE; - } - - if (!strcmp(key, "Alternates")) - { - EINA_SAFETY_ON_FALSE_RETURN_VAL(signature[0] == 'a', EINA_FALSE); - /* ignore alternates */ - return EINA_TRUE; - } - - if (!strcmp(key, "Value")) - { - EINA_SAFETY_ON_FALSE_RETURN_VAL(signature[0] == 's', EINA_FALSE); - eldbus_message_iter_basic_get(value, &field->value); - return EINA_TRUE; - } - - DBG("Ignored unknown argument: %s", key); - return EINA_FALSE; -} - -static Eina_Bool -_connman_field_parse(Connman_Field *field, Eldbus_Message_Iter *value, const char *signature EINA_UNUSED) -{ - Eldbus_Message_Iter *array, *dict; - - eldbus_message_iter_arguments_get(value, "a{sv}", &array); - EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); - - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - const char *key; - char *sig2; - - if (!eldbus_message_iter_arguments_get(dict, "sv", &key, &var)) - return EINA_FALSE; - sig2 = eldbus_message_iter_signature_get(var); - if (!sig2) - return EINA_FALSE; - - if (!_connman_field_parse_value(field, key, var, sig2)) - { - free(sig2); - return EINA_FALSE; - } - free(sig2); - } - - return EINA_TRUE; -} - -static void -_connman_dbus_dict_append_array(Eldbus_Message_Iter *array, const char *key, Eina_Array *val) -{ - Eldbus_Message_Iter *dict, *variant, *array2; - Eina_Stringshare *str; - unsigned int i; - Eina_Array_Iterator it; - - eldbus_message_iter_arguments_append(array, "{sv}", &dict); - eldbus_message_iter_basic_append(dict, 's', key); - variant = eldbus_message_iter_container_new(dict, 'v', "as"); - array2 = eldbus_message_iter_container_new(variant, 'a', "s"); - EINA_ARRAY_ITER_NEXT(val, i, str, it) - eldbus_message_iter_basic_append(array2, 's', str); - eldbus_message_iter_container_close(variant, array2); - eldbus_message_iter_container_close(dict, variant); - eldbus_message_iter_container_close(array, dict); -} - -static void -_connman_dbus_dict_append_string(Eldbus_Message_Iter *array, const char *key, const char *val) -{ - Eldbus_Message_Iter *dict, *variant; - - eldbus_message_iter_arguments_append(array, "{sv}", &dict); - eldbus_message_iter_basic_append(dict, 's', key); - variant = eldbus_message_iter_container_new(dict, 'v', "s"); - eldbus_message_iter_basic_append(variant, 's', val ?: ""); - eldbus_message_iter_container_close(dict, variant); - eldbus_message_iter_container_close(array, dict); -} - -static void -_connman_dbus_dict_append_bool(Eldbus_Message_Iter *array, const char *key, Eina_Bool val) -{ - Eldbus_Message_Iter *dict, *variant; - - eldbus_message_iter_arguments_append(array, "{sv}", &dict); - eldbus_message_iter_basic_append(dict, 's', key); - variant = eldbus_message_iter_container_new(dict, 'v', "b"); - eldbus_message_iter_basic_append(variant, 'b', !!val); - eldbus_message_iter_container_close(dict, variant); - eldbus_message_iter_container_close(array, dict); -} - -static void -_connman_agent_auth_send(void *data, const Eina_Array *fields) -{ - Eldbus_Message *reply; - Eldbus_Message_Iter *iter, *array; - const char *f, *fprev = NULL; - unsigned int i; - Eina_Array_Iterator it; - - if (!fields) - { - reply = eldbus_message_error_new(data, - "net.connman.Agent.Error.Canceled", - "User canceled dialog"); - eldbus_connection_send(dbus_conn, reply, NULL, NULL, -1); - return; - } - reply = eldbus_message_method_return_new(data); - iter = eldbus_message_iter_get(reply); - eldbus_message_iter_arguments_append(iter, "a{sv}", &array); - - EINA_ARRAY_ITER_NEXT(fields, i, f, it) - { - if ((i % 2) && (fprev)) - _connman_dbus_dict_append_string(array, fprev, f); - else - fprev = f; - } - eldbus_message_iter_container_close(iter, array); - - eldbus_connection_send(dbus_conn, reply, NULL, NULL, -1); -} - -static Eldbus_Message * -_connman_agent_request_input(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) -{ - Eldbus_Message_Iter *array, *dict; - const char *path; - Eina_Array *arr = NULL; - - if (!eldbus_message_arguments_get(msg, "oa{sv}", &path, &array)) - return eldbus_message_method_return_new(msg); - - /* FIXME: WISPr - net.connman.Agent.Error.LaunchBrowser */ - while (eldbus_message_iter_get_and_next(array, 'e', &dict)) - { - Eldbus_Message_Iter *var; - char *signature; - Connman_Field field = { NULL, CONNMAN_FIELD_STATE_MANDATORY, NULL, NULL }; - - if (!eldbus_message_iter_arguments_get(dict, "sv", &field.name, &var)) - goto err; - signature = eldbus_message_iter_signature_get(var); - if (!signature) goto err; - - if (!_connman_field_parse(&field, var, signature)) - { - free(signature); - goto err; - } - free(signature); - - DBG("AGENT Got field:\n" - "\tName: %s\n" - "\tType: %s\n" - "\tRequirement: %d\n" - "\tAlternates: (omit array)\n" - "\tValue: %s", - field.name, field.type, field.requirement, field.value); - - if (field.requirement != CONNMAN_FIELD_STATE_MANDATORY) continue; - if (!arr) arr = eina_array_new(1); - eina_array_push(arr, eina_stringshare_add(field.name)); - } - wireless_authenticate(arr, _connman_agent_auth_send, eldbus_message_ref((Eldbus_Message *)msg)); - array_clear(arr); - return NULL; - -err: - eina_array_free(arr); - WRN("Failed to parse msg"); - return eldbus_message_method_return_new(msg); -} - -static Eldbus_Message * -_connman_agent_cancel(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) -{ - Eldbus_Message *reply = eldbus_message_method_return_new(msg); - - DBG("Agent canceled"); - wireless_authenticate_cancel(); - - return reply; -} - -static const Eldbus_Method methods[] = { - { "Release", NULL, NULL, _connman_agent_release, 0 }, - { - "ReportError", ELDBUS_ARGS({"o", "service"}, {"s", "error"}), NULL, - _connman_agent_report_error, 0 - }, - //{ - //"ReportPeerError", ELDBUS_ARGS({"o", "peer"}, {"s", "error"}), NULL, - //_connman_agent_report_peer_error, 0 - //}, - { - "RequestBrowser", ELDBUS_ARGS({"o", "service"}, {"s", "url"}), NULL, - _connman_agent_request_browser, 0 - }, - { - "RequestInput", ELDBUS_ARGS({"o", "service"}, {"a{sv}", "fields"}), - ELDBUS_ARGS({"a{sv}", ""}), _connman_agent_request_input, 0 - }, - //{ - //"RequestPeerAuthorization", ELDBUS_ARGS({"o", "peer"}, {"a{sv}", "fields"}), - //ELDBUS_ARGS({"a{sv}", ""}), _connman_agent_request_peer_auth, 0 - //}, - { "Cancel", NULL, NULL, _connman_agent_cancel, 0 }, - { NULL, NULL, NULL, NULL, 0 } -}; - -static const Eldbus_Service_Interface_Desc desc = { - CONNMAN_AGENT_IFACE, methods, NULL, NULL, NULL, NULL -}; - -static void -_connman_start(void) -{ - Eldbus_Object *obj; - int i; - - CONNMAN_SERVICE_TYPE_ITER(i) - connman_services[i] = eina_hash_string_superfast_new((Eina_Free_Cb)_connman_service_free); - - obj = eldbus_object_get(dbus_conn, CONNMAN_BUS_NAME, "/"); - proxy_manager = eldbus_proxy_get(obj, CONNMAN_MANAGER_IFACE); - - signal_handlers = eina_list_append(signal_handlers, - eldbus_proxy_signal_handler_add(proxy_manager, "PropertyChanged", - _connman_manager_event_property, NULL)); - signal_handlers = eina_list_append(signal_handlers, - eldbus_proxy_signal_handler_add(proxy_manager, "ServicesChanged", - _connman_manager_event_services, NULL)); - - pending_gettechnologies = eldbus_proxy_call(proxy_manager, "GetTechnologies", _connman_manager_gettechnologies, - NULL, -1, ""); - pending_getproperties_manager = eldbus_proxy_call(proxy_manager, "GetProperties", _connman_manager_getproperties, - NULL, -1, ""); - - agent_iface = eldbus_service_interface_register(dbus_conn, CONNMAN_AGENT_PATH, &desc); - eldbus_proxy_call(proxy_manager, "RegisterAgent", - _connman_manager_agent_register, NULL, -1, "o", CONNMAN_AGENT_PATH); -} - -static void -_connman_end(void) -{ - int i; - - if (!proxy_manager) return; - eldbus_proxy_call(proxy_manager, "UnregisterAgent", NULL, NULL, -1, "o", CONNMAN_AGENT_PATH); - - CONNMAN_SERVICE_TYPE_ITER(i) - { - E_FREE_FUNC(connman_services[i], eina_hash_free); - if (!connman_technology[i].proxy) continue; - E_FREE_FUNC(connman_technology[i].proxy, _eldbus_proxy_del); - } - E_FREE_FUNC(pending_getservices, eldbus_pending_cancel); - E_FREE_FUNC(pending_getproperties_manager, eldbus_pending_cancel); - signal_handlers = eina_list_free(signal_handlers); - - E_FREE_FUNC(proxy_manager, _eldbus_proxy_del); - E_FREE_FUNC(agent_iface, eldbus_service_object_unregister); -} - -static void -_connman_name_owner_changed(void *data EINA_UNUSED, const char *bus EINA_UNUSED, const char *from EINA_UNUSED, const char *to) -{ - if (to[0]) - _connman_start(); - else - _connman_end(); -} - -EINTERN void -connman_init(void) -{ - int i; - - if (_connman_log_dom > -1) return; - CONNMAN_SERVICE_TYPE_ITER(i) - connman_technology[i].type = -1; - eldbus_name_owner_changed_callback_add(dbus_conn, CONNMAN_BUS_NAME, - _connman_name_owner_changed, - NULL, EINA_TRUE); - _connman_log_dom = eina_log_domain_register("wireless.connman", EINA_COLOR_ORANGE); -} - -EINTERN void -connman_shutdown(void) -{ - int i; - CONNMAN_SERVICE_TYPE_ITER(i) - { - E_FREE_FUNC(connman_services_map[i], eina_hash_free); - E_FREE(connman_current_connection[i]); - connman_current_service[i] = NULL; - } - _connman_end(); - eldbus_name_owner_changed_callback_del(dbus_conn, CONNMAN_BUS_NAME, _connman_name_owner_changed, NULL); - eina_log_domain_unregister(_connman_log_dom); - _connman_log_dom = -1; -} - -EINTERN void -connman_technology_enabled_set(Wireless_Service_Type type, Eina_Bool state) -{ - Eldbus_Message_Iter *main_iter, *var; - Eldbus_Message *msg; - - EINA_SAFETY_ON_NULL_RETURN(connman_technology[type].proxy); - msg = eldbus_proxy_method_call_new(connman_technology[type].proxy, "SetProperty"); - main_iter = eldbus_message_iter_get(msg); - eldbus_message_iter_basic_append(main_iter, 's', "Powered"); - var = eldbus_message_iter_container_new(main_iter, 'v', "b"); - eldbus_message_iter_basic_append(var, 'b', state); - eldbus_message_iter_container_close(main_iter, var); - - eldbus_proxy_send(connman_technology[type].proxy, msg, NULL, NULL, -1); -} - -static void -_connman_service_edit_timeservers_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - /* FIXME */ - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not set properties. %s: %s", name, text); - } -} - -static void -_connman_service_edit_nameservers_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - /* FIXME */ - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not set properties. %s: %s", name, text); - } -} - -static void -_connman_service_edit_domains_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - /* FIXME */ - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not set properties. %s: %s", name, text); - } -} - -static void -_connman_service_edit_proxy_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - /* FIXME */ - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not set properties. %s: %s", name, text); - } -} - -static void -_connman_service_edit_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - /* FIXME */ - if (eldbus_message_error_get(msg, &name, &text)) - { - ERR("Could not set properties. %s: %s", name, text); - } -} - -static void -_connman_service_remove_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *name, *text; - - if (eldbus_message_error_get(msg, &name, &text)) - ERR("Could not remove service. %s: %s", name, text); -} - -EINTERN void -connman_service_edit(const char *path, Wireless_Connection *wc) -{ - int i; - Eldbus_Message *msg; - Eldbus_Message_Iter *iter, *variant, *array; - Connman_Service *cs = NULL; - const char *prop[] = - { - "IPv4.Configuration", - "IPv6.Configuration", - }; - const char *method[] = - { - "off", - "manual", - "dhcp", - "fixed", - }; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "SetProperty"); - iter = eldbus_message_iter_get(msg); - eldbus_message_iter_basic_append(iter, 's', prop[cs->ipv6]); - variant = eldbus_message_iter_container_new(iter, 'v', "a{sv}"); - eldbus_message_iter_arguments_append(variant, "a{sv}", &array); - _connman_dbus_dict_append_string(array, "Method", method[wc->method]); - _connman_dbus_dict_append_string(array, "Address", wc->address); - _connman_dbus_dict_append_string(array, "Gateway", wc->gateway); - if (wc->ipv6) - { - const char *privacy[] = - { - [WIRELESS_NETWORK_IPV6_PRIVACY_DISABLED] = "disabled", - [WIRELESS_NETWORK_IPV6_PRIVACY_ENABLED] = "enabled", - [WIRELESS_NETWORK_IPV6_PRIVACY_PREFERRED] = "preferred", - }; - _connman_dbus_dict_append_string(array, "PrefixLength", wc->ip.v6.prefixlength); - if (wc->method == WIRELESS_NETWORK_IPV6_METHOD_AUTO) - _connman_dbus_dict_append_string(array, "Privacy", privacy[wc->ip.v6.privacy]); - } - else - _connman_dbus_dict_append_string(array, "Netmask", wc->ip.v4.netmask); - eldbus_message_iter_container_close(variant, array); - eldbus_message_iter_container_close(iter, variant); - - eldbus_proxy_send(cs->proxy, msg, _connman_service_edit_cb, NULL, -1); -} - -EINTERN void -connman_service_edit_proxy(const char *path, Wireless_Connection *wc) -{ - int i; - Eldbus_Message *msg; - Eldbus_Message_Iter *iter, *variant, *array; - Connman_Service *cs = NULL; - const char *method[] = - { - "direct", - "manual", - "auto", - }; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "SetProperty"); - iter = eldbus_message_iter_get(msg); - eldbus_message_iter_basic_append(iter, 's', "Proxy"); - variant = eldbus_message_iter_container_new(iter, 'v', "a{sv}"); - eldbus_message_iter_arguments_append(variant, "a{sv}", &array); - _connman_dbus_dict_append_string(array, "Method", method[wc->proxy_type]); - switch (wc->proxy_type) - { - case WIRELESS_PROXY_TYPE_DIRECT: break; - case WIRELESS_PROXY_TYPE_MANUAL: - _connman_dbus_dict_append_array(array, "Servers", wc->proxy_servers); - _connman_dbus_dict_append_array(array, "Excludes", wc->proxy_excludes); - break; - case WIRELESS_PROXY_TYPE_AUTO: - _connman_dbus_dict_append_string(array, "Address", wc->proxy_url); - break; - } - eldbus_message_iter_container_close(variant, array); - eldbus_message_iter_container_close(iter, variant); - - eldbus_proxy_send(cs->proxy, msg, _connman_service_edit_proxy_cb, NULL, -1); -} - -EINTERN void -connman_service_edit_domains(const char *path, Wireless_Connection *wc) -{ - int i; - Eldbus_Message *msg; - Eldbus_Message_Iter *iter; - Connman_Service *cs = NULL; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "SetProperty"); - iter = eldbus_message_iter_get(msg); - _connman_dbus_dict_append_array(iter, "Domains.Configuration", wc->domain_servers); - - eldbus_proxy_send(cs->proxy, msg, _connman_service_edit_domains_cb, NULL, -1); -} - -EINTERN void -connman_service_edit_nameservers(const char *path, Wireless_Connection *wc) -{ - int i; - Eldbus_Message *msg; - Eldbus_Message_Iter *iter; - Connman_Service *cs = NULL; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "SetProperty"); - iter = eldbus_message_iter_get(msg); - _connman_dbus_dict_append_array(iter, "Nameservers.Configuration", wc->name_servers); - - eldbus_proxy_send(cs->proxy, msg, _connman_service_edit_nameservers_cb, NULL, -1); -} - -EINTERN void -connman_service_edit_timeservers(const char *path, Wireless_Connection *wc) -{ - int i; - Eldbus_Message *msg; - Eldbus_Message_Iter *iter; - Connman_Service *cs = NULL; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "SetProperty"); - iter = eldbus_message_iter_get(msg); - _connman_dbus_dict_append_array(iter, "Timeservers.Configuration", wc->time_servers); - - eldbus_proxy_send(cs->proxy, msg, _connman_service_edit_timeservers_cb, NULL, -1); -} - -EINTERN void -connman_service_remove(const char *path) -{ - int i; - Eldbus_Message *msg; - Connman_Service *cs = NULL; - - CONNMAN_SERVICE_TYPE_ITER(i) - { - cs = eina_hash_find(connman_services[i], path); - if (cs) break; - } - EINA_SAFETY_ON_NULL_RETURN(cs); - - msg = eldbus_proxy_method_call_new(cs->proxy, "Remove"); - eldbus_proxy_send(cs->proxy, msg, _connman_service_remove_cb, NULL, -1); -} - -EINTERN void -connman_airplane_mode_set(Eina_Bool set) -{ - Eldbus_Message *msg; - Eldbus_Message_Iter *iter; - - msg = eldbus_proxy_method_call_new(proxy_manager, "SetProperty"); - iter = eldbus_message_iter_get(msg); - _connman_dbus_dict_append_bool(iter, "OfflineMode", set); - eldbus_proxy_send(proxy_manager, msg, NULL, NULL, -1); -} diff --git a/src/modules/wireless/e-module-wireless.edj b/src/modules/wireless/e-module-wireless.edj deleted file mode 100644 index 2b7ed6f67..000000000 Binary files a/src/modules/wireless/e-module-wireless.edj and /dev/null differ diff --git a/src/modules/wireless/meson.build b/src/modules/wireless/meson.build deleted file mode 100644 index 3799bd50f..000000000 --- a/src/modules/wireless/meson.build +++ /dev/null @@ -1,6 +0,0 @@ -src = files( - 'mod.c', - 'connman.c', - 'wireless.c', - 'wireless.h' - ) diff --git a/src/modules/wireless/mod.c b/src/modules/wireless/mod.c deleted file mode 100644 index bce3406cd..000000000 --- a/src/modules/wireless/mod.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "wireless.h" - -EINTERN void wireless_gadget_init(void); -EINTERN void wireless_gadget_shutdown(void); - -EINTERN void connman_init(void); -EINTERN void connman_shutdown(void); - -EINTERN Eldbus_Connection *dbus_conn; -static E_Config_DD *edd; -EINTERN Wireless_Config *wireless_config; - -E_API E_Module_Api e_modapi = -{ - E_MODULE_API_VERSION, - "Wireless" -}; - -E_API void * -e_modapi_init(E_Module *m) -{ - dbus_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM); - connman_init(); - wireless_gadget_init(); - - edd = E_CONFIG_DD_NEW("Wireless_Config", Wireless_Config); -#undef T -#undef D -#define T Wireless_Config -#define D edd - - E_CONFIG_VAL(D, T, disabled_types, UINT); - wireless_config = e_config_domain_load("module.wireless", edd); - if (!wireless_config) wireless_config = E_NEW(Wireless_Config, 1); - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - wireless_gadget_shutdown(); - connman_shutdown(); - E_FREE_FUNC(dbus_conn, eldbus_connection_unref); - E_CONFIG_DD_FREE(edd); - E_FREE(wireless_config); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.wireless", edd, wireless_config); - return 1; -} diff --git a/src/modules/wireless/module.desktop b/src/modules/wireless/module.desktop deleted file mode 100644 index f1f9f3788..000000000 --- a/src/modules/wireless/module.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Wireless -Name[fr]=Sans fil -GenericName=Wireless -Comment=Manage wifi connections -Comment[it]=Gestisce le connessioni wifi -Comment[fr]=Gestion des connexions Wi-Fi -Icon=e-module-wireless -X-Enlightenment-ModuleType=system diff --git a/src/modules/wireless/wireless.c b/src/modules/wireless/wireless.c deleted file mode 100644 index 866339442..000000000 --- a/src/modules/wireless/wireless.c +++ /dev/null @@ -1,1657 +0,0 @@ -#include "wireless.h" - - -/* FIXME */ -void connman_technology_enabled_set(Wireless_Service_Type type, Eina_Bool state); - -static const char *wireless_theme_groups[] = -{ - [WIRELESS_SERVICE_TYPE_ETHERNET] = "e/gadget/wireless/ethernet", - [WIRELESS_SERVICE_TYPE_WIFI] = "e/gadget/wireless/wifi", - [WIRELESS_SERVICE_TYPE_BLUETOOTH] = "e/gadget/wireless/bluetooth", - [WIRELESS_SERVICE_TYPE_CELLULAR] = "e/gadget/wireless/cellular", -}; - -static const char *wireless_ipv4_methods[] = -{ - N_("Disabled"), - N_("Manual"), - "DHCP", - N_("Fixed"), -}; - -static const char *wireless_ipv6_methods[] = -{ - N_("Off"), - N_("Manual"), - N_("Auto"), - "6to4", - N_("Fixed"), -}; - -static const char *wireless_proxy_methods[] = -{ - N_("Direct"), - N_("Manual"), - N_("Auto"), -}; - -typedef struct Instance -{ - int id; - E_Gadget_Site_Orient orient; - Evas_Object *box; - Evas_Object *icon[WIRELESS_SERVICE_TYPE_LAST]; - - Eina_Bool popup; - - struct - { - Evas_Object *error; - Evas_Object *address; - Evas_Object *method; - Evas_Object *signal; - Wireless_Service_Type type; - } tooltip; -} Instance; - -typedef struct Wireless_Auth_Popup -{ - Evas_Object *popup; - Wireless_Auth_Cb cb; - void *data; - Eina_Bool sent E_BITFIELD; -} Wireless_Auth_Popup; - -static Eina_Array *wireless_networks; -static Wireless_Connection *wireless_current[WIRELESS_SERVICE_TYPE_LAST]; -static Eina_Bool wireless_type_enabled[WIRELESS_SERVICE_TYPE_LAST]; -static Eina_Bool wireless_type_available[WIRELESS_SERVICE_TYPE_LAST]; -static Eina_List *instances; -static Eina_List *wireless_auth_pending; -static Wireless_Auth_Popup *wireless_auth_popup; -static Eina_Bool wireless_offline; -static Evas_Object *wireless_edit_popup; -static Evas_Object *menu_icon; -static Wireless_Connection *wireless_edit[2]; -static unsigned int wireless_network_count[WIRELESS_SERVICE_TYPE_LAST]; - -static struct -{ - Evas_Object *popup; - Evas_Object *box; - Evas_Object *content; - Eina_Stringshare *name_servers; - Eina_Stringshare *time_servers; - Eina_Stringshare *domain_servers; - Eina_Stringshare *proxy_servers; - Eina_Stringshare *proxy_excludes; - Eina_Hash *items; - Eina_List *entries; - Wireless_Service_Type type; -} wireless_popup; - -static Eina_Bool auth_popup; - -#undef DBG -#undef INF -#undef WRN -#undef ERR - -#define DBG(...) EINA_LOG_DOM_DBG(_wireless_gadget_log_dom, __VA_ARGS__) -#define INF(...) EINA_LOG_DOM_INFO(_wireless_gadget_log_dom, __VA_ARGS__) -#define WRN(...) EINA_LOG_DOM_WARN(_wireless_gadget_log_dom, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(_wireless_gadget_log_dom, __VA_ARGS__) -static int _wireless_gadget_log_dom = -1; - -static void _wireless_gadget_refresh(Instance *inst); - -static void -_wifi_icon_signal(Evas_Object *icon, int state, int strength) -{ - Edje_Message_Int_Set *msg; - - DBG("icon msg: %d %d%%", state, strength); - msg = alloca(sizeof(Edje_Message_Int_Set) + sizeof(int)); - msg->count = 2; - msg->val[0] = state; - msg->val[1] = strength; - edje_object_message_send(elm_layout_edje_get(icon), EDJE_MESSAGE_INT_SET, 1, msg); -} - -static void -_wifi_icon_init(Evas_Object *icon, Wireless_Network *wn, int type) -{ - int state = 0, strength = 0; - - if (wn) - { - state = wn->state; - strength = wn->strength; - } - _wifi_icon_signal(icon, state, strength); - - if (!wn) - { - if (wireless_type_available[type]) - elm_object_signal_emit(icon, "e,state,default", "e"); - else - elm_object_signal_emit(icon, "e,state,error", "e"); - elm_object_signal_emit(icon, "e,state,unsecured", "e"); - return; - } - if (wn->state == WIRELESS_NETWORK_STATE_FAILURE) - { - elm_object_signal_emit(icon, "e,state,error", "e"); - return; - } - elm_object_signal_emit(icon, "e,state,default", "e"); - switch (wn->type) - { - case WIRELESS_SERVICE_TYPE_WIFI: - if (wn->security > WIRELESS_NETWORK_SECURITY_WEP) - elm_object_signal_emit(icon, "e,state,secure", "e"); - else if (wn->security == WIRELESS_NETWORK_SECURITY_WEP) - elm_object_signal_emit(icon, "e,state,insecure", "e"); - else if (!wn->security) - elm_object_signal_emit(icon, "e,state,unsecured", "e"); - break; - default: break; - } -} - -static void -_wireless_popup_toggle(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - connman_technology_enabled_set(wireless_popup.type, elm_check_state_get(obj)); -} - -static void -_wireless_popup_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst = data; - inst->popup = 0; - E_FREE_FUNC(wireless_popup.items, eina_hash_free); - E_FREE_FUNC(wireless_popup.entries, eina_list_free); - eina_stringshare_replace(&wireless_popup.proxy_servers, NULL); - eina_stringshare_replace(&wireless_popup.proxy_excludes, NULL); - eina_stringshare_replace(&wireless_popup.name_servers, NULL); - eina_stringshare_replace(&wireless_popup.time_servers, NULL); - eina_stringshare_replace(&wireless_popup.domain_servers, NULL); - wireless_popup.box = NULL; - wireless_popup.content = NULL; - wireless_popup.popup = NULL; - wireless_popup.type = -1; -} - -static void -_wireless_edit_basic_entries_update(void) -{ - Eina_List *l; - Evas_Object *ent; - Eina_Bool disabled; - - if (wireless_edit[1]->ipv6) - disabled = wireless_edit[1]->method != WIRELESS_NETWORK_IPV6_METHOD_MANUAL; - else - disabled = wireless_edit[1]->method != WIRELESS_NETWORK_IPV4_METHOD_MANUAL; - EINA_LIST_FOREACH(wireless_popup.entries, l, ent) - elm_object_disabled_set(ent, disabled); -} - -static Evas_Object * -_wireless_popup_table_entry_row(Evas_Object *tb, const char *name, Evas_Smart_Cb cb, void *data, int *row) -{ - Evas_Object *fr, *entry; - - fr = elm_frame_add(tb); - evas_object_show(fr); - E_EXPAND(fr); - E_FILL(fr); - elm_object_text_set(fr, name); - elm_table_pack(tb, fr, 0, *row, 2, 2); - *row += 2; - - entry = elm_entry_add(tb); - evas_object_show(entry); - elm_entry_single_line_set(entry, 1); - elm_entry_scrollable_set(entry, 1); - evas_object_data_set(entry, "table", tb); - evas_object_smart_callback_add(entry, "activated", cb, data); - elm_object_content_set(fr, entry); - return entry; -} - -static void -_wireless_edit_entry_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Eina_Stringshare **str = data; - - eina_stringshare_replace(str, elm_entry_entry_get(obj)); -} - -static void -_wireless_gadget_edit_array_entry(Eina_Array *arr, Eina_Stringshare **ptr) -{ - Eina_Stringshare *str; - unsigned int i; - Eina_Array_Iterator it; - Eina_Strbuf *buf; - - if (!arr) return; - buf = eina_strbuf_new(); - EINA_ARRAY_ITER_NEXT(arr, i, str, it) - { - if (eina_strbuf_length_get(buf)) eina_strbuf_append(buf, ", "); - eina_strbuf_append(buf, str); - } - eina_stringshare_replace(ptr, eina_strbuf_string_get(buf)); - eina_strbuf_free(buf); -} - -static void -_wireless_gadget_edit_proxy_method_update(void) -{ - Evas_Object *ent, *tb = wireless_popup.content; - int row = 1; - Wireless_Connection *wc = wireless_edit[1]; - - evas_object_del(elm_table_child_get(wireless_popup.content, 0, 1)); - evas_object_del(elm_table_child_get(wireless_popup.content, 0, 3)); - evas_object_del(elm_table_child_get(wireless_popup.content, 0, 5)); - switch (wc->proxy_type) - { - case WIRELESS_PROXY_TYPE_DIRECT: - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 1)); - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 3)); - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 5)); - break; - case WIRELESS_PROXY_TYPE_MANUAL: - ent = _wireless_popup_table_entry_row(tb, _("Proxy Servers"), NULL, NULL, &row); - elm_entry_entry_set(ent, wireless_popup.proxy_servers); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_popup.proxy_servers); - ent = _wireless_popup_table_entry_row(tb, _("Proxy Excludes"), NULL, NULL, &row); - elm_entry_entry_set(ent, wireless_popup.proxy_excludes); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_popup.proxy_excludes); - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 5)); - break; - case WIRELESS_PROXY_TYPE_AUTO: - ent = _wireless_popup_table_entry_row(tb, _("Proxy Address"), NULL, NULL, &row); - elm_entry_entry_set(ent, wc->proxy_url); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_edit[1]->address); - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 3)); - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(wireless_popup.content, 0, 5)); - break; - } -} - -static void -_wireless_gadget_edit_proxy_method(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - wireless_edit[1]->proxy_type = (intptr_t)elm_object_item_data_get(event_info); - _wireless_gadget_edit_proxy_method_update(); -} - -static void -_wireless_gadget_edit_method(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - wireless_edit[1]->method = (intptr_t)elm_object_item_data_get(event_info); - _wireless_edit_basic_entries_update(); -} - -static void -_wireless_gadget_edit_method_open(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int i, fixed; - const char **methods; - - elm_hoversel_clear(obj); - evas_object_layer_set(obj, E_LAYER_MENU); - if (wireless_edit[1]->ipv6) - { - fixed = WIRELESS_NETWORK_IPV6_METHOD_FIXED; - methods = wireless_ipv6_methods; - } - else - { - fixed = WIRELESS_NETWORK_IPV6_METHOD_FIXED; - methods = wireless_ipv4_methods; - } - for (i = 0; i < fixed; i++) - { - if ((int)wireless_edit[1]->method != i) - elm_hoversel_item_add(obj, methods[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); - } -} - -static void -_wireless_edit_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - int i; - - wireless_popup.entries = eina_list_free(wireless_popup.entries); - eina_stringshare_del(wireless_edit[0]->wn->path); - free(wireless_edit[0]->wn); - for (i = 0; i <= 1; i++) - { - eina_stringshare_del(wireless_edit[i]->address); - eina_stringshare_del(wireless_edit[i]->gateway); - if (wireless_edit[i]->ipv6) - eina_stringshare_del(wireless_edit[i]->ip.v6.prefixlength); - else - eina_stringshare_del(wireless_edit[i]->ip.v4.netmask); - eina_stringshare_del(wireless_edit[i]->proxy_url); - array_clear(wireless_edit[i]->proxy_excludes); - array_clear(wireless_edit[i]->proxy_servers); - E_FREE(wireless_edit[i]); - } - wireless_popup.popup = NULL; - wireless_edit_popup = NULL; -} - -static Eina_Array * -string_to_array(const char *str) -{ - const char *p = str; - Eina_Array *arr; - - arr = eina_array_new(1); - do - { - const char *start, *end; - - start = p; - p = strchr(p, ','); - if (!p) break; - end = p - 1; - while (isspace(start[0])) start++; - while (isspace(end[0])) end--; - end++; - - if (start == end) break; - eina_array_push(arr, eina_stringshare_add_length(start, end - start)); - p++; - } while (p[0]); - return arr; -} - -static Eina_Bool -_wireless_array_notequal(Eina_Array *a, Eina_Array *b) -{ - unsigned int i; - - if ((!!a) != (!!b)) return EINA_TRUE; - if ((!a) && (!b)) return EINA_FALSE; - if (eina_array_count(a) != eina_array_count(b)) return EINA_TRUE; - for (i = 0; i < eina_array_count(a); i++) - if (eina_array_data_get(a, i) != eina_array_data_get(b, i)) return EINA_TRUE; - return EINA_FALSE; -} - -static void -_wireless_edit_send() -{ - Eina_Bool basic = EINA_FALSE, proxy = EINA_FALSE; - - EINTERN void connman_service_edit(const char *path, Wireless_Connection *wc); - EINTERN void connman_service_edit_proxy(const char *path, Wireless_Connection *wc); - EINTERN void connman_service_edit_domains(const char *path, Wireless_Connection *wc); - EINTERN void connman_service_edit_nameservers(const char *path, Wireless_Connection *wc); - EINTERN void connman_service_edit_timeservers(const char *path, Wireless_Connection *wc); - - if (wireless_edit[0]->method == wireless_edit[1]->method) - { - if (wireless_edit[1]->ipv6) - switch (wireless_edit[1]->method) - { - case WIRELESS_NETWORK_IPV6_METHOD_AUTO: - basic = wireless_edit[0]->ip.v6.privacy != wireless_edit[1]->ip.v6.privacy; - break; - case WIRELESS_NETWORK_IPV6_METHOD_MANUAL: - basic = wireless_edit[0]->address != wireless_edit[1]->address; - if (basic) break; - basic = wireless_edit[0]->gateway != wireless_edit[1]->gateway; - if (basic) break; - basic = wireless_edit[0]->ip.v6.prefixlength != wireless_edit[1]->ip.v6.prefixlength; - break; - default: break; - } - else - switch (wireless_edit[1]->method) - { - case WIRELESS_NETWORK_IPV4_METHOD_MANUAL: - basic = wireless_edit[0]->address != wireless_edit[1]->address; - if (basic) break; - basic = wireless_edit[0]->gateway != wireless_edit[1]->gateway; - if (basic) break; - basic = wireless_edit[0]->ip.v4.netmask != wireless_edit[1]->ip.v4.netmask; - break; - default: break; - } - } - else - basic = EINA_TRUE; - - if (basic) - connman_service_edit(wireless_edit[1]->wn->path, wireless_edit[1]); - - if (wireless_edit[1]->proxy_type == WIRELESS_PROXY_TYPE_MANUAL) - { - array_clear(wireless_edit[1]->proxy_servers); - array_clear(wireless_edit[1]->proxy_excludes); - if (wireless_popup.proxy_servers) - wireless_edit[1]->proxy_servers = string_to_array(wireless_popup.proxy_servers); - if (wireless_popup.proxy_excludes) - wireless_edit[1]->proxy_excludes = string_to_array(wireless_popup.proxy_excludes); - } - if (wireless_edit[0]->proxy_type == wireless_edit[1]->proxy_type) - { - switch (wireless_edit[0]->proxy_type) - { - case WIRELESS_PROXY_TYPE_MANUAL: - proxy = _wireless_array_notequal(wireless_edit[0]->proxy_servers, - wireless_edit[1]->proxy_servers); - if (proxy) break; - proxy = _wireless_array_notequal(wireless_edit[0]->proxy_excludes, - wireless_edit[1]->proxy_excludes); - break; - case WIRELESS_PROXY_TYPE_AUTO: - proxy = wireless_edit[0]->proxy_url != wireless_edit[1]->proxy_url; - break; - break; - default: break; - } - - } - else - proxy = EINA_TRUE; - if (proxy) - connman_service_edit_proxy(wireless_edit[1]->wn->path, wireless_edit[1]); - - array_clear(wireless_edit[1]->domain_servers); - if (wireless_popup.domain_servers) - wireless_edit[1]->domain_servers = string_to_array(wireless_popup.domain_servers); - array_clear(wireless_edit[1]->name_servers); - if (wireless_popup.name_servers) - wireless_edit[1]->name_servers = string_to_array(wireless_popup.name_servers); - array_clear(wireless_edit[1]->name_servers); - if (wireless_popup.name_servers) - wireless_edit[1]->name_servers = string_to_array(wireless_popup.name_servers); - - if (_wireless_array_notequal(wireless_edit[0]->domain_servers, wireless_edit[1]->domain_servers)) - connman_service_edit_domains(wireless_edit[1]->wn->path, wireless_edit[1]); - if (_wireless_array_notequal(wireless_edit[0]->name_servers, wireless_edit[1]->name_servers)) - connman_service_edit_nameservers(wireless_edit[1]->wn->path, wireless_edit[1]); - if (_wireless_array_notequal(wireless_edit[0]->time_servers, wireless_edit[1]->time_servers)) - connman_service_edit_timeservers(wireless_edit[1]->wn->path, wireless_edit[1]); -} - -static void -_wireless_edit_send_button() -{ - e_comp_object_util_autoclose(NULL, NULL, NULL, NULL); - _wireless_edit_send(); -} - -static void -_wireless_edit_remove() -{ - EINTERN void connman_service_remove(const char *path); - e_comp_object_util_autoclose(NULL, NULL, NULL, NULL); - connman_service_remove(wireless_edit[1]->wn->path); -} - -static Eina_Bool -_wireless_edit_key(void *d EINA_UNUSED, Ecore_Event_Key *ev) -{ - if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) - { - _wireless_edit_send(); - return EINA_FALSE; - } - return !!strcmp(ev->key, "Escape"); -} - -static void -_wireless_gadget_edit_proxy_method_open(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - int i; - - elm_hoversel_clear(obj); - for (i = 0; i <= WIRELESS_PROXY_TYPE_AUTO; i++) - { - if ((int)wireless_edit[1]->proxy_type != i) - elm_hoversel_item_add(obj, wireless_proxy_methods[i], NULL, ELM_ICON_NONE, NULL, (intptr_t*)(long)i); - } -} - -static void -_wireless_gadget_edit_proxy(void) -{ - Evas_Object *tb, *fr, *hoversel; - int row = 0; - Wireless_Connection *wc = wireless_edit[1]; - - wireless_popup.content = tb = elm_table_add(wireless_popup.popup); - E_FILL(tb); - E_EXPAND(tb); - evas_object_show(tb); - elm_box_pack_end(wireless_popup.box, tb); - - fr = elm_frame_add(tb); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - elm_object_text_set(fr, _("Proxy Type")); - elm_table_pack(tb, fr, 0, row++, 2, 1); - - hoversel = elm_hoversel_add(tb); - elm_hoversel_hover_parent_set(hoversel, wireless_popup.popup); - elm_hoversel_auto_update_set(hoversel, 1); - evas_object_show(hoversel); - elm_object_content_set(fr, hoversel); - evas_object_smart_callback_add(hoversel, "selected", _wireless_gadget_edit_proxy_method, NULL); - evas_object_smart_callback_add(hoversel, "clicked", _wireless_gadget_edit_proxy_method_open, NULL); - elm_object_text_set(hoversel, wireless_proxy_methods[wc->proxy_type]); - _wireless_gadget_edit_proxy_method_update(); -} - -static void -_wireless_gadget_edit_dnstime(void) -{ - Evas_Object *tb, *ent; - int row = 0; - - wireless_popup.content = tb = elm_table_add(wireless_popup.popup); - E_FILL(tb); - E_EXPAND(tb); - evas_object_show(tb); - elm_box_pack_end(wireless_popup.box, tb); - - ent = _wireless_popup_table_entry_row(tb, _("Nameservers"), NULL, NULL, &row); - elm_entry_entry_set(ent, wireless_popup.name_servers); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_popup.name_servers); - - ent = _wireless_popup_table_entry_row(tb, _("Timeservers"), NULL, NULL, &row); - elm_entry_entry_set(ent, wireless_popup.time_servers); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_popup.time_servers); - - ent = _wireless_popup_table_entry_row(tb, _("Search Domains"), NULL, NULL, &row); - elm_entry_entry_set(ent, wireless_popup.domain_servers); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_popup.domain_servers); - - _wireless_popup_table_entry_row(tb, NULL, NULL, NULL, &row); - evas_object_hide(elm_table_child_get(tb, 0, 6)); -} - -static void -_wireless_gadget_edit_services_type(Evas_Object *obj, Wireless_Service_Type type) -{ - Eina_Bool state = elm_check_state_get(obj); - - if (state) - wireless_config->disabled_types |= (1 << type); - else - wireless_config->disabled_types &= ~(1 << type); - e_config_save_queue(); - E_LIST_FOREACH(instances, _wireless_gadget_refresh); -} - -static void -_wireless_gadget_edit_services_wifi(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_WIFI); -} - -static void -_wireless_gadget_edit_services_bluetooth(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_BLUETOOTH); -} - -static void -_wireless_gadget_edit_services_cellular(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_CELLULAR); -} - -static void -_wireless_gadget_edit_services(void) -{ - Evas_Object *tb, *bx, *ck, *fr, *r; - int row = 0; - - wireless_popup.content = tb = elm_table_add(wireless_popup.popup); - elm_table_homogeneous_set(tb, 1); - E_FILL(tb); - E_EXPAND(tb); - evas_object_show(tb); - elm_box_pack_end(wireless_popup.box, tb); - - fr = elm_frame_add(tb); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - elm_object_text_set(fr, _("Hide Service Types")); - elm_table_pack(tb, fr, 0, row++, 2, 1); - - bx = elm_box_add(fr); - E_EXPAND(bx); - E_FILL(bx); - evas_object_show(bx); - elm_object_content_set(fr, bx); - - ck = elm_check_add(tb); - E_EXPAND(ck); - E_FILL(ck); - elm_object_text_set(ck, _("Hide Wifi")); - elm_check_state_set(ck, (wireless_config->disabled_types & - (1 << WIRELESS_SERVICE_TYPE_WIFI)) == (1 << WIRELESS_SERVICE_TYPE_WIFI)); - evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_wifi, NULL); - if ((!wireless_current[WIRELESS_SERVICE_TYPE_WIFI]) || (!wireless_current[WIRELESS_SERVICE_TYPE_WIFI]->wn) || - (wireless_current[WIRELESS_SERVICE_TYPE_WIFI]->wn->state != WIRELESS_NETWORK_STATE_ONLINE)) - evas_object_show(ck); - elm_box_pack_end(bx, ck); - - ck = elm_check_add(tb); - E_EXPAND(ck); - E_FILL(ck); - elm_object_text_set(ck, _("Hide Bluetooth")); - elm_check_state_set(ck, (wireless_config->disabled_types & - (1 << WIRELESS_SERVICE_TYPE_BLUETOOTH)) == (1 << WIRELESS_SERVICE_TYPE_BLUETOOTH)); - evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_bluetooth, NULL); - if ((!wireless_current[WIRELESS_SERVICE_TYPE_BLUETOOTH]) || (!wireless_current[WIRELESS_SERVICE_TYPE_BLUETOOTH]->wn) || - (wireless_current[WIRELESS_SERVICE_TYPE_BLUETOOTH]->wn->state != WIRELESS_NETWORK_STATE_ONLINE)) - evas_object_show(ck); - elm_box_pack_end(bx, ck); - - ck = elm_check_add(tb); - E_EXPAND(ck); - E_FILL(ck); - elm_object_text_set(ck, _("Hide Cellular")); - elm_check_state_set(ck, (wireless_config->disabled_types & - (1 << WIRELESS_SERVICE_TYPE_CELLULAR)) == (1 << WIRELESS_SERVICE_TYPE_CELLULAR)); - evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_cellular, NULL); - if ((!wireless_current[WIRELESS_SERVICE_TYPE_CELLULAR]) || (!wireless_current[WIRELESS_SERVICE_TYPE_CELLULAR]->wn) || - (wireless_current[WIRELESS_SERVICE_TYPE_CELLULAR]->wn->state != WIRELESS_NETWORK_STATE_ONLINE)) - evas_object_show(ck); - elm_box_pack_end(bx, ck); - - r = evas_object_rectangle_add(e_comp->evas); - elm_table_pack(tb, r, 0, row++, 2, 1); -} - -static Evas_Object * -_wireless_gadget_edit_basic(void) -{ - Evas_Object *tb, *fr, *hoversel, *ent, *entry; - Eina_Bool disabled; - int row = 0, fixed; - const char **methods; - Wireless_Connection *wc = wireless_edit[1]; - - wireless_popup.content = tb = elm_table_add(wireless_popup.box); - E_FILL(tb); - E_EXPAND(tb); - evas_object_show(tb); - elm_box_pack_end(wireless_popup.box, tb); - - fr = elm_frame_add(tb); - E_EXPAND(fr); - E_FILL(fr); - evas_object_show(fr); - elm_object_text_set(fr, _("Method")); - elm_table_pack(tb, fr, 0, row++, 2, 1); - - hoversel = elm_hoversel_add(tb); - elm_hoversel_hover_parent_set(hoversel, wireless_popup.popup); - elm_hoversel_auto_update_set(hoversel, 1); - evas_object_show(hoversel); - elm_object_content_set(fr, hoversel); - evas_object_smart_callback_add(hoversel, "selected", _wireless_gadget_edit_method, NULL); - if (wc->ipv6) - { - fixed = WIRELESS_NETWORK_IPV6_METHOD_FIXED; - methods = wireless_ipv6_methods; - } - else - { - fixed = WIRELESS_NETWORK_IPV6_METHOD_FIXED; - methods = wireless_ipv4_methods; - } - disabled = (int)wc->method == fixed; - elm_object_disabled_set(hoversel, disabled); - if (disabled) - elm_hoversel_item_add(hoversel, _("Fixed"), NULL, ELM_ICON_NONE, NULL, NULL); - else - { - elm_object_text_set(hoversel, methods[wc->method]); - evas_object_smart_callback_add(hoversel, "clicked", _wireless_gadget_edit_method_open, NULL); - } - - ent = entry = _wireless_popup_table_entry_row(tb, _("Address"), NULL, NULL, &row); - elm_object_disabled_set(ent, disabled); - wireless_popup.entries = eina_list_append(wireless_popup.entries, ent); - elm_entry_entry_set(ent, wc->address); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_edit[1]->address); - if (wc->ipv6) - { - ent = _wireless_popup_table_entry_row(tb, _("PrefixLength"), NULL, NULL, &row); - elm_entry_entry_set(ent, wc->ip.v6.prefixlength); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_edit[1]->ip.v6.prefixlength); - } - else - { - ent = _wireless_popup_table_entry_row(tb, _("Netmask"), NULL, NULL, &row); - elm_entry_entry_set(ent, wc->ip.v4.netmask); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_edit[1]->ip.v4.netmask); - } - elm_object_disabled_set(ent, disabled); - wireless_popup.entries = eina_list_append(wireless_popup.entries, ent); - ent = _wireless_popup_table_entry_row(tb, _("Gateway"), NULL, NULL, &row); - elm_entry_entry_set(ent, wc->gateway); - elm_object_disabled_set(ent, disabled); - evas_object_smart_callback_add(ent, "changed,user", _wireless_edit_entry_changed, &wireless_edit[1]->gateway); - wireless_popup.entries = eina_list_append(wireless_popup.entries, ent); - _wireless_edit_basic_entries_update(); - - return entry; -} - -static void -_wireless_gadget_edit_select_pre(void) -{ - elm_box_unpack(wireless_popup.box, wireless_popup.content); - evas_object_del(wireless_popup.content); - wireless_popup.entries = eina_list_free(wireless_popup.entries); -} - -static void -_wireless_gadget_edit_select_basic(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_select_pre(); - _wireless_gadget_edit_basic(); -} - -static void -_wireless_gadget_edit_select_proxy(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_select_pre(); - _wireless_gadget_edit_proxy(); -} - -static void -_wireless_gadget_edit_select_dnstime(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_select_pre(); - _wireless_gadget_edit_dnstime(); -} - -static void -_wireless_gadget_edit_select_services(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - _wireless_gadget_edit_select_pre(); - _wireless_gadget_edit_services(); -} - -static Evas_Object * -_wireless_gadget_edit(int type) -{ - Evas_Object *popup, *entry, *box1, *box, *list, *lbl, *bt; - Elm_Object_Item *it; - Eina_Bool disabled; - int i; - char buf[1024] = {0}; - Wireless_Connection *wc = wireless_current[type]; - Wireless_Network *wn; - - if (!wc) return NULL; - if (wireless_popup.popup) - { - evas_object_hide(wireless_popup.popup); - evas_object_del(wireless_popup.popup); - } - wireless_edit[0] = E_NEW(Wireless_Connection, 1); - wireless_edit[1] = E_NEW(Wireless_Connection, 1); - wn = E_NEW(Wireless_Network, 1); - wn->path = eina_stringshare_ref(wc->wn->path); - for (i = 0; i <= 1; i++) - { - Eina_Array *arrays[] = - { wc->domain_servers, wc->name_servers, wc->time_servers, wc->proxy_servers, - wc->proxy_excludes, NULL }; - Eina_Array **arrays2[] = - { &wireless_edit[i]->domain_servers, &wireless_edit[i]->name_servers, - &wireless_edit[i]->time_servers, &wireless_edit[i]->proxy_servers, - &wireless_edit[i]->proxy_excludes, NULL }; - unsigned int ii; - - wireless_edit[i]->wn = wn; - wireless_edit[i]->method = wc->method; - wireless_edit[i]->address = eina_stringshare_ref(wc->address); - wireless_edit[i]->gateway = eina_stringshare_ref(wc->gateway); - wireless_edit[i]->ipv6 = wc->ipv6; - if (wc->ipv6) - { - wireless_edit[i]->ip.v6.prefixlength = eina_stringshare_ref(wc->ip.v6.prefixlength); - wireless_edit[i]->ip.v6.privacy = wc->ip.v6.privacy; - } - else - wireless_edit[i]->ip.v4.netmask = eina_stringshare_ref(wc->ip.v4.netmask); - wireless_edit[i]->proxy_type = wc->proxy_type; - wireless_edit[i]->proxy_url = eina_stringshare_ref(wc->proxy_url); - /* fuuuuck thiiiiiiis */ - for (ii = 0; ii < EINA_C_ARRAY_LENGTH(arrays); ii++) - { - unsigned int iii; - Eina_Stringshare *str; - Eina_Array_Iterator itr; - - if (!arrays[ii]) continue; - *arrays2[ii] = eina_array_new(eina_array_count(arrays[ii])); - EINA_ARRAY_ITER_NEXT(arrays[ii], iii, str, itr) - eina_array_push(*arrays2[ii], eina_stringshare_ref(str)); - } - } - _wireless_gadget_edit_array_entry(wc->domain_servers, &wireless_popup.domain_servers); - _wireless_gadget_edit_array_entry(wc->name_servers, &wireless_popup.name_servers); - _wireless_gadget_edit_array_entry(wc->time_servers, &wireless_popup.time_servers); - _wireless_gadget_edit_array_entry(wc->proxy_servers, &wireless_popup.proxy_servers); - _wireless_gadget_edit_array_entry(wc->proxy_excludes, &wireless_popup.proxy_excludes); - - wireless_popup.popup = popup = elm_popup_add(e_comp->elm); - evas_object_layer_set(popup, E_LAYER_MENU); - elm_popup_allow_events_set(popup, 1); - elm_popup_scrollable_set(popup, 1); - - box = elm_box_add(popup); - E_EXPAND(box); - E_FILL(box); - evas_object_show(box); - elm_object_content_set(popup, box); - - lbl = elm_label_add(box); - elm_object_style_set(lbl, "marker"); - evas_object_show(lbl); - if (wireless_popup.type == WIRELESS_SERVICE_TYPE_ETHERNET) - strncpy(buf, _("Edit Connection Details: Ethernet"), sizeof(buf) - 1); - else - snprintf(buf, sizeof(buf), "%s: %s", _("Edit Connection Details"), wc->wn->name); - elm_object_text_set(lbl, buf); - elm_box_pack_end(box, lbl); - - wireless_popup.box = box1 = elm_box_add(popup); - E_EXPAND(box1); - E_FILL(box1); - elm_box_horizontal_set(box1, 1); - evas_object_show(box1); - elm_box_pack_end(box, box1); - - list = elm_list_add(box1); - E_ALIGN(list, 0, EVAS_HINT_FILL); - E_WEIGHT(list, 0, EVAS_HINT_EXPAND); - elm_box_pack_end(box1, list); - elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_scroller_content_min_limit(list, 1, 1); - - entry = _wireless_gadget_edit_basic(); - it = elm_list_item_append(list, _("Basic"), NULL, NULL, _wireless_gadget_edit_select_basic, NULL); - elm_list_item_selected_set(it, 1); - elm_list_item_append(list, _("Proxy"), NULL, NULL, _wireless_gadget_edit_select_proxy, NULL); - elm_list_item_append(list, _("DNS/Time"), NULL, NULL, _wireless_gadget_edit_select_dnstime, NULL); - elm_list_item_append(list, _("Services"), NULL, NULL, _wireless_gadget_edit_select_services, NULL); - elm_list_go(list); - evas_object_show(list); - - if (wc->ipv6) - disabled = wc->method == WIRELESS_NETWORK_IPV4_METHOD_FIXED; - else - disabled = wc->method == WIRELESS_NETWORK_IPV6_METHOD_FIXED; - if (!disabled) - { - bt = elm_button_add(box); - E_EXPAND(bt); - E_FILL(bt); - evas_object_show(bt); - elm_object_text_set(bt, _("Deal with it")); - evas_object_smart_callback_add(bt, "clicked", _wireless_edit_send_button, NULL); - elm_box_pack_end(box, bt); - - bt = elm_button_add(box); - E_EXPAND(bt); - E_FILL(bt); - evas_object_show(bt); - elm_object_text_set(bt, _("Forget Network")); - evas_object_smart_callback_add(bt, "clicked", _wireless_edit_remove, NULL); - elm_box_pack_end(box, bt); - } - wireless_edit_popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); - evas_object_layer_set(wireless_edit_popup, E_LAYER_POPUP); - evas_object_resize(wireless_edit_popup, e_zone_current_get()->w / 3, e_zone_current_get()->h / 2); - e_comp_object_util_center(wireless_edit_popup); - evas_object_show(wireless_edit_popup); - e_comp_object_util_autoclose(wireless_edit_popup, NULL, _wireless_edit_key, NULL); - evas_object_event_callback_add(wireless_edit_popup, EVAS_CALLBACK_DEL, _wireless_edit_del, NULL); - elm_object_focus_set(entry, 1); - - return wireless_popup.popup; -} - -static void -_wireless_popup_network_click(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Wireless_Network *wn = data; - - if ((wn->state == WIRELESS_NETWORK_STATE_CONNECTED) || (wn->state == WIRELESS_NETWORK_STATE_ONLINE)) - { - int type = wireless_popup.type; - - evas_object_hide(wireless_popup.popup); - evas_object_del(wireless_popup.popup); - _wireless_gadget_edit(type); - } - else - { - /* FIXME */ - if (!wn->connect_cb(wn)) - {} - } -} - -static void -_wireless_popup_list_populate(void) -{ - Eina_Iterator *it; - Wireless_Network *wn; - - if (!wireless_networks) return; - it = eina_array_iterator_new(wireless_networks); - EINA_ITERATOR_FOREACH(it, wn) - { - Evas_Object *icon; - Elm_Object_Item *item; - const char *name = wn->name; - - if (wn->type != wireless_popup.type) continue; - icon = elm_layout_add(wireless_popup.content); - e_theme_edje_object_set(icon, NULL, wireless_theme_groups[wireless_popup.type]); - _wifi_icon_init(icon, wn, wn->type); - if (!name) - name = _("