From fa936e43aa2e51d843c10271d68b3fc5be6c0623 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 19 Dec 2013 15:57:36 +0000 Subject: [PATCH] Incluindo notificação do estado do bloco selecionado --- src/include/lib3270.h | 2 ++ src/lib3270/selection.c | 8 ++++++++ src/pw3270/v3270/widget.c | 32 +++++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/include/lib3270.h b/src/include/lib3270.h index 0913117..eb82370 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -844,6 +844,8 @@ LIB3270_EXPORT char * lib3270_cut_selected(H3270 *hSession); + LIB3270_EXPORT int lib3270_has_selection(H3270 *hSession); + /** * Get all text inside the terminal. * diff --git a/src/lib3270/selection.c b/src/lib3270/selection.c index 4e5d670..9b0dfe9 100644 --- a/src/lib3270/selection.c +++ b/src/lib3270/selection.c @@ -572,8 +572,16 @@ LIB3270_EXPORT char * lib3270_get_field_at(H3270 *session, int baddr) return lib3270_get_text(session,first,lib3270_field_length(session,first)+1); } +LIB3270_EXPORT int lib3270_has_selection(H3270 *hSession) +{ + CHECK_SESSION_HANDLE(hSession); + return hSession->selected != 0; +} + LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) { + CHECK_SESSION_HANDLE(hSession); + if(!hSession->selected || hSession->select.start == hSession->select.end) return NULL; diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index cf5bc5b..5654b55 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -77,7 +77,8 @@ /* Widget properties */ - PROP_CONNECTED, + PROP_ONLINE, + PROP_SELECTION, /* Toggles - always the last one, the real values are PROP_TOGGLE+LIB3270_TOGGLE */ PROP_TOGGLE @@ -359,10 +360,14 @@ static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GPa switch (prop_id) { - case PROP_CONNECTED: + case PROP_ONLINE: g_value_set_boolean(value,lib3270_is_connected(window->host) ? TRUE : FALSE ); break; + case PROP_SELECTION: + g_value_set_boolean(value,lib3270_has_selection(window->host) ? TRUE : FALSE ); + break; + default: if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT)) { @@ -643,12 +648,19 @@ static void v3270_class_init(v3270Class *klass) gobject_class->set_property = v3270_set_property; gobject_class->get_property = v3270_get_property; - v3270_properties[PROP_CONNECTED] = g_param_spec_boolean( - "connected", - "connected", - "Indicates the connection state", + v3270_properties[PROP_ONLINE] = g_param_spec_boolean( + "online", + "online", + "True if is online", FALSE,G_PARAM_READABLE); - g_object_class_install_property(gobject_class,PROP_CONNECTED,v3270_properties[PROP_CONNECTED]); + g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]); + + v3270_properties[PROP_SELECTION] = g_param_spec_boolean( + "selection", + "selection", + "True on selected area", + FALSE,G_PARAM_READABLE); + g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]); // Toggle properties int f; @@ -844,7 +856,7 @@ static void update_connect(H3270 *session, unsigned char connected) g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_DISCONNECTED], 0); } - g_object_notify_by_pspec(G_OBJECT(session->widget), v3270_properties[PROP_CONNECTED]); + g_object_notify_by_pspec(G_OBJECT(session->widget), v3270_properties[PROP_ONLINE]); gtk_widget_queue_draw(GTK_WIDGET(widget)); } @@ -922,7 +934,9 @@ static void changed(H3270 *session, int offset, int len) static void set_selection(H3270 *session, unsigned char status) { - GtkWidget * widget = GTK_WIDGET(session->widget); + GtkWidget * widget = GTK_WIDGET(session->widget); + + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]); g_signal_emit(widget,v3270_widget_signal[SIGNAL_SELECTING], 0, status ? TRUE : FALSE); } -- libgit2 0.21.2