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,6 +182,9 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) | ||
182 | { | 182 | { |
183 | CHECK_SESSION_HANDLE(session); | 183 | CHECK_SESSION_HANDLE(session); |
184 | 184 | ||
185 | + if(!lib3270_connected(session)) | ||
186 | + return; | ||
187 | + | ||
185 | lib3270_set_cursor_address(session,session->selected.end = baddr); | 188 | lib3270_set_cursor_address(session,session->selected.end = baddr); |
186 | 189 | ||
187 | if(session->selected.begin < 0) | 190 | if(session->selected.begin < 0) |
@@ -200,22 +203,34 @@ LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) | @@ -200,22 +203,34 @@ LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) | ||
200 | 203 | ||
201 | CHECK_SESSION_HANDLE(session); | 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 | for(pos = baddr; pos > 0 && !isspace(ea_buf[pos].chr);pos--); | 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 | len = session->rows * session->cols; | 215 | len = session->rows * session->cols; |
207 | for(pos = baddr; pos < len && !isspace(ea_buf[pos].chr);pos++); | 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 | update_selected_region(session); | 219 | update_selected_region(session); |
211 | } | 220 | } |
212 | 221 | ||
213 | LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) | 222 | LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) |
214 | { | 223 | { |
215 | - int start; | 224 | + int start,len; |
216 | 225 | ||
217 | CHECK_SESSION_HANDLE(session); | 226 | CHECK_SESSION_HANDLE(session); |
218 | 227 | ||
228 | + if(!lib3270_connected(session)) | ||
229 | + { | ||
230 | + ring_bell(); | ||
231 | + return; | ||
232 | + } | ||
233 | + | ||
219 | start = lib3270_field_addr(session,baddr); | 234 | start = lib3270_field_addr(session,baddr); |
220 | 235 | ||
221 | if(start < 0) | 236 | if(start < 0) |
@@ -224,8 +239,13 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) | @@ -224,8 +239,13 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) | ||
224 | return -1; | 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 | session->selected.end = start + lib3270_field_length(session,start); | 246 | session->selected.end = start + lib3270_field_length(session,start); |
247 | + if(session->selected.end > len) | ||
248 | + session->selected.end = len; | ||
229 | 249 | ||
230 | update_selected_region(session); | 250 | update_selected_region(session); |
231 | 251 |