forked from enlightenment/enlightenment
for now - people will miss their "start" module - as it has now been ursurped
for gadcon testing :) mind u - it's a HELL of a lot smaller now :) SVN revision: 20381
This commit is contained in:
parent
15c398e635
commit
e23367f722
|
@ -87,17 +87,6 @@ e_gadcon_init(void)
|
|||
};
|
||||
e_gadcon_provider_register(&cc);
|
||||
}
|
||||
{
|
||||
static E_Gadcon_Client_Class cc =
|
||||
{
|
||||
GADCON_CLIENT_CLASS_VERSION,
|
||||
"start",
|
||||
{
|
||||
__test, __test2, NULL
|
||||
}
|
||||
};
|
||||
e_gadcon_provider_register(&cc);
|
||||
}
|
||||
{
|
||||
static E_Gadcon_Client_Class cc =
|
||||
{
|
||||
|
@ -756,6 +745,8 @@ struct _E_Smart_Data
|
|||
Evas_Object *obj;
|
||||
Evas_Object *clip;
|
||||
unsigned char horizontal : 1;
|
||||
unsigned char doing_config : 1;
|
||||
unsigned char redo_config : 1;
|
||||
Evas_List *items;
|
||||
int frozen;
|
||||
};
|
||||
|
@ -1120,6 +1111,11 @@ _e_gadcon_layout_smart_reconfigure(E_Smart_Data *sd)
|
|||
Evas_List *list_s = NULL, *list_m = NULL, *list_e = NULL, *list = NULL;
|
||||
|
||||
if (sd->frozen) return;
|
||||
if (sd->doing_config)
|
||||
{
|
||||
sd->redo_config = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
x = sd->x;
|
||||
y = sd->y;
|
||||
|
@ -1532,6 +1528,12 @@ _e_gadcon_layout_smart_reconfigure(E_Smart_Data *sd)
|
|||
evas_object_move(obj, xx, yy);
|
||||
evas_object_resize(obj, bi->w, bi->h);
|
||||
}
|
||||
sd->doing_config = 0;
|
||||
if (sd->redo_config)
|
||||
{
|
||||
_e_gadcon_layout_smart_reconfigure(sd);
|
||||
sd->redo_config = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -20,9 +20,7 @@ INCLUDES = -I. \
|
|||
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
||||
pkg_LTLIBRARIES = module.la
|
||||
module_la_SOURCES = e_mod_main.c \
|
||||
e_mod_main.h \
|
||||
e_mod_config.c \
|
||||
e_mod_config.h
|
||||
e_mod_main.h
|
||||
module_la_LIBADD = @e_libs@ @dlopen_libs@
|
||||
module_la_LDFLAGS = -module -avoid-version
|
||||
module_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
#include "e.h"
|
||||
#include "e_mod_main.h"
|
||||
#include "e_mod_config.h"
|
||||
#include "config.h"
|
||||
|
||||
typedef struct _Cfg_File_Data Cfg_File_Data;
|
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
{
|
||||
int allow_overlap;
|
||||
};
|
||||
|
||||
struct _Cfg_File_Data
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
char *file;
|
||||
};
|
||||
|
||||
/* Protos */
|
||||
static void *_create_data(E_Config_Dialog *cfd);
|
||||
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
||||
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
|
||||
void
|
||||
_config_start_module(E_Container *con, Start *start)
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
E_Config_Dialog_View *v;
|
||||
|
||||
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;
|
||||
|
||||
cfd = e_config_dialog_new(con, _("Start Module Configuration"), NULL, 0, v, start);
|
||||
}
|
||||
|
||||
static void
|
||||
_fill_data(Start *s, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
cfdata->allow_overlap = s->conf->allow_overlap;
|
||||
}
|
||||
|
||||
static void *
|
||||
_create_data(E_Config_Dialog *cfd)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Start *s;
|
||||
|
||||
s = cfd->data;
|
||||
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
||||
_fill_data(s, cfdata);
|
||||
return cfdata;
|
||||
}
|
||||
|
||||
static void
|
||||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
free(cfdata);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Evas_Object *o, *of, *ob;
|
||||
Start *s;
|
||||
|
||||
s = cfd->data;
|
||||
_fill_data(s, cfdata);
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
of = e_widget_framelist_add(evas, _("Extras"), 0);
|
||||
ob = e_widget_check_add(evas, _("Allow windows to overlap this gadget"), &(cfdata->allow_overlap));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
static int
|
||||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Start *s;
|
||||
|
||||
s = cfd->data;
|
||||
e_border_button_bindings_ungrab_all();
|
||||
|
||||
if (cfdata->allow_overlap && !s->conf->allow_overlap)
|
||||
s->conf->allow_overlap = 1;
|
||||
else if (!cfdata->allow_overlap && s->conf->allow_overlap)
|
||||
s->conf->allow_overlap = 0;
|
||||
|
||||
e_border_button_bindings_grab_all();
|
||||
e_config_save_queue();
|
||||
|
||||
_start_cb_config_updated(s);
|
||||
return 1;
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
#else
|
||||
#ifndef E_MOD_CONFIG_H
|
||||
#define E_MOD_CONFIG_H
|
||||
#include "e_mod_main.h"
|
||||
|
||||
void _config_start_module(E_Container *con, Start *start);
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -3,28 +3,142 @@
|
|||
*/
|
||||
#include "e.h"
|
||||
#include "e_mod_main.h"
|
||||
#include "e_mod_config.h"
|
||||
//#include "e_int_menus.h"
|
||||
|
||||
static Start *_start_new(void);
|
||||
static Start_Face *_start_face_new(Start *s, E_Container *con);
|
||||
static void _start_free(Start *e);
|
||||
static void _start_face_free(Start_Face *face);
|
||||
static void _start_face_disable(Start_Face *e);
|
||||
static void _start_config_menu_new(Start *e);
|
||||
static void _start_face_menu_new(Start_Face *face);
|
||||
static void _start_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _start_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
|
||||
static void _start_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _start_menu_cb_post_deactivate(void *data, E_Menu *m);
|
||||
/***************************************************************************/
|
||||
/**/
|
||||
/* gadcon requirements */
|
||||
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id);
|
||||
static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||
/* and actually define the gadcon class that this module provides (just 1) */
|
||||
static const E_Gadcon_Client_Class _gadcon_class =
|
||||
{
|
||||
GADCON_CLIENT_CLASS_VERSION,
|
||||
"start",
|
||||
{
|
||||
_gc_init, _gc_shutdown, _gc_orient
|
||||
}
|
||||
};
|
||||
/**/
|
||||
/***************************************************************************/
|
||||
|
||||
static void _start_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _start_cb_update_policy(void *data);
|
||||
/***************************************************************************/
|
||||
/**/
|
||||
/* actual module specifics */
|
||||
|
||||
static int button_count;
|
||||
static E_Config_DD *conf_edd;
|
||||
static E_Config_DD *conf_face_edd;
|
||||
typedef struct _Instance Instance;
|
||||
|
||||
struct _Instance
|
||||
{
|
||||
E_Gadcon_Client *gcc;
|
||||
Evas_Object *o_button;
|
||||
E_Menu *main_menu;
|
||||
};
|
||||
|
||||
static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _menu_cb_post(void *data, E_Menu *m);
|
||||
|
||||
static E_Gadcon_Client *
|
||||
_gc_init(E_Gadcon *gc, char *name, char *id)
|
||||
{
|
||||
Evas_Object *o;
|
||||
E_Gadcon_Client *gcc;
|
||||
Instance *inst;
|
||||
|
||||
printf("CREATE START GADCON %s %s\n", name, id);
|
||||
inst = E_NEW(Instance, 1);
|
||||
|
||||
o = edje_object_add(gc->evas);
|
||||
e_theme_edje_object_set(o, "base/theme/modules/start", "modules/start/main");
|
||||
edje_object_signal_emit(o, "passive", "");
|
||||
|
||||
gcc = e_gadcon_client_new(gc, name, id, o);
|
||||
gcc->data = inst;
|
||||
|
||||
inst->gcc = gcc;
|
||||
inst->o_button = o;
|
||||
inst->main_menu = NULL;
|
||||
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_button_cb_mouse_down, inst);
|
||||
/* FIXME: add callback to resize - and based off one dimension, request
|
||||
* another to be the same */
|
||||
e_gadcon_client_size_request(gcc, 32, 32);
|
||||
e_gadcon_client_min_size_set(gcc, 16, 16);
|
||||
return gcc;
|
||||
}
|
||||
|
||||
static void
|
||||
_gc_shutdown(E_Gadcon_Client *gcc)
|
||||
{
|
||||
Instance *inst;
|
||||
|
||||
inst = gcc->data;
|
||||
free(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_gc_orient(E_Gadcon_Client *gcc)
|
||||
{
|
||||
Instance *inst;
|
||||
|
||||
inst = gcc->data;
|
||||
printf("OREINT to %i\n", gcc->gadcon->orient);
|
||||
}
|
||||
/**/
|
||||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/**/
|
||||
static void
|
||||
_button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Instance *inst;
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
|
||||
inst = data;
|
||||
ev = event_info;
|
||||
if (ev->button == 1)
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
/* FIXME: need a way of getting screen-relative coords */
|
||||
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)
|
||||
{
|
||||
e_menu_post_deactivate_callback_set(inst->main_menu,
|
||||
_menu_cb_post,
|
||||
inst);
|
||||
/* FIXME: need a way of getting gadcon zone */
|
||||
e_menu_activate_mouse(inst->main_menu,
|
||||
e_util_zone_current_get(e_manager_current_get()),
|
||||
x, y, w, h,
|
||||
E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
|
||||
edje_object_signal_emit(inst->o_button, "active", "");
|
||||
evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_menu_cb_post(void *data, E_Menu *m)
|
||||
{
|
||||
Instance *inst;
|
||||
|
||||
inst = data;
|
||||
if (!inst->main_menu) return;
|
||||
edje_object_signal_emit(inst->o_button, "passive", "");
|
||||
e_object_del(E_OBJECT(inst->main_menu));
|
||||
inst->main_menu = NULL;
|
||||
}
|
||||
/**/
|
||||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/**/
|
||||
/* module setup */
|
||||
EAPI E_Module_Api e_modapi =
|
||||
{
|
||||
E_MODULE_API_VERSION,
|
||||
|
@ -34,34 +148,20 @@ EAPI E_Module_Api e_modapi =
|
|||
EAPI void *
|
||||
e_modapi_init(E_Module *m)
|
||||
{
|
||||
Start *e;
|
||||
|
||||
/* Create the button */
|
||||
e = _start_new();
|
||||
m->config_menu = e->config_menu;
|
||||
return e;
|
||||
e_gadcon_provider_register(&_gadcon_class);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_modapi_shutdown(E_Module *m)
|
||||
{
|
||||
Start *e;
|
||||
|
||||
if (m->config_menu) m->config_menu = NULL;
|
||||
|
||||
e = m->data;
|
||||
if (e) _start_free(e);
|
||||
e_gadcon_provider_unregister(&_gadcon_class);
|
||||
return 1;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_modapi_save(E_Module *m)
|
||||
{
|
||||
Start *e;
|
||||
|
||||
e = m->data;
|
||||
e_config_domain_save("module.start", conf_edd, e->conf);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -86,359 +186,7 @@ e_modapi_about(E_Module *m)
|
|||
int
|
||||
e_modapi_config(E_Module *m)
|
||||
{
|
||||
Start *s;
|
||||
Start_Face *face;
|
||||
|
||||
s = m->data;
|
||||
if (!s) return 0;
|
||||
if (!s->faces) return 0;
|
||||
|
||||
face = s->faces->data;
|
||||
if (!face) return 0;
|
||||
|
||||
_config_start_module(e_container_current_get(e_manager_current_get()), s);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Start *
|
||||
_start_new(void)
|
||||
{
|
||||
Start *e;
|
||||
Evas_List *managers, *l, *l2, *cl;
|
||||
E_Menu_Item *mi;
|
||||
|
||||
button_count = 0;
|
||||
e = E_NEW(Start, 1);
|
||||
if (!e) return NULL;
|
||||
|
||||
conf_face_edd = E_CONFIG_DD_NEW("Start_Config_Face", Config_Face);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Config_Face
|
||||
#define D conf_face_edd
|
||||
E_CONFIG_VAL(D, T, enabled, UCHAR);
|
||||
|
||||
conf_edd = E_CONFIG_DD_NEW("Start_Config", Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T Config
|
||||
#define D conf_edd
|
||||
E_CONFIG_LIST(D, T, faces, conf_face_edd);
|
||||
E_CONFIG_VAL(D, T, allow_overlap, INT);
|
||||
|
||||
e->conf = e_config_domain_load("module.start", conf_edd);
|
||||
if (!e->conf)
|
||||
{
|
||||
e->conf = E_NEW(Config, 1);
|
||||
e->conf->allow_overlap = 0;
|
||||
}
|
||||
E_CONFIG_LIMIT(e->conf->allow_overlap, 0, 1);
|
||||
|
||||
_start_config_menu_new(e);
|
||||
|
||||
managers = e_manager_list();
|
||||
cl = e->conf->faces;
|
||||
for (l = managers; l; l = l->next)
|
||||
{
|
||||
E_Manager *man;
|
||||
|
||||
man = l->data;
|
||||
for (l2 = man->containers; l2; l2 = l2->next)
|
||||
{
|
||||
E_Container *con;
|
||||
Start_Face *face;
|
||||
|
||||
con = l2->data;
|
||||
face = _start_face_new(e, con);
|
||||
if (face)
|
||||
{
|
||||
face->start = e;
|
||||
e->faces = evas_list_append(e->faces, face);
|
||||
/* Config */
|
||||
if (!cl)
|
||||
{
|
||||
face->conf = E_NEW(Config_Face, 1);
|
||||
face->conf->enabled = 1;
|
||||
e->conf->faces = evas_list_append(e->conf->faces, face->conf);
|
||||
}
|
||||
else
|
||||
{
|
||||
face->conf = cl->data;
|
||||
cl = cl->next;
|
||||
}
|
||||
|
||||
/* Menu */
|
||||
/* This menu must be initialized after conf */
|
||||
_start_face_menu_new(face);
|
||||
|
||||
mi = e_menu_item_new(e->config_menu);
|
||||
e_menu_item_label_set(mi, _("Configuration"));
|
||||
e_menu_item_callback_set(mi, _start_face_cb_menu_configure, face);
|
||||
|
||||
mi = e_menu_item_new(e->config_menu);
|
||||
e_menu_item_label_set(mi, con->name);
|
||||
|
||||
e_menu_item_submenu_set(mi, face->menu);
|
||||
|
||||
/* Setup */
|
||||
if (!face->conf->enabled) _start_face_disable(face);
|
||||
}
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static Start_Face *
|
||||
_start_face_new(Start *s, E_Container *con)
|
||||
{
|
||||
Start_Face *face;
|
||||
Evas_Object *o;
|
||||
E_Gadman_Policy policy;
|
||||
|
||||
face = E_NEW(Start_Face, 1);
|
||||
if (!face) return NULL;
|
||||
|
||||
face->con = con;
|
||||
e_object_ref(E_OBJECT(con));
|
||||
|
||||
evas_event_freeze(con->bg_evas);
|
||||
o = edje_object_add(con->bg_evas);
|
||||
face->button_object = o;
|
||||
|
||||
e_theme_edje_object_set(o, "base/theme/modules/start", "modules/start/main");
|
||||
edje_object_signal_emit(o, "passive", "");
|
||||
evas_object_show(o);
|
||||
|
||||
o = evas_object_rectangle_add(con->bg_evas);
|
||||
face->event_object = o;
|
||||
evas_object_layer_set(o, 2);
|
||||
evas_object_repeat_events_set(o, 1);
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _start_face_cb_mouse_down, face);
|
||||
evas_object_show(o);
|
||||
|
||||
face->gmc = e_gadman_client_new(con->gadman);
|
||||
e_gadman_client_domain_set(face->gmc, "module.start", button_count++);
|
||||
|
||||
policy = E_GADMAN_POLICY_ANYWHERE |
|
||||
E_GADMAN_POLICY_HMOVE |
|
||||
E_GADMAN_POLICY_VMOVE |
|
||||
E_GADMAN_POLICY_HSIZE |
|
||||
E_GADMAN_POLICY_VSIZE;
|
||||
|
||||
if (s->conf->allow_overlap == 0)
|
||||
policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP;
|
||||
else
|
||||
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
|
||||
|
||||
e_gadman_client_policy_set(face->gmc, policy);
|
||||
|
||||
e_gadman_client_min_size_set(face->gmc, 4, 4);
|
||||
e_gadman_client_max_size_set(face->gmc, 512, 512);
|
||||
e_gadman_client_auto_size_set(face->gmc, 40, 40);
|
||||
e_gadman_client_align_set(face->gmc, 0.0, 1.0);
|
||||
e_gadman_client_aspect_set(face->gmc, 1.0, 1.0);
|
||||
e_gadman_client_resize(face->gmc, 40, 40);
|
||||
e_gadman_client_change_func_set(face->gmc, _start_face_cb_gmc_change, face);
|
||||
e_gadman_client_load(face->gmc);
|
||||
|
||||
evas_event_thaw(con->bg_evas);
|
||||
|
||||
return face;
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_menu_new(Start_Face *face)
|
||||
{
|
||||
E_Menu *mn;
|
||||
E_Menu_Item *mi;
|
||||
|
||||
mn = e_menu_new();
|
||||
face->menu = mn;
|
||||
|
||||
/* Enabled */
|
||||
/*
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Enabled"));
|
||||
e_menu_item_check_set(mi, 1);
|
||||
if (face->conf->enabled) e_menu_item_toggle_set(mi, 1);
|
||||
e_menu_item_callback_set(mi, _clock_face_cb_menu_enabled, face);
|
||||
*/
|
||||
|
||||
/* Edit */
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Configuration"));
|
||||
e_menu_item_callback_set(mi, _start_face_cb_menu_configure, face);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Edit Mode"));
|
||||
e_menu_item_callback_set(mi, _start_face_cb_menu_edit, face);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_start_free(Start *e)
|
||||
{
|
||||
Evas_List *list;
|
||||
|
||||
E_CONFIG_DD_FREE(conf_edd);
|
||||
E_CONFIG_DD_FREE(conf_face_edd);
|
||||
|
||||
for (list = e->faces; list; list = list->next)
|
||||
_start_face_free(list->data);
|
||||
evas_list_free(e->faces);
|
||||
|
||||
e_object_del(E_OBJECT(e->config_menu));
|
||||
|
||||
evas_list_free(e->conf->faces);
|
||||
free(e->conf);
|
||||
free(e);
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_free(Start_Face *face)
|
||||
{
|
||||
e_object_unref(E_OBJECT(face->con));
|
||||
e_object_del(E_OBJECT(face->gmc));
|
||||
evas_object_del(face->button_object);
|
||||
evas_object_del(face->event_object);
|
||||
e_object_del(E_OBJECT(face->menu));
|
||||
if (face->main_menu) e_object_del(E_OBJECT(face->main_menu));
|
||||
|
||||
free(face->conf);
|
||||
free(face);
|
||||
button_count--;
|
||||
}
|
||||
|
||||
static void
|
||||
_start_config_menu_new(Start *e)
|
||||
{
|
||||
e->config_menu = e_menu_new();
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_disable(Start_Face *e)
|
||||
{
|
||||
e->conf->enabled = 0;
|
||||
evas_object_hide(e->button_object);
|
||||
evas_object_hide(e->event_object);
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
|
||||
{
|
||||
Start_Face *e;
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
e = data;
|
||||
switch (change)
|
||||
{
|
||||
case E_GADMAN_CHANGE_MOVE_RESIZE:
|
||||
e_gadman_client_geometry_get(e->gmc, &x, &y, &w, &h);
|
||||
evas_object_move(e->button_object, x, y);
|
||||
evas_object_move(e->event_object, x, y);
|
||||
evas_object_resize(e->button_object, w, h);
|
||||
evas_object_resize(e->event_object, w, h);
|
||||
break;
|
||||
case E_GADMAN_CHANGE_RAISE:
|
||||
evas_object_raise(e->button_object);
|
||||
evas_object_raise(e->event_object);
|
||||
break;
|
||||
case E_GADMAN_CHANGE_EDGE:
|
||||
case E_GADMAN_CHANGE_ZONE:
|
||||
/* FIXME: Must we do something here? */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
Start_Face *face;
|
||||
|
||||
face = data;
|
||||
e_gadman_mode_set(face->gmc->gadman, E_GADMAN_MODE_EDIT);
|
||||
}
|
||||
|
||||
static void
|
||||
_start_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Start_Face *face;
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
|
||||
face = data;
|
||||
ev = event_info;
|
||||
if (ev->button == 3)
|
||||
{
|
||||
e_menu_activate_mouse(face->menu, e_zone_current_get(face->con),
|
||||
ev->output.x, ev->output.y, 1, 1,
|
||||
E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
|
||||
e_util_container_fake_mouse_up_all_later(face->con);
|
||||
}
|
||||
else if (ev->button == 1)
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
e_gadman_client_geometry_get(face->gmc, &x, &y, &w, &h);
|
||||
if (!face->main_menu)
|
||||
face->main_menu = e_int_menus_main_new();
|
||||
e_menu_post_deactivate_callback_set(face->main_menu, _start_menu_cb_post_deactivate, face);
|
||||
e_menu_activate_mouse(face->main_menu, e_zone_current_get(face->con),
|
||||
x, y, w, h,
|
||||
E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
|
||||
e_util_container_fake_mouse_up_all_later(face->con);
|
||||
edje_object_signal_emit(face->button_object, "active", "");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_start_menu_cb_post_deactivate(void *data, E_Menu *m)
|
||||
{
|
||||
Start_Face *face;
|
||||
|
||||
face = data;
|
||||
if (!face->main_menu) return;
|
||||
edje_object_signal_emit(face->button_object, "passive", "");
|
||||
e_object_del(E_OBJECT(face->main_menu));
|
||||
face->main_menu = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_start_cb_config_updated(void *data)
|
||||
{
|
||||
_start_cb_update_policy(data);
|
||||
}
|
||||
|
||||
void
|
||||
_start_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
Start_Face *face;
|
||||
|
||||
face = (Start_Face*)data;
|
||||
if (!face) return;
|
||||
_config_start_module(face->con, face->start);
|
||||
}
|
||||
|
||||
static void
|
||||
_start_cb_update_policy(void *data)
|
||||
{
|
||||
Start *s;
|
||||
Start_Face *sf;
|
||||
Evas_List *l;
|
||||
E_Gadman_Policy policy;
|
||||
|
||||
s = data;
|
||||
for (l = s->faces; l; l = l->next)
|
||||
{
|
||||
sf = l->data;
|
||||
policy = sf->gmc->policy;
|
||||
|
||||
if (s->conf->allow_overlap == 0)
|
||||
policy &= E_GADMAN_POLICY_ALLOW_OVERLAP;
|
||||
else
|
||||
policy |= E_GADMAN_POLICY_ALLOW_OVERLAP;
|
||||
e_gadman_client_policy_set(sf->gmc , policy);
|
||||
}
|
||||
}
|
||||
|
||||
/**/
|
||||
/***************************************************************************/
|
||||
|
|
|
@ -1,45 +1,7 @@
|
|||
#ifndef E_MOD_MAIN_H
|
||||
#define E_MOD_MAIN_H
|
||||
|
||||
typedef struct _Config Config;
|
||||
typedef struct _Config_Face Config_Face;
|
||||
typedef struct _Start Start;
|
||||
typedef struct _Start_Face Start_Face;
|
||||
|
||||
struct _Config
|
||||
{
|
||||
Evas_List *faces;
|
||||
int allow_overlap;
|
||||
};
|
||||
|
||||
struct _Config_Face
|
||||
{
|
||||
unsigned char enabled;
|
||||
};
|
||||
|
||||
struct _Start
|
||||
{
|
||||
Evas_List *faces;
|
||||
E_Menu *config_menu;
|
||||
|
||||
Config *conf;
|
||||
};
|
||||
|
||||
struct _Start_Face
|
||||
{
|
||||
E_Container *con;
|
||||
E_Menu *menu;
|
||||
E_Menu *main_menu;
|
||||
Start *start;
|
||||
|
||||
Config_Face *conf;
|
||||
|
||||
Evas_Object *button_object;
|
||||
Evas_Object *event_object;
|
||||
|
||||
E_Gadman_Client *gmc;
|
||||
};
|
||||
|
||||
/* standard module api calls e looks for */
|
||||
EAPI extern E_Module_Api e_modapi;
|
||||
|
||||
EAPI void *e_modapi_init (E_Module *m);
|
||||
|
@ -49,6 +11,4 @@ EAPI int e_modapi_info (E_Module *m);
|
|||
EAPI int e_modapi_about (E_Module *m);
|
||||
EAPI int e_modapi_config (E_Module *m);
|
||||
|
||||
void _start_cb_config_updated(void *data);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue