diff --git a/src/include/internals.h b/src/include/internals.h index 30ef00b..153ab4a 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -227,7 +227,7 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned G_GNUC_INTERNAL void v3270_clear_selection(v3270 *terminal); - G_GNUC_INTERNAL void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short attr); + G_GNUC_INTERNAL void v3270_update_cursor_surface(v3270 *widget, unsigned char chr, unsigned short attr); G_GNUC_INTERNAL void v3270_register_io_handlers(v3270Class *cls); @@ -257,7 +257,6 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned G_GNUC_INTERNAL void v3270_blink_ssl(v3270 *terminal); - G_GNUC_INTERNAL void v3270_update_luname(GtkWidget *widget,const gchar *name); G_GNUC_INTERNAL void v3270_init_properties(GObjectClass * gobject_class); G_GNUC_INTERNAL void v3270_queue_draw_area(GtkWidget *widget, gint x, gint y, gint width, gint height); @@ -288,6 +287,10 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned G_GNUC_INTERNAL void v3270_translate_text_to_rgba(const gchar *colors, GdkRGBA *clr); G_GNUC_INTERNAL gchar * v3270_translate_rgba_to_text(GdkRGBA *clr); + // Properties + G_GNUC_INTERNAL gboolean v3270_update_luname(v3270 *terminal); + G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name); + G_END_DECLS #endif // V3270_INTERNALS_H_INCLUDED diff --git a/src/include/terminal.h b/src/include/terminal.h index 6c12f19..3d03a17 100644 --- a/src/include/terminal.h +++ b/src/include/terminal.h @@ -46,6 +46,7 @@ G_BEGIN_DECLS // Signal related properties GParamSpec * online; + GParamSpec * url; GParamSpec * luname; GParamSpec * model; GParamSpec * selection; diff --git a/src/include/v3270.h b/src/include/v3270.h index 93249f8..6e9e4c8 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -291,7 +291,6 @@ // Convenience LIB3270_EXPORT void gtk_entry_set_printf(GtkEntry *entry, const gchar *fmt, ...) G_GNUC_PRINTF(2,3); - G_END_DECLS #endif // V3270_H_INCLUDED diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index d0e53b0..6390edb 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -70,74 +70,9 @@ static void set_timer(H3270 *session, unsigned char on) } -static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID ix, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name) +static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name) { - GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session)); - v3270Class * klass = GTK_V3270_GET_CLASS(widget); - - trace("%s(%s,%d)",__FUNCTION__,name,(int) value); - - switch(ix) - { - case LIB3270_TOGGLE_CURSOR_POS: - case LIB3270_TOGGLE_MONOCASE: - case LIB3270_TOGGLE_LINE_WRAP: - case LIB3270_TOGGLE_CROSSHAIR: - case LIB3270_TOGGLE_BLANK_FILL: - case LIB3270_TOGGLE_MARGINED_PASTE: - case LIB3270_TOGGLE_SHOW_TIMING: - case LIB3270_TOGGLE_RECTANGLE_SELECT: - case LIB3270_TOGGLE_UNDERLINE: - case LIB3270_TOGGLE_VIEW_FIELD: - case LIB3270_TOGGLE_ALTSCREEN: - v3270_reload(widget); - gtk_widget_queue_draw(widget); - break; - - case LIB3270_TOGGLE_CURSOR_BLINK: - GTK_V3270(widget)->cursor.show |= 1; - break; - - case LIB3270_TOGGLE_INSERT: - v3270_draw_ins_status(GTK_V3270(widget)); - v3270_cursor_draw(GTK_V3270(widget)); - break; - - case LIB3270_TOGGLE_BOLD: - v3270_reconfigure(GTK_V3270(widget)); - gtk_widget_queue_draw(widget); - break; - - case LIB3270_TOGGLE_FULL_SCREEN: - if(value) - gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget))); - else - gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget))); - - break; - - case LIB3270_TOGGLE_DS_TRACE: - case LIB3270_TOGGLE_SSL_TRACE: - case LIB3270_TOGGLE_SCREEN_TRACE: - case LIB3270_TOGGLE_EVENT_TRACE: - case LIB3270_TOGGLE_RECONNECT: - case LIB3270_TOGGLE_SMART_PASTE: - case LIB3270_TOGGLE_KEEP_SELECTED: - case LIB3270_TOGGLE_CONNECT_ON_STARTUP: - case LIB3270_TOGGLE_KP_ALTERNATIVE: - case LIB3270_TOGGLE_NETWORK_TRACE: - case LIB3270_TOGGLE_BEEP: - case LIB3270_TOGGLE_KEEP_ALIVE: - break; - - case LIB3270_TOGGLE_COUNT: - break; - - } - - g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[ix]); - g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name); - + v3270_update_toggle((GtkWidget *) lib3270_get_user_data(session), id, value, name); } static gboolean bg_update_message(H3270 *session) @@ -162,9 +97,21 @@ static void update_message(H3270 *session, G_GNUC_UNUSED LIB3270_MESSAGE id) g_idle_add((GSourceFunc) bg_update_message, session); } -static void update_luname(H3270 *session, const char *name) +static void update_luname(H3270 *session, const char G_GNUC_UNUSED(*name)) +{ + g_idle_add((GSourceFunc) v3270_update_luname, lib3270_get_user_data(session)); +} + +static gboolean v3270_update_url(v3270 *terminal) +{ + debug("url=%s",v3270_get_url(GTK_WIDGET(terminal))); + g_object_notify_by_pspec(G_OBJECT(terminal), GTK_V3270_GET_CLASS(terminal)->properties.url); + return FALSE; +} + +static void update_url(H3270 *session, const char G_GNUC_UNUSED(*name)) { - v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name); + g_idle_add((GSourceFunc) v3270_update_url, lib3270_get_user_data(session)); } struct select_cursor_data @@ -202,11 +149,7 @@ static void ctlr_done(H3270 *session) { GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); -#if GTK_CHECK_VERSION(2,20,0) if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) -#else - if(GTK_WIDGET_REALIZED(widget) && widget->window) -#endif // GTK(2,20) { v3270_update_mouse_pointer(widget); } @@ -220,7 +163,7 @@ static void update_connect(H3270 *session, unsigned char connected) if(connected) { widget->cursor.show |= 2; - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_CONNECTED], 0, lib3270_get_host(session)); + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_CONNECTED], 0, lib3270_get_url(session)); } else { @@ -495,6 +438,8 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title cbk->update_selection = update_selection; cbk->update_luname = update_luname; + cbk->update_url = update_url; + cbk->configure = update_screen_size; cbk->update_status = update_message; cbk->update_cursor = v3270_update_cursor; diff --git a/src/terminal/drawing/oia.c b/src/terminal/drawing/oia.c index 75cc24e..730159c 100644 --- a/src/terminal/drawing/oia.c +++ b/src/terminal/drawing/oia.c @@ -694,24 +694,18 @@ cairo_t * v3270_oia_set_update_region(v3270 * terminal, GdkRectangle **r, V3270_ return cr; } -void v3270_update_luname(GtkWidget *widget,const gchar *name) +gboolean v3270_update_luname(v3270 *terminal) { - cairo_t * cr; - GdkRectangle * rect; - v3270 * terminal = GTK_V3270(widget); - if(terminal->surface) { - cr = v3270_oia_set_update_region(terminal,&rect,V3270_OIA_LUNAME); + GdkRectangle * rect; + cairo_t * cr = v3270_oia_set_update_region(terminal,&rect,V3270_OIA_LUNAME); + const char * name = lib3270_get_luname(terminal->host); if(name) { -// cairo_move_to(cr,rect->x,rect->y+terminal->font.height); -// cairo_show_text(cr,name); -// cairo_stroke(cr); gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME); v3270_draw_text_at(cr, rect->x, rect->y, &terminal->font, name); - } cairo_destroy(cr); @@ -719,8 +713,9 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name) v3270_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height); } - g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.luname); + g_object_notify_by_pspec(G_OBJECT(terminal), GTK_V3270_GET_CLASS(terminal)->properties.luname); + return FALSE; } void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) diff --git a/src/terminal/properties/get.c b/src/terminal/properties/get.c index c0ed3d5..9722e7e 100644 --- a/src/terminal/properties/get.c +++ b/src/terminal/properties/get.c @@ -150,3 +150,11 @@ LIB3270_EXPORT gboolean v3270_is_connected(GtkWidget *widget) return lib3270_is_connected(GTK_V3270(widget)->host) ? TRUE : FALSE; } +LIB3270_EXPORT guint v3270_get_auto_disconnect(GtkWidget *widget) +{ + g_return_val_if_fail(GTK_IS_V3270(widget),0); + return GTK_V3270(widget)->activity.disconnect; +} + + + diff --git a/src/terminal/properties/init.c b/src/terminal/properties/init.c index c29aa4d..59e82ca 100644 --- a/src/terminal/properties/init.c +++ b/src/terminal/properties/init.c @@ -42,6 +42,7 @@ } properties[] = { { "connected", &klass->properties.online }, { "luname", &klass->properties.luname }, + { "url", &klass->properties.url }, { "model", &klass->properties.model }, { "has-selection", &klass->properties.selection }, }; diff --git a/src/terminal/properties/methods.c b/src/terminal/properties/methods.c deleted file mode 100644 index 7b96f4d..0000000 --- a/src/terminal/properties/methods.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a - * aplicativos mainframe. Registro no INPI sob o nome G3270. - * - * Copyright (C) <2008> - * - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela - * Free Software Foundation. - * - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para - * obter mais detalhes. - * - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin - * St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Este programa está nomeado como properties.c e possui - linhas de código. - * - * Contatos: - * - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) - * - */ - - #include "private.h" - -/*--[ Implement ]------------------------------------------------------------------------------------*/ - - LIB3270_EXPORT void v3270_set_auto_disconnect(GtkWidget *widget, guint minutes) - { - g_return_if_fail(GTK_IS_V3270(widget)); - GTK_V3270(widget)->activity.disconnect = minutes; - } - - LIB3270_EXPORT guint v3270_get_auto_disconnect(GtkWidget *widget) - { - g_return_val_if_fail(GTK_IS_V3270(widget),0); - return GTK_V3270(widget)->activity.disconnect; - } - -LIB3270_EXPORT gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID ix) -{ - g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); - - if(ix < LIB3270_TOGGLE_COUNT) - return lib3270_get_toggle(GTK_V3270(widget)->host,ix) ? TRUE : FALSE; - - return FALSE; -} - -LIB3270_EXPORT gboolean v3270_set_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID ix, gboolean state) -{ - g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); - - if(ix < LIB3270_TOGGLE_COUNT) - return lib3270_set_toggle(GTK_V3270(widget)->host,ix,state ? 1 : 0) ? TRUE : FALSE; - - return FALSE; - -} - diff --git a/src/terminal/properties/set.c b/src/terminal/properties/set.c index 61592a6..1a83765 100644 --- a/src/terminal/properties/set.c +++ b/src/terminal/properties/set.c @@ -200,3 +200,9 @@ void v3270_set_cursor(GtkWidget *widget, LIB3270_POINTER id) ); } +LIB3270_EXPORT void v3270_set_auto_disconnect(GtkWidget *widget, guint minutes) +{ + g_return_if_fail(GTK_IS_V3270(widget)); + GTK_V3270(widget)->activity.disconnect = minutes; +} + diff --git a/src/terminal/toggles.c b/src/terminal/toggles.c new file mode 100644 index 0000000..4b48820 --- /dev/null +++ b/src/terminal/toggles.c @@ -0,0 +1,124 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + #include + + #include + #include + + #include + +/*--[ Implement ]------------------------------------------------------------------------------------*/ + +LIB3270_EXPORT gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID ix) +{ + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); + + if(ix < LIB3270_TOGGLE_COUNT) + return lib3270_get_toggle(GTK_V3270(widget)->host,ix) ? TRUE : FALSE; + + return FALSE; +} + +LIB3270_EXPORT gboolean v3270_set_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID ix, gboolean state) +{ + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); + + if(ix < LIB3270_TOGGLE_COUNT) + return lib3270_set_toggle(GTK_V3270(widget)->host,ix,state ? 1 : 0) ? TRUE : FALSE; + + return FALSE; + +} + +void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name) +{ + v3270Class * klass = GTK_V3270_GET_CLASS(widget); + + trace("%s(%s,%d)",__FUNCTION__,name,(int) value); + + switch(id) + { + case LIB3270_TOGGLE_CURSOR_POS: + case LIB3270_TOGGLE_MONOCASE: + case LIB3270_TOGGLE_LINE_WRAP: + case LIB3270_TOGGLE_CROSSHAIR: + case LIB3270_TOGGLE_BLANK_FILL: + case LIB3270_TOGGLE_MARGINED_PASTE: + case LIB3270_TOGGLE_SHOW_TIMING: + case LIB3270_TOGGLE_RECTANGLE_SELECT: + case LIB3270_TOGGLE_UNDERLINE: + case LIB3270_TOGGLE_VIEW_FIELD: + case LIB3270_TOGGLE_ALTSCREEN: + v3270_reload(widget); + gtk_widget_queue_draw(widget); + break; + + case LIB3270_TOGGLE_CURSOR_BLINK: + GTK_V3270(widget)->cursor.show |= 1; + break; + + case LIB3270_TOGGLE_INSERT: + v3270_draw_ins_status(GTK_V3270(widget)); + v3270_cursor_draw(GTK_V3270(widget)); + break; + + case LIB3270_TOGGLE_BOLD: + v3270_reconfigure(GTK_V3270(widget)); + gtk_widget_queue_draw(widget); + break; + + case LIB3270_TOGGLE_FULL_SCREEN: + if(value) + gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget))); + else + gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget))); + break; + + case LIB3270_TOGGLE_DS_TRACE: + case LIB3270_TOGGLE_SSL_TRACE: + case LIB3270_TOGGLE_SCREEN_TRACE: + case LIB3270_TOGGLE_EVENT_TRACE: + case LIB3270_TOGGLE_RECONNECT: + case LIB3270_TOGGLE_SMART_PASTE: + case LIB3270_TOGGLE_KEEP_SELECTED: + case LIB3270_TOGGLE_CONNECT_ON_STARTUP: + case LIB3270_TOGGLE_KP_ALTERNATIVE: + case LIB3270_TOGGLE_NETWORK_TRACE: + case LIB3270_TOGGLE_BEEP: + case LIB3270_TOGGLE_KEEP_ALIVE: + case LIB3270_TOGGLE_COUNT: + break; + + } + + g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[id]); + g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_TOGGLE_CHANGED], 0, (guint) id, (gboolean) (value != 0), (gchar *) name); + +} diff --git a/src/testprogram/toolbar.c b/src/testprogram/toolbar.c index 1bc5944..3940495 100644 --- a/src/testprogram/toolbar.c +++ b/src/testprogram/toolbar.c @@ -37,6 +37,8 @@ #include #include + #pragma GCC diagnostic ignored "-Wunused-parameter" + /*---[ Implement ]----------------------------------------------------------------------------------*/ static void print_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) diff --git a/v3270.cbp b/v3270.cbp index 1e03a4d..2eed8c0 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -265,9 +265,6 @@ - -