From f1f9673f119392f2af28728bfe559e44867f94ec Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 6 Aug 2005 04:00:03 +0000 Subject: [PATCH] desktop name ipc patch. slight formatting stuff. SVN revision: 16043 --- src/bin/e_actions.c | 2 +- src/bin/e_config.c | 17 +++++ src/bin/e_config.h | 12 ++++ src/bin/e_desk.c | 118 +++++++++++++++++++++++++++++++++- src/bin/e_desk.h | 3 + src/bin/e_ipc_handlers.h | 67 ++++++++++++++++++- src/bin/e_ipc_handlers_list.h | 4 ++ 7 files changed, 219 insertions(+), 4 deletions(-) diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index f7ba737af..db3322172 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -353,7 +353,7 @@ ACT_FN_GO(move_absolute) if (cx == '-') x = bd->zone->w - bd->w - x; if (cy == '-') y = bd->zone->h - bd->h - y; - if (x != bd->x || y != bd->y) + if ((x != bd->x) || (y != bd->y)) { e_border_move(bd, x, y); diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 233582905..9e523d9f0 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -30,6 +30,7 @@ static E_Config_DD *_e_config_bindings_mouse_edd = NULL; static E_Config_DD *_e_config_bindings_key_edd = NULL; static E_Config_DD *_e_config_path_append_edd = NULL; static E_Config_DD *_e_config_desktop_bg_edd = NULL; +static E_Config_DD *_e_config_desktop_name_edd = NULL; static E_Config_DD *_e_config_remember_edd = NULL; /* externally accessible functions */ @@ -81,6 +82,17 @@ e_config_init(void) E_CONFIG_VAL(D, T, desk_y, INT); E_CONFIG_VAL(D, T, file, STR); + _e_config_desktop_name_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Name", E_Config_Desktop_Name); +#undef T +#undef D +#define T E_Config_Desktop_Name +#define D _e_config_desktop_name_edd + E_CONFIG_VAL(D, T, container, INT); + E_CONFIG_VAL(D, T, zone, INT); + E_CONFIG_VAL(D, T, desk_x, INT); + E_CONFIG_VAL(D, T, desk_y, INT); + E_CONFIG_VAL(D, T, name, STR); + _e_config_path_append_edd = E_CONFIG_DD_NEW("E_Path_Dir", E_Path_Dir); #undef T #undef D @@ -211,7 +223,9 @@ e_config_init(void) E_CONFIG_VAL(D, T, config_version, INT); /**/ E_CONFIG_VAL(D, T, show_splash, INT); /**/ E_CONFIG_VAL(D, T, desktop_default_background, STR); /**/ + E_CONFIG_VAL(D, T, desktop_default_name, STR); /**/ E_CONFIG_LIST(D, T, desktop_backgrounds, _e_config_desktop_bg_edd); /**/ + E_CONFIG_LIST(D, T, desktop_names, _e_config_desktop_name_edd); /**/ E_CONFIG_VAL(D, T, menus_scroll_speed, DOUBLE); /**/ E_CONFIG_VAL(D, T, menus_fast_mouse_move_threshhold, DOUBLE); /**/ E_CONFIG_VAL(D, T, menus_click_drag_timeout, DOUBLE); /**/ @@ -323,6 +337,7 @@ e_config_init(void) e_config->config_version = E_CONFIG_FILE_VERSION; e_config->show_splash = 1; e_config->desktop_default_background = strdup(""); + e_config->desktop_default_name = strdup("Desktop %d, %d"); e_config->menus_scroll_speed = 1000.0; e_config->menus_fast_mouse_move_threshhold = 300.0; e_config->menus_click_drag_timeout = DEF_MENUCLICK; @@ -966,6 +981,7 @@ e_config_shutdown(void) E_CONFIG_DD_FREE(_e_config_bindings_key_edd); E_CONFIG_DD_FREE(_e_config_path_append_edd); E_CONFIG_DD_FREE(_e_config_desktop_bg_edd); + E_CONFIG_DD_FREE(_e_config_desktop_name_edd); E_CONFIG_DD_FREE(_e_config_remember_edd); return 1; } @@ -1352,6 +1368,7 @@ _e_config_free(void) } E_FREE(e_config->desktop_default_background); + E_FREE(e_config->desktop_default_name); E_FREE(e_config->language); E_FREE(e_config->transition_start); E_FREE(e_config->transition_desk); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 84b9e64c5..e59895ba0 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -37,6 +37,7 @@ typedef struct _E_Config_Theme E_Config_Theme; typedef struct _E_Config_Binding_Mouse E_Config_Binding_Mouse; typedef struct _E_Config_Binding_Key E_Config_Binding_Key; typedef struct _E_Config_Desktop_Background E_Config_Desktop_Background; +typedef struct _E_Config_Desktop_Name E_Config_Desktop_Name; typedef Eet_Data_Descriptor E_Config_DD; #else @@ -59,6 +60,8 @@ struct _E_Config int show_splash; char *desktop_default_background; Evas_List *desktop_backgrounds; + char *desktop_default_name; + Evas_List *desktop_names; double menus_scroll_speed; double menus_fast_mouse_move_threshhold; double menus_click_drag_timeout; @@ -182,6 +185,15 @@ struct _E_Config_Desktop_Background char *file; }; +struct _E_Config_Desktop_Name +{ + int container; + int zone; + int desk_x; + int desk_y; + char *name; +}; + EAPI int e_config_init(void); EAPI int e_config_shutdown(void); diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index ee5b5f4d3..1c5c5e29f 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -31,6 +31,8 @@ e_desk_new(E_Zone *zone, int x, int y) { E_Desk *desk; char name[40]; + int ok; + Evas_List *l; E_OBJECT_CHECK_RETURN(zone, NULL); E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL); @@ -41,9 +43,31 @@ e_desk_new(E_Zone *zone, int x, int y) desk->zone = zone; desk->x = x; desk->y = y; - snprintf(name, sizeof(name), _("Desktop %d, %d"), x, y); - desk->name = strdup(name); +/* Get current desktop's name */ + ok = 0; + + for (l = e_config->desktop_names; l; l = l->next) + { + E_Config_Desktop_Name *cfname; + + cfname = l->data; + if ((cfname->container >= 0) && + (zone->container->num != cfname->container)) continue; + if ((cfname->zone >= 0) && + (zone->num != cfname->zone)) continue; + if ((cfname->desk_x != desk->x) || (cfname->desk_y != desk->y)) continue; + desk->name = strdup(cfname->name); + ok = 1; + break; + } + + if (!ok) + { + snprintf(name, sizeof(name), _(e_config->desktop_default_name), x, y); + desk->name = strdup(name); + } + return desk; } @@ -56,6 +80,96 @@ e_desk_name_set(E_Desk *desk, const char *name) desk->name = strdup(name); } +void +e_desk_name_add(int container, int zone, int desk_x, int desk_y, char *name) +{ + E_Config_Desktop_Name *cfname; + + e_desk_name_del(container, zone, desk_x, desk_y); + cfname = E_NEW(E_Config_Desktop_Name, 1); + cfname->container = container; + cfname->zone = zone; + cfname->desk_x = desk_x; + cfname->desk_y = desk_y; + cfname->name = strdup(name); + e_config->desktop_names = evas_list_append(e_config->desktop_names, cfname); +} + +void +e_desk_name_del(int container, int zone, int desk_x, int desk_y) +{ + Evas_List *l; + + for (l = e_config->desktop_names; l; l = l->next) + { + E_Config_Desktop_Name *cfname; + + cfname = l->data; + if ((cfname->container == container) && (cfname->zone == zone) && + (cfname->desk_x == desk_x) && (cfname->desk_y == desk_y)) + { + e_config->desktop_names = evas_list_remove_list(e_config->desktop_names, l); + IF_FREE(cfname->name); + free(cfname); + break; + } + } +} + +void +e_desk_name_update(void) +{ + Evas_List *m, *c, *z, *d, *l; + E_Manager *man; + E_Container *con; + E_Zone *zone; + E_Desk *desk; + int d_x, d_y, ok; + char name[40]; + + for (m = e_manager_list(); m; m = m->next) + { + man = m->data; + for (c = man->containers; c; c = c->next) + { + con = c->data; + for (z = con->zones; z; z = z->next) + { + zone = z->data; + for (d_x = 0; d_x < zone->desk_x_count; d_x++) + { + for (d_y = 0; d_y < zone->desk_y_count; d_y++) + { + desk = zone->desks[d_x + zone->desk_x_count * d_y]; + ok = 0; + + for (l = e_config->desktop_names; l; l = l->next) + { + E_Config_Desktop_Name *cfname; + + cfname = l->data; + if ((cfname->container >= 0) && + (con->num != cfname->container)) continue; + if ((cfname->zone >= 0) && + (zone->num != cfname->zone)) continue; + if ((cfname->desk_x != d_x) || (cfname->desk_y != d_y)) continue; + e_desk_name_set(desk,cfname->name); + ok = 1; + break; + } + + if (!ok) + { + snprintf(name, sizeof(name), _(e_config->desktop_default_name), d_x, d_y); + e_desk_name_set(desk,name); + } + } + } + } + } + } +} + void e_desk_show(E_Desk *desk) { diff --git a/src/bin/e_desk.h b/src/bin/e_desk.h index a9213d582..18feb848f 100644 --- a/src/bin/e_desk.h +++ b/src/bin/e_desk.h @@ -33,6 +33,9 @@ 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); EAPI void e_desk_name_set(E_Desk *desk, const char *name); +EAPI void e_desk_name_add(int container, int zone, int desk_x, int desk_y, char *name); +EAPI void e_desk_name_del(int container, int zone, int desk_x, int desk_y); +EAPI void e_desk_name_update(void); EAPI void e_desk_show(E_Desk *desk); EAPI void e_desk_last_focused_focus(E_Desk *desk); EAPI E_Desk *e_desk_current_get(E_Zone *zone); diff --git a/src/bin/e_ipc_handlers.h b/src/bin/e_ipc_handlers.h index 917e089e1..8d0037ac0 100644 --- a/src/bin/e_ipc_handlers.h +++ b/src/bin/e_ipc_handlers.h @@ -2981,7 +2981,6 @@ break; #undef HDL /****************************************************************************/ - #define HDL E_IPC_OP_WINLIST_WARP_WHILE_SELECTING_SET #if (TYPE == E_REMOTE_OPTIONS) OP("-winlist-warp-while-selecting-set", 1, "Set winlist (alt+tab) warp while selecting policy", 0, HDL) @@ -4442,6 +4441,72 @@ break; #endif #undef HDL +/****************************************************************************/ +#define HDL E_IPC_OP_DESKTOP_NAME_ADD +#if (TYPE == E_REMOTE_OPTIONS) + OP("-desktop-name-add", 5, "Add a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = desktop name", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_4INT_2STRING_START(HDL); + REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), params[4], "", HDL); +#elif (TYPE == E_WM_IN) + INT4_STRING2(v, HDL); + e_desk_name_add(v->val1, v->val2, v->val3, v->val4, v->str1); + e_desk_name_update(); + SAVE; + END_INT4_STRING2(v); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_DESKTOP_NAME_DEL +#if (TYPE == E_REMOTE_OPTIONS) + OP("-desktop-name-del", 4, "Delete a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y.", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_4INT_2STRING_START(HDL); + REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), "", "", HDL); +#elif (TYPE == E_WM_IN) + INT4_STRING2(v, HDL); + e_desk_name_del(v->val1, v->val2, v->val3, v->val4); + e_desk_name_update(); + SAVE; + END_INT4_STRING2(v); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_DESKTOP_NAME_LIST +#if (TYPE == E_REMOTE_OPTIONS) + OP("-desktop-name-list", 0, "List all current desktop name definitions", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL); +#elif (TYPE == E_WM_IN) + SEND_INT4_STRING2_LIST(e_config->desktop_names, E_Config_Desktop_Name, cfname, v, HDL); + v->val1 = cfname->container; + v->val2 = cfname->zone; + v->val3 = cfname->desk_x; + v->val4 = cfname->desk_y; + v->str1 = cfname->name; + v->str2 = ""; + END_SEND_INT4_STRING2_LIST(v, E_IPC_OP_DESKTOP_NAME_LIST_REPLY); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_DESKTOP_NAME_LIST_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + INT4_STRING2_LIST(v, HDL); + printf("REPLY: BG CONTAINER=%i ZONE=%i DESK_X=%i DESK_Y=%i NAME=\"%s\"\n", + v->val1, v->val2, v->val3, v->val4, v->str1); + END_INT4_STRING2_LIST(v); +#endif +#undef HDL + #if 0 } #endif diff --git a/src/bin/e_ipc_handlers_list.h b/src/bin/e_ipc_handlers_list.h index 96daa9603..a3cfbafe1 100644 --- a/src/bin/e_ipc_handlers_list.h +++ b/src/bin/e_ipc_handlers_list.h @@ -218,3 +218,7 @@ #define E_IPC_OP_PROFILE_SET 218 #define E_IPC_OP_PROFILE_GET 219 #define E_IPC_OP_PROFILE_GET_REPLY 220 +#define E_IPC_OP_DESKTOP_NAME_ADD 221 +#define E_IPC_OP_DESKTOP_NAME_DEL 222 +#define E_IPC_OP_DESKTOP_NAME_LIST 223 +#define E_IPC_OP_DESKTOP_NAME_LIST_REPLY 224