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:
Carsten Haitzler 2006-02-10 09:26:12 +00:00
parent 15c398e635
commit e23367f722
6 changed files with 153 additions and 556 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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);
}
}
/**/
/***************************************************************************/

View File

@ -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