...
|
...
|
@@ -6,6 +6,7 @@
|
6
|
6
|
* History:
|
7
|
7
|
* 20250119 Creation. Menu bar.
|
8
|
8
|
* 20250123 Load font.
|
|
9
|
+ * 20250213 Support sticky drop-down menus.
|
9
|
10
|
*
|
10
|
11
|
* Author: Dario Rodriguez dario@darionomono.com
|
11
|
12
|
* (c) Dario Rodriguez 2025
|
...
|
...
|
@@ -114,7 +115,7 @@ main(int argc, char *argv[])
|
114
|
115
|
int insidetitle,currentoption;
|
115
|
116
|
insidetitle=is_imutil_insidexywh(mousepos,&(im->menudata[i]->xywh));
|
116
|
117
|
currentoption=menudata_pos2option(im->menudata[i],mousepos);
|
117
|
|
- flag_outsideall=(currentoption!=-1)?0:flag_outsideall;
|
|
118
|
+ flag_outsideall=(currentoption!=-1 || insidetitle)?0:flag_outsideall;
|
118
|
119
|
if(lmbreleased && insidetitle) {
|
119
|
120
|
for(j=0;j<im->sizemenudata;j++) {
|
120
|
121
|
im->menudata[j]->flag_stickyopen=(j==i)?1:0;
|
...
|
...
|
@@ -127,12 +128,27 @@ main(int argc, char *argv[])
|
127
|
128
|
im->menudata[j]->flag_stickyopen=0;
|
128
|
129
|
im->menudata[j]->currentoption=-1;
|
129
|
130
|
}
|
130
|
|
- } else if(lmbdown && currentoption!=-1) {
|
|
131
|
+ } else if((lmbdown || im->menudata[i]->flag_stickyopen) && currentoption!=-1) {
|
131
|
132
|
for(j=0;j<im->sizemenudata;j++) {
|
132
|
|
- im->menudata[j]->flag_open=(j==i)?im->menudata[i]->flag_open:0;
|
133
|
|
- im->menudata[j]->flag_stickyopen=(j==i)?im->menudata[i]->flag_stickyopen:0;
|
134
|
|
- im->menudata[j]->currentoption=(j==i)?currentoption:-1;
|
|
133
|
+ if(lmbreleased==0 || j!=i || im->menudata[i]->flag_stickyopen==0) {
|
|
134
|
+ im->menudata[j]->flag_open=(j==i)?im->menudata[i]->flag_open:0;
|
|
135
|
+ im->menudata[j]->flag_stickyopen=(j==i)?im->menudata[i]->flag_stickyopen:0;
|
|
136
|
+ im->menudata[j]->currentoption=(j==i)?currentoption:-1;
|
|
137
|
+ } else {
|
|
138
|
+ im->menudata[j]->flag_open=0;
|
|
139
|
+ im->menudata[j]->flag_stickyopen=0;
|
|
140
|
+ im->menudata[j]->currentoption=-1;
|
|
141
|
+#if 1
|
|
142
|
+fprintf(stderr,"SELECTED: \"%s\"->\"%s\"\n",im->menudata[i]->title,im->menudata[i]->options[currentoption]);
|
|
143
|
+#endif
|
|
144
|
+ }
|
135
|
145
|
}
|
|
146
|
+ } else if(im->menudata[i]->flag_stickyopen && currentoption==-1) {
|
|
147
|
+ if(lmbreleased) {
|
|
148
|
+ im->menudata[i]->flag_open=0;
|
|
149
|
+ im->menudata[i]->flag_stickyopen=0;
|
|
150
|
+ }
|
|
151
|
+ im->menudata[i]->currentoption=-1;
|
136
|
152
|
} else if(lmbreleased && currentoption!=-1) {
|
137
|
153
|
for(j=0;j<im->sizemenudata;j++) {
|
138
|
154
|
im->menudata[j]->flag_open=0;
|
...
|
...
|
@@ -145,7 +161,7 @@ fprintf(stderr,"SELECTED: \"%s\"->\"%s\"\n",im->menudata[i]->title,im->menudata[
|
145
|
161
|
} else if(lmbdown==0) {
|
146
|
162
|
im->menudata[i]->flag_open=0;
|
147
|
163
|
im->menudata[i]->flag_stickyopen=0;
|
148
|
|
- im->menudata[i]->flag_open=0;
|
|
164
|
+ im->menudata[i]->currentoption=-1;
|
149
|
165
|
}
|
150
|
166
|
}
|
151
|
167
|
if(flag_outsideall) {
|