Commit f15f572624b14d6c7d40986cdad0213898f3b5b3

Authored by perry.werneck@gmail.com
1 parent aeb92025

Implementando suporte a popup-menu por sinal

Showing 1 changed file with 24 additions and 4 deletions   Show diff stats
@@ -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