Commit 9046f9edd96249ef4e84541873db6934de5d18ae
1 parent
2a0b0d58
Exists in
master
and in
5 other branches
Incluindo sinal para mudar o estado das opções de seleção
Showing
7 changed files
with
41 additions
and
5 deletions
Show diff stats
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
src/gtk/v3270/private.h
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
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 | } | ... | ... |