enlightenment-module-desksa.../src/gadgets/demo.c

211 lines
6.5 KiB
C

#include "e_mod_main.h"
#include "gadget.h"
#include "bryce.h"
EINTERN Evas_Object *start_create(Evas_Object *parent, int *id EINA_UNUSED, Z_Gadget_Site_Orient orient);;
EINTERN void clock_init(void);
EINTERN void clock_shutdown(void);
EINTERN void ibar_init(void);
EINTERN void wireless_init(void);
static Eina_List *handlers;
static Evas_Object *rect;
static Eina_Bool added = 1;
static void
_gadget_desklock_del(void)
{
e_desklock_hide();
}
static void
_edit_end()
{
E_FREE_LIST(handlers, ecore_event_handler_del);
}
static Eina_Bool
_gadget_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev)
{
if (eina_streq(ev->key, "Escape"))
_gadget_desklock_del();
return ECORE_CALLBACK_DONE;
}
static void
_gadget_mouse_up_handler()
{
if (!added)
_gadget_desklock_del();
added = 0;
}
static void
_gadget_added()
{
added = 1;
}
static Eina_Bool
_gadget_desklock_handler(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Comp_Object *ev)
{
E_Notification_Notify n;
int w, h;
const char *name;
Evas_Object *site, *editor, *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, E_LAYER_POPUP - 1);
site = z_gadget_site_auto_add(Z_GADGET_SITE_ORIENT_NONE, name);
evas_object_smart_callback_add(site, "gadget_added", _gadget_added, NULL);
evas_object_layer_set(site, E_LAYER_POPUP);
editor = z_gadget_editor_add(e_comp->elm, site);
comp_object = e_comp_object_util_add(editor, E_COMP_OBJECT_TYPE_POPUP);
evas_object_resize(comp_object, 300 * e_scale, 300 * e_scale);
e_comp_object_util_center(comp_object);
evas_object_layer_set(comp_object, E_LAYER_POPUP);
evas_object_show(comp_object);
evas_object_size_hint_min_get(editor, &w, &h);
evas_object_resize(comp_object, 300 * e_scale, h * e_scale);
e_comp_object_util_center(comp_object);
e_comp_object_util_del_list_append(ev->comp_object, comp_object);
e_comp_object_util_del_list_append(ev->comp_object, rect);
memset(&n, 0, sizeof(E_Notification_Notify));
n.timeout = 3000;
n.summary = _("Lockscreen Gadgets");
n.body = _("Press Escape or click the background to exit.");
n.urgency = E_NOTIFICATION_NOTIFY_URGENCY_NORMAL;
e_notification_client_send(&n, NULL, NULL);
return ECORE_CALLBACK_RENEW;
}
static void
_gadget_conf()
{
rect = evas_object_rectangle_add(e_comp->evas);
evas_object_event_callback_add(rect, EVAS_CALLBACK_DEL, _edit_end, NULL);
evas_object_color_set(rect, 0, 0, 0, 0);
evas_object_resize(rect, e_comp->w, e_comp->h);
evas_object_layer_set(rect, E_LAYER_POPUP);
evas_object_show(rect);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMP_OBJECT_ADD, _gadget_desklock_handler, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_KEY_DOWN, _gadget_key_handler, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _gadget_mouse_up_handler, NULL);
e_desklock_demo();
}
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);
evas_object_hide(data);
evas_object_del(data);
}
static Eina_Bool
_bryce_editor_key_down()
{
return EINA_TRUE;
}
static void
_bryce_conf()
{
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 = z_bryce_editor_add(e_comp->elm);
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, _bryce_editor_key_down, NULL);
}
static void
_gadget_menu(void *d EINA_UNUSED, E_Menu *m)
{
E_Menu_Item *mi;
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Lockscreen Gadgets"));
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper");
e_menu_item_callback_set(mi, _gadget_conf, NULL);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Bryces"));
//e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper");
e_menu_item_callback_set(mi, _bryce_conf, NULL);
}
EINTERN void
gadget_demo(void)
{
Evas_Object *b, *site;
if (!eina_streq(getenv("USER"), "cedric")) return;
z_gadget_type_add("Start", start_create);
clock_init();
ibar_init();
wireless_init();
z_gadget_init();
z_bryce_init();
if (!e_config->null_container_win)
{
Eina_List *l;
E_Config_Binding_Mouse *ebm;
e_module_disable(e_module_find("connman"));
EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm)
{
if (eina_streq(ebm->action, "window_move"))
{
e_bindings_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_bindings_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_bindings_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
ebm->any_mod, "gadget_menu", NULL);
e_bindings_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
ebm->any_mod, "bryce_menu", NULL);
}
}
e_bindings_wheel_add(E_BINDING_CONTEXT_ANY, 0, 1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL);
e_bindings_wheel_add(E_BINDING_CONTEXT_ANY, 0, -1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL);
e_config->null_container_win = 1;
ecore_job_add(_bryce_conf, NULL);
e_config_save_queue();
}
//b = z_bryce_add(e_comp->elm, "demo");
//site = z_bryce_site_get(b);
//z_gadget_site_gadget_add(site, "Start", 0);
//z_gadget_site_gadget_add(site, "Clock", 0);
//z_gadget_site_gadget_add(site, "IBar", 0);
//z_bryce_autosize_set(b, 1);
//z_bryce_autohide_set(b, 1);
e_int_menus_menu_augmentation_add_sorted("config/1", "Gadgets 2.0", _gadget_menu, NULL, NULL, NULL);
}