diff options
author | gotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2> | 2010-06-13 16:36:34 +0000 |
---|---|---|
committer | gotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2> | 2010-06-13 16:36:34 +0000 |
commit | db58aac6a88f369fc109005548ad9170ee8b7720 (patch) | |
tree | 2583447cdc18cd9842447c10778c1520a6a40d59 | |
parent | 36e01d9e60e3b15387de51c5197a7c0143549fef (diff) | |
download | dzen-db58aac6a88f369fc109005548ad9170ee8b7720.tar.gz dzen-db58aac6a88f369fc109005548ad9170ee8b7720.zip |
added support for nested ^ca() commands, thanks to Devin J. Pohly
git-svn-id: http://dzen.googlecode.com/svn/trunk@268 f2baff5b-bf2c-0410-a398-912abdc3d8b2
-rw-r--r-- | draw.c | 15 | ||||
-rw-r--r-- | dzen.h | 1 | ||||
-rw-r--r-- | main.c | 5 |
3 files changed, 15 insertions, 6 deletions
@@ -739,12 +739,19 @@ parse_line(const char *line, int lnr, int align, int reverse, int nodraw) { sens_areas[sens_areas_cnt].start_y = py; sens_areas[sens_areas_cnt].end_y = py; max_y = py; + sens_areas[sens_areas_cnt].active = 0; + sens_areas_cnt++; } } else { - if(sens_areas_cnt < MAX_CLICKABLE_AREAS) { - sens_areas[sens_areas_cnt].end_x = px; - sens_areas[sens_areas_cnt].end_y = max_y; - sens_areas_cnt++; + /* find most recent unclosed area */ + for(i = sens_areas_cnt - 1; i >= 0; i--) + if(!sens_areas[i].active) + break; + if(i >= 0 && i < MAX_CLICKABLE_AREAS) { + sens_areas[i].end_x = px; + sens_areas[i].end_y = max_y; + sens_areas[i].active = 1; + } } } @@ -62,6 +62,7 @@ struct Fnt { /* clickable areas */ typedef struct _CLICK_A { + int active; int button; int start_x; int end_x; @@ -702,13 +702,14 @@ handle_xev(void) { } /* clickable areas */ - for(i=0; i<sens_areas_cnt; i++) { + for(i=sens_areas_cnt; i>=0; i--) { if(ev.xbutton.window == dzen.title_win.win && ev.xbutton.button == sens_areas[i].button && (ev.xbutton.x >= sens_areas[i].start_x+xorig && ev.xbutton.x <= sens_areas[i].end_x+xorig) && (ev.xbutton.y >= sens_areas[i].start_y && - ev.xbutton.y <= sens_areas[i].end_y)) { + ev.xbutton.y <= sens_areas[i].end_y) && + sens_areas[i].active) { spawn(sens_areas[i].cmd); sa_clicked++; break; |