2008-05-18 21:37:34 -07:00
|
|
|
#include <e.h>
|
|
|
|
#include "e_mod_main.h"
|
|
|
|
#include "e_mod_gadman.h"
|
|
|
|
#include "e_mod_config.h"
|
|
|
|
|
|
|
|
/* local protos */
|
2012-07-02 03:13:27 -07:00
|
|
|
static void _attach_menu(void *data, E_Gadcon_Client *gcc, E_Menu *menu);
|
|
|
|
static void _save_widget_position(E_Gadcon_Client *gcc);
|
|
|
|
static void _apply_widget_position(E_Gadcon_Client *gcc);
|
|
|
|
static char *_get_bind_text(const char *action);
|
|
|
|
static void _on_menu_layer(E_Gadcon_Client *gcc, Gadman_Layer_Type layer);
|
2011-01-11 00:44:19 -08:00
|
|
|
static E_Gadcon_Client *_gadman_gadget_add(const E_Gadcon_Client_Class *cc, Gadman_Layer_Type layer, E_Config_Gadcon_Client *src_cf);
|
2008-05-18 21:37:34 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
static Evas_Object *_create_mover(E_Gadcon *gc);
|
|
|
|
static Evas_Object *_get_mover(E_Gadcon_Client *gcc);
|
|
|
|
static E_Gadcon *_gadman_gadcon_new(const char *name, Gadman_Layer_Type layer, E_Zone *zone, E_Gadcon_Location *loc);
|
|
|
|
|
|
|
|
static void on_shape_change(void *data, E_Container_Shape *es, E_Container_Shape_Change ch);
|
|
|
|
|
|
|
|
static void on_top(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
static void on_right(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
static void on_down(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
static void on_left(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
static void on_move(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
|
|
|
|
static void on_frame_click(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void on_bg_click(void *data, Evas_Object *o, const char *em, const char *src);
|
|
|
|
static void on_hide_stop(void *data __UNUSED__, Evas_Object *o __UNUSED__,
|
|
|
|
const char *em __UNUSED__, const char *src __UNUSED__);
|
|
|
|
|
|
|
|
static void on_menu_style_plain(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_style_inset(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_style_float(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_style_horiz(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_style_vert(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_layer_bg(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_layer_top(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
static void on_menu_add(void *data, E_Menu *m, E_Menu_Item *mi);
|
|
|
|
|
2012-07-02 06:28:13 -07:00
|
|
|
static Eina_Bool _gadman_module_cb(void *d __UNUSED__, int type __UNUSED__, E_Event_Module_Update *ev);
|
2012-07-02 03:13:27 -07:00
|
|
|
static int _e_gadman_client_add(void *data __UNUSED__, const E_Gadcon_Client_Class *cc);
|
|
|
|
static void _e_gadman_client_remove(void *data __UNUSED__, E_Gadcon_Client *gcc);
|
|
|
|
|
|
|
|
static void _e_gadman_handlers_add(void);
|
|
|
|
static void _e_gadman_handler_del(void);
|
|
|
|
static Eina_Bool _e_gadman_cb_zone_add(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _e_gadman_cb_zone_del(void *data __UNUSED__, int type __UNUSED__, void *event);
|
2012-07-27 00:22:57 -07:00
|
|
|
static E_Gadcon_Client *gadman_gadget_place(E_Config_Gadcon_Client *cf, Gadman_Layer_Type layer, E_Zone *zone);
|
|
|
|
static void gadman_gadget_del(E_Gadcon_Client *gcc);
|
|
|
|
static E_Gadcon *gadman_gadcon_get(const E_Zone *zone, Gadman_Layer_Type layer);
|
2012-06-13 02:37:22 -07:00
|
|
|
|
2009-01-13 15:21:49 -08:00
|
|
|
E_Gadcon_Client *current = NULL;
|
|
|
|
Manager *Man = NULL;
|
2012-01-18 14:10:43 -08:00
|
|
|
static E_Gadcon_Location *location = NULL;
|
2012-06-13 02:37:22 -07:00
|
|
|
static Eina_List *_gadman_hdls = NULL;
|
2012-07-02 06:28:13 -07:00
|
|
|
static Eina_Hash *_gadman_gadgets = NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
/* Implementation */
|
|
|
|
void
|
|
|
|
gadman_init(E_Module *m)
|
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
const Eina_List *l;
|
|
|
|
E_Zone *zone;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Create Manager */
|
|
|
|
Man = calloc(1, sizeof(Manager));
|
|
|
|
if (!Man) return;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
Man->module = m;
|
|
|
|
Man->container = e_container_current_get(e_manager_current_get());
|
|
|
|
Man->width = Man->container->w;
|
|
|
|
Man->height = Man->container->h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Check if composite is enable */
|
|
|
|
if (ecore_x_screen_is_composited(0) || e_config->use_composite)
|
2008-05-19 02:21:44 -07:00
|
|
|
Man->use_composite = 1;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* with this we can trap screen resolution change (a better way?)*/
|
|
|
|
e_container_shape_change_callback_add(Man->container, on_shape_change, NULL);
|
|
|
|
|
2009-08-31 04:23:03 -07:00
|
|
|
/* create and register "desktop" location */
|
2012-07-02 03:13:27 -07:00
|
|
|
location = e_gadcon_location_new("Desktop", E_GADCON_SITE_DESKTOP,
|
|
|
|
_e_gadman_client_add, NULL,
|
|
|
|
_e_gadman_client_remove, NULL);
|
2009-08-31 04:23:03 -07:00
|
|
|
e_gadcon_location_set_icon_name(location, "preferences-desktop");
|
|
|
|
e_gadcon_location_register(location);
|
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
/* iterating through zones - and making gadmans on each */
|
|
|
|
EINA_LIST_FOREACH(Man->container->zones, l, zone)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
const char *layer_name[] = {"gadman", "gadman_top"};
|
|
|
|
unsigned int layer;
|
2008-05-18 21:37:34 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
|
|
|
E_Gadcon *gc;
|
2010-05-23 14:38:29 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
gc = _gadman_gadcon_new(layer_name[layer], layer, zone, location);
|
|
|
|
Man->gadcons[layer] = eina_list_append(Man->gadcons[layer], gc);
|
|
|
|
}
|
2009-07-11 13:46:55 -07:00
|
|
|
}
|
2012-06-13 02:37:22 -07:00
|
|
|
|
2012-07-02 06:28:13 -07:00
|
|
|
_gadman_gadgets = eina_hash_string_superfast_new(NULL);
|
2012-06-13 02:37:22 -07:00
|
|
|
_e_gadman_handlers_add();
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gadman_shutdown(void)
|
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Gadcon *gc;
|
|
|
|
unsigned int layer;
|
|
|
|
|
2012-06-13 02:37:22 -07:00
|
|
|
_e_gadman_handler_del();
|
2012-07-02 03:13:27 -07:00
|
|
|
|
2009-08-31 04:23:03 -07:00
|
|
|
e_gadcon_location_unregister(location);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_container_shape_change_callback_del(Man->container, on_shape_change, NULL);
|
2008-08-03 14:20:09 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
EINA_LIST_FREE(Man->gadcons[layer], gc)
|
|
|
|
{
|
|
|
|
e_gadcon_unpopulate(gc);
|
|
|
|
e_gadcon_custom_del(gc);
|
2009-07-11 13:46:55 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
/* free gadcons */
|
|
|
|
e_config->gadcons = eina_list_remove(e_config->gadcons, gc);
|
|
|
|
eina_stringshare_del(gc->name);
|
2009-07-11 13:46:55 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
if (gc->config_dialog) e_object_del(E_OBJECT(gc->config_dialog));
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
evas_object_del(Man->movers[layer]);
|
2009-07-11 13:46:55 -07:00
|
|
|
}
|
2008-11-10 07:47:25 -08:00
|
|
|
|
2008-10-15 08:12:56 -07:00
|
|
|
if (Man->icon_name) eina_stringshare_del(Man->icon_name);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* free manager */
|
|
|
|
if (Man->top_ee)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
e_canvas_del(Man->top_ee);
|
|
|
|
//ecore_evas_free(Man->top_ee);
|
|
|
|
}
|
2012-07-02 06:28:13 -07:00
|
|
|
if (_gadman_gadgets)
|
|
|
|
{
|
|
|
|
eina_hash_free_cb_set(_gadman_gadgets, EINA_FREE_CB(eina_list_free));
|
|
|
|
eina_hash_free(_gadman_gadgets);
|
|
|
|
}
|
|
|
|
_gadman_gadgets = NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
free(Man);
|
2010-12-20 19:03:51 -08:00
|
|
|
Man = NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
2008-11-11 17:14:18 -08:00
|
|
|
void
|
|
|
|
gadman_populate_class(void *data, E_Gadcon *gc, const E_Gadcon_Client_Class *cc)
|
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
Gadman_Layer_Type layer = (Gadman_Layer_Type)(long)data;
|
2012-07-26 05:48:11 -07:00
|
|
|
const Eina_List *l;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Config_Gadcon_Client *cf_gcc;
|
2009-09-06 05:21:27 -07:00
|
|
|
E_Gadcon_Client *gcc = NULL;
|
2008-11-11 17:14:18 -08:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
EINA_LIST_FOREACH(gc->cf->clients, l, cf_gcc)
|
2008-11-11 17:14:18 -08:00
|
|
|
{
|
2012-02-14 20:35:18 -08:00
|
|
|
if (cf_gcc->name && cc->name && !strcmp(cf_gcc->name, cc->name) && (gc->cf->zone == gc->zone->num))
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
gcc = e_gadcon_client_find(cf_gcc);
|
|
|
|
if (!gcc)
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
gadman_gadget_place(cf_gcc, layer, gc->zone);
|
|
|
|
break;
|
2012-07-02 03:13:27 -07:00
|
|
|
}
|
2012-07-26 05:48:11 -07:00
|
|
|
if ((gcc->cf) && (gcc->cf->id) && (cf_gcc->id))
|
|
|
|
if (gcc->cf->id == cf_gcc->id) break;
|
2012-07-02 03:13:27 -07:00
|
|
|
}
|
2008-11-11 17:14:18 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-07-27 00:22:57 -07:00
|
|
|
static E_Gadcon *
|
2009-07-11 13:46:55 -07:00
|
|
|
gadman_gadcon_get(const E_Zone *zone, Gadman_Layer_Type layer)
|
|
|
|
{
|
|
|
|
const Eina_List *l;
|
|
|
|
E_Gadcon *gc;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(Man->gadcons[layer], l, gc)
|
|
|
|
if (gc->zone == zone) return gc;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2012-07-27 00:22:57 -07:00
|
|
|
static E_Gadcon_Client *
|
2009-07-11 13:46:55 -07:00
|
|
|
gadman_gadget_place(E_Config_Gadcon_Client *cf, Gadman_Layer_Type layer, E_Zone *zone)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
const Eina_List *l;
|
2008-05-18 21:37:34 -07:00
|
|
|
E_Gadcon *gc;
|
|
|
|
E_Gadcon_Client *gcc;
|
|
|
|
E_Gadcon_Client_Class *cc = NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
if (!cf->name) return NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
gc = gadman_gadcon_get(zone, layer);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Find provider */
|
2009-07-11 13:46:55 -07:00
|
|
|
EINA_LIST_FOREACH(e_gadcon_provider_list(), l, cc)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
if (!strcmp(cc->name, cf->name))
|
2008-05-19 02:21:44 -07:00
|
|
|
break;
|
2008-05-18 21:37:34 -07:00
|
|
|
else
|
2008-05-19 02:21:44 -07:00
|
|
|
cc = NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
if (!cc) return NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* init Gadcon_Client */
|
|
|
|
gcc = cc->func.init(gc, cf->name, cf->id, cc->default_style);
|
2008-12-06 13:01:15 -08:00
|
|
|
if (!gcc) return NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
gcc->cf = cf;
|
|
|
|
gcc->client_class = cc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2012-07-26 05:48:11 -07:00
|
|
|
Man->gadgets[layer] = eina_list_append(Man->gadgets[layer], cf);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
//printf("Place Gadget %s (style: %s id: %s) (gadcon: %s)\n", gcc->name, cf->style, cf->id, gc->name);
|
|
|
|
|
|
|
|
/* create frame */
|
|
|
|
gcc->o_frame = edje_object_add(gc->evas);
|
|
|
|
e_theme_edje_object_set(gcc->o_frame, "base/theme/gadman", "e/gadman/frame");
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
if ((cf->style) && (!strcmp(cf->style, E_GADCON_CLIENT_STYLE_INSET)))
|
|
|
|
edje_object_signal_emit(gcc->o_frame, "e,state,visibility,inset", "e");
|
2008-05-18 21:37:34 -07:00
|
|
|
else
|
2008-05-19 02:21:44 -07:00
|
|
|
edje_object_signal_emit(gcc->o_frame, "e,state,visibility,plain", "e");
|
2008-10-10 17:59:21 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* swallow the client inside the frame */
|
|
|
|
edje_object_part_swallow(gcc->o_frame, "e.swallow.content", gcc->o_base);
|
2012-07-02 03:13:27 -07:00
|
|
|
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_DOWN,
|
2008-05-18 21:37:34 -07:00
|
|
|
on_frame_click, gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-11-05 16:20:42 -08:00
|
|
|
/* Call the client orientation function */
|
|
|
|
if (cc->func.orient)
|
2010-05-23 14:38:29 -07:00
|
|
|
cc->func.orient(gcc, gcc->cf->orient);
|
2008-11-05 16:20:42 -08:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
_apply_widget_position(gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
if (gcc->gadcon->id == ID_GADMAN_LAYER_TOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
edje_object_signal_emit(gcc->o_frame, "e,state,visibility,hide", "e");
|
2012-07-02 06:28:13 -07:00
|
|
|
if (cc->name)
|
|
|
|
{
|
|
|
|
Eina_List *l;
|
|
|
|
l = eina_hash_find(_gadman_gadgets, cc->name);
|
2012-07-26 07:00:20 -07:00
|
|
|
eina_hash_set(_gadman_gadgets, cc->name, eina_list_append(l, gcc->cf));
|
2012-07-02 06:28:13 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
evas_object_show(gcc->o_frame);
|
|
|
|
|
|
|
|
return gcc;
|
|
|
|
}
|
|
|
|
|
|
|
|
E_Gadcon_Client *
|
2009-08-31 04:23:03 -07:00
|
|
|
gadman_gadget_add(const E_Gadcon_Client_Class *cc, Gadman_Layer_Type layer)
|
2011-01-11 00:44:19 -08:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
return _gadman_gadget_add(cc, layer, NULL);
|
2011-01-11 00:44:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static E_Gadcon_Client *
|
|
|
|
_gadman_gadget_add(const E_Gadcon_Client_Class *cc, Gadman_Layer_Type layer, E_Config_Gadcon_Client *src_cf)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
E_Config_Gadcon_Client *cf = NULL;
|
2010-08-19 12:18:43 -07:00
|
|
|
E_Gadcon_Client *gcc = NULL;
|
2008-05-18 21:37:34 -07:00
|
|
|
E_Gadcon *gc;
|
2008-11-04 16:47:28 -08:00
|
|
|
int w, h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
gc = gadman_gadcon_get(e_util_zone_current_get(e_manager_current_get()),
|
|
|
|
layer);
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
/* Create Config_Gadcon_Client */
|
|
|
|
cf = e_gadcon_client_config_new(gc, cc->name);
|
2012-07-02 03:13:27 -07:00
|
|
|
if (cf)
|
2010-05-23 14:38:29 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (!src_cf)
|
|
|
|
{
|
|
|
|
cf->style = eina_stringshare_add(cc->default_style);
|
|
|
|
cf->geom.pos_x = DEFAULT_POS_X;
|
|
|
|
cf->geom.pos_y = DEFAULT_POS_Y;
|
|
|
|
cf->geom.size_w = DEFAULT_SIZE_W;
|
|
|
|
cf->geom.size_h = DEFAULT_SIZE_H;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
cf->style = eina_stringshare_add(src_cf->style);
|
|
|
|
cf->geom.pos_x = src_cf->geom.pos_x;
|
|
|
|
cf->geom.pos_y = src_cf->geom.pos_y;
|
|
|
|
cf->geom.size_w = src_cf->geom.size_w;
|
|
|
|
cf->geom.size_h = src_cf->geom.size_h;
|
|
|
|
}
|
2010-05-23 14:38:29 -07:00
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Place the new gadget */
|
2010-05-23 14:38:29 -07:00
|
|
|
if (cf)
|
|
|
|
gcc = gadman_gadget_place(cf, layer, gc->zone);
|
|
|
|
if (!gcc) return NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-11-04 16:47:28 -08:00
|
|
|
/* Respect Aspect */
|
|
|
|
evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h);
|
|
|
|
if (gcc->aspect.w && gcc->aspect.h)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (gcc->aspect.w > gcc->aspect.h)
|
|
|
|
w = ((float)h / (float)gcc->aspect.h) * (gcc->aspect.w);
|
|
|
|
else
|
|
|
|
h = ((float)w / (float)gcc->aspect.w) * (gcc->aspect.h);
|
|
|
|
if (h < gcc->min.h) h = gcc->min.h;
|
|
|
|
if (w < gcc->min.w) w = gcc->min.w;
|
|
|
|
evas_object_resize(gcc->o_frame, w, h);
|
2008-11-04 16:47:28 -08:00
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
return gcc;
|
|
|
|
}
|
|
|
|
|
2012-07-27 00:22:57 -07:00
|
|
|
static void
|
2008-05-18 21:37:34 -07:00
|
|
|
gadman_gadget_del(E_Gadcon_Client *gcc)
|
|
|
|
{
|
2012-07-26 07:00:20 -07:00
|
|
|
Gadman_Layer_Type layer;
|
2012-07-02 06:28:13 -07:00
|
|
|
Eina_List *l;
|
|
|
|
|
2012-07-26 07:00:20 -07:00
|
|
|
if (!gcc) return;
|
|
|
|
layer = gcc->gadcon->id - ID_GADMAN_LAYER_BASE;
|
2010-05-23 14:38:29 -07:00
|
|
|
// edje_object_part_unswallow(gcc->o_frame, gcc->o_base);
|
2012-07-26 07:00:20 -07:00
|
|
|
if (gcc->cf)
|
|
|
|
{
|
|
|
|
Man->gadgets[layer] = eina_list_remove(Man->gadgets[layer], gcc->cf);
|
|
|
|
l = eina_hash_find(_gadman_gadgets, gcc->name);
|
|
|
|
eina_hash_set(_gadman_gadgets, gcc->name, eina_list_remove(l, gcc->cf));
|
|
|
|
e_gadcon_client_config_del(gcc->gadcon->cf, gcc->cf);
|
|
|
|
gcc->cf = NULL;
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
e_object_del(E_OBJECT(gcc));
|
|
|
|
current = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gadman_gadget_edit_start(E_Gadcon_Client *gcc)
|
|
|
|
{
|
|
|
|
E_Gadcon *gc;
|
2008-05-19 02:21:44 -07:00
|
|
|
Evas_Object *mover;
|
|
|
|
int x, y, w, h;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
current = gcc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
gc = gcc->gadcon;
|
|
|
|
gc->editing = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Move/resize the correct mover */
|
|
|
|
evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h);
|
|
|
|
mover = _get_mover(gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
evas_object_move(mover, x, y);
|
|
|
|
evas_object_resize(mover, w, h);
|
|
|
|
evas_object_raise(mover);
|
|
|
|
evas_object_show(mover);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2010-08-19 12:18:43 -07:00
|
|
|
gadman_gadget_edit_end(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
unsigned int layer;
|
|
|
|
|
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
const Eina_List *l;
|
|
|
|
E_Gadcon *gc;
|
2009-07-11 13:46:55 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
evas_object_hide(Man->movers[layer]);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
EINA_LIST_FOREACH(Man->gadcons[layer], l, gc)
|
|
|
|
gc->editing = 0;
|
2009-07-11 13:46:55 -07:00
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-08-03 12:29:04 -07:00
|
|
|
if (current) _save_widget_position(current);
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gadman_gadgets_show(void)
|
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
Eina_List *l, *ll;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Gadcon_Client *gcc;
|
2012-07-26 05:48:11 -07:00
|
|
|
E_Config_Gadcon_Client *cf_gcc;
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
Man->visible = 1;
|
|
|
|
ecore_evas_show(Man->top_ee);
|
2012-07-02 03:13:27 -07:00
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
if (Man->conf->bg_type == BG_STD)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_bg)
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,show", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,show,now", "e");
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_bg)
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,show,custom", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,show,custom,now", "e");
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
/* Showing top gadgets */
|
2012-07-26 05:48:11 -07:00
|
|
|
EINA_LIST_FOREACH_SAFE(Man->gadgets[GADMAN_LAYER_TOP], l, ll, cf_gcc)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
gcc = e_gadcon_client_find(cf_gcc);
|
|
|
|
if (!gcc)
|
|
|
|
{
|
|
|
|
Man->gadgets[GADMAN_LAYER_TOP] = eina_list_remove_list(Man->gadgets[GADMAN_LAYER_TOP], l);
|
|
|
|
continue;
|
|
|
|
}
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_gad)
|
|
|
|
edje_object_signal_emit(gcc->o_frame,
|
|
|
|
"e,state,visibility,show", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(gcc->o_frame,
|
|
|
|
"e,state,visibility,show,now", "e");
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
void
|
|
|
|
gadman_gadgets_hide(void)
|
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
Eina_List *l, *ll;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Gadcon_Client *gcc;
|
2012-07-26 05:48:11 -07:00
|
|
|
E_Config_Gadcon_Client *cf_gcc;
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
Man->visible = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-09-13 13:11:25 -07:00
|
|
|
if (Man->conf->bg_type == BG_STD)
|
2008-10-10 17:59:21 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_bg)
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,hide", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,hide", "e");
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_bg)
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,hide,custom", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(Man->full_bg,
|
|
|
|
"e,state,visibility,hide,custom,now", "e");
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
/* Hiding top gadgets */
|
2012-07-26 05:48:11 -07:00
|
|
|
EINA_LIST_FOREACH_SAFE(Man->gadgets[GADMAN_LAYER_TOP], l, ll, cf_gcc)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
gcc = e_gadcon_client_find(cf_gcc);
|
|
|
|
if (!gcc)
|
|
|
|
{
|
|
|
|
Man->gadgets[GADMAN_LAYER_TOP] = eina_list_remove_list(Man->gadgets[GADMAN_LAYER_TOP], l);
|
|
|
|
continue;
|
|
|
|
}
|
2012-07-02 03:13:27 -07:00
|
|
|
if (Man->conf->anim_gad)
|
|
|
|
edje_object_signal_emit(gcc->o_frame,
|
|
|
|
"e,state,visibility,hide", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(gcc->o_frame,
|
|
|
|
"e,state,visibility,hide,now", "e");
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
void
|
|
|
|
gadman_gadgets_toggle(void)
|
|
|
|
{
|
|
|
|
if (Man->visible)
|
2008-05-19 02:21:44 -07:00
|
|
|
gadman_gadgets_hide();
|
2008-05-18 21:37:34 -07:00
|
|
|
else
|
2008-05-19 02:21:44 -07:00
|
|
|
gadman_gadgets_show();
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
void
|
|
|
|
gadman_update_bg(void)
|
|
|
|
{
|
|
|
|
Evas_Object *obj;
|
|
|
|
const char *ext;
|
|
|
|
|
|
|
|
obj = edje_object_part_swallow_get(Man->full_bg, "e.swallow.bg");
|
|
|
|
if (obj)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
edje_object_part_unswallow(Man->full_bg, obj);
|
|
|
|
evas_object_del(obj);
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
switch (Man->conf->bg_type)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
case BG_STD:
|
|
|
|
case BG_TRANS:
|
|
|
|
break;
|
|
|
|
|
|
|
|
case BG_COLOR:
|
|
|
|
obj = evas_object_rectangle_add(Man->gc_top->evas);
|
|
|
|
evas_object_color_set(obj, Man->conf->color_r, Man->conf->color_g,
|
|
|
|
Man->conf->color_b, 200);
|
|
|
|
edje_object_part_swallow(Man->full_bg, "e.swallow.bg", obj);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case BG_CUSTOM:
|
|
|
|
ext = strrchr(Man->conf->custom_bg, '.');
|
|
|
|
if (!strcmp(ext, ".edj") || !strcmp(ext, ".EDJ"))
|
|
|
|
{
|
|
|
|
//THIS IS FOR E17 backgrounds
|
|
|
|
obj = edje_object_add(Man->gc_top->evas);
|
|
|
|
edje_object_file_set(obj, Man->conf->custom_bg,
|
|
|
|
"e/desktop/background");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//THIS IS FOR A NORMAL IMAGE
|
|
|
|
obj = evas_object_image_add(Man->gc_top->evas);
|
|
|
|
evas_object_image_file_set(obj, Man->conf->custom_bg, NULL);
|
|
|
|
evas_object_image_fill_set(obj, 0, 0, Man->container->w,
|
|
|
|
Man->container->h);
|
|
|
|
}
|
|
|
|
edje_object_part_swallow(Man->full_bg, "e.swallow.bg", obj);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
2008-10-10 17:59:21 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Internals */
|
2012-07-02 03:13:27 -07:00
|
|
|
static E_Gadcon *
|
|
|
|
_gadman_gadcon_new(const char *name, Gadman_Layer_Type layer, E_Zone *zone, E_Gadcon_Location *loc)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
const Eina_List *l;
|
2008-05-18 21:37:34 -07:00
|
|
|
E_Gadcon *gc;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Config_Gadcon *cg;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Create Gadcon */
|
|
|
|
gc = E_OBJECT_ALLOC(E_Gadcon, E_GADCON_TYPE, NULL);
|
|
|
|
if (!gc) return NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-10-15 08:12:56 -07:00
|
|
|
gc->name = eina_stringshare_add(name);
|
2008-05-18 21:37:34 -07:00
|
|
|
gc->layout_policy = E_GADCON_LAYOUT_POLICY_PANEL;
|
|
|
|
gc->orient = E_GADCON_ORIENT_FLOAT;
|
2009-08-31 04:23:03 -07:00
|
|
|
gc->location = loc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Create ecore fullscreen window */
|
2009-07-11 13:46:55 -07:00
|
|
|
if (layer > GADMAN_LAYER_BG)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
if (!Man->top_ee)
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
|
|
|
Man->top_ee = e_canvas_new(Man->container->win, 0, 0, 0, 0, 1, 1,
|
|
|
|
&(Man->top_win));
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
if (Man->use_composite)
|
|
|
|
{
|
|
|
|
ecore_evas_alpha_set(Man->top_ee, 1);
|
|
|
|
Man->top_win = ecore_evas_software_x11_window_get(Man->top_ee);
|
2008-10-10 17:59:21 -07:00
|
|
|
ecore_x_window_shape_rectangle_set(Man->top_win, 0, 0,
|
|
|
|
Man->width, Man->height);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
ecore_evas_shaped_set(Man->top_ee, 1);
|
|
|
|
|
|
|
|
e_canvas_add(Man->top_ee); //??
|
|
|
|
e_container_window_raise(Man->container, Man->top_win, 250);
|
|
|
|
|
|
|
|
ecore_evas_move_resize(Man->top_ee, 0, 0, Man->width, Man->height);
|
|
|
|
ecore_evas_hide(Man->top_ee);
|
|
|
|
|
|
|
|
gc->evas = ecore_evas_get(Man->top_ee);
|
|
|
|
e_gadcon_ecore_evas_set(gc, Man->top_ee);
|
|
|
|
|
|
|
|
/* create full background object */
|
|
|
|
Man->full_bg = edje_object_add(gc->evas);
|
2008-10-10 17:59:21 -07:00
|
|
|
e_theme_edje_object_set(Man->full_bg, "base/theme/gadman",
|
2008-05-19 02:21:44 -07:00
|
|
|
"e/gadman/full_bg");
|
2008-10-10 17:59:21 -07:00
|
|
|
edje_object_signal_callback_add(Man->full_bg, "mouse,down,*",
|
|
|
|
"grabber", on_bg_click, NULL);
|
2008-10-23 00:15:44 -07:00
|
|
|
edje_object_signal_callback_add(Man->full_bg, "e,action,hide,stop",
|
|
|
|
"", on_hide_stop, NULL);
|
2012-07-02 03:13:27 -07:00
|
|
|
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_object_move(Man->full_bg, 0, 0);
|
|
|
|
evas_object_resize(Man->full_bg, Man->width, Man->height);
|
|
|
|
evas_object_show(Man->full_bg);
|
2012-05-12 22:14:02 -07:00
|
|
|
|
|
|
|
e_drop_xdnd_register_set(Man->top_win, 1);
|
|
|
|
e_gadcon_xdnd_window_set(gc, Man->top_win);
|
|
|
|
e_gadcon_dnd_window_set(gc, Man->top_win);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
/* ... or use the e background window */
|
|
|
|
else
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
gc->evas = Man->container->bg_evas;
|
|
|
|
e_gadcon_ecore_evas_set(gc, Man->container->bg_ecore_evas);
|
2008-06-24 14:34:20 -07:00
|
|
|
e_gadcon_xdnd_window_set(gc, Man->container->bg_win);
|
2008-06-12 15:51:44 -07:00
|
|
|
e_gadcon_dnd_window_set(gc, Man->container->event_win);
|
|
|
|
e_drop_xdnd_register_set(Man->container->bg_win, 1);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
e_gadcon_zone_set(gc, zone);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_gadcon_util_menu_attach_func_set(gc, _attach_menu, NULL);
|
2012-07-02 03:13:27 -07:00
|
|
|
e_gadcon_populate_callback_set(gc, gadman_populate_class, (void *)layer);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
gc->id = ID_GADMAN_LAYER_BASE + layer;
|
2008-05-18 21:37:34 -07:00
|
|
|
gc->edje.o_parent = NULL;
|
|
|
|
gc->edje.swallow_name = NULL;
|
|
|
|
gc->shelf = NULL;
|
|
|
|
gc->toolbar = NULL;
|
|
|
|
gc->editing = 0;
|
|
|
|
gc->o_container = NULL;
|
|
|
|
gc->frame_request.func = NULL;
|
|
|
|
gc->resize_request.func = NULL;
|
|
|
|
gc->min_size_request.func = NULL;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Search for existing gadcon config */
|
|
|
|
gc->cf = NULL;
|
2009-07-11 13:46:55 -07:00
|
|
|
EINA_LIST_FOREACH(e_config->gadcons, l, cg)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-02-14 20:35:18 -08:00
|
|
|
if ((!strcmp(cg->name, name)) && (cg->zone == zone->num))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
gc->cf = cg;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* ... or create a new one */
|
|
|
|
if (!gc->cf)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
gc->cf = E_NEW(E_Config_Gadcon, 1);
|
2008-10-15 08:12:56 -07:00
|
|
|
gc->cf->name = eina_stringshare_add(name);
|
2008-05-19 02:21:44 -07:00
|
|
|
gc->cf->id = gc->id;
|
2012-02-14 20:35:18 -08:00
|
|
|
gc->cf->zone = zone->num;
|
2008-05-19 02:21:44 -07:00
|
|
|
gc->cf->clients = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
e_config->gadcons = eina_list_append(e_config->gadcons, gc->cf);
|
2008-05-19 02:21:44 -07:00
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
|
2008-11-10 07:47:25 -08:00
|
|
|
e_gadcon_custom_new(gc);
|
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
if (!Man->movers[layer])
|
|
|
|
Man->movers[layer] = _create_mover(gc);
|
|
|
|
|
|
|
|
/* Assigning top gadcon - needed in gadman_update_bg() */
|
|
|
|
if ((layer > GADMAN_LAYER_BG) && !Man->gc_top)
|
|
|
|
Man->gc_top = gc;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
return gc;
|
|
|
|
}
|
|
|
|
|
2008-05-19 02:21:44 -07:00
|
|
|
static Evas_Object *
|
2008-05-18 21:37:34 -07:00
|
|
|
_create_mover(E_Gadcon *gc)
|
|
|
|
{
|
|
|
|
Evas_Object *mover;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* create mover object */
|
|
|
|
mover = edje_object_add(gc->evas);
|
|
|
|
e_theme_edje_object_set(mover, "base/theme/gadman", "e/gadman/control");
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-11-02 01:46:45 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,move,start", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_move, (void *)DRAG_START);
|
2008-11-02 01:46:45 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,move,stop", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_move, (void *)DRAG_STOP);
|
2008-11-02 01:46:45 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,move,go", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_move, (void *)DRAG_MOVE);
|
2008-05-18 21:37:34 -07:00
|
|
|
edje_object_signal_callback_add(mover, "mouse,down,3", "overlay",
|
|
|
|
gadman_gadget_edit_end, NULL);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,left,start", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_left, (void *)DRAG_START);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,left,stop", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_left, (void *)DRAG_STOP);
|
2008-11-02 07:32:13 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,left,go", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_left, (void *)DRAG_MOVE);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,down,start", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_down, (void *)DRAG_START);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,down,stop", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_down, (void *)DRAG_STOP);
|
2008-11-02 07:32:13 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,down,go", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_down, (void *)DRAG_MOVE);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,right,start", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_right, (void *)DRAG_START);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,right,stop", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_right, (void *)DRAG_STOP);
|
2008-11-02 07:32:13 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,right,go", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_right, (void *)DRAG_MOVE);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,up,start", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_top, (void *)DRAG_START);
|
2008-11-02 02:24:42 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,up,stop", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_top, (void *)DRAG_STOP);
|
2008-11-02 07:32:13 -08:00
|
|
|
edje_object_signal_callback_add(mover, "e,action,resize,up,go", "",
|
2012-07-02 03:13:27 -07:00
|
|
|
on_top, (void *)DRAG_MOVE);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
evas_object_move(mover, 20, 30);
|
|
|
|
evas_object_resize(mover, 100, 100);
|
|
|
|
evas_object_hide(mover);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
return mover;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_get_mover(E_Gadcon_Client *gcc)
|
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
return Man->movers[gcc->gadcon->id - ID_GADMAN_LAYER_BASE];
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_save_widget_position(E_Gadcon_Client *gcc)
|
|
|
|
{
|
|
|
|
int x, y, w, h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h);
|
|
|
|
current->cf->geom.pos_x = (double)x / (double)Man->width;
|
|
|
|
current->cf->geom.pos_y = (double)y / (double)Man->height;
|
2012-07-02 03:13:27 -07:00
|
|
|
current->cf->geom.size_w = (double)w / (double)Man->width;
|
2008-05-18 21:37:34 -07:00
|
|
|
current->cf->geom.size_h = (double)h / (double)Man->height;
|
|
|
|
|
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_apply_widget_position(E_Gadcon_Client *gcc)
|
|
|
|
{
|
|
|
|
int x, y, w, h;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Zone *zone;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
x = gcc->cf->geom.pos_x * Man->width;
|
|
|
|
y = gcc->cf->geom.pos_y * Man->height;
|
|
|
|
w = gcc->cf->geom.size_w * Man->width;
|
|
|
|
h = gcc->cf->geom.size_h * Man->height;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
/* Obtain zone from parent gadcon */
|
|
|
|
zone = gcc->gadcon->zone;
|
|
|
|
|
2012-07-27 00:02:47 -07:00
|
|
|
/* something broke the config's geom, make it visible so it can be
|
|
|
|
* resized/deleted
|
|
|
|
*/
|
|
|
|
if ((!x) && (!y) && (!w) && (!h))
|
|
|
|
{
|
|
|
|
x = zone->w / 2, y = zone->h / 2;
|
|
|
|
w = h = 64;
|
|
|
|
e_util_dialog_show("Gadget Manager",
|
|
|
|
"A gadget of type '%s' was detected without any stored geometry.<br>"
|
|
|
|
"It has been relocated and resized for you.", gcc->client_class->name);
|
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Respect min sizes */
|
|
|
|
if (h < gcc->min.h) h = gcc->min.h;
|
|
|
|
if (w < gcc->min.w) w = gcc->min.w;
|
|
|
|
if (h < 1) h = 100;
|
|
|
|
if (w < 1) w = 100;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
/* Respect zone marigin */
|
|
|
|
if (x < zone->x) x = zone->x;
|
|
|
|
if (y < zone->y) y = zone->y;
|
|
|
|
if (x > (zone->x + zone->w)) x = zone->x;
|
|
|
|
if (y > (zone->y + zone->h)) y = zone->y;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
if ((y + h) > (zone->y + zone->h + MIN_VISIBLE_MARIGIN))
|
2010-05-23 14:38:29 -07:00
|
|
|
h = ((zone->y + zone->h + MIN_VISIBLE_MARIGIN) - y);
|
2012-07-02 03:13:27 -07:00
|
|
|
if ((x + w) > (zone->x + zone->w + MIN_VISIBLE_MARIGIN))
|
2010-05-23 14:38:29 -07:00
|
|
|
w = ((zone->x + zone->w + MIN_VISIBLE_MARIGIN) - x);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
evas_object_move(gcc->o_frame, x, y);
|
|
|
|
evas_object_resize(gcc->o_frame, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
_attach_menu(void *data __UNUSED__, E_Gadcon_Client *gcc, E_Menu *menu)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
E_Menu *mn;
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
char buf[128];
|
2008-06-12 15:51:44 -07:00
|
|
|
char *key;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
//printf("Attach menu (gcc: %x id: %s) [%s]\n", gcc, gcc->cf->id, gcc->cf->style);
|
|
|
|
if (!gcc) return;
|
|
|
|
|
2010-12-30 05:44:39 -08:00
|
|
|
if (e_menu_item_nth(menu, 0))
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
}
|
2010-09-09 07:44:21 -07:00
|
|
|
|
|
|
|
/* Move / resize*/
|
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_label_set(mi, _("Begin move/resize"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "transform-scale");
|
|
|
|
e_menu_item_callback_set(mi, on_menu_edit, gcc);
|
|
|
|
|
|
|
|
/* plain / inset */
|
2008-05-18 21:37:34 -07:00
|
|
|
if (!gcc->cf->style)
|
2008-10-15 08:12:56 -07:00
|
|
|
gcc->cf->style = eina_stringshare_add(E_GADCON_CLIENT_STYLE_INSET);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mn = e_menu_new();
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Plain"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 1);
|
|
|
|
if (!strcmp(gcc->cf->style, E_GADCON_CLIENT_STYLE_PLAIN))
|
2008-05-19 02:21:44 -07:00
|
|
|
e_menu_item_toggle_set(mi, 1);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_style_plain, gcc);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Inset"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 1);
|
|
|
|
if (!strcmp(gcc->cf->style, E_GADCON_CLIENT_STYLE_INSET))
|
2008-05-19 02:21:44 -07:00
|
|
|
e_menu_item_toggle_set(mi, 1);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_style_inset, gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-11-04 19:12:45 -08:00
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
|
|
|
|
/* orient */
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Free"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 2);
|
|
|
|
if (gcc->cf->orient == E_GADCON_ORIENT_FLOAT)
|
|
|
|
e_menu_item_toggle_set(mi, 1);
|
|
|
|
e_menu_item_callback_set(mi, on_menu_style_float, gcc);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Horizontal"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 2);
|
|
|
|
if (gcc->cf->orient == E_GADCON_ORIENT_HORIZ)
|
|
|
|
e_menu_item_toggle_set(mi, 1);
|
|
|
|
e_menu_item_callback_set(mi, on_menu_style_horiz, gcc);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Vertical"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 2);
|
|
|
|
if (gcc->cf->orient == E_GADCON_ORIENT_VERT)
|
|
|
|
e_menu_item_toggle_set(mi, 1);
|
|
|
|
e_menu_item_callback_set(mi, on_menu_style_vert, gcc);
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_label_set(mi, _("Appearance"));
|
2010-10-17 10:33:44 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-look");
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_submenu_set(mi, mn);
|
|
|
|
e_object_del(E_OBJECT(mn));
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* bg / ontop */
|
|
|
|
mn = e_menu_new();
|
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, _("Always on desktop"));
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 2);
|
2009-07-11 13:46:55 -07:00
|
|
|
if (gcc->gadcon->id == ID_GADMAN_LAYER_BG)
|
2008-05-19 02:21:44 -07:00
|
|
|
e_menu_item_toggle_set(mi, 1);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_layer_bg, gcc);
|
|
|
|
|
|
|
|
mi = e_menu_item_new(mn);
|
2008-06-12 15:51:44 -07:00
|
|
|
key = _get_bind_text("gadman_toggle");
|
2008-05-18 21:37:34 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s %s",
|
2008-06-12 15:51:44 -07:00
|
|
|
_("On top pressing"), key);
|
|
|
|
free(key);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_label_set(mi, buf);
|
|
|
|
e_menu_item_radio_set(mi, 1);
|
|
|
|
e_menu_item_radio_group_set(mi, 2);
|
2009-07-11 13:46:55 -07:00
|
|
|
if (gcc->gadcon->id == ID_GADMAN_LAYER_TOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
e_menu_item_toggle_set(mi, 1);
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_layer_top, gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_label_set(mi, _("Behavior"));
|
2010-10-17 10:33:44 -07:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-look");
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_submenu_set(mi, mn);
|
|
|
|
e_object_del(E_OBJECT(mn));
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mi = e_menu_item_new(menu);
|
2010-09-09 07:44:21 -07:00
|
|
|
e_menu_item_separator_set(mi, 1);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-08-31 04:23:03 -07:00
|
|
|
e_gadcon_client_add_location_menu(gcc, menu);
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Remove this gadgets */
|
|
|
|
mi = e_menu_item_new(menu);
|
2010-09-09 07:44:21 -07:00
|
|
|
e_menu_item_label_set(mi, _("Remove"));
|
2009-03-06 11:17:12 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "list-remove");
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_delete, gcc);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* Add other gadgets */
|
2010-09-09 07:44:21 -07:00
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_separator_set(mi, 1);
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mi = e_menu_item_new(menu);
|
|
|
|
e_menu_item_label_set(mi, _("Add other gadgets"));
|
2009-03-06 11:17:12 -08:00
|
|
|
e_util_menu_item_theme_icon_set(mi, "list-add");
|
2008-05-18 21:37:34 -07:00
|
|
|
e_menu_item_callback_set(mi, on_menu_add, gcc);
|
|
|
|
}
|
|
|
|
|
2008-05-19 02:21:44 -07:00
|
|
|
static char *
|
2012-07-02 03:13:27 -07:00
|
|
|
_get_bind_text(const char *action)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2012-05-04 02:38:52 -07:00
|
|
|
E_Binding_Key *binding;
|
2008-05-19 02:21:44 -07:00
|
|
|
char b[256] = "";
|
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
binding = e_bindings_key_get(action);
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding) && (binding->key))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding->mod) & (E_BINDING_MODIFIER_CTRL))
|
2008-05-19 02:21:44 -07:00
|
|
|
strcat(b, _("CTRL"));
|
|
|
|
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding->mod) & (E_BINDING_MODIFIER_ALT))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
if (b[0]) strcat(b, " + ");
|
|
|
|
strcat(b, _("ALT"));
|
|
|
|
}
|
|
|
|
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding->mod) & (E_BINDING_MODIFIER_SHIFT))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
if (b[0]) strcat(b, " + ");
|
|
|
|
strcat(b, _("SHIFT"));
|
|
|
|
}
|
|
|
|
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding->mod) & (E_BINDING_MODIFIER_WIN))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
if (b[0]) strcat(b, " + ");
|
|
|
|
strcat(b, _("WIN"));
|
|
|
|
}
|
|
|
|
|
2012-05-04 02:38:52 -07:00
|
|
|
if ((binding->key) && (binding->key[0]))
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
char *l;
|
|
|
|
|
|
|
|
if (b[0]) strcat(b, " + ");
|
2012-05-04 02:38:52 -07:00
|
|
|
l = strdup(binding->key);
|
|
|
|
l[0] = (char)toupper(binding->key[0]);
|
2008-05-19 02:21:44 -07:00
|
|
|
strcat(b, l);
|
|
|
|
free(l);
|
|
|
|
}
|
2008-05-19 02:39:37 -07:00
|
|
|
return strdup(b);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2012-01-18 14:11:04 -08:00
|
|
|
return strdup("(You must define a binding)");
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Callbacks */
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_shape_change(void *data __UNUSED__, E_Container_Shape *es, E_Container_Shape_Change ch __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2012-06-13 02:37:22 -07:00
|
|
|
const Eina_List *l, *g, *ll;
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Gadcon *gc;
|
|
|
|
E_Config_Gadcon_Client *cf_gcc;
|
2012-07-02 03:13:27 -07:00
|
|
|
E_Container *con;
|
2012-06-13 02:37:22 -07:00
|
|
|
E_Gadcon_Client *gcc;
|
2009-07-11 13:46:55 -07:00
|
|
|
unsigned int layer;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
con = e_container_shape_container_get(es);
|
|
|
|
if ((con->w == Man->width) && (con->h == Man->height)) return;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* The screen size is changed */
|
|
|
|
Man->width = con->w;
|
|
|
|
Man->height = con->h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* ReStart gadgets */
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2009-07-11 13:46:55 -07:00
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-06-13 02:37:22 -07:00
|
|
|
EINA_LIST_FOREACH(Man->gadcons[layer], g, gc)
|
|
|
|
{
|
|
|
|
EINA_LIST_FOREACH(gc->clients, ll, gcc)
|
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
Man->gadgets[layer] = eina_list_remove(Man->gadgets[layer], gcc->cf);
|
2012-06-13 02:37:22 -07:00
|
|
|
if (gcc->gadcon->editing) gadman_gadget_edit_end(NULL, NULL, NULL, NULL);
|
|
|
|
}
|
2012-07-02 03:13:27 -07:00
|
|
|
|
2012-06-13 02:37:22 -07:00
|
|
|
e_gadcon_unpopulate(gc);
|
|
|
|
EINA_LIST_FOREACH(gc->cf->clients, l, cf_gcc)
|
|
|
|
gadman_gadget_place(cf_gcc, layer, gc->zone);
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_style_plain(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
E_Gadcon_Client *gcc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
gcc = current;
|
2008-10-15 08:12:56 -07:00
|
|
|
if (gcc->style) eina_stringshare_del(gcc->style);
|
|
|
|
gcc->style = eina_stringshare_add(E_GADCON_CLIENT_STYLE_PLAIN);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-10-15 08:12:56 -07:00
|
|
|
if (gcc->cf->style) eina_stringshare_del(gcc->cf->style);
|
|
|
|
gcc->cf->style = eina_stringshare_add(E_GADCON_CLIENT_STYLE_PLAIN);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
edje_object_signal_emit(gcc->o_frame, "e,state,visibility,plain", "e");
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_style_inset(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
E_Gadcon_Client *gcc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
gcc = current;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-10-15 08:12:56 -07:00
|
|
|
if (gcc->style) eina_stringshare_del(gcc->style);
|
|
|
|
gcc->style = eina_stringshare_add(E_GADCON_CLIENT_STYLE_INSET);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-10-15 08:12:56 -07:00
|
|
|
if (gcc->cf->style) eina_stringshare_del(gcc->cf->style);
|
|
|
|
gcc->cf->style = eina_stringshare_add(E_GADCON_CLIENT_STYLE_INSET);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
edje_object_signal_emit(gcc->o_frame, "e,state,visibility,inset", "e");
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
|
2008-11-04 19:12:45 -08:00
|
|
|
static void
|
2008-12-06 13:01:15 -08:00
|
|
|
_menu_style_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
|
2008-11-04 19:12:45 -08:00
|
|
|
{
|
2008-12-06 13:01:15 -08:00
|
|
|
int w, h;
|
|
|
|
gcc->cf->orient = orient;
|
2008-11-04 19:12:45 -08:00
|
|
|
|
|
|
|
if (gcc->client_class->func.orient)
|
2012-07-02 03:13:27 -07:00
|
|
|
gcc->client_class->func.orient(gcc, orient);
|
2008-12-06 13:01:15 -08:00
|
|
|
|
|
|
|
if (orient == E_GADCON_ORIENT_VERT)
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
|
|
|
w = DEFAULT_SIZE_W * Man->width;
|
|
|
|
if (w < gcc->min.w) w = gcc->min.w;
|
|
|
|
|
|
|
|
if (gcc->aspect.w && gcc->aspect.h)
|
|
|
|
h = ((float)gcc->aspect.h / (float)gcc->aspect.w) * w;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
h = DEFAULT_SIZE_H * Man->height;
|
|
|
|
if (h < gcc->min.h) h = gcc->min.h;
|
|
|
|
}
|
|
|
|
}
|
2008-12-06 13:01:15 -08:00
|
|
|
else
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
|
|
|
h = DEFAULT_SIZE_H * Man->height;
|
|
|
|
if (h < gcc->min.h) h = gcc->min.h;
|
|
|
|
|
|
|
|
if (gcc->aspect.w && gcc->aspect.h)
|
|
|
|
w = ((float)gcc->aspect.w / (float)gcc->aspect.h) * h;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
w = DEFAULT_SIZE_W * Man->width;
|
|
|
|
if (w < gcc->min.w) w = gcc->min.w;
|
|
|
|
}
|
|
|
|
}
|
2008-12-06 13:02:27 -08:00
|
|
|
|
2008-12-06 13:01:15 -08:00
|
|
|
evas_object_resize(gcc->o_frame, w, h);
|
|
|
|
_save_widget_position(gcc);
|
|
|
|
}
|
2008-11-04 19:12:45 -08:00
|
|
|
|
2008-12-06 13:01:15 -08:00
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_style_float(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-12-06 13:01:15 -08:00
|
|
|
{
|
|
|
|
_menu_style_orient(data, E_GADCON_ORIENT_FLOAT);
|
2008-11-04 19:12:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_style_horiz(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-11-04 19:12:45 -08:00
|
|
|
{
|
2008-12-06 13:01:15 -08:00
|
|
|
_menu_style_orient(data, E_GADCON_ORIENT_HORIZ);
|
2008-11-04 19:12:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_style_vert(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-11-04 19:12:45 -08:00
|
|
|
{
|
2008-12-06 13:01:15 -08:00
|
|
|
_menu_style_orient(data, E_GADCON_ORIENT_VERT);
|
2008-11-04 19:12:45 -08:00
|
|
|
}
|
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
static void
|
2011-01-11 00:44:19 -08:00
|
|
|
_on_menu_layer(E_Gadcon_Client *gcc, Gadman_Layer_Type layer)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
const E_Gadcon_Client_Class *cc;
|
|
|
|
|
|
|
|
E_Gadcon_Client *new_gcc;
|
|
|
|
E_Config_Gadcon_Client *cf;
|
|
|
|
|
|
|
|
cc = gcc->client_class;
|
|
|
|
cf = gcc->cf;
|
|
|
|
|
|
|
|
new_gcc = _gadman_gadget_add(cc, layer, cf);
|
|
|
|
gadman_gadget_del(gcc);
|
|
|
|
current = new_gcc;
|
|
|
|
|
|
|
|
e_config_save_queue();
|
2011-01-11 00:44:19 -08:00
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_layer_bg(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
_on_menu_layer(data, GADMAN_LAYER_BG);
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_layer_top(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
_on_menu_layer(data, GADMAN_LAYER_TOP);
|
|
|
|
gadman_gadgets_show();
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_edit(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
gadman_gadget_edit_start(data);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_add(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
if (Man->visible)
|
2008-05-19 02:21:44 -07:00
|
|
|
gadman_gadgets_hide();
|
2008-05-18 21:37:34 -07:00
|
|
|
e_configure_registry_call("extensions/gadman", m->zone->container, NULL);
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_menu_delete(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
gadman_gadget_del(data);
|
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_frame_click(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
Evas_Event_Mouse_Down *ev;
|
|
|
|
E_Gadcon_Client *gcc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
ev = event_info;
|
|
|
|
|
|
|
|
gcc = data;
|
2009-07-11 13:46:55 -07:00
|
|
|
|
2009-09-03 09:32:48 -07:00
|
|
|
if (gcc->gadcon->editing) gadman_gadget_edit_end(NULL, NULL, NULL, NULL);
|
2009-07-11 13:46:55 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
current = gcc;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
if (ev->button == 5)
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
E_Menu *m;
|
|
|
|
int cx, cy, cw, ch;
|
|
|
|
|
|
|
|
m = e_menu_new();
|
|
|
|
m = e_gadcon_client_util_menu_items_append(gcc, m, 0);
|
|
|
|
gcc->menu = m;
|
|
|
|
e_gadcon_canvas_zone_geometry_get(gcc->gadcon, &cx, &cy, &cw, &ch);
|
|
|
|
e_menu_activate_mouse(m,
|
|
|
|
e_util_zone_current_get(e_manager_current_get()),
|
|
|
|
cx + ev->output.x, cy + ev->output.y, 1, 1,
|
|
|
|
E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_top(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
static int ox, oy, ow, oh; //Object coord
|
2012-07-02 03:13:27 -07:00
|
|
|
static int dy; //Mouse offset
|
|
|
|
int mx, my; //Mouse coord
|
2008-10-10 17:59:21 -07:00
|
|
|
int action = (int)(long)data;
|
2008-05-18 21:37:34 -07:00
|
|
|
Evas_Object *mover;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mover = _get_mover(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
if (action == DRAG_START)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
|
2012-07-02 03:13:27 -07:00
|
|
|
dy = my - oy;
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
else if (action == DRAG_STOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 0;
|
|
|
|
dy = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
_save_widget_position(current);
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
else if ((action == DRAG_MOVE) && current->resizing)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2008-06-19 05:56:07 -07:00
|
|
|
int h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
|
2008-11-02 07:32:13 -08:00
|
|
|
h = oy + oh + dy - my;
|
|
|
|
|
|
|
|
if (h < current->min.h)
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
|
|
|
my -= current->min.h - h;
|
|
|
|
h = current->min.h;
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
/* don't go out of the screen */
|
2012-07-02 03:13:27 -07:00
|
|
|
if (my < dy)
|
|
|
|
{
|
|
|
|
h += my - dy;
|
|
|
|
my = dy;
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(mover, ow, h);
|
2008-11-02 07:32:13 -08:00
|
|
|
evas_object_move(mover, ox, my - dy);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(current->o_frame, ow, h);
|
2008-11-02 07:32:13 -08:00
|
|
|
evas_object_move(current->o_frame, ox, my - dy);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_right(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2008-05-19 02:21:44 -07:00
|
|
|
Evas_Object *mover;
|
2008-05-18 21:37:34 -07:00
|
|
|
static int ox, oy, ow, oh; //Object coord
|
2012-07-02 03:13:27 -07:00
|
|
|
static int dx; //Mouse offset
|
|
|
|
int mx, my; //Mouse coord
|
2008-05-19 02:21:44 -07:00
|
|
|
int action;
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
mover = _get_mover(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
action = (int)(long)data;
|
2008-05-18 21:37:34 -07:00
|
|
|
if (action == DRAG_START)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
|
2012-07-02 03:13:27 -07:00
|
|
|
dx = mx - ow;
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
else if (action == DRAG_STOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 0;
|
|
|
|
dx = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
_save_widget_position(current);
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
else if ((action == DRAG_MOVE) && current->resizing)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2008-06-19 05:56:07 -07:00
|
|
|
int w;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
2008-11-02 07:32:13 -08:00
|
|
|
w = mx - dx;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
if (w < current->min.w) w = current->min.w;
|
2008-11-02 07:32:13 -08:00
|
|
|
/* don't go out of the screen */
|
2012-07-02 03:13:27 -07:00
|
|
|
if (w > (Man->width - ox)) w = Man->width - ox;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(mover, w, oh);
|
|
|
|
evas_object_resize(current->o_frame, w, oh);
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_down(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2008-05-19 02:21:44 -07:00
|
|
|
Evas_Object *mover;
|
2008-05-18 21:37:34 -07:00
|
|
|
static int ox, oy, ow, oh; //Object coord
|
2012-07-02 03:13:27 -07:00
|
|
|
static int dy; //Mouse offset
|
|
|
|
int mx, my; //Mouse coord
|
2008-05-19 02:21:44 -07:00
|
|
|
int action;
|
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
action = (int)(long)data;
|
2008-05-18 21:37:34 -07:00
|
|
|
mover = _get_mover(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
if (action == DRAG_START)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
|
2012-07-02 03:13:27 -07:00
|
|
|
dy = my - oh;
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
else if (action == DRAG_STOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 0;
|
|
|
|
dy = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
_save_widget_position(current);
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
else if ((action == DRAG_MOVE) && current->resizing)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2008-06-19 05:56:07 -07:00
|
|
|
int h;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
2008-11-02 07:32:13 -08:00
|
|
|
h = my - dy;
|
|
|
|
|
2008-05-19 02:21:44 -07:00
|
|
|
if (h < current->min.h) h = current->min.h;
|
2008-11-02 07:32:13 -08:00
|
|
|
/* don't go out of the screen */
|
2012-07-02 03:13:27 -07:00
|
|
|
if (h > (Man->height - oy)) h = Man->height - oy;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(mover, ow, h);
|
|
|
|
evas_object_resize(current->o_frame, ow, h);
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_left(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2008-05-19 02:21:44 -07:00
|
|
|
Evas_Object *mover;
|
2008-05-18 21:37:34 -07:00
|
|
|
static int ox, oy, ow, oh; //Object coord
|
2012-07-02 03:13:27 -07:00
|
|
|
static int dx; //Mouse offset
|
|
|
|
int mx, my; //Mouse coord
|
2008-05-19 02:21:44 -07:00
|
|
|
int action;
|
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
action = (int)(long)data;
|
2008-05-18 21:37:34 -07:00
|
|
|
mover = _get_mover(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
if (action == DRAG_START)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
|
2012-07-02 03:13:27 -07:00
|
|
|
dx = mx - ox;
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
else if (action == DRAG_STOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->resizing = 0;
|
|
|
|
dx = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
_save_widget_position(current);
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
else if ((action == DRAG_MOVE) && current->resizing)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2008-06-19 05:56:07 -07:00
|
|
|
int w;
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
2008-05-18 21:37:34 -07:00
|
|
|
|
2008-11-02 07:32:13 -08:00
|
|
|
w = ox + ow + dx - mx;
|
|
|
|
|
|
|
|
if (w < current->min.w)
|
2012-07-02 03:13:27 -07:00
|
|
|
{
|
|
|
|
mx -= current->min.w - w;
|
|
|
|
w = current->min.w;
|
|
|
|
}
|
2008-11-02 07:32:13 -08:00
|
|
|
/* don't go out of the screen */
|
2012-07-02 03:13:27 -07:00
|
|
|
if (mx < dx)
|
|
|
|
{
|
|
|
|
w += mx - dx;
|
|
|
|
mx = dx;
|
|
|
|
}
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(mover, w, oh);
|
2008-11-02 07:32:13 -08:00
|
|
|
evas_object_move(mover, mx - dx, oy);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
|
|
|
evas_object_resize(current->o_frame, w, oh);
|
2008-11-02 07:32:13 -08:00
|
|
|
evas_object_move(current->o_frame, mx - dx, oy);
|
2008-05-19 02:21:44 -07:00
|
|
|
}
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_move(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
2008-05-19 02:21:44 -07:00
|
|
|
Evas_Object *mover;
|
2008-05-18 21:37:34 -07:00
|
|
|
static int dx, dy; //Offset of mouse pointer inside the mover
|
|
|
|
static int ox, oy; //Starting object position
|
|
|
|
static int ow, oh; //Starting object size
|
2012-07-02 03:13:27 -07:00
|
|
|
int mx, my; //Mouse coord
|
2008-05-19 02:21:44 -07:00
|
|
|
int action;
|
|
|
|
|
2008-10-10 17:59:21 -07:00
|
|
|
action = (int)(long)data;
|
2008-05-18 21:37:34 -07:00
|
|
|
mover = _get_mover(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* DRAG_START */
|
|
|
|
if (action == DRAG_START)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
current->moving = 1;
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
|
|
|
|
|
|
|
|
dx = mx - ox;
|
|
|
|
dy = my - oy;
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* DRAG_STOP */
|
|
|
|
if (action == DRAG_STOP)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
2009-07-11 13:46:55 -07:00
|
|
|
E_Config_Gadcon_Client *cf;
|
|
|
|
E_Zone *dst_zone = NULL;
|
|
|
|
E_Gadcon *dst_gadcon;
|
|
|
|
int gx, gy;
|
|
|
|
|
|
|
|
current->moving = 0;
|
2008-05-19 02:21:44 -07:00
|
|
|
dx = dy = 0;
|
2009-07-11 13:46:55 -07:00
|
|
|
|
|
|
|
/* checking if zone was changed for dragged gadget */
|
|
|
|
evas_object_geometry_get(current->o_frame, &gx, &gy, NULL, NULL);
|
|
|
|
dst_zone = e_container_zone_at_point_get(e_container_current_get(e_manager_current_get()), gx, gy);
|
|
|
|
if (dst_zone && (current->gadcon->zone != dst_zone))
|
|
|
|
{
|
2012-07-02 03:13:27 -07:00
|
|
|
unsigned int layer = current->gadcon->id - ID_GADMAN_LAYER_BASE;
|
2009-07-11 13:46:55 -07:00
|
|
|
cf = current->cf;
|
|
|
|
|
|
|
|
current->gadcon->cf->clients = eina_list_remove(current->gadcon->cf->clients, cf);
|
|
|
|
dst_gadcon = gadman_gadcon_get(dst_zone, layer);
|
|
|
|
if (dst_gadcon)
|
|
|
|
{
|
|
|
|
dst_gadcon->cf->clients = eina_list_append(dst_gadcon->cf->clients, cf);
|
|
|
|
e_config_save_queue();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_save_widget_position(current);
|
2008-05-19 02:21:44 -07:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2008-05-18 21:37:34 -07:00
|
|
|
/* DRAG_MOVE */
|
2008-11-02 01:46:45 -08:00
|
|
|
if ((action == DRAG_MOVE) && current->moving)
|
2008-05-19 02:21:44 -07:00
|
|
|
{
|
|
|
|
int x, y;
|
|
|
|
|
|
|
|
evas_pointer_output_xy_get(current->gadcon->evas, &mx, &my);
|
|
|
|
|
|
|
|
x = mx - dx;
|
|
|
|
y = my - dy;
|
|
|
|
|
|
|
|
/* don't go out of the screen */
|
|
|
|
if (x < 0) x = 0;
|
|
|
|
if (x > (Man->width - ow)) x = Man->width - ow;
|
|
|
|
if (y < 0) y = 0;
|
|
|
|
if (y > (Man->height - oh)) y = Man->height - oh;
|
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
evas_object_move(current->o_frame, x, y);
|
2008-05-19 02:21:44 -07:00
|
|
|
evas_object_move(mover, x, y);
|
|
|
|
evas_object_raise(current->o_frame);
|
|
|
|
evas_object_raise(mover);
|
|
|
|
}
|
2008-05-18 21:37:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-08-19 12:18:43 -07:00
|
|
|
on_bg_click(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-05-18 21:37:34 -07:00
|
|
|
{
|
|
|
|
gadman_gadgets_hide();
|
|
|
|
}
|
2008-10-23 00:15:44 -07:00
|
|
|
|
|
|
|
static void
|
2010-05-23 14:38:29 -07:00
|
|
|
on_hide_stop(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const char *src __UNUSED__)
|
2008-10-23 00:15:44 -07:00
|
|
|
{
|
|
|
|
ecore_evas_hide(Man->top_ee);
|
|
|
|
}
|
2009-08-31 04:23:03 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
static int
|
2010-05-23 14:38:29 -07:00
|
|
|
_e_gadman_client_add(void *data __UNUSED__, const E_Gadcon_Client_Class *cc)
|
2009-08-31 04:23:03 -07:00
|
|
|
{
|
|
|
|
return !!gadman_gadget_add(cc, GADMAN_LAYER_BG);
|
|
|
|
}
|
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
static void
|
2010-05-23 14:38:29 -07:00
|
|
|
_e_gadman_client_remove(void *data __UNUSED__, E_Gadcon_Client *gcc)
|
2009-08-31 04:23:03 -07:00
|
|
|
{
|
|
|
|
gadman_gadget_del(gcc);
|
|
|
|
}
|
2012-06-13 02:37:22 -07:00
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
static void
|
|
|
|
_e_gadman_handlers_add(void)
|
2012-06-13 02:37:22 -07:00
|
|
|
{
|
2012-07-02 06:28:13 -07:00
|
|
|
_gadman_hdls = eina_list_append(_gadman_hdls,
|
|
|
|
ecore_event_handler_add(E_EVENT_ZONE_ADD, _e_gadman_cb_zone_add, NULL));
|
|
|
|
_gadman_hdls = eina_list_append(_gadman_hdls,
|
|
|
|
ecore_event_handler_add(E_EVENT_ZONE_DEL, _e_gadman_cb_zone_del, NULL));
|
|
|
|
_gadman_hdls = eina_list_append(_gadman_hdls,
|
|
|
|
ecore_event_handler_add(E_EVENT_MODULE_UPDATE, (Ecore_Event_Handler_Cb)_gadman_module_cb, NULL));
|
2012-06-13 02:37:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_gadman_handler_del(void)
|
|
|
|
{
|
|
|
|
Ecore_Event_Handler *hdl;
|
|
|
|
|
|
|
|
/* remove the ecore event handlers */
|
|
|
|
EINA_LIST_FREE(_gadman_hdls, hdl)
|
|
|
|
ecore_event_handler_del(hdl);
|
|
|
|
}
|
|
|
|
|
2012-07-02 06:28:13 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_gadman_module_cb(void *d __UNUSED__, int type __UNUSED__, E_Event_Module_Update *ev)
|
|
|
|
{
|
2012-07-03 00:39:44 -07:00
|
|
|
if (!ev->enabled)
|
2012-07-02 06:28:13 -07:00
|
|
|
{
|
|
|
|
Eina_List *l;
|
2012-07-26 07:00:20 -07:00
|
|
|
E_Config_Gadcon_Client *cf_gcc;
|
2012-07-02 06:28:13 -07:00
|
|
|
E_Gadcon_Client *gcc;
|
|
|
|
l = eina_hash_set(_gadman_gadgets, ev->name, NULL);
|
|
|
|
if (!l) return ECORE_CALLBACK_RENEW;
|
2012-07-26 07:00:20 -07:00
|
|
|
EINA_LIST_FREE(l, cf_gcc)
|
2012-07-02 06:28:13 -07:00
|
|
|
{
|
2012-07-26 07:00:20 -07:00
|
|
|
gcc = e_gadcon_client_find(cf_gcc);
|
|
|
|
if (!gcc) continue;
|
2012-07-02 06:28:13 -07:00
|
|
|
gcc->cf = NULL;
|
|
|
|
gadman_gadget_del(gcc);
|
|
|
|
}
|
|
|
|
}
|
2012-07-03 00:39:44 -07:00
|
|
|
e_config_gadman_list_refresh();
|
2012-07-02 06:28:13 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
|
2012-06-13 02:37:22 -07:00
|
|
|
static Eina_Bool
|
2012-07-02 03:13:27 -07:00
|
|
|
_e_gadman_cb_zone_add(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2012-06-13 02:37:22 -07:00
|
|
|
{
|
|
|
|
E_Event_Zone_Add *ev;
|
2012-07-02 03:13:27 -07:00
|
|
|
E_Zone *zone;
|
2012-06-13 02:37:22 -07:00
|
|
|
E_Gadcon *gc;
|
|
|
|
Eina_List *l;
|
|
|
|
unsigned int layer;
|
|
|
|
|
|
|
|
ev = event;
|
|
|
|
zone = ev->zone;
|
|
|
|
|
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
|
|
|
EINA_LIST_FOREACH(Man->gadcons[layer], l, gc)
|
|
|
|
if (gc->zone == zone) return ECORE_CALLBACK_PASS_ON;
|
|
|
|
}
|
|
|
|
|
2012-07-02 03:13:27 -07:00
|
|
|
// Not exist, then add
|
2012-06-13 02:37:22 -07:00
|
|
|
/* iterating through zones - and making gadmans on each */
|
|
|
|
const char *layer_name[] = {"gadman", "gadman_top"};
|
|
|
|
|
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
2012-06-20 01:48:27 -07:00
|
|
|
E_Gadcon *gdc;
|
2012-06-13 02:37:22 -07:00
|
|
|
|
2012-06-20 01:48:27 -07:00
|
|
|
gdc = _gadman_gadcon_new(layer_name[layer], layer, zone, location);
|
|
|
|
Man->gadcons[layer] = eina_list_append(Man->gadcons[layer], gdc);
|
2012-06-13 02:37:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2012-07-02 03:13:27 -07:00
|
|
|
_e_gadman_cb_zone_del(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2012-06-13 02:37:22 -07:00
|
|
|
{
|
|
|
|
E_Event_Zone_Del *ev;
|
2012-07-02 03:13:27 -07:00
|
|
|
E_Zone *zone;
|
2012-06-13 02:37:22 -07:00
|
|
|
Eina_List *l, *ll;
|
|
|
|
E_Gadcon *gc;
|
|
|
|
E_Gadcon_Client *gcc;
|
|
|
|
unsigned int layer;
|
|
|
|
|
|
|
|
ev = event;
|
|
|
|
zone = ev->zone;
|
|
|
|
|
|
|
|
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
|
|
|
|
{
|
|
|
|
EINA_LIST_FOREACH(Man->gadcons[layer], l, gc)
|
|
|
|
{
|
|
|
|
if (gc->zone != zone) continue;
|
|
|
|
|
|
|
|
Man->gadcons[layer] = eina_list_remove(Man->gadcons[layer], gc);
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(gc->clients, ll, gcc)
|
|
|
|
{
|
2012-07-26 05:48:11 -07:00
|
|
|
Man->gadgets[layer] = eina_list_remove(Man->gadgets[layer], gcc->cf);
|
2012-06-13 02:37:22 -07:00
|
|
|
if (gcc->gadcon->editing) gadman_gadget_edit_end(NULL, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
e_gadcon_unpopulate(gc);
|
|
|
|
e_gadcon_custom_del(gc);
|
|
|
|
|
|
|
|
eina_stringshare_del(gc->name);
|
|
|
|
if (gc->config_dialog) e_object_del(E_OBJECT(gc->config_dialog));
|
|
|
|
|
|
|
|
E_FREE(gc);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
|
|
|
}
|
|
|
|
|