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
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  
... ...