Enlightenment CVS committal Author : glassy Project : e17 Module : apps/engycad
Dir : e17/apps/engycad/src Modified Files: cl.c misc.c serv.c shell.c misc.h Log Message: aliases backported, deadlock fixed =================================================================== RCS file: /cvs/e/e17/apps/engycad/src/cl.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- cl.c 16 Jul 2007 15:54:04 -0000 1.4 +++ cl.c 22 Jul 2007 10:42:28 -0000 1.5 @@ -482,6 +482,41 @@ cl_refresh(oparent); }*/ +int check_alias(const char *keyname, Evas_Modifier *mods) +{ + int mask = 0; + char *s; + char buf[4096]; + + if(evas_key_modifier_is_set(mods, "Shift")) + mask |= 1; + if(evas_key_modifier_is_set(mods, "Control")) + mask |= 2; + if(evas_key_modifier_is_set(mods, "Alt")) + mask |= 4; + + switch(mask) + { + case 0: return 0; break; + case 1: s = "shift"; break; + case 2: s = "ctrl"; break; + case 3: s = "ctrl+shift"; break; + case 4: s = "alt"; break; + case 5: s = "alt+shift"; break; + case 6: s = "ctrl+alt"; break; + case 7: s = "ctrl+alt+shift"; break; + } + sprintf(buf, "%s+%s", s, keyname); + s = _alias(buf); + if(s) + { + gui_put_string(s); + return 1; + } + + return 0; +} + void cl_handle_key(Evas_Object *o, void *event_info) { Evas_Object *oparent; @@ -547,7 +582,7 @@ cl_text_set(oparent, ""); } - else + else if(!check_alias(ee->keyname, ee->modifiers)) { // insert input char * nt; =================================================================== RCS file: /cvs/e/e17/apps/engycad/src/misc.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- misc.c 8 Jul 2007 14:56:23 -0000 1.2 +++ misc.c 22 Jul 2007 10:42:28 -0000 1.3 @@ -511,42 +511,58 @@ /** aliases **/ +Evas_Hash *aliases; + +Evas_Bool my_pair_free(Evas_Hash *hash, + const char *key, void *data, void *fdata) +{ + FREE(data); +} + +void alias_init() +{ + char buf[4096]; + char *al; + FILE *f; + + sprintf(buf,"%s/%s", shell->home, shell->aliases); + f = fopen(buf, "r"); + + if(!f) + return; + while(!feof(f)) + { + fgets(buf, 4095, f); + if(!buf[0]) + continue; + buf[strlen(buf)-1] = '\0'; + al = strchr(buf, '='); + if(!al) + continue; + al[0] = '\0'; + al++; + aliases = evas_hash_add(aliases, buf, DUP(al)); + } + + fclose(f); +} + +void alias_shutdown() +{ + evas_hash_foreach(aliases, my_pair_free, NULL); + evas_hash_free(aliases); +} + char * _alias(char *s) { - char buf[4096]; - char *al; - char *res; - FILE *in; - int fl = 1; - - sprintf(buf, "%s/%s", shell->home, shell->aliases); - in = fopen(buf, "r"); - ENGY_ASSERT(in); - - if (!in) - return NULL; - - while ((!feof(in)) && fl) - { - fgets(buf, 4095, in); - if (!buf) - continue; - buf[strlen(buf) - 1] = 0; - al = (char *)strchr(buf, '='); - if (!al) - continue; - al[0] = 0; - al++; - if (!strcmp(buf, s)) - fl = 0; - } - fclose(in); + char *res; + res = (char*) evas_hash_find(aliases, s); - if (fl) - return NULL; + if(res) + return DUP(res); - return DUP(al); + return NULL; } /* screen-to-world */ =================================================================== RCS file: /cvs/e/e17/apps/engycad/src/serv.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- serv.c 16 Jul 2007 15:54:04 -0000 1.5 +++ serv.c 22 Jul 2007 10:42:28 -0000 1.6 @@ -32,6 +32,7 @@ /* vars */ +pthread_mutex_t queuemutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t datamutex = PTHREAD_MUTEX_INITIALIZER; pthread_t thserv; @@ -142,7 +143,7 @@ if (strlen(s) > 4000) s[4000] = 0; - pthread_mutex_lock(&datamutex); + pthread_mutex_lock(&queuemutex); for (i = 0, j = 0; s[i]; i++) { if ((s[i] == '|') || (j == 4095)) @@ -160,7 +161,7 @@ buf[j] = 0; _serv_put_string(DUP(_(buf))); FREE(s); - pthread_mutex_unlock(&datamutex); + pthread_mutex_unlock(&queuemutex); } char * @@ -170,16 +171,16 @@ do { - pthread_mutex_lock(&datamutex); + pthread_mutex_lock(&queuemutex); if(!serv_queue) { - pthread_mutex_unlock(&datamutex); - usleep(10*1000); + pthread_mutex_unlock(&queuemutex); + usleep(100*1000); continue; } s = serv_queue->data; serv_queue = evas_list_remove(serv_queue, s); - pthread_mutex_unlock(&datamutex); + pthread_mutex_unlock(&queuemutex); } while(!s); @@ -224,6 +225,7 @@ serv_parser(s); } + pthread_mutex_destroy(&queuemutex); pthread_mutex_destroy(&datamutex); fl_shutdown = 2; =================================================================== RCS file: /cvs/e/e17/apps/engycad/src/shell.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- shell.c 16 Jul 2007 15:54:04 -0000 1.6 +++ shell.c 22 Jul 2007 10:42:28 -0000 1.7 @@ -609,6 +609,7 @@ pointer_init(); serv_init(); logo_init(); + alias_init(); // evas_render(shell->evas); } @@ -1120,6 +1121,7 @@ serv_put_string(DUP("__exit")); usleep(10000); gui_apply(); + alias_shutdown(); cl_shutdown(); menu_shutdown(); panel_shutdown(); =================================================================== RCS file: /cvs/e/e17/apps/engycad/src/misc.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- misc.h 8 Jul 2007 04:15:49 -0000 1.1 +++ misc.h 22 Jul 2007 10:42:28 -0000 1.2 @@ -34,7 +34,10 @@ void timer(void); /* usefull aliasing */ +void alias_init(void); +void alias_shutdown(void); char *_alias(char *); + Evas_Object *evas_image_load(char *file); ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs