Commit 9046f9edd96249ef4e84541873db6934de5d18ae

Authored by perry.werneck@gmail.com
1 parent 2a0b0d58

Incluindo sinal para mudar o estado das opções de seleção

src/gtk/mainwindow.c
... ... @@ -97,6 +97,12 @@
97 97 set_integer_to_config("terminal","model",id);
98 98 }
99 99  
  100 + static void selecting(GtkWidget *widget, gboolean on, GtkActionGroup **group)
  101 + {
  102 + trace("Widget %p selection state changed to %s",widget,on ? "Yes" : "No");
  103 + gtk_action_group_set_sensitive(group[ACTION_GROUP_SELECTION],on);
  104 + }
  105 +
100 106 static void setup_input_method(GtkWidget *widget, GtkWidget *obj)
101 107 {
102 108 GtkWidget *menu = gtk_menu_new();
... ... @@ -212,6 +218,7 @@
212 218 g_signal_connect(terminal,"connected",G_CALLBACK(connected),group);
213 219 g_signal_connect(terminal,"update_config",G_CALLBACK(update_config),0);
214 220 g_signal_connect(terminal,"model_changed",G_CALLBACK(update_model),0);
  221 + g_signal_connect(terminal,"selecting",G_CALLBACK(selecting),group);
215 222  
216 223 g_free(path);
217 224 gtk_widget_grab_focus(terminal);
... ...
src/gtk/v3270/genmarshal
... ... @@ -5,3 +5,4 @@ VOID:VOID,POINTER
5 5 VOID:VOID,POINTER,POINTER
6 6 VOID:VOID,UINT,POINTER
7 7 BOOL:VOID,UINT,ENUM
  8 +VOID:VOID,BOOL
... ...
src/gtk/v3270/private.h
... ... @@ -72,6 +72,7 @@ G_BEGIN_DECLS
72 72 SIGNAL_DISCONNECTED,
73 73 SIGNAL_UPDATE_CONFIG,
74 74 SIGNAL_MODEL_CHANGED,
  75 + SIGNAL_SELECTING,
75 76  
76 77 LAST_SIGNAL
77 78 };
... ...
src/gtk/v3270/widget.c
... ... @@ -236,6 +236,14 @@ static void v3270_class_init(v3270Class *klass)
236 236 pw3270_VOID__VOID_UINT_POINTER,
237 237 G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING);
238 238  
  239 + v3270_widget_signal[SIGNAL_SELECTING] =
  240 + g_signal_new( "selecting",
  241 + G_OBJECT_CLASS_TYPE (gobject_class),
  242 + G_SIGNAL_RUN_FIRST,
  243 + 0,
  244 + NULL, NULL,
  245 + pw3270_VOID__VOID_BOOL,
  246 + G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
239 247 }
240 248  
241 249 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
... ... @@ -389,6 +397,11 @@ static void update_model(H3270 *session, const char *name, int model, int rows,
389 397 g_signal_emit(GTK_WIDGET(session->widget),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name);
390 398 }
391 399  
  400 +static void set_selection(H3270 *session, unsigned char status)
  401 +{
  402 + g_signal_emit(GTK_WIDGET(session->widget),v3270_widget_signal[SIGNAL_SELECTING], 0, status ? TRUE : FALSE);
  403 +}
  404 +
392 405 static void v3270_init(v3270 *widget)
393 406 {
394 407 trace("%s",__FUNCTION__);
... ... @@ -400,11 +413,12 @@ static void v3270_init(v3270 *widget)
400 413 return;
401 414 }
402 415  
403   - widget->host->widget = widget;
  416 + widget->host->widget = widget;
404 417  
405 418 widget->host->update = v3270_update_char;
406 419 widget->host->changed = changed;
407 420 widget->host->set_timer = set_timer;
  421 + widget->host->set_selection = set_selection;
408 422  
409 423 widget->host->update_luname = update_luname;
410 424 widget->host->configure = update_screen_size;
... ...
src/include/lib3270/session.h
... ... @@ -132,6 +132,7 @@
132 132 void (*set_timer)(H3270 *session, unsigned char on);
133 133 void (*erase)(H3270 *session);
134 134 void (*cursor)(H3270 *session, LIB3270_CURSOR id);
  135 + void (*set_selection)(H3270 *session, unsigned char on);
135 136  
136 137 };
137 138  
... ...
src/lib3270/glue.c
... ... @@ -170,6 +170,11 @@ static void update_char(H3270 *session, int addr, unsigned char chr, unsigned sh
170 170  
171 171 }
172 172  
  173 +static void nop_char(H3270 *session, unsigned char chr)
  174 +{
  175 +
  176 +}
  177 +
173 178 static void lib3270_session_init(H3270 *hSession, const char *model)
174 179 {
175 180 int ovc, ovr;
... ... @@ -180,7 +185,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model)
180 185 hSession->sz = sizeof(H3270);
181 186  
182 187 // A few dummy calls to avoid "ifs"
183   - hSession->update = update_char;
  188 + hSession->update = update_char;
  189 + hSession->set_selection = nop_char;
184 190  
185 191  
186 192 hSession->sock = -1;
... ...
src/lib3270/selection.c
... ... @@ -175,6 +175,9 @@ LIB3270_EXPORT void lib3270_clear_selection(H3270 *session)
175 175 session->update(session,a,ea_buf[a].chr,ea_buf[a].attr,a == session->cursor_addr);
176 176 }
177 177 }
  178 +
  179 + session->set_selection(session,0);
  180 +
178 181 }
179 182  
180 183  
... ... @@ -182,11 +185,14 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr)
182 185 {
183 186 CHECK_SESSION_HANDLE(session);
184 187  
185   - if(session->selected.begin < 0)
186   - session->selected.begin = session->selected.end = session->cursor_addr;
187   -
188 188 lib3270_set_cursor_address(session,session->selected.end = baddr);
189 189  
  190 + if(session->selected.begin < 0)
  191 + {
  192 + session->selected.begin = session->cursor_addr;
  193 + session->set_selection(session,1);
  194 + }
  195 +
190 196 update_selection(session);
191 197  
192 198 }
... ...