Commit 52166de6805d0631efc88efca9c7dfc6158885a8

Authored by perry.werneck@gmail.com
1 parent 26ded741

Implementando seleção por mouse (work in progress)

src/gtk/v3270/draw.c
@@ -364,13 +364,22 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short @@ -364,13 +364,22 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short
364 { 364 {
365 GdkRectangle rect = widget->cursor.rect; 365 GdkRectangle rect = widget->cursor.rect;
366 cairo_t * cr = cairo_create(widget->cursor.surface); 366 cairo_t * cr = cairo_create(widget->cursor.surface);
367 - GdkColor * fg = widget->color+((attr & 0x00F0) >> 4); 367 + GdkColor * fg;
368 GdkColor * bg; 368 GdkColor * bg;
369 369
370 - if(attr & LIB3270_ATTR_FIELD)  
371 - bg = widget->color+(attr & 0x0003)+V3270_COLOR_FIELD; 370 + if(attr & LIB3270_ATTR_SELECTED)
  371 + {
  372 + fg = widget->color+V3270_COLOR_SELECTED_FG;
  373 + bg = widget->color+V3270_COLOR_SELECTED_BG;
  374 + }
372 else 375 else
373 - bg = widget->color+(attr & 0x000F); 376 + {
  377 + fg = widget->color+((attr & 0x00F0) >> 4);
  378 + if(attr & LIB3270_ATTR_FIELD)
  379 + bg = widget->color+(attr & 0x0003)+V3270_COLOR_FIELD;
  380 + else
  381 + bg = widget->color+(attr & 0x000F);
  382 + }
374 383
375 cairo_set_scaled_font(cr,widget->font_scaled); 384 cairo_set_scaled_font(cr,widget->font_scaled);
376 385
src/gtk/v3270/mouse.c
@@ -52,6 +52,30 @@ static int decode_position(v3270 *widget, gdouble x, gdouble y) @@ -52,6 +52,30 @@ static int decode_position(v3270 *widget, gdouble x, gdouble y)
52 return -1; 52 return -1;
53 } 53 }
54 54
  55 +static void button_1_press(GtkWidget *widget, GdkEventType type, int baddr)
  56 +{
  57 + GTK_V3270(widget)->selecting = 1;
  58 +
  59 + switch(type)
  60 + {
  61 + case GDK_BUTTON_PRESS: // Single click - Just move cursor
  62 + lib3270_set_cursor_address(GTK_V3270(widget)->host,baddr);
  63 + lib3270_clear_selection(GTK_V3270(widget)->host);
  64 + break;
  65 +
  66 + case GDK_2BUTTON_PRESS: // Double click - Select work
  67 + break;
  68 +
  69 + case GDK_3BUTTON_PRESS: // Triple clock - Select field
  70 + break;
  71 +
  72 +#ifdef DEBUG
  73 + default:
  74 + trace("Unexpected button 1 type %d",type);
  75 +#endif
  76 + }
  77 +}
  78 +
55 gboolean v3270_button_press_event(GtkWidget *widget, GdkEventButton *event) 79 gboolean v3270_button_press_event(GtkWidget *widget, GdkEventButton *event)
56 { 80 {
57 int baddr = decode_position(GTK_V3270(widget),event->x,event->y); 81 int baddr = decode_position(GTK_V3270(widget),event->x,event->y);
@@ -59,14 +83,15 @@ gboolean v3270_button_press_event(GtkWidget *widget, GdkEventButton *event) @@ -59,14 +83,15 @@ gboolean v3270_button_press_event(GtkWidget *widget, GdkEventButton *event)
59 if(baddr < 0) 83 if(baddr < 0)
60 return FALSE; 84 return FALSE;
61 85
62 - trace("%s button=%d type=%d",__FUNCTION__,event->button,event->type); 86 +// trace("%s button=%d type=%d",__FUNCTION__,event->button,event->type);
63 87
64 switch(event->button) 88 switch(event->button)
65 { 89 {
66 case 1: 90 case 1:
67 - lib3270_set_cursor_address(GTK_V3270(widget)->host,baddr);  
68 - GTK_V3270(widget)->selecting = 1;  
69 - lib3270_clear_selection(GTK_V3270(widget)->host); 91 + button_1_press(widget,event->type,baddr);
  92 +// lib3270_set_cursor_address(GTK_V3270(widget)->host,baddr);
  93 +// GTK_V3270(widget)->selecting = 1;
  94 +// lib3270_clear_selection(GTK_V3270(widget)->host);
70 break; 95 break;
71 96
72 default: 97 default:
src/gtk/v3270/widget.c
@@ -78,6 +78,20 @@ static void v3270_destroy (GtkObject * object); @@ -78,6 +78,20 @@ static void v3270_destroy (GtkObject * object);
78 78
79 /*--[ Implement ]------------------------------------------------------------------------------------*/ 79 /*--[ Implement ]------------------------------------------------------------------------------------*/
80 80
  81 +static void v3270_cursor_draw(v3270 *widget)
  82 +{
  83 + int pos = lib3270_get_cursor_address(widget->host);
  84 + unsigned char c;
  85 + unsigned short attr;
  86 +
  87 + lib3270_get_contents(widget->host,pos,pos,&c,&attr);
  88 + v3270_update_cursor_surface(widget,c,attr);
  89 + gtk_widget_queue_draw_area( GTK_WIDGET(widget),
  90 + widget->cursor.rect.x,widget->cursor.rect.y,
  91 + widget->cursor.rect.width,widget->cursor.rect.height);
  92 +
  93 +}
  94 +
81 static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolean toggle_state,const gchar *toggle_name) 95 static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolean toggle_state,const gchar *toggle_name)
82 { 96 {
83 trace("%s: toggle %d (%s)=%s",__FUNCTION__,toggle_id,toggle_name,toggle_state ? "Yes" : "No"); 97 trace("%s: toggle %d (%s)=%s",__FUNCTION__,toggle_id,toggle_name,toggle_state ? "Yes" : "No");
@@ -94,6 +108,10 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea @@ -94,6 +108,10 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea
94 widget->cursor.show |= 1; 108 widget->cursor.show |= 1;
95 break; 109 break;
96 110
  111 + case LIB3270_TOGGLE_INSERT:
  112 + v3270_cursor_draw(widget);
  113 + break;
  114 +
97 default: 115 default:
98 return; 116 return;
99 117
src/lib3270/telnet.c
@@ -395,7 +395,7 @@ void popup_a_sockerr(H3270 *session, char *fmt, ...) @@ -395,7 +395,7 @@ void popup_a_sockerr(H3270 *session, char *fmt, ...)
395 #if defined(_WIN32) 395 #if defined(_WIN32)
396 const char *msg = win32_strerror(socket_errno()); 396 const char *msg = win32_strerror(socket_errno());
397 #else 397 #else
398 - const char *msg = strerror(errno) 398 + const char *msg = strerror(errno);
399 #endif // WIN32 399 #endif // WIN32
400 va_list args; 400 va_list args;
401 char buffer[4096]; 401 char buffer[4096];