diff --git a/TODO b/TODO index fa0f884e5..2e970546c 100644 --- a/TODO +++ b/TODO @@ -40,6 +40,7 @@ ISSUES: * e_apps polling/updates is broken * objects need object types to check the right obj type is passed * check on delete all app files/dirs then add all back then pop up menu (segv) +* border show/hide needs to show from top down and hide from bottom up diff --git a/src/bin/e_gadman.c b/src/bin/e_gadman.c index f9aef6309..5b40934f6 100644 --- a/src/bin/e_gadman.c +++ b/src/bin/e_gadman.c @@ -6,6 +6,25 @@ /* local subsystem functions */ static void _e_gadman_free(E_Gadman *gm); static void _e_gadman_client_free(E_Gadman_Client *gmc); +static void _e_gadman_client_edit_begin(E_Gadman_Client *gmc); +static void _e_gadman_client_edit_end(E_Gadman_Client *gmc); + + +static void _e_gadman_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_move_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emission, const char *source); /* externally accessible functions */ int @@ -41,6 +60,7 @@ e_gadman_client_new(E_Gadman *gm) if (!gmc) return NULL; gmc->gadman = gm; gmc->policy = E_GADMAN_POLICY_ANYWHERE; + gmc->zone = e_zone_current_get(gm->container); gmc->minw = 1; gmc->minh = 1; gmc->maxw = 0; @@ -53,6 +73,48 @@ e_gadman_client_new(E_Gadman *gm) return gmc; } +void +e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode) +{ + Evas_List *l; + + E_OBJECT_CHECK(gm); + if (gm->mode == mode) return; + gm->mode = mode; + if (gm->mode == E_GADMAN_MODE_EDIT) + { + for (l = gm->clients; l; l = l->next) + _e_gadman_client_edit_begin(l->data); + } + else if (gm->mode == E_GADMAN_MODE_NORMAL) + { + for (l = gm->clients; l; l = l->next) + _e_gadman_client_edit_end(l->data); + } +} + +E_Gadman_Mode +e_gadman_mode_get(E_Gadman *gm) +{ + E_OBJECT_CHECK_RETURN(gm, E_GADMAN_MODE_NORMAL); + return gm->mode; +} + +void +e_gadman_client_save(E_Gadman_Client *gmc, char *domain, int instance) +{ + E_OBJECT_CHECK(gmc); + /* cave all values */ +} + +void +e_gadman_client_load(E_Gadman_Client *gmc, char *domain, int instance) +{ + E_OBJECT_CHECK(gmc); + /* load all the vales */ + /* implement all the values */ +} + void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance) { @@ -63,15 +125,10 @@ e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance) } void -e_gadman_client_save(E_Gadman_Client *gmc, char *domain, int instance) -{ - E_OBJECT_CHECK(gmc); -} - -void -e_gadman_client_load(E_Gadman_Client *gmc, char *domain, int instance) +e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone) { E_OBJECT_CHECK(gmc); + gmc->zone = zone; } void @@ -145,3 +202,174 @@ _e_gadman_client_free(E_Gadman_Client *gmc) if (gmc->domain) free(gmc->domain); free(gmc); } + +static void +_e_gadman_client_edit_begin(E_Gadman_Client *gmc) +{ + gmc->control_object = edje_object_add(gmc->gadman->container->bg_evas); + evas_object_layer_set(gmc->control_object, 100); + evas_object_move(gmc->control_object, gmc->x, gmc->y); + evas_object_resize(gmc->control_object, gmc->w, gmc->h); + edje_object_file_set(gmc->control_object, + /* FIXME: "default.eet" needs to come from conf */ + e_path_find(path_themes, "default.eet"), + "gadman/control"); + edje_object_signal_callback_add(gmc->control_object, "move_start", "*", + _e_gadman_cb_signal_move_start, gmc); + edje_object_signal_callback_add(gmc->control_object, "move_stop", "*", + _e_gadman_cb_signal_move_stop, gmc); + edje_object_signal_callback_add(gmc->control_object, "move_go", "*", + _e_gadman_cb_signal_move_go, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_start", "left", + _e_gadman_cb_signal_resize_left_start, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_stop", "left", + _e_gadman_cb_signal_resize_left_stop, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_go", "left", + _e_gadman_cb_signal_resize_left_go, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_start", "right", + _e_gadman_cb_signal_resize_right_start, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_stop", "right", + _e_gadman_cb_signal_resize_right_stop, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_go", "right", + _e_gadman_cb_signal_resize_right_go, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_start", "up", + _e_gadman_cb_signal_resize_up_start, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_stop", "up", + _e_gadman_cb_signal_resize_up_stop, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_go", "up", + _e_gadman_cb_signal_resize_up_go, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_start", "down", + _e_gadman_cb_signal_resize_down_start, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_stop", "down", + _e_gadman_cb_signal_resize_down_stop, gmc); + edje_object_signal_callback_add(gmc->control_object, "resize_go", "down", + _e_gadman_cb_signal_resize_down_go, gmc); + evas_object_show(gmc->control_object); +} + +static void +_e_gadman_client_edit_end(E_Gadman_Client *gmc) +{ + evas_object_del(gmc->control_object); +} + +static void +_e_gadman_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_move_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + +static void +_e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Gadman_Client *gmc; + + gmc = data; +} + diff --git a/src/bin/e_gadman.h b/src/bin/e_gadman.h index a9e3535d9..f83ba8e2d 100644 --- a/src/bin/e_gadman.h +++ b/src/bin/e_gadman.h @@ -20,9 +20,15 @@ typedef enum _E_Gadman_Policy typedef enum _E_Gadman_Change { E_GADMAN_CHANGE_MOVE, - E_GADMAN_CHANGE_RESIZE, + E_GADMAN_CHANGE_RESIZE } E_Gadman_Change; +typedef enum _E_Gadman_Mode +{ + E_GADMAN_MODE_NORMAL, + E_GADMAN_MODE_EDIT +} E_Gadman_Mode; + typedef struct _E_Gadman E_Gadman; typedef struct _E_Gadman_Client E_Gadman_Client; @@ -35,6 +41,7 @@ struct _E_Gadman E_Object e_obj_inherit; E_Container *container; Evas_List *clients; + E_Gadman_Mode mode; }; struct _E_Gadman_Client @@ -44,6 +51,7 @@ struct _E_Gadman_Client Evas_Object *control_object; char *domain; + E_Zone *zone; int instance; E_Gadman_Policy policy; Evas_Coord x, y, w, h; @@ -56,11 +64,14 @@ struct _E_Gadman_Client EAPI int e_gadman_init(void); EAPI int e_gadman_shutdown(void); +EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode); +EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm); EAPI E_Gadman *e_gadman_new(E_Container *con); EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm); -EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance); EAPI void e_gadman_client_save(E_Gadman_Client *gmc, char *domain, int instance); EAPI void e_gadman_client_load(E_Gadman_Client *gmc, char *domain, int instance); +EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance); +EAPI void e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone); EAPI void e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol); EAPI void e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh); EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh); diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 55be50c81..57b44ba2a 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -12,6 +12,7 @@ struct _Main_Data E_Menu *desktops; E_Menu *clients; E_Menu *modules; + E_Menu *gadgets; }; /* local subsystem functions */ @@ -33,6 +34,8 @@ static void _e_int_menus_desktops_row_add_cb (void *data, E_Menu *m, E_Menu_Item static void _e_int_menus_desktops_row_del_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_desktops_col_add_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_desktops_col_del_cb (void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_int_menus_gadgets_pre_cb (void *data, E_Menu *m); +static void _e_int_menus_gadgets_edit_mode_cb(void *data, E_Menu *m, E_Menu_Item *mi); /* externally accessible functions */ E_Menu * @@ -83,6 +86,14 @@ e_int_menus_main_new(void) "windows"); e_menu_item_submenu_set(mi, subm); + subm = e_int_menus_gadgets_new(); + dat->gadgets = subm; + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, "Gadgets"); + e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"), + "gadgets"); + e_menu_item_submenu_set(mi, subm); + mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); @@ -133,7 +144,6 @@ e_int_menus_desktops_new(void) e_menu_pre_activate_callback_set(m, _e_int_menus_desktops_pre_cb, NULL); return m; } - E_Menu * e_int_menus_favorite_apps_new(void) @@ -163,6 +173,16 @@ e_int_menus_clients_new(void) return m; } +E_Menu * +e_int_menus_gadgets_new(void) +{ + E_Menu *m; + + m = e_menu_new(); + e_menu_pre_activate_callback_set(m, _e_int_menus_gadgets_pre_cb, NULL); + return m; +} + /* local subsystem functions */ static void _e_int_menus_main_del_hook(void *obj) @@ -178,6 +198,7 @@ _e_int_menus_main_del_hook(void *obj) e_object_del(E_OBJECT(dat->modules)); e_object_del(E_OBJECT(dat->desktops)); e_object_del(E_OBJECT(dat->clients)); + e_object_del(E_OBJECT(dat->gadgets)); free(dat); } } @@ -481,3 +502,42 @@ _e_int_menus_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) e_border_raise(bd); e_border_focus_set(bd, 1, 1); } + +static void +_e_int_menus_gadgets_pre_cb(void *data, E_Menu *m) +{ + E_Menu_Item *mi; + E_Menu *root; + + e_menu_pre_activate_callback_set(m, NULL, NULL); + root = e_menu_root_get(m); + if ((root) && (root->zone)) + { + mi = e_menu_item_new(m); + e_menu_item_check_set(mi, 1); + if (e_gadman_mode_get(root->zone->container->gadman) == E_GADMAN_MODE_EDIT) + e_menu_item_toggle_set(mi, 1); + else + e_menu_item_toggle_set(mi, 0); + e_menu_item_label_set(mi, "Edit Mode"); + e_menu_item_callback_set(mi, _e_int_menus_gadgets_edit_mode_cb, root->zone->container->gadman); + } + else + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, "(Unused)"); + e_menu_item_callback_set(mi, NULL, NULL); + } +} + +static void +_e_int_menus_gadgets_edit_mode_cb(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadman *gm; + + gm = data; + if (e_menu_item_toggle_get(mi)) + e_gadman_mode_set(gm, E_GADMAN_MODE_EDIT); + else + e_gadman_mode_set(gm, E_GADMAN_MODE_NORMAL); +} diff --git a/src/bin/e_int_menus.h b/src/bin/e_int_menus.h index 6b71c0064..c0a04128e 100644 --- a/src/bin/e_int_menus.h +++ b/src/bin/e_int_menus.h @@ -8,6 +8,7 @@ EAPI E_Menu *e_int_menus_desktops_new(void); EAPI E_Menu *e_int_menus_clients_new(void); EAPI E_Menu *e_int_menus_apps_new(char *dir); EAPI E_Menu *e_int_menus_favorite_apps_new(void); +EAPI E_Menu *e_int_menus_gadgets_new(void); #endif #endif diff --git a/src/bin/e_main.c b/src/bin/e_main.c index d29559a02..dcb365ad2 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -534,6 +534,16 @@ _e_main_screens_init(void) i); return 0; } + /* FIXME: testing... */ + { + E_Gadman_Client *gmc; + + gmc = e_gadman_client_new(con->gadman); + gmc->x = 100; + gmc->y = 100; + gmc->w = 150; + gmc->h = 150; + } } free(roots); ecore_x_sync(); diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index ef4ff9cfc..3d2f0702b 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -192,7 +192,11 @@ _e_manager_cb_window_show_request(void *data, int ev_type, void *ev) if (!e_border_find_by_client_window(e->win)) { bd = e_border_new(con, e->win, 0); - if (bd) e_border_show(bd); + if (bd) + { + e_border_raise(bd); + e_border_show(bd); + } else ecore_x_window_show(e->win); } } diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c index 45fc044a5..d7847a956 100644 --- a/src/bin/e_zone.c +++ b/src/bin/e_zone.c @@ -89,7 +89,6 @@ e_zone_new(E_Container *con, int x, int y, int w, int h) e_zone_desk_count_set(zone, e_config->zone_desks_x_count, e_config->zone_desks_y_count); - return zone; }