Commit 81afde048e9fe06548851b74f29eb46d4e6f9d20

Authored by Perry Werneck
1 parent bcfcba8d
Exists in master and in 1 other branch develop

Splitting sources to group similars methods.

src/v3270/accessible.c
... ... @@ -74,6 +74,22 @@ G_DEFINE_TYPE_WITH_CODE (v3270Accessible, v3270_accessible, GTK_TYPE_ACCESSIBLE,
74 74  
75 75 /*--[ Implement ]------------------------------------------------------------------------------------*/
76 76  
  77 +AtkObject * v3270_get_accessible(GtkWidget * widget)
  78 +{
  79 + v3270 * terminal = GTK_V3270(widget);
  80 +
  81 + if(!terminal->accessible)
  82 + {
  83 + terminal->accessible = g_object_new(GTK_TYPE_V3270_ACCESSIBLE,NULL);
  84 + atk_object_initialize(ATK_OBJECT(terminal->accessible), widget);
  85 + gtk_accessible_set_widget(GTK_ACCESSIBLE(terminal->accessible),widget);
  86 + g_object_ref(terminal->accessible);
  87 + }
  88 +
  89 + return ATK_OBJECT(terminal->accessible);
  90 +}
  91 +
  92 +
77 93 static const gchar * v3270_accessible_get_description (AtkObject *accessible)
78 94 {
79 95 GtkWidget *widget = gtk_accessible_get_widget(GTK_ACCESSIBLE (accessible));
... ...
src/v3270/callbacks.c 0 → 100644
... ... @@ -0,0 +1,422 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include <config.h>
  31 + #include "private.h"
  32 +
  33 + #include <gtk/gtk.h>
  34 + #include <libintl.h>
  35 + #include <glib/gi18n.h>
  36 +
  37 + #include <lib3270.h>
  38 + #include <lib3270/session.h>
  39 + #include <lib3270/log.h>
  40 + #include <errno.h>
  41 +
  42 +/**
  43 + * SECTION: v3270
  44 + * @title: Virtual 3270 widget
  45 + * @short_description: The virtual 3270 terminal widget.
  46 + *
  47 + * Manages lib3270 callbacks.
  48 + *
  49 + */
  50 +
  51 +/*--[ Widget definition ]----------------------------------------------------------------------------*/
  52 +
  53 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  54 +
  55 +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  56 +
  57 +static void set_timer(H3270 *session, unsigned char on)
  58 +{
  59 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
  60 +
  61 + if(on)
  62 + v3270_start_timer(widget);
  63 + else
  64 + v3270_stop_timer(widget);
  65 +
  66 +}
  67 +
  68 +static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name)
  69 +{
  70 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
  71 +
  72 + switch(ix)
  73 + {
  74 + case LIB3270_TOGGLE_CURSOR_POS:
  75 + case LIB3270_TOGGLE_MONOCASE:
  76 + case LIB3270_TOGGLE_LINE_WRAP:
  77 + case LIB3270_TOGGLE_CROSSHAIR:
  78 + case LIB3270_TOGGLE_BLANK_FILL:
  79 + case LIB3270_TOGGLE_MARGINED_PASTE:
  80 + case LIB3270_TOGGLE_SHOW_TIMING:
  81 + case LIB3270_TOGGLE_RECTANGLE_SELECT:
  82 + case LIB3270_TOGGLE_UNDERLINE:
  83 + case LIB3270_TOGGLE_VIEW_FIELD:
  84 + case LIB3270_TOGGLE_ALTSCREEN:
  85 + v3270_reload(widget);
  86 + gtk_widget_queue_draw(widget);
  87 + break;
  88 +
  89 + case LIB3270_TOGGLE_CURSOR_BLINK:
  90 + GTK_V3270(widget)->cursor.show |= 1;
  91 + break;
  92 +
  93 + case LIB3270_TOGGLE_INSERT:
  94 + v3270_draw_ins_status(GTK_V3270(widget));
  95 + v3270_cursor_draw(GTK_V3270(widget));
  96 + break;
  97 +
  98 + case LIB3270_TOGGLE_BOLD:
  99 + v3270_reload(widget);
  100 + gtk_widget_queue_draw(widget);
  101 + break;
  102 +
  103 + case LIB3270_TOGGLE_FULL_SCREEN:
  104 + if(value)
  105 + gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
  106 + else
  107 + gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
  108 +
  109 + break;
  110 +
  111 + case LIB3270_TOGGLE_DS_TRACE:
  112 + case LIB3270_TOGGLE_SSL_TRACE:
  113 + case LIB3270_TOGGLE_SCREEN_TRACE:
  114 + case LIB3270_TOGGLE_EVENT_TRACE:
  115 + case LIB3270_TOGGLE_RECONNECT:
  116 + case LIB3270_TOGGLE_SMART_PASTE:
  117 + case LIB3270_TOGGLE_KEEP_SELECTED:
  118 + case LIB3270_TOGGLE_CONNECT_ON_STARTUP:
  119 + case LIB3270_TOGGLE_KP_ALTERNATIVE:
  120 + case LIB3270_TOGGLE_NETWORK_TRACE:
  121 + case LIB3270_TOGGLE_BEEP:
  122 + case LIB3270_TOGGLE_KEEP_ALIVE:
  123 + break;
  124 +
  125 + case LIB3270_TOGGLE_COUNT:
  126 + break;
  127 +
  128 + }
  129 +
  130 + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.toggle[ix]);
  131 + g_signal_emit(widget, v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name);
  132 +
  133 +}
  134 +
  135 +static void bg_update_message(H3270 *session)
  136 +{
  137 + void *widget = lib3270_get_user_data(session);
  138 + trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session));
  139 +
  140 + g_signal_emit(
  141 + GTK_WIDGET(widget),
  142 + v3270_widget_signal[SIGNAL_MESSAGE_CHANGED],
  143 + 0,
  144 + (gint) lib3270_get_program_message(session)
  145 + );
  146 +
  147 + trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session));
  148 +}
  149 +
  150 +static void update_message(H3270 *session, G_GNUC_UNUSED LIB3270_MESSAGE id)
  151 +{
  152 + g_idle_add((GSourceFunc) bg_update_message, session);
  153 +}
  154 +
  155 +static void update_luname(H3270 *session, const char *name)
  156 +{
  157 + v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name);
  158 +}
  159 +
  160 +struct select_cursor_data
  161 +{
  162 + H3270 * hSession;
  163 + LIB3270_POINTER id;
  164 +};
  165 +
  166 +static void bg_select_cursor(struct select_cursor_data *data)
  167 +{
  168 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession));
  169 +
  170 +#if GTK_CHECK_VERSION(2,20,0)
  171 + if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
  172 +#else
  173 + if(GTK_WIDGET_REALIZED(widget) && widget->window)
  174 +#endif // GTK(2,20)
  175 + {
  176 + GTK_V3270(widget)->pointer_id = data->id;
  177 + v3270_update_mouse_pointer(widget);
  178 + }
  179 +}
  180 +
  181 +static void select_cursor(H3270 *session, LIB3270_POINTER id)
  182 +{
  183 + struct select_cursor_data *data = g_new0(struct select_cursor_data,1);
  184 + data->hSession = session;
  185 + data->id = id;
  186 + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_select_cursor, data, g_free);
  187 +}
  188 +
  189 +static void ctlr_done(H3270 *session)
  190 +{
  191 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
  192 +
  193 +#if GTK_CHECK_VERSION(2,20,0)
  194 + if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
  195 +#else
  196 + if(GTK_WIDGET_REALIZED(widget) && widget->window)
  197 +#endif // GTK(2,20)
  198 + {
  199 + v3270_update_mouse_pointer(widget);
  200 + }
  201 +
  202 +}
  203 +
  204 +static void update_connect(H3270 *session, unsigned char connected)
  205 +{
  206 + v3270 *widget = GTK_V3270(lib3270_get_user_data(session));
  207 +
  208 + if(connected)
  209 + {
  210 + widget->cursor.show |= 2;
  211 + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, lib3270_get_host(session));
  212 + }
  213 + else
  214 + {
  215 + widget->cursor.show &= ~2;
  216 + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_DISCONNECTED], 0);
  217 + }
  218 +
  219 + if(v3270_properties.online)
  220 + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.online);
  221 +
  222 + widget->activity.timestamp = time(0);
  223 +
  224 + gtk_widget_queue_draw(GTK_WIDGET(widget));
  225 +}
  226 +
  227 +static void update_screen_size(H3270 *session, G_GNUC_UNUSED unsigned short rows, G_GNUC_UNUSED unsigned short cols)
  228 +{
  229 + v3270_reload(GTK_WIDGET(lib3270_get_user_data(session)));
  230 + gtk_widget_queue_draw(GTK_WIDGET(lib3270_get_user_data(session)));
  231 +}
  232 +
  233 +static void update_model(H3270 *session, const char *name, int model, G_GNUC_UNUSED int rows, G_GNUC_UNUSED int cols)
  234 +{
  235 + if(v3270_properties.model)
  236 + g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties.model);
  237 +
  238 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name);
  239 +}
  240 +
  241 +static void changed(H3270 *session, int offset, int len)
  242 +{
  243 + GtkWidget * widget = lib3270_get_user_data(session);
  244 + GtkAccessible * obj = GTK_V3270(widget)->accessible;
  245 +
  246 + if(obj)
  247 + {
  248 + // Get new text, notify atk
  249 + gsize bytes_written = 0;
  250 + char * text = lib3270_get_string_at_address(session,offset,len,'\n');
  251 +
  252 + if(text)
  253 + {
  254 + GError * error = NULL;
  255 + gchar * utfchar = g_convert_with_fallback( text,
  256 + -1,
  257 + "UTF-8",
  258 + lib3270_get_display_charset(session),
  259 + " ",
  260 + NULL,
  261 + &bytes_written,
  262 + &error );
  263 +
  264 + lib3270_free(text);
  265 +
  266 + if(error)
  267 + {
  268 + g_warning("%s failed: %s",__FUNCTION__,error->message);
  269 + g_error_free(error);
  270 + }
  271 +
  272 + if(utfchar)
  273 + {
  274 + g_signal_emit_by_name(obj, "text-insert", offset, bytes_written, utfchar);
  275 + g_free(utfchar);
  276 + }
  277 +
  278 + }
  279 + }
  280 +
  281 +#ifdef WIN32
  282 + gtk_widget_queue_draw(widget);
  283 +#endif // WIN32
  284 +
  285 + g_signal_emit(GTK_WIDGET(widget),v3270_widget_signal[SIGNAL_CHANGED], 0, (guint) offset, (guint) len);
  286 +}
  287 +
  288 +static void set_selection(H3270 *session, unsigned char status)
  289 +{
  290 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
  291 +
  292 + if(v3270_properties.selection)
  293 + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.selection);
  294 +
  295 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_SELECTING], 0, status ? TRUE : FALSE);
  296 +
  297 +}
  298 +
  299 +static void update_selection(H3270 *session, G_GNUC_UNUSED int start, G_GNUC_UNUSED int end)
  300 +{
  301 + // Selected region changed
  302 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
  303 + GtkAccessible * atk_obj = GTK_V3270(widget)->accessible;
  304 +
  305 + if(atk_obj)
  306 + g_signal_emit_by_name(atk_obj,"text-selection-changed");
  307 +
  308 +}
  309 +
  310 +static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text)
  311 +{
  312 + g_signal_emit( GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE], 0,
  313 + (int) id,
  314 + (gchar *) title,
  315 + (gchar *) message,
  316 + (gchar *) text );
  317 +
  318 +}
  319 +
  320 +static int emit_print_signal(H3270 *session)
  321 +{
  322 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_PRINT], 0);
  323 + return 0;
  324 +}
  325 +
  326 +static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args)
  327 +{
  328 + GtkWidget *terminal = (GtkWidget *) lib3270_get_user_data(session);
  329 +
  330 + if(terminal && GTK_IS_V3270(terminal)) {
  331 +
  332 + if(fmt)
  333 + {
  334 + gchar *text = g_strdup_vprintf(fmt,args);
  335 + v3270_popup_message(GTK_WIDGET(terminal),type,title,msg,text);
  336 + g_free(text);
  337 + }
  338 + else
  339 + {
  340 + v3270_popup_message(GTK_WIDGET(terminal),type,title,msg,NULL);
  341 + }
  342 +
  343 + }
  344 +
  345 + }
  346 +
  347 + static gboolean bg_update_ssl(H3270 *session)
  348 + {
  349 + trace("%s",__FUNCTION__);
  350 +
  351 + v3270_blink_ssl(GTK_V3270(lib3270_get_user_data(session)));
  352 +
  353 + if(lib3270_get_secure(session) == LIB3270_SSL_NEGOTIATING)
  354 + v3270_start_blinking(GTK_WIDGET(lib3270_get_user_data(session)));
  355 +
  356 + return FALSE;
  357 + }
  358 +
  359 + static void update_ssl(H3270 *session, G_GNUC_UNUSED LIB3270_SSL_STATE state)
  360 + {
  361 + g_idle_add((GSourceFunc) bg_update_ssl, session);
  362 + }
  363 +
  364 + struct update_oia_data
  365 + {
  366 + H3270 *session;
  367 + LIB3270_FLAG id;
  368 + unsigned char on;
  369 + };
  370 +
  371 + static gboolean bg_update_oia(struct update_oia_data *data)
  372 + {
  373 + v3270_update_oia(GTK_V3270(lib3270_get_user_data(data->session)), data->id, data->on);
  374 + return FALSE;
  375 + }
  376 +
  377 + static void update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
  378 + {
  379 + struct update_oia_data *data = g_new0(struct update_oia_data,1);
  380 + data->session = session;
  381 + data->id = id;
  382 + data->on = on;
  383 + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free);
  384 + }
  385 +
  386 + void v3270_install_callbacks(v3270 *widget)
  387 + {
  388 + struct lib3270_session_callbacks *cbk;
  389 +
  390 + lib3270_set_popup_handler(widget->host, popup_handler);
  391 +
  392 + cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks));
  393 + if(!cbk)
  394 + {
  395 + g_error( _( "Invalid callback table, possible version mismatch in lib3270") );
  396 + return;
  397 + }
  398 +
  399 + cbk->update = v3270_update_char;
  400 + cbk->changed = changed;
  401 + cbk->set_timer = set_timer;
  402 +
  403 + cbk->set_selection = set_selection;
  404 + cbk->update_selection = update_selection;
  405 +
  406 + cbk->update_luname = update_luname;
  407 + cbk->configure = update_screen_size;
  408 + cbk->update_status = update_message;
  409 + cbk->update_cursor = v3270_update_cursor;
  410 + cbk->update_toggle = update_toggle;
  411 + cbk->update_oia = update_oia;
  412 + cbk->cursor = select_cursor;
  413 + cbk->update_connect = update_connect;
  414 + cbk->update_model = update_model;
  415 + cbk->changed = changed;
  416 + cbk->ctlr_done = ctlr_done;
  417 + cbk->message = message;
  418 + cbk->update_ssl = update_ssl;
  419 + cbk->print = emit_print_signal;
  420 +
  421 +}
  422 +
... ...
src/v3270/colors.c 0 → 100644
... ... @@ -0,0 +1,201 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include <config.h>
  31 + #include "private.h"
  32 +
  33 + #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  34 +
  35 + #include <lib3270.h>
  36 + #include <lib3270/log.h>
  37 +
  38 +/*--[ Globals ]--------------------------------------------------------------------------------------*/
  39 +
  40 +const gchar * v3270_default_colors =
  41 + "#000000," // V3270_COLOR_BACKGROUND
  42 + "#7890F0," // V3270_COLOR_BLUE
  43 + "#FF0000," // V3270_COLOR_RED
  44 + "#FF00FF," // V3270_COLOR_PINK
  45 + "#00FF00," // V3270_COLOR_GREEN
  46 + "#00FFFF," // V3270_COLOR_TURQUOISE
  47 + "#FFFF00," // V3270_COLOR_YELLOW
  48 + "#FFFFFF," // V3270_COLOR_WHITE
  49 + "#000000," // V3270_COLOR_BLACK
  50 + "#000080," // V3270_COLOR_DARK_BLUE
  51 + "#FFA200," // V3270_COLOR_ORANGE
  52 + "#800080," // V3270_COLOR_PURPLE
  53 + "#008000," // V3270_COLOR_DARK_GREEN
  54 + "#008080," // V3270_COLOR_DARK_TURQUOISE
  55 + "#A0A000," // V3270_COLOR_MUSTARD
  56 + "#C0C0C0," // V3270_COLOR_GRAY
  57 +
  58 + "#00FF00," // V3270_COLOR_FIELD_DEFAULT
  59 + "#FF0000," // V3270_COLOR_FIELD_INTENSIFIED
  60 + "#00FFFF," // V3270_COLOR_FIELD_PROTECTED
  61 + "#FFFFFF," // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED
  62 +
  63 + "#404040," // V3270_COLOR_SELECTED_BG
  64 + "#FFFFFF," // V3270_COLOR_SELECTED_FG,
  65 +
  66 + "#00FF00," // V3270_COLOR_CROSS_HAIR
  67 +
  68 + "#000000," // V3270_COLOR_OIA_BACKGROUND
  69 + "#00FF00," // V3270_COLOR_OIA
  70 + "#7890F0," // V3270_COLOR_OIA_SEPARATOR
  71 + "#FFFFFF," // V3270_COLOR_OIA_STATUS_OK
  72 + "#FFFF00," // V3270_COLOR_OIA_STATUS_WARNING
  73 + "#FF0000"; // V3270_COLOR_OIA_STATUS_INVALID
  74 +
  75 +
  76 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  77 +
  78 +void v3270_set_colors(GtkWidget *widget, const gchar *colors)
  79 +{
  80 + g_return_if_fail(GTK_IS_V3270(widget));
  81 +
  82 + if(!colors)
  83 + {
  84 + colors = v3270_default_colors;
  85 + }
  86 +
  87 + v3270_set_color_table(GTK_V3270(widget)->color,colors);
  88 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors);
  89 + v3270_reload(widget);
  90 +
  91 +}
  92 +
  93 +void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkRGBA *color)
  94 +{
  95 + g_return_if_fail(GTK_IS_V3270(widget));
  96 +
  97 + GTK_V3270(widget)->color[id] = *color;
  98 +
  99 +#if !GTK_CHECK_VERSION(3,0,0)
  100 + gdk_colormap_alloc_color(gtk_widget_get_default_colormap(),color,TRUE,TRUE);
  101 +#endif // !GTK(3,0,0)
  102 +
  103 +}
  104 +GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id)
  105 +{
  106 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  107 + return GTK_V3270(widget)->color+id;
  108 +}
  109 +
  110 +const GdkRGBA * v3270_get_color_table(GtkWidget *widget)
  111 +{
  112 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  113 + return GTK_V3270(widget)->color;
  114 +}
  115 +
  116 +void v3270_set_mono_color_table(GdkRGBA *clr, const gchar *fg, const gchar *bg)
  117 +{
  118 + int f;
  119 +
  120 + gdk_rgba_parse(clr,bg);
  121 + gdk_rgba_parse(clr+1,fg);
  122 +
  123 + for(f=2;f<V3270_COLOR_COUNT;f++)
  124 + clr[f] = clr[1];
  125 +
  126 + clr[V3270_COLOR_BLACK] = *clr;
  127 + clr[V3270_COLOR_OIA_BACKGROUND] = *clr;
  128 + clr[V3270_COLOR_SELECTED_BG] = clr[V3270_COLOR_WHITE];
  129 + clr[V3270_COLOR_SELECTED_FG] = clr[V3270_COLOR_BLACK];
  130 +
  131 +
  132 +}
  133 +
  134 +void v3270_set_color_table(GdkRGBA *table, const gchar *colors)
  135 +{
  136 + gchar **clr;
  137 + guint cnt;
  138 + guint f;
  139 +
  140 + if(strchr(colors,':'))
  141 + clr = g_strsplit(colors,":",V3270_COLOR_COUNT+1);
  142 + else if(strchr(colors,';'))
  143 + clr = g_strsplit(colors,";",V3270_COLOR_COUNT+1);
  144 + else
  145 + clr = g_strsplit(colors,",",V3270_COLOR_COUNT+1);
  146 +
  147 + cnt = g_strv_length(clr);
  148 +
  149 + switch(cnt)
  150 + {
  151 + case 28: // Version 4 string
  152 + for(f=0;f < 28;f++)
  153 + gdk_rgba_parse(table+f,clr[f]);
  154 + table[V3270_COLOR_OIA_STATUS_INVALID] = table[V3270_COLOR_OIA_STATUS_WARNING];
  155 + break;
  156 +
  157 + case V3270_COLOR_COUNT: // Complete string
  158 + for(f=0;f < V3270_COLOR_COUNT;f++)
  159 + gdk_rgba_parse(table+f,clr[f]);
  160 + break;
  161 +
  162 + default:
  163 +
  164 + g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT);
  165 +
  166 + if(cnt < V3270_COLOR_COUNT)
  167 + {
  168 + // Less than the required
  169 + for(f=0;f < cnt;f++)
  170 + gdk_rgba_parse(table+f,clr[f]);
  171 +
  172 + for(f=cnt; f < V3270_COLOR_COUNT;f++)
  173 + gdk_rgba_parse(table+f,clr[cnt-1]);
  174 +
  175 + clr[V3270_COLOR_OIA_BACKGROUND] = clr[0];
  176 + clr[V3270_COLOR_SELECTED_BG] = clr[0];
  177 + }
  178 + else
  179 + {
  180 + // More than required
  181 + for(f=0;f < V3270_COLOR_COUNT;f++)
  182 + gdk_rgba_parse(table+f,clr[f]);
  183 + }
  184 + }
  185 +
  186 + g_strfreev(clr);
  187 +
  188 +}
  189 +
  190 +LIB3270_EXPORT int v3270_set_session_color_type(GtkWidget *widget, unsigned short colortype)
  191 +{
  192 + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
  193 + return lib3270_set_color_type(GTK_V3270(widget)->host,colortype);
  194 +}
  195 +
  196 +LIB3270_EXPORT unsigned short v3270_get_session_color_type(GtkWidget *widget)
  197 +{
  198 + g_return_val_if_fail(GTK_IS_V3270(widget),-1);
  199 + return lib3270_get_color_type(GTK_V3270(widget)->host);
  200 +}
  201 +
... ...
src/v3270/draw.c
... ... @@ -522,3 +522,18 @@ void v3270_queue_draw_area(GtkWidget *widget, gint x, gint y, gint width, gint h
522 522 }
523 523  
524 524 }
  525 +
  526 +void v3270_disable_updates(GtkWidget *widget)
  527 +{
  528 + GTK_V3270(widget)->drawing = 0;
  529 +}
  530 +
  531 +void v3270_enable_updates(GtkWidget *widget)
  532 +{
  533 + if(gtk_widget_get_realized(widget))
  534 + {
  535 + GTK_V3270(widget)->drawing = 1;
  536 + v3270_reload(widget);
  537 + gtk_widget_queue_draw(widget);
  538 + }
  539 +}
... ...
src/v3270/font.c 0 → 100644
... ... @@ -0,0 +1,192 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include <config.h>
  31 + #include "private.h"
  32 + #include <lib3270.h>
  33 + #include <lib3270/log.h>
  34 +
  35 + #define WIDTH_IN_PIXELS(terminal,x) (x * cols)
  36 + #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1))
  37 +
  38 + #define CONTENTS_WIDTH(terminal) (cols * terminal->font.width)
  39 + #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->font.spacing)+OIA_TOP_MARGIN+2)
  40 +
  41 +/*--[ Globals ]--------------------------------------------------------------------------------------*/
  42 +
  43 + const gchar * v3270_default_font = "monospace";
  44 +
  45 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  46 +
  47 +void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
  48 +{
  49 + // update font metrics
  50 + int rows, cols, hFont, size;
  51 +
  52 + cairo_font_extents_t extents;
  53 +
  54 + lib3270_get_screen_size(terminal->host,&rows,&cols);
  55 +
  56 + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
  57 +
  58 + cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight);
  59 +
  60 + if(terminal->font.scaled)
  61 + {
  62 + double w = ((double) width) / ((double)cols);
  63 + double h = ((double) height) / ((double) (rows+2));
  64 + double s = w < h ? w : h;
  65 +
  66 + cairo_set_font_size(cr,s);
  67 + cairo_font_extents(cr,&extents);
  68 +
  69 + while( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
  70 + {
  71 + s += 1.0;
  72 + cairo_set_font_size(cr,s);
  73 + cairo_font_extents(cr,&extents);
  74 + }
  75 +
  76 + s -= 1.0;
  77 +
  78 + cairo_set_font_size(cr,s < 1.0 ? 1.0 : s);
  79 + cairo_font_extents(cr,&extents);
  80 + }
  81 + else
  82 + {
  83 + static const int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72, 0 };
  84 + int f;
  85 +
  86 + size = font_size[0];
  87 +
  88 + for(f=0;font_size[f];f++)
  89 + {
  90 + cairo_set_font_size(cr,font_size[f]);
  91 + cairo_font_extents(cr,&extents);
  92 +
  93 + if(f == 0)
  94 + {
  95 + terminal->minimum_width = (cols * extents.max_x_advance);
  96 + terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2);
  97 + }
  98 +
  99 + if( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
  100 + size = font_size[f];
  101 + }
  102 +
  103 + cairo_set_font_size(cr,size);
  104 +
  105 + #if !GTK_CHECK_VERSION(3,0,0)
  106 + gtk_widget_set_size_request(GTK_WIDGET(terminal),terminal->minimum_width,terminal->minimum_height);
  107 + #endif // !GTK(3,0,0)
  108 +
  109 + }
  110 +
  111 + cairo_font_extents(cr,&extents);
  112 +
  113 + // Save scaled font for use on next drawings
  114 + if(terminal->font.scaled)
  115 + cairo_scaled_font_destroy(terminal->font.scaled);
  116 +
  117 + terminal->font.scaled = cairo_get_scaled_font(cr);
  118 + cairo_scaled_font_reference(terminal->font.scaled);
  119 +
  120 + cairo_scaled_font_extents(terminal->font.scaled,&extents);
  121 +
  122 + terminal->font.width = (int) extents.max_x_advance;
  123 + terminal->font.height = (int) extents.height;
  124 + terminal->font.ascent = (int) extents.ascent;
  125 + terminal->font.descent = (int) extents.descent;
  126 +
  127 + hFont = terminal->font.height + terminal->font.descent;
  128 +
  129 + // Create new cursor surface
  130 + if(terminal->cursor.surface)
  131 + cairo_surface_destroy(terminal->cursor.surface);
  132 +
  133 + terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->font.width,hFont);
  134 +
  135 + // Center image
  136 + size = CONTENTS_WIDTH(terminal);
  137 + terminal->font.left = (width >> 1) - ((size) >> 1);
  138 +
  139 + terminal->font.spacing = height / (rows+2);
  140 + if((int) terminal->font.spacing < hFont)
  141 + terminal->font.spacing = hFont;
  142 +
  143 + size = CONTENTS_HEIGHT(terminal);
  144 +
  145 + terminal->font.top = (height >> 1) - (size >> 1);
  146 +
  147 +}
  148 +
  149 +LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name)
  150 +{
  151 + v3270 * terminal;
  152 +
  153 + g_return_if_fail(GTK_IS_V3270(widget));
  154 +
  155 + terminal = GTK_V3270(widget);
  156 +
  157 + if(!name)
  158 + {
  159 + name = v3270_default_font;
  160 + }
  161 +
  162 + if(g_ascii_strcasecmp(terminal->font.family,name))
  163 + {
  164 + // Font has changed, update it
  165 + g_free(terminal->font.family);
  166 +
  167 + terminal->font.family = g_strdup(name);
  168 + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
  169 +
  170 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name);
  171 +
  172 + v3270_reload(widget);
  173 + gtk_widget_queue_draw(widget);
  174 +
  175 + }
  176 +
  177 +
  178 +}
  179 +
  180 +LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget)
  181 +{
  182 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  183 + return GTK_V3270(widget)->font.family;
  184 +}
  185 +
  186 +void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on)
  187 +{
  188 + g_return_if_fail(GTK_IS_V3270(widget));
  189 +
  190 + GTK_V3270(widget)->scaled_fonts = on ? 1 : 0;
  191 +
  192 +}
... ...
src/v3270/private.h
... ... @@ -275,10 +275,13 @@ G_BEGIN_DECLS
275 275 const GtkWidgetClass * v3270_get_parent_class(void);
276 276  
277 277 G_GNUC_INTERNAL gboolean v3270_draw(GtkWidget * widget, cairo_t * cr);
  278 +G_GNUC_INTERNAL void v3270_cursor_draw(v3270 *widget);
278 279  
279 280 G_GNUC_INTERNAL void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols);
280 281 G_GNUC_INTERNAL void v3270_update_mouse_pointer(GtkWidget *widget);
281 282  
  283 +G_GNUC_INTERNAL AtkObject * v3270_get_accessible(GtkWidget * widget);
  284 +
282 285 #if ! GTK_CHECK_VERSION(2,18,0)
283 286 G_GNUC_INTERNAL void gtk_widget_get_allocation(GtkWidget *widget,GtkAllocation *allocation);
284 287 #endif // !GTK(2,18)
... ...
src/v3270/properties.c
... ... @@ -269,3 +269,25 @@
269 269 g_return_val_if_fail(GTK_IS_V3270(widget),0);
270 270 return GTK_V3270(widget)->activity.disconnect;
271 271 }
  272 +
  273 +LIB3270_EXPORT gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix)
  274 +{
  275 + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
  276 +
  277 + if(ix < LIB3270_TOGGLE_COUNT)
  278 + return lib3270_get_toggle(GTK_V3270(widget)->host,ix) ? TRUE : FALSE;
  279 +
  280 + return FALSE;
  281 +}
  282 +
  283 +LIB3270_EXPORT gboolean v3270_set_toggle(GtkWidget *widget, LIB3270_TOGGLE ix, gboolean state)
  284 +{
  285 + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
  286 +
  287 + if(ix < LIB3270_TOGGLE_COUNT)
  288 + return lib3270_set_toggle(GTK_V3270(widget)->host,ix,state ? 1 : 0) ? TRUE : FALSE;
  289 +
  290 + return FALSE;
  291 +
  292 +}
  293 +
... ...
src/v3270/widget.c
... ... @@ -18,7 +18,7 @@
18 18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19 19 * St, Fifth Floor, Boston, MA 02110-1301 USA
20 20 *
21   - * Este programa está nomeado como widget.c e possui - linhas de código.
  21 + * Este programa está nomeado como - e possui - linhas de código.
22 22 *
23 23 * Contatos:
24 24 *
... ... @@ -28,43 +28,17 @@
28 28 */
29 29  
30 30 #include <config.h>
31   -
32   - #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
33   -
34   - #define ENABLE_NLS
35   - #define GETTEXT_PACKAGE PACKAGE_NAME
36   -
37   - #include <gtk/gtk.h>
38   - #include <libintl.h>
39   - #include <glib/gi18n.h>
40   -
41   -#ifdef WIN32
42   - #include <winsock2.h>
43   - #include <windows.h>
44   - #include <ws2tcpip.h>
45   -#endif // WIN32
  31 + #include "private.h"
  32 + #include "marshal.h"
46 33  
47 34 #include <lib3270.h>
48   - #include <lib3270/session.h>
49   - #include <lib3270/actions.h>
50 35 #include <lib3270/log.h>
51   -// #include <lib3270/macros.h>
52   - #include <errno.h>
53   -
54   -#ifdef HAVE_MALLOC_H
55   - #include <malloc.h>
56   -#endif // HAVE_MALLOC_H
57   -
58   - #include <v3270.h>
59   - #include "private.h"
60   - #include <v3270/accessible.h>
61   - #include "marshal.h"
62 36  
63   -#if GTK_CHECK_VERSION(3,0,0)
  37 + #if GTK_CHECK_VERSION(3,0,0)
64 38 #include <gdk/gdkkeysyms-compat.h>
65   -#else
  39 + #else
66 40 #include <gdk/gdkkeysyms.h>
67   -#endif
  41 + #endif
68 42  
69 43 #define WIDTH_IN_PIXELS(terminal,x) (x * cols)
70 44 #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1))
... ... @@ -96,7 +70,6 @@ static void v3270_realize ( GtkWidget * widget) ;
96 70 static void v3270_size_allocate ( GtkWidget * widget,
97 71 GtkAllocation * allocation );
98 72 static void v3270_send_configure ( v3270 * terminal );
99   -static AtkObject * v3270_get_accessible ( GtkWidget * widget );
100 73  
101 74 // Signals
102 75 static void v3270_activate (GtkWidget *widget);
... ... @@ -104,19 +77,11 @@ static void v3270_activate (GtkWidget *widget);
104 77 gboolean v3270_focus_in_event(GtkWidget *widget, GdkEventFocus *event);
105 78 gboolean v3270_focus_out_event(GtkWidget *widget, GdkEventFocus *event);
106 79  
107   -#if GTK_CHECK_VERSION(3,0,0)
108   -
109 80 static void v3270_destroy (GtkWidget * object);
110 81  
111   -#else
112   -
113   -static void v3270_destroy (GtkObject * object);
114   -
115   -#endif // gtk3
116   -
117 82 /*--[ Implement ]------------------------------------------------------------------------------------*/
118 83  
119   -static void v3270_cursor_draw(v3270 *widget)
  84 +void v3270_cursor_draw(v3270 *widget)
120 85 {
121 86 int pos = lib3270_get_cursor_address(widget->host);
122 87 unsigned char c;
... ... @@ -130,16 +95,6 @@ static void v3270_cursor_draw(v3270 *widget)
130 95  
131 96 }
132 97  
133   -
134   -static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3270_TOGGLE toggle_id, G_GNUC_UNUSED gboolean toggle_state, G_GNUC_UNUSED const gchar *toggle_name)
135   -{
136   -}
137   -
138   -static void loghandler(G_GNUC_UNUSED H3270 *session, const char *module, int rc, const char *fmt, va_list args)
139   -{
140   - g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args);
141   -}
142   -
143 98 static gboolean v3270_popup_menu(GtkWidget * widget)
144 99 {
145 100 GdkEventButton event;
... ... @@ -157,8 +112,6 @@ static gboolean v3270_popup_menu(GtkWidget * widget)
157 112 return TRUE;
158 113 }
159 114  
160   -#if GTK_CHECK_VERSION(3,0,0)
161   -
162 115 void get_preferred_height(GtkWidget *widget, gint *minimum_height, gint *natural_height)
163 116 {
164 117 int height = GTK_V3270(widget)->minimum_height;
... ... @@ -182,8 +135,6 @@ void get_preferred_width(GtkWidget *widget, gint *minimum_width, gint *natural_w
182 135 *natural_width = 600;
183 136 }
184 137  
185   -#endif // GTK(3,0,0)
186   -
187 138 void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *title, const gchar *message, const gchar *text)
188 139 {
189 140 GtkWidget * dialog;
... ... @@ -288,6 +239,15 @@ gboolean v3270_query_tooltip(GtkWidget *widget, gint x, gint y, G_GNUC_UNUSED g
288 239 return FALSE;
289 240 }
290 241  
  242 +static void loghandler(G_GNUC_UNUSED H3270 *session, const char *module, int rc, const char *fmt, va_list args)
  243 +{
  244 + g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args);
  245 +}
  246 +
  247 +static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3270_TOGGLE toggle_id, G_GNUC_UNUSED gboolean toggle_state, G_GNUC_UNUSED const gchar *toggle_name)
  248 +{
  249 +}
  250 +
291 251 static void v3270_class_init(v3270Class *klass)
292 252 {
293 253 GObjectClass * gobject_class = G_OBJECT_CLASS(klass);
... ... @@ -547,371 +507,6 @@ static void v3270_class_init(v3270Class *klass)
547 507  
548 508 }
549 509  
550   -void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
551   -{
552   - // update font metrics
553   - int rows, cols, hFont, size;
554   -
555   - cairo_font_extents_t extents;
556   -
557   - lib3270_get_screen_size(terminal->host,&rows,&cols);
558   -
559   - terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
560   -
561   - cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight);
562   -
563   - if(terminal->font.scaled)
564   - {
565   - double w = ((double) width) / ((double)cols);
566   - double h = ((double) height) / ((double) (rows+2));
567   - double s = w < h ? w : h;
568   -
569   - cairo_set_font_size(cr,s);
570   - cairo_font_extents(cr,&extents);
571   -
572   - while( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
573   - {
574   - s += 1.0;
575   - cairo_set_font_size(cr,s);
576   - cairo_font_extents(cr,&extents);
577   - }
578   -
579   - s -= 1.0;
580   -
581   - cairo_set_font_size(cr,s < 1.0 ? 1.0 : s);
582   - cairo_font_extents(cr,&extents);
583   - }
584   - else
585   - {
586   - static const int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72, 0 };
587   - int f;
588   -
589   - size = font_size[0];
590   -
591   - for(f=0;font_size[f];f++)
592   - {
593   - cairo_set_font_size(cr,font_size[f]);
594   - cairo_font_extents(cr,&extents);
595   -
596   - if(f == 0)
597   - {
598   - terminal->minimum_width = (cols * extents.max_x_advance);
599   - terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2);
600   - }
601   -
602   - if( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
603   - size = font_size[f];
604   - }
605   -
606   - cairo_set_font_size(cr,size);
607   -
608   - #if !GTK_CHECK_VERSION(3,0,0)
609   - gtk_widget_set_size_request(GTK_WIDGET(terminal),terminal->minimum_width,terminal->minimum_height);
610   - #endif // !GTK(3,0,0)
611   -
612   - }
613   -
614   - cairo_font_extents(cr,&extents);
615   -
616   - // Save scaled font for use on next drawings
617   - if(terminal->font.scaled)
618   - cairo_scaled_font_destroy(terminal->font.scaled);
619   -
620   - terminal->font.scaled = cairo_get_scaled_font(cr);
621   - cairo_scaled_font_reference(terminal->font.scaled);
622   -
623   - cairo_scaled_font_extents(terminal->font.scaled,&extents);
624   -
625   - terminal->font.width = (int) extents.max_x_advance;
626   - terminal->font.height = (int) extents.height;
627   - terminal->font.ascent = (int) extents.ascent;
628   - terminal->font.descent = (int) extents.descent;
629   -
630   - hFont = terminal->font.height + terminal->font.descent;
631   -
632   - // Create new cursor surface
633   - if(terminal->cursor.surface)
634   - cairo_surface_destroy(terminal->cursor.surface);
635   -
636   - terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->font.width,hFont);
637   -
638   - // Center image
639   - size = CONTENTS_WIDTH(terminal);
640   - terminal->font.left = (width >> 1) - ((size) >> 1);
641   -
642   - terminal->font.spacing = height / (rows+2);
643   - if((int) terminal->font.spacing < hFont)
644   - terminal->font.spacing = hFont;
645   -
646   - size = CONTENTS_HEIGHT(terminal);
647   -
648   - terminal->font.top = (height >> 1) - (size >> 1);
649   -
650   -}
651   -
652   -static void set_timer(H3270 *session, unsigned char on)
653   -{
654   - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
655   -
656   - if(on)
657   - v3270_start_timer(widget);
658   - else
659   - v3270_stop_timer(widget);
660   -
661   -}
662   -
663   -static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name)
664   -{
665   - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
666   -
667   - switch(ix)
668   - {
669   - case LIB3270_TOGGLE_CURSOR_POS:
670   - case LIB3270_TOGGLE_MONOCASE:
671   - case LIB3270_TOGGLE_LINE_WRAP:
672   - case LIB3270_TOGGLE_CROSSHAIR:
673   - case LIB3270_TOGGLE_BLANK_FILL:
674   - case LIB3270_TOGGLE_MARGINED_PASTE:
675   - case LIB3270_TOGGLE_SHOW_TIMING:
676   - case LIB3270_TOGGLE_RECTANGLE_SELECT:
677   - case LIB3270_TOGGLE_UNDERLINE:
678   - case LIB3270_TOGGLE_VIEW_FIELD:
679   - case LIB3270_TOGGLE_ALTSCREEN:
680   - v3270_reload(widget);
681   - gtk_widget_queue_draw(widget);
682   - break;
683   -
684   - case LIB3270_TOGGLE_CURSOR_BLINK:
685   - GTK_V3270(widget)->cursor.show |= 1;
686   - break;
687   -
688   - case LIB3270_TOGGLE_INSERT:
689   - v3270_draw_ins_status(GTK_V3270(widget));
690   - v3270_cursor_draw(GTK_V3270(widget));
691   - break;
692   -
693   - case LIB3270_TOGGLE_BOLD:
694   - v3270_reload(widget);
695   - gtk_widget_queue_draw(widget);
696   - break;
697   -
698   - case LIB3270_TOGGLE_FULL_SCREEN:
699   - if(value)
700   - gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
701   - else
702   - gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
703   -
704   - break;
705   -
706   - case LIB3270_TOGGLE_DS_TRACE:
707   - case LIB3270_TOGGLE_SSL_TRACE:
708   - case LIB3270_TOGGLE_SCREEN_TRACE:
709   - case LIB3270_TOGGLE_EVENT_TRACE:
710   - case LIB3270_TOGGLE_RECONNECT:
711   - case LIB3270_TOGGLE_SMART_PASTE:
712   - case LIB3270_TOGGLE_KEEP_SELECTED:
713   - case LIB3270_TOGGLE_CONNECT_ON_STARTUP:
714   - case LIB3270_TOGGLE_KP_ALTERNATIVE:
715   - case LIB3270_TOGGLE_NETWORK_TRACE:
716   - case LIB3270_TOGGLE_BEEP:
717   - case LIB3270_TOGGLE_KEEP_ALIVE:
718   - break;
719   -
720   - case LIB3270_TOGGLE_COUNT:
721   - break;
722   -
723   - }
724   -
725   - g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.toggle[ix]);
726   - g_signal_emit(widget, v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name);
727   -
728   -}
729   -
730   -static void bg_update_message(H3270 *session)
731   -{
732   - void *widget = lib3270_get_user_data(session);
733   - trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session));
734   -
735   - g_signal_emit(
736   - GTK_WIDGET(widget),
737   - v3270_widget_signal[SIGNAL_MESSAGE_CHANGED],
738   - 0,
739   - (gint) lib3270_get_program_message(session)
740   - );
741   -
742   - trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session));
743   -}
744   -
745   -static void update_message(H3270 *session, G_GNUC_UNUSED LIB3270_MESSAGE id)
746   -{
747   - g_idle_add((GSourceFunc) bg_update_message, session);
748   -}
749   -
750   -static void update_luname(H3270 *session, const char *name)
751   -{
752   - v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name);
753   -}
754   -
755   -struct select_cursor_data
756   -{
757   - H3270 * hSession;
758   - LIB3270_POINTER id;
759   -};
760   -
761   -static void bg_select_cursor(struct select_cursor_data *data)
762   -{
763   - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession));
764   -
765   -#if GTK_CHECK_VERSION(2,20,0)
766   - if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
767   -#else
768   - if(GTK_WIDGET_REALIZED(widget) && widget->window)
769   -#endif // GTK(2,20)
770   - {
771   - GTK_V3270(widget)->pointer_id = data->id;
772   - v3270_update_mouse_pointer(widget);
773   - }
774   -}
775   -
776   -static void select_cursor(H3270 *session, LIB3270_POINTER id)
777   -{
778   - struct select_cursor_data *data = g_new0(struct select_cursor_data,1);
779   - data->hSession = session;
780   - data->id = id;
781   - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_select_cursor, data, g_free);
782   -}
783   -
784   -static void ctlr_done(H3270 *session)
785   -{
786   - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
787   -
788   -#if GTK_CHECK_VERSION(2,20,0)
789   - if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
790   -#else
791   - if(GTK_WIDGET_REALIZED(widget) && widget->window)
792   -#endif // GTK(2,20)
793   - {
794   - v3270_update_mouse_pointer(widget);
795   - }
796   -
797   -}
798   -
799   -static void update_connect(H3270 *session, unsigned char connected)
800   -{
801   - v3270 *widget = GTK_V3270(lib3270_get_user_data(session));
802   -
803   - if(connected)
804   - {
805   - widget->cursor.show |= 2;
806   - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, lib3270_get_host(session));
807   - }
808   - else
809   - {
810   - widget->cursor.show &= ~2;
811   - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_DISCONNECTED], 0);
812   - }
813   -
814   - if(v3270_properties.online)
815   - g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.online);
816   -
817   - widget->activity.timestamp = time(0);
818   -
819   - gtk_widget_queue_draw(GTK_WIDGET(widget));
820   -}
821   -
822   -static void update_screen_size(H3270 *session, G_GNUC_UNUSED unsigned short rows, G_GNUC_UNUSED unsigned short cols)
823   -{
824   - v3270_reload(GTK_WIDGET(lib3270_get_user_data(session)));
825   - gtk_widget_queue_draw(GTK_WIDGET(lib3270_get_user_data(session)));
826   -}
827   -
828   -static void update_model(H3270 *session, const char *name, int model, G_GNUC_UNUSED int rows, G_GNUC_UNUSED int cols)
829   -{
830   - if(v3270_properties.model)
831   - g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties.model);
832   -
833   - g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name);
834   -}
835   -
836   -static void changed(H3270 *session, int offset, int len)
837   -{
838   - GtkWidget * widget = lib3270_get_user_data(session);
839   - GtkAccessible * obj = GTK_V3270(widget)->accessible;
840   -
841   - if(obj)
842   - {
843   - // Get new text, notify atk
844   - gsize bytes_written = 0;
845   - char * text = lib3270_get_string_at_address(session,offset,len,'\n');
846   -
847   - if(text)
848   - {
849   - GError * error = NULL;
850   - gchar * utfchar = g_convert_with_fallback( text,
851   - -1,
852   - "UTF-8",
853   - lib3270_get_display_charset(session),
854   - " ",
855   - NULL,
856   - &bytes_written,
857   - &error );
858   -
859   - lib3270_free(text);
860   -
861   - if(error)
862   - {
863   - g_warning("%s failed: %s",__FUNCTION__,error->message);
864   - g_error_free(error);
865   - }
866   -
867   - if(utfchar)
868   - {
869   - g_signal_emit_by_name(obj, "text-insert", offset, bytes_written, utfchar);
870   - g_free(utfchar);
871   - }
872   -
873   - }
874   - }
875   -
876   -#ifdef WIN32
877   - gtk_widget_queue_draw(widget);
878   -#endif // WIN32
879   -
880   - g_signal_emit(GTK_WIDGET(widget),v3270_widget_signal[SIGNAL_CHANGED], 0, (guint) offset, (guint) len);
881   -}
882   -
883   -static void set_selection(H3270 *session, unsigned char status)
884   -{
885   - GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
886   -
887   - if(v3270_properties.selection)
888   - g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.selection);
889   -
890   - g_signal_emit(widget,v3270_widget_signal[SIGNAL_SELECTING], 0, status ? TRUE : FALSE);
891   -
892   -}
893   -
894   -static void update_selection(H3270 *session, G_GNUC_UNUSED int start, G_GNUC_UNUSED int end)
895   -{
896   - // Selected region changed
897   - GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
898   - GtkAccessible * atk_obj = GTK_V3270(widget)->accessible;
899   -
900   - if(atk_obj)
901   - g_signal_emit_by_name(atk_obj,"text-selection-changed");
902   -
903   -}
904   -
905   -static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text)
906   -{
907   - g_signal_emit( GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE], 0,
908   - (int) id,
909   - (gchar *) title,
910   - (gchar *) message,
911   - (gchar *) text );
912   -
913   -}
914   -
915 510 static int emit_print_signal(H3270 *session)
916 511 {
917 512 g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_PRINT], 0);
... ... @@ -922,7 +517,6 @@ static gboolean activity_tick(v3270 *widget)
922 517 {
923 518 if(widget->activity.disconnect && lib3270_is_connected(widget->host) && ((time(0) - widget->activity.timestamp)/60) >= widget->activity.disconnect)
924 519 lib3270_disconnect(widget->host);
925   -
926 520 return TRUE;
927 521 }
928 522  
... ... @@ -931,106 +525,14 @@ static void release_activity_timer(v3270 *widget)
931 525 widget->activity.timer = NULL;
932 526 }
933 527  
934   -static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args)
  528 +static void v3270_init(v3270 *widget)
935 529 {
936   - GtkWidget *terminal = (GtkWidget *) lib3270_get_user_data(session);
937   -
938   - if(terminal && GTK_IS_V3270(terminal)) {
939   -
940   - if(fmt)
941   - {
942   - gchar *text = g_strdup_vprintf(fmt,args);
943   - v3270_popup_message(GTK_WIDGET(terminal),type,title,msg,text);
944   - g_free(text);
945   - }
946   - else
947   - {
948   - v3270_popup_message(GTK_WIDGET(terminal),type,title,msg,NULL);
949   - }
950   -
951   - }
952   -
953   - }
954   -
955   - static gboolean bg_update_ssl(H3270 *session)
956   - {
957   - trace("%s",__FUNCTION__);
958   -
959   - v3270_blink_ssl(GTK_V3270(lib3270_get_user_data(session)));
960   -
961   - if(lib3270_get_secure(session) == LIB3270_SSL_NEGOTIATING)
962   - v3270_start_blinking(GTK_WIDGET(lib3270_get_user_data(session)));
963   -
964   - return FALSE;
965   - }
966   -
967   - static void update_ssl(H3270 *session, G_GNUC_UNUSED LIB3270_SSL_STATE state)
968   - {
969   - g_idle_add((GSourceFunc) bg_update_ssl, session);
970   - }
971   -
972   - const gchar * v3270_default_font = "monospace";
973   -
974   - struct update_oia_data
975   - {
976   - H3270 *session;
977   - LIB3270_FLAG id;
978   - unsigned char on;
979   - };
980   -
981   - static gboolean bg_update_oia(struct update_oia_data *data)
982   - {
983   - v3270_update_oia(GTK_V3270(lib3270_get_user_data(data->session)), data->id, data->on);
984   - return FALSE;
985   - }
986   -
987   - static void update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
988   - {
989   - struct update_oia_data *data = g_new0(struct update_oia_data,1);
990   - data->session = session;
991   - data->id = id;
992   - data->on = on;
993   - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free);
994   - }
995   -
996   - static void v3270_init(v3270 *widget)
997   - {
998   - struct lib3270_session_callbacks *cbk;
999 530  
1000 531 widget->host = lib3270_session_new("");
1001   -
1002 532 lib3270_set_user_data(widget->host,widget);
1003   - lib3270_set_popup_handler(widget->host, popup_handler);
1004   -
1005   - cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks));
1006   - if(!cbk)
1007   - {
1008   - g_error( _( "Invalid callback table, possible version mismatch in lib3270") );
1009   - return;
1010   - }
1011   -
1012 533  
1013   - cbk->update = v3270_update_char;
1014   - cbk->changed = changed;
1015   - cbk->set_timer = set_timer;
1016   -
1017   - cbk->set_selection = set_selection;
1018   - cbk->update_selection = update_selection;
1019   -
1020   - cbk->update_luname = update_luname;
1021   - cbk->configure = update_screen_size;
1022   - cbk->update_status = update_message;
1023   - cbk->update_cursor = v3270_update_cursor;
1024   - cbk->update_toggle = update_toggle;
1025   - cbk->update_oia = update_oia;
1026   - cbk->cursor = select_cursor;
1027   - cbk->update_connect = update_connect;
1028   - cbk->update_model = update_model;
1029   - cbk->changed = changed;
1030   - cbk->ctlr_done = ctlr_done;
1031   - cbk->message = message;
1032   - cbk->update_ssl = update_ssl;
1033   - cbk->print = emit_print_signal;
  534 + // Install callbacks
  535 + v3270_install_callbacks(widget);
1034 536  
1035 537 // Reset timer
1036 538 widget->activity.timestamp = time(0);
... ... @@ -1365,192 +867,6 @@ static void v3270_send_configure(v3270 * terminal)
1365 867 gdk_event_free(event);
1366 868 }
1367 869  
1368   -const gchar * v3270_default_colors =
1369   - "#000000," // V3270_COLOR_BACKGROUND
1370   - "#7890F0," // V3270_COLOR_BLUE
1371   - "#FF0000," // V3270_COLOR_RED
1372   - "#FF00FF," // V3270_COLOR_PINK
1373   - "#00FF00," // V3270_COLOR_GREEN
1374   - "#00FFFF," // V3270_COLOR_TURQUOISE
1375   - "#FFFF00," // V3270_COLOR_YELLOW
1376   - "#FFFFFF," // V3270_COLOR_WHITE
1377   - "#000000," // V3270_COLOR_BLACK
1378   - "#000080," // V3270_COLOR_DARK_BLUE
1379   - "#FFA200," // V3270_COLOR_ORANGE
1380   - "#800080," // V3270_COLOR_PURPLE
1381   - "#008000," // V3270_COLOR_DARK_GREEN
1382   - "#008080," // V3270_COLOR_DARK_TURQUOISE
1383   - "#A0A000," // V3270_COLOR_MUSTARD
1384   - "#C0C0C0," // V3270_COLOR_GRAY
1385   -
1386   - "#00FF00," // V3270_COLOR_FIELD_DEFAULT
1387   - "#FF0000," // V3270_COLOR_FIELD_INTENSIFIED
1388   - "#00FFFF," // V3270_COLOR_FIELD_PROTECTED
1389   - "#FFFFFF," // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED
1390   -
1391   - "#404040," // V3270_COLOR_SELECTED_BG
1392   - "#FFFFFF," // V3270_COLOR_SELECTED_FG,
1393   -
1394   - "#00FF00," // V3270_COLOR_CROSS_HAIR
1395   -
1396   - "#000000," // V3270_COLOR_OIA_BACKGROUND
1397   - "#00FF00," // V3270_COLOR_OIA
1398   - "#7890F0," // V3270_COLOR_OIA_SEPARATOR
1399   - "#FFFFFF," // V3270_COLOR_OIA_STATUS_OK
1400   - "#FFFF00," // V3270_COLOR_OIA_STATUS_WARNING
1401   - "#FF0000"; // V3270_COLOR_OIA_STATUS_INVALID
1402   -
1403   -
1404   -
1405   -void v3270_set_colors(GtkWidget *widget, const gchar *colors)
1406   -{
1407   - g_return_if_fail(GTK_IS_V3270(widget));
1408   -
1409   - if(!colors)
1410   - {
1411   - colors = v3270_default_colors;
1412   - }
1413   -
1414   - v3270_set_color_table(GTK_V3270(widget)->color,colors);
1415   - g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors);
1416   - v3270_reload(widget);
1417   -
1418   -}
1419   -
1420   -void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkRGBA *color)
1421   -{
1422   - g_return_if_fail(GTK_IS_V3270(widget));
1423   -
1424   - GTK_V3270(widget)->color[id] = *color;
1425   -
1426   -#if !GTK_CHECK_VERSION(3,0,0)
1427   - gdk_colormap_alloc_color(gtk_widget_get_default_colormap(),color,TRUE,TRUE);
1428   -#endif // !GTK(3,0,0)
1429   -
1430   -}
1431   -GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id)
1432   -{
1433   - g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
1434   - return GTK_V3270(widget)->color+id;
1435   -}
1436   -
1437   -const GdkRGBA * v3270_get_color_table(GtkWidget *widget)
1438   -{
1439   - g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
1440   - return GTK_V3270(widget)->color;
1441   -}
1442   -
1443   -void v3270_set_mono_color_table(GdkRGBA *clr, const gchar *fg, const gchar *bg)
1444   -{
1445   - int f;
1446   -
1447   - gdk_rgba_parse(clr,bg);
1448   - gdk_rgba_parse(clr+1,fg);
1449   -
1450   - for(f=2;f<V3270_COLOR_COUNT;f++)
1451   - clr[f] = clr[1];
1452   -
1453   - clr[V3270_COLOR_BLACK] = *clr;
1454   - clr[V3270_COLOR_OIA_BACKGROUND] = *clr;
1455   - clr[V3270_COLOR_SELECTED_BG] = clr[V3270_COLOR_WHITE];
1456   - clr[V3270_COLOR_SELECTED_FG] = clr[V3270_COLOR_BLACK];
1457   -
1458   -
1459   -}
1460   -
1461   -void v3270_set_color_table(GdkRGBA *table, const gchar *colors)
1462   -{
1463   - gchar **clr;
1464   - guint cnt;
1465   - guint f;
1466   -
1467   - if(strchr(colors,':'))
1468   - clr = g_strsplit(colors,":",V3270_COLOR_COUNT+1);
1469   - else if(strchr(colors,';'))
1470   - clr = g_strsplit(colors,";",V3270_COLOR_COUNT+1);
1471   - else
1472   - clr = g_strsplit(colors,",",V3270_COLOR_COUNT+1);
1473   -
1474   - cnt = g_strv_length(clr);
1475   -
1476   - switch(cnt)
1477   - {
1478   - case 28: // Version 4 string
1479   - for(f=0;f < 28;f++)
1480   - gdk_rgba_parse(table+f,clr[f]);
1481   - table[V3270_COLOR_OIA_STATUS_INVALID] = table[V3270_COLOR_OIA_STATUS_WARNING];
1482   - break;
1483   -
1484   - case V3270_COLOR_COUNT: // Complete string
1485   - for(f=0;f < V3270_COLOR_COUNT;f++)
1486   - gdk_rgba_parse(table+f,clr[f]);
1487   - break;
1488   -
1489   - default:
1490   -
1491   - g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT);
1492   -
1493   - if(cnt < V3270_COLOR_COUNT)
1494   - {
1495   - // Less than the required
1496   - for(f=0;f < cnt;f++)
1497   - gdk_rgba_parse(table+f,clr[f]);
1498   -
1499   - for(f=cnt; f < V3270_COLOR_COUNT;f++)
1500   - gdk_rgba_parse(table+f,clr[cnt-1]);
1501   -
1502   - clr[V3270_COLOR_OIA_BACKGROUND] = clr[0];
1503   - clr[V3270_COLOR_SELECTED_BG] = clr[0];
1504   - }
1505   - else
1506   - {
1507   - // More than required
1508   - for(f=0;f < V3270_COLOR_COUNT;f++)
1509   - gdk_rgba_parse(table+f,clr[f]);
1510   - }
1511   - }
1512   -
1513   - g_strfreev(clr);
1514   -
1515   -}
1516   -
1517   -LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name)
1518   -{
1519   - v3270 * terminal;
1520   -
1521   - g_return_if_fail(GTK_IS_V3270(widget));
1522   -
1523   - terminal = GTK_V3270(widget);
1524   -
1525   - if(!name)
1526   - {
1527   - name = v3270_default_font;
1528   - }
1529   -
1530   - if(g_ascii_strcasecmp(terminal->font.family,name))
1531   - {
1532   - // Font has changed, update it
1533   - g_free(terminal->font.family);
1534   -
1535   - terminal->font.family = g_strdup(name);
1536   - terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
1537   -
1538   - g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name);
1539   -
1540   - v3270_reload(widget);
1541   - gtk_widget_queue_draw(widget);
1542   -
1543   - }
1544   -
1545   -
1546   -}
1547   -
1548   -LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget)
1549   -{
1550   - g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
1551   - return GTK_V3270(widget)->font.family;
1552   -}
1553   -
1554 870 LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget)
1555 871 {
1556 872 g_return_if_fail(GTK_IS_V3270(widget));
... ... @@ -1624,47 +940,11 @@ const GtkWidgetClass * v3270_get_parent_class(void)
1624 940 return GTK_WIDGET_CLASS(v3270_parent_class);
1625 941 }
1626 942  
1627   -static AtkObject * v3270_get_accessible(GtkWidget * widget)
1628   -{
1629   - v3270 * terminal = GTK_V3270(widget);
1630   -
1631   - if(!terminal->accessible)
1632   - {
1633   - terminal->accessible = g_object_new(GTK_TYPE_V3270_ACCESSIBLE,NULL);
1634   - atk_object_initialize(ATK_OBJECT(terminal->accessible), widget);
1635   - gtk_accessible_set_widget(GTK_ACCESSIBLE(terminal->accessible),widget);
1636   - g_object_ref(terminal->accessible);
1637   - }
1638   -
1639   - return ATK_OBJECT(terminal->accessible);
1640   -}
1641   -
1642 943 GtkIMContext * v3270_get_im_context(GtkWidget *widget)
1643 944 {
1644 945 return GTK_V3270(widget)->input_method;
1645 946 }
1646 947  
1647   -LIB3270_EXPORT gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix)
1648   -{
1649   - g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
1650   -
1651   - if(ix < LIB3270_TOGGLE_COUNT)
1652   - return lib3270_get_toggle(GTK_V3270(widget)->host,ix) ? TRUE : FALSE;
1653   -
1654   - return FALSE;
1655   -}
1656   -
1657   -LIB3270_EXPORT gboolean v3270_set_toggle(GtkWidget *widget, LIB3270_TOGGLE ix, gboolean state)
1658   -{
1659   - g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
1660   -
1661   - if(ix < LIB3270_TOGGLE_COUNT)
1662   - return lib3270_set_toggle(GTK_V3270(widget)->host,ix,state ? 1 : 0) ? TRUE : FALSE;
1663   -
1664   - return FALSE;
1665   -
1666   -}
1667   -
1668 948 /**
1669 949 * v3270_set_url:
1670 950 *
... ... @@ -1706,14 +986,6 @@ LIB3270_EXPORT const gchar * v3270_get_session_name(GtkWidget *widget)
1706 986 return GTK_V3270(widget)->session_name;
1707 987 }
1708 988  
1709   -void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on)
1710   -{
1711   - g_return_if_fail(GTK_IS_V3270(widget));
1712   -
1713   - GTK_V3270(widget)->scaled_fonts = on ? 1 : 0;
1714   -
1715   -}
1716   -
1717 989 LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name)
1718 990 {
1719 991 g_return_if_fail(GTK_IS_V3270(widget));
... ... @@ -1737,19 +1009,6 @@ LIB3270_EXPORT int v3270_set_host_type_by_name(GtkWidget *widget, const char *na
1737 1009 return lib3270_set_host_type_by_name(GTK_V3270(widget)->host,name);
1738 1010 }
1739 1011  
1740   -LIB3270_EXPORT int v3270_set_session_color_type(GtkWidget *widget, unsigned short colortype)
1741   -{
1742   - g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
1743   - return lib3270_set_color_type(GTK_V3270(widget)->host,colortype);
1744   -}
1745   -
1746   -
1747   -LIB3270_EXPORT unsigned short v3270_get_session_color_type(GtkWidget *widget)
1748   -{
1749   - g_return_val_if_fail(GTK_IS_V3270(widget),-1);
1750   - return lib3270_get_color_type(GTK_V3270(widget)->host);
1751   -}
1752   -
1753 1012 LIB3270_EXPORT gboolean v3270_is_connected(GtkWidget *widget)
1754 1013 {
1755 1014 g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
... ... @@ -1762,6 +1021,7 @@ LIB3270_EXPORT int v3270_set_host_charset(GtkWidget *widget, const gchar *name)
1762 1021 return lib3270_set_host_charset(GTK_V3270(widget)->host,name);
1763 1022 }
1764 1023  
  1024 +/*
1765 1025 GtkWidget * v3270_get_default_widget(void)
1766 1026 {
1767 1027 H3270 * hSession = lib3270_get_default_session_handle();
... ... @@ -1782,18 +1042,5 @@ GtkWidget * v3270_get_default_widget(void)
1782 1042  
1783 1043 return GTK_WIDGET(widget);
1784 1044 }
  1045 +*/
1785 1046  
1786   -void v3270_disable_updates(GtkWidget *widget)
1787   -{
1788   - GTK_V3270(widget)->drawing = 0;
1789   -}
1790   -
1791   -void v3270_enable_updates(GtkWidget *widget)
1792   -{
1793   - if(gtk_widget_get_realized(widget))
1794   - {
1795   - GTK_V3270(widget)->drawing = 1;
1796   - v3270_reload(widget);
1797   - gtk_widget_queue_draw(widget);
1798   - }
1799   -}
... ...