diff --git a/data/themes/default_pager.edc b/data/themes/default_pager.edc index 9f5a59b0f..9a7691f98 100644 --- a/data/themes/default_pager.edc +++ b/data/themes/default_pager.edc @@ -27,6 +27,58 @@ group { } } } + + part { + name: "desktop_name"; + type: TEXT; + effect: SOFT_SHADOW; + description { + state: "default" 0.0; + visible: 0; + color: 0 0 0 180; + color3: 0 0 0 15; + text { + text: "Desktop Name"; + font: "Vera"; + size: 8; + min: 1 1; + align: 0.5 0.5; + } + } + description { + state: "name_top" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1 { + to_x: "items"; + to_y: "background"; + relative: 0 0; + offset: 0 8; + } + rel2 { + to: "items"; + relative: 1 0; + offset: -1 -1; + } + } + description { + state: "name_bottom" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1 { + to: "items"; + relative: 0 1; + offset: 0 2; + } + rel2 { + to_x: "items"; + to_y: "background"; + offset: -1 -4; + } + } + } + + part { name: "items"; mouse_events: 0; @@ -41,6 +93,16 @@ group { } color: 0 0 0 0; } + description { + state: "name_top" 0.0; + inherit: "default" 0.0; + rel1.offset: 5 18; + } + description { + state: "name_bottom" 0.0; + inherit: "default" 0.0; + rel2.offset: -6 -19; + } } part { name: "overlay"; @@ -58,6 +120,37 @@ group { } } } + + programs { + program { + name: "name_top"; + signal: "desktop_name,top"; + source: "*"; + action: STATE_SET "name_top" 0.0; + target: "items"; + target: "desktop_name"; + transition: DECELERATE 0.25; + } + program { + name: "name_bottom"; + signal: "desktop_name,bottom"; + source: "*"; + action: STATE_SET "name_bottom" 0.0; + target: "items"; + target: "desktop_name"; + transition: DECELERATE 0.25; + } + program { + name: "name_none"; + signal: "desktop_name,none"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "items"; + target: "desktop_name"; + transition: DECELERATE 0.25; + } + } + } group { diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 05520c660..a91b27a8b 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -10,13 +10,16 @@ static void _e_desk_free(E_Desk *desk); static void _e_border_event_desk_show_free(void *data, void *ev); +static void _e_border_event_desk_name_change_free(void *data, void *ev); int E_EVENT_DESK_SHOW = 0; +int E_EVENT_DESK_NAME_CHANGE = 0; int e_desk_init(void) { E_EVENT_DESK_SHOW = ecore_event_type_new(); + E_EVENT_DESK_NAME_CHANGE = ecore_event_type_new(); return 1; } @@ -74,10 +77,17 @@ e_desk_new(E_Zone *zone, int x, int y) void e_desk_name_set(E_Desk *desk, const char *name) { + E_Event_Desk_Name_Change *ev; + E_OBJECT_CHECK(desk); E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE); E_FREE(desk->name); desk->name = strdup(name); + + ev = E_NEW(E_Event_Desk_Name_Change, 1); + ev->desk = desk; + e_object_ref(E_OBJECT(desk)); + ecore_event_add(E_EVENT_DESK_NAME_CHANGE, ev, _e_border_event_desk_name_change_free, NULL); } void @@ -402,3 +412,12 @@ _e_border_event_desk_show_free(void *data, void *event) free(ev); } +static void +_e_border_event_desk_name_change_free(void *data, void *event) +{ + E_Event_Desk_Name_Change *ev; + + ev = event; + e_object_unref(E_OBJECT(ev->desk)); + free(ev); +} diff --git a/src/bin/e_desk.h b/src/bin/e_desk.h index 18feb848f..40ca47d71 100644 --- a/src/bin/e_desk.h +++ b/src/bin/e_desk.h @@ -5,6 +5,7 @@ typedef struct _E_Desk E_Desk; typedef struct _E_Event_Desk_Show E_Event_Desk_Show; +typedef struct _E_Event_Desk_Name_Change E_Event_Desk_Name_Change; #else #ifndef E_DESK_H @@ -29,6 +30,11 @@ struct _E_Event_Desk_Show E_Desk *desk; }; +struct _E_Event_Desk_Name_Change +{ + E_Desk *desk; +}; + EAPI int e_desk_init(void); EAPI int e_desk_shutdown(void); EAPI E_Desk *e_desk_new(E_Zone *zone, int x, int y); @@ -50,6 +56,7 @@ EAPI void e_desk_col_add(E_Zone *zone); EAPI void e_desk_col_remove(E_Zone *zone); extern EAPI int E_EVENT_DESK_SHOW; +extern EAPI int E_EVENT_DESK_NAME_CHANGE; #endif #endif diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 03a4d9931..8511b98e9 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -14,7 +14,7 @@ static Pager *_pager_new(); static void _pager_free(Pager *pager); static void _pager_config_menu_new(Pager *pager); -static Pager_Face *_pager_face_new(E_Zone *zone); +static Pager_Face *_pager_face_new(Pager *pager, E_Zone *zone); static void _pager_face_free(Pager_Face *face); static void _pager_face_menu_new(Pager_Face *face); static void _pager_face_enable(Pager_Face *face); @@ -49,6 +49,7 @@ static int _pager_face_cb_event_border_lower(void *data, int type, void static int _pager_face_cb_event_border_icon_change(void *data, int type, void *event); static int _pager_face_cb_event_zone_desk_count_set(void *data, int type, void *event); static int _pager_face_cb_event_desk_show(void *data, int type, void *event); +static int _pager_face_cb_event_desk_name_change(void *data, int type, void *event); static int _pager_face_cb_event_container_resize(void *data, int type, void *event); static void _pager_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi); static void _pager_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); @@ -67,6 +68,13 @@ static void _pager_face_cb_move(void *data, const char *type, void *drop) static void _pager_face_cb_leave(void *data, const char *type, void *drop); static void _pager_face_cb_drop(void *data, const char *type, void *drop); +static void _pager_face_cb_deskname_none(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_face_cb_deskname_top(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_face_cb_deskname_bottom(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_face_cb_deskname_left(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_face_cb_deskname_right(void *data, E_Menu *m, E_Menu_Item *mi); +static void _pager_face_deskname_position_change(Pager_Face *face); + static int _pager_count; static E_Config_DD *_conf_edd; @@ -176,6 +184,7 @@ _pager_new() #define T Config #define D _conf_edd E_CONFIG_LIST(D, T, faces, _conf_face_edd); + E_CONFIG_VAL(D, T, deskname_pos, UINT); pager->conf = e_config_domain_load("module.pager", _conf_edd); if (!pager->conf) @@ -206,7 +215,7 @@ _pager_new() { zone = l3->data; - face = _pager_face_new(zone); + face = _pager_face_new(pager, zone); if (face) { pager->faces = evas_list_append(pager->faces, face); @@ -269,11 +278,66 @@ _pager_free(Pager *pager) static void _pager_config_menu_new(Pager *pager) { - pager->config_menu = e_menu_new(); + E_Menu *mn; + E_Menu_Item *mi; + + mn = e_menu_new(); + pager->config_menu = mn; + + mn = e_menu_new(); + pager->config_menu_deskname = mn; + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("None")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (pager->conf->deskname_pos == PAGER_DESKNAME_NONE) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _pager_face_cb_deskname_none, pager); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Top")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (pager->conf->deskname_pos == PAGER_DESKNAME_TOP) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _pager_face_cb_deskname_top, pager); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Bottom")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (pager->conf->deskname_pos == PAGER_DESKNAME_BOTTOM) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _pager_face_cb_deskname_bottom, pager); + + /* FIXME: implement this in the theme, then re-enable */ + /* + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Left")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (pager->conf->deskname_pos == PAGER_DESKNAME_LEFT) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _pager_face_cb_deskname_left, pager); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Right")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (pager->conf->deskname_pos == PAGER_DESKNAME_RIGHT) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _pager_face_cb_deskname_right, pager); + */ + + /* Submenus */ + mi = e_menu_item_new(pager->config_menu); + e_menu_item_label_set(mi, _("Desktop Name")); + e_menu_item_submenu_set(mi, pager->config_menu_deskname); } static Pager_Face * -_pager_face_new(E_Zone *zone) +_pager_face_new(Pager *pager, E_Zone *zone) { Pager_Face *face; Evas_Object *o; @@ -282,6 +346,8 @@ _pager_face_new(E_Zone *zone) face = E_NEW(Pager_Face, 1); if (!face) return NULL; + face->pager = pager; + /* store what evas we live in */ face->evas = zone->container->bg_evas; @@ -328,6 +394,9 @@ _pager_face_new(E_Zone *zone) face->ev_handler_desk_show = ecore_event_handler_add(E_EVENT_DESK_SHOW, _pager_face_cb_event_desk_show, face); + face->ev_handler_desk_name_change = + ecore_event_handler_add(E_EVENT_DESK_NAME_CHANGE, + _pager_face_cb_event_desk_name_change, face); face->ev_handler_container_resize = ecore_event_handler_add(E_EVENT_CONTAINER_RESIZE, _pager_face_cb_event_container_resize, face); @@ -379,6 +448,8 @@ _pager_face_new(E_Zone *zone) e_gadman_client_change_func_set(face->gmc, _pager_face_cb_gmc_change, face); e_gadman_client_load(face->gmc); + _pager_face_deskname_position_change(face); + return face; } @@ -407,6 +478,7 @@ _pager_face_free(Pager_Face *face) ecore_event_handler_del(face->ev_handler_border_icon_change); ecore_event_handler_del(face->ev_handler_zone_desk_count_set); ecore_event_handler_del(face->ev_handler_desk_show); + ecore_event_handler_del(face->ev_handler_desk_name_change); ecore_event_handler_del(face->ev_handler_container_resize); e_object_del(E_OBJECT(face->menu)); @@ -436,6 +508,11 @@ _pager_face_menu_new(Pager_Face *face) mi = e_menu_item_new(mn); e_menu_item_label_set(mi, _("Edit Mode")); e_menu_item_callback_set(mi, _pager_face_cb_menu_edit, face); + + /* Submenus */ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Desktop Name")); + e_menu_item_submenu_set(mi, face->pager->config_menu_deskname); } static void @@ -723,6 +800,7 @@ _pager_face_desk_select(Pager_Desk *pd) } } } + edje_object_part_text_set(pd->face->pager_object, "desktop_name", pd->desk->name); } static void @@ -1230,6 +1308,32 @@ _pager_face_cb_event_desk_show(void *data, int type, void *event) return 1; } +static int +_pager_face_cb_event_desk_name_change(void *data, int type, void *event) +{ + Pager_Face *face; + E_Event_Desk_Show *ev; + Evas_List *l; + + face = data; + ev = event; + if (face->zone != ev->desk->zone) return 1; + + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + pd = l->data; + + if ( (pd->desk == ev->desk) && pd->current) + { + edje_object_part_text_set(pd->face->pager_object, "desktop_name", ev->desk->name); + break; + } + + } + return 1; +} + static int _pager_face_cb_event_container_resize(void *data, int type, void *event) { @@ -1489,3 +1593,117 @@ _pager_face_cb_drop(void *data, const char *type, void *event_info) edje_object_signal_emit(pd->desk_object, "drag", "out"); } } + +static void +_pager_face_cb_deskname_none(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Pager *pager; + Evas_List *l; + + pager = data; + pager->conf->deskname_pos = PAGER_DESKNAME_NONE; + for (l = pager->faces; l; l = l->next) + { + Pager_Face *face; + + face = l->data; + _pager_face_deskname_position_change(face); + } + e_config_save_queue(); +} + +static void +_pager_face_cb_deskname_top(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Pager *pager; + Evas_List *l; + + pager = data; + pager->conf->deskname_pos = PAGER_DESKNAME_TOP; + for (l = pager->faces; l; l = l->next) + { + Pager_Face *face; + + face = l->data; + _pager_face_deskname_position_change(face); + } + e_config_save_queue(); +} + +static void +_pager_face_cb_deskname_bottom(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Pager *pager; + Evas_List *l; + + pager = data; + pager->conf->deskname_pos = PAGER_DESKNAME_BOTTOM; + for (l = pager->faces; l; l = l->next) + { + Pager_Face *face; + + face = l->data; + _pager_face_deskname_position_change(face); + } + e_config_save_queue(); +} + +static void +_pager_face_cb_deskname_left(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Pager *pager; + Evas_List *l; + + pager = data; + pager->conf->deskname_pos = PAGER_DESKNAME_LEFT; + for (l = pager->faces; l; l = l->next) + { + Pager_Face *face; + + face = l->data; + _pager_face_deskname_position_change(face); + } + e_config_save_queue(); +} + +static void +_pager_face_cb_deskname_right(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Pager *pager; + Evas_List *l; + + pager = data; + pager->conf->deskname_pos = PAGER_DESKNAME_RIGHT; + for (l = pager->faces; l; l = l->next) + { + Pager_Face *face; + + face = l->data; + _pager_face_deskname_position_change(face); + } + e_config_save_queue(); +} + +static void +_pager_face_deskname_position_change(Pager_Face *face) +{ + switch (face->pager->conf->deskname_pos) + { + case PAGER_DESKNAME_NONE: + edje_object_signal_emit(face->pager_object, "desktop_name,none", ""); + break; + case PAGER_DESKNAME_TOP: + edje_object_signal_emit(face->pager_object, "desktop_name,top", ""); + break; + case PAGER_DESKNAME_BOTTOM: + edje_object_signal_emit(face->pager_object, "desktop_name,bottom", ""); + break; + case PAGER_DESKNAME_LEFT: + edje_object_signal_emit(face->pager_object, "desktop_name,left", ""); + break; + case PAGER_DESKNAME_RIGHT: + edje_object_signal_emit(face->pager_object, "desktop_name,right", ""); + break; + } +} + diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index 73a5b2570..18b0f0a1b 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -16,9 +16,17 @@ typedef struct _Pager_Win Pager_Win; #define PAGER_RESIZE_VERT 2 #define PAGER_RESIZE_BOTH 3 +#define PAGER_DESKNAME_NONE 0 +#define PAGER_DESKNAME_TOP 1 +#define PAGER_DESKNAME_BOTTOM 2 +#define PAGER_DESKNAME_LEFT 3 +#define PAGER_DESKNAME_RIGHT 4 + struct _Config { Evas_List *faces; + /* Position of desktop name */ + unsigned int deskname_pos; }; struct _Config_Face @@ -35,6 +43,7 @@ struct _Pager { Evas_List *faces; E_Menu *config_menu; + E_Menu *config_menu_deskname; Evas_List *menus; Config *conf; @@ -42,6 +51,7 @@ struct _Pager struct _Pager_Face { + Pager *pager; E_Gadman_Client *gmc; E_Menu *menu; Evas *evas; @@ -76,6 +86,7 @@ struct _Pager_Face Ecore_Event_Handler *ev_handler_border_icon_change; Ecore_Event_Handler *ev_handler_zone_desk_count_set; Ecore_Event_Handler *ev_handler_desk_show; + Ecore_Event_Handler *ev_handler_desk_name_change; Ecore_Event_Handler *ev_handler_container_resize; E_Drop_Handler *drop_handler;