Hello! I just saw that something really weird happened... The attached file has not been attached but sent as a link (???). Anyway, sending it again... Hoping that it will work as expected this time :p Cheers! ilLogict Quoting ilLogict <[EMAIL PROTECTED]>:
Hello ! I'm attaching a patch that enables virtual desktop naming via ipc. -desktop-name-add OPT1 OPT2 OPT3 OPT4 OPT5 Add a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = desktop name -desktop-name-del OPT1 OPT2 OPT3 OPT4 Delete a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. -desktop-name-list List all current desktop name definitions Yes, it has been merely inspired by how you change background on each desktop :) Comments are of course welcomed. Cheers ! ilLogict -- Pièces jointes http://imp4.free.fr/horde/imp/attachment.php?u=illogict%40free.fr&t=1123255649&f=desktop_naming.patch ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Index: e_config.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v retrieving revision 1.86 diff -u -r1.86 e_config.c --- e_config.c 31 Jul 2005 06:22:31 -0000 1.86 +++ e_config.c 5 Aug 2005 13:24:46 -0000 @@ -29,6 +29,7 @@ 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 */ @@ -80,6 +81,17 @@ 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 @@ -210,7 +222,9 @@ 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); /**/ @@ -322,6 +336,7 @@ 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; @@ -965,6 +980,7 @@ 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; } @@ -1324,6 +1340,7 @@ } 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); Index: e_config.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.h,v retrieving revision 1.43 diff -u -r1.43 e_config.h --- e_config.h 31 Jul 2005 06:22:31 -0000 1.43 +++ e_config.h 5 Aug 2005 13:24:46 -0000 @@ -37,6 +37,7 @@ 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 @@ 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 @@ 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); Index: e_desk.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v retrieving revision 1.46 diff -u -r1.46 e_desk.c --- e_desk.c 21 Jul 2005 11:15:43 -0000 1.46 +++ e_desk.c 5 Aug 2005 13:24:46 -0000 @@ -31,6 +31,8 @@ { 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 @@ 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; } @@ -57,6 +81,96 @@ } 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) { E_Border_List *bl; Index: e_desk.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.h,v retrieving revision 1.19 diff -u -r1.19 e_desk.h --- e_desk.h 20 Jul 2005 13:07:57 -0000 1.19 +++ e_desk.h 5 Aug 2005 13:24:46 -0000 @@ -33,6 +33,9 @@ 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); Index: e_ipc_handlers.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers.h,v retrieving revision 1.59 diff -u -r1.59 e_ipc_handlers.h --- e_ipc_handlers.h 31 Jul 2005 06:22:31 -0000 1.59 +++ e_ipc_handlers.h 5 Aug 2005 13:24:49 -0000 @@ -2981,7 +2981,6 @@ #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) @@ -4438,6 +4437,72 @@ #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 Index: e_ipc_handlers_list.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers_list.h,v retrieving revision 1.14 diff -u -r1.14 e_ipc_handlers_list.h --- e_ipc_handlers_list.h 22 Jul 2005 10:28:09 -0000 1.14 +++ e_ipc_handlers_list.h 5 Aug 2005 13:24:49 -0000 @@ -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