Commit f15f572624b14d6c7d40986cdad0213898f3b5b3
1 parent
aeb92025
Exists in
master
and in
3 other branches
Implementando suporte a popup-menu por sinal
Showing
1 changed file
with
24 additions
and
4 deletions
Show diff stats
selection.c
... | ... | @@ -182,6 +182,9 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) |
182 | 182 | { |
183 | 183 | CHECK_SESSION_HANDLE(session); |
184 | 184 | |
185 | + if(!lib3270_connected(session)) | |
186 | + return; | |
187 | + | |
185 | 188 | lib3270_set_cursor_address(session,session->selected.end = baddr); |
186 | 189 | |
187 | 190 | if(session->selected.begin < 0) |
... | ... | @@ -200,22 +203,34 @@ LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) |
200 | 203 | |
201 | 204 | CHECK_SESSION_HANDLE(session); |
202 | 205 | |
206 | + if(!lib3270_connected(session) || isspace(ea_buf[baddr].chr)) | |
207 | + { | |
208 | + ring_bell(); | |
209 | + return; | |
210 | + } | |
211 | + | |
203 | 212 | for(pos = baddr; pos > 0 && !isspace(ea_buf[pos].chr);pos--); |
204 | - session->selected.begin = pos; | |
213 | + session->selected.begin = pos > 0 ? pos+1 : 0; | |
205 | 214 | |
206 | 215 | len = session->rows * session->cols; |
207 | 216 | for(pos = baddr; pos < len && !isspace(ea_buf[pos].chr);pos++); |
208 | - session->selected.end = pos; | |
217 | + session->selected.end = pos < len ? pos-1 : len; | |
209 | 218 | |
210 | 219 | update_selected_region(session); |
211 | 220 | } |
212 | 221 | |
213 | 222 | LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) |
214 | 223 | { |
215 | - int start; | |
224 | + int start,len; | |
216 | 225 | |
217 | 226 | CHECK_SESSION_HANDLE(session); |
218 | 227 | |
228 | + if(!lib3270_connected(session)) | |
229 | + { | |
230 | + ring_bell(); | |
231 | + return; | |
232 | + } | |
233 | + | |
219 | 234 | start = lib3270_field_addr(session,baddr); |
220 | 235 | |
221 | 236 | if(start < 0) |
... | ... | @@ -224,8 +239,13 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) |
224 | 239 | return -1; |
225 | 240 | } |
226 | 241 | |
227 | - session->selected.begin = start; | |
242 | + session->selected.begin = (start+1); | |
243 | + | |
244 | + len = (session->rows * session->cols)-1; | |
245 | + | |
228 | 246 | session->selected.end = start + lib3270_field_length(session,start); |
247 | + if(session->selected.end > len) | |
248 | + session->selected.end = len; | |
229 | 249 | |
230 | 250 | update_selected_region(session); |
231 | 251 | ... | ... |