From af7a64048a350941804d0a4027b6eaa9e85fa810 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 17 Jan 2019 21:44:02 -0200 Subject: [PATCH] Moving OIA updates to IDLE queue. --- src/trace/trace.c | 2 ++ src/v3270/mouse.c | 5 ----- src/v3270/oia.c | 11 ++++------- src/v3270/private.h | 2 +- src/v3270/widget.c | 24 +++++++++++++++++++++++- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/trace/trace.c b/src/trace/trace.c index 296f85f..b5ff54d 100644 --- a/src/trace/trace.c +++ b/src/trace/trace.c @@ -43,6 +43,8 @@ #include #endif // HAVE_SYSLOG +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + /*--[ Widget definition ]----------------------------------------------------------------------------*/ G_BEGIN_DECLS diff --git a/src/v3270/mouse.c b/src/v3270/mouse.c index e83fd1c..ecbd629 100644 --- a/src/v3270/mouse.c +++ b/src/v3270/mouse.c @@ -228,11 +228,6 @@ static void update_mouse_pointer(GtkWidget *widget, int baddr) void v3270_update_mouse_pointer(GtkWidget *widget) { gint x, y; - -#if GTK_CHECK_VERSION(3,4,0) - #warning Implement gdk_window_get_device_position -#endif // GTK(3,4,0) - gtk_widget_get_pointer(widget,&x,&y); update_mouse_pointer(widget,v3270_get_offset_at_point(GTK_V3270(widget),x,y)); } diff --git a/src/v3270/oia.c b/src/v3270/oia.c index 77a0e95..095bbce 100644 --- a/src/v3270/oia.c +++ b/src/v3270/oia.c @@ -1091,16 +1091,16 @@ void v3270_blink_ssl(v3270 *terminal) } -void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) +void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on) { cairo_t *cr; GdkRectangle *r; - v3270 *terminal = GTK_V3270(lib3270_get_user_data(session)); - if(!(terminal->surface && terminal->drawing)) return; + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wswitch" switch(id) { case LIB3270_FLAG_BOXSOLID: @@ -1141,14 +1141,11 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) break; */ - default: - return; } + #pragma GCC diagnostic pop - debug("%s",__FUNCTION__); } - int v3270_set_script(GtkWidget *widget, const gchar id) { g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); diff --git a/src/v3270/private.h b/src/v3270/private.h index 0a3220b..8a43a12 100644 --- a/src/v3270/private.h +++ b/src/v3270/private.h @@ -330,7 +330,7 @@ G_GNUC_INTERNAL void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *re G_GNUC_INTERNAL void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id); G_GNUC_INTERNAL void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr); -G_GNUC_INTERNAL void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on); +G_GNUC_INTERNAL void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on); G_GNUC_INTERNAL void v3270_blink_ssl(v3270 *terminal); diff --git a/src/v3270/widget.c b/src/v3270/widget.c index 4b35dcc..17e949c 100644 --- a/src/v3270/widget.c +++ b/src/v3270/widget.c @@ -957,6 +957,28 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title const gchar * v3270_default_font = "monospace"; + struct update_oia_data + { + H3270 *session; + LIB3270_FLAG id; + unsigned char on; + }; + + static gboolean bg_update_oia(struct update_oia_data *data) + { + v3270_update_oia(GTK_V3270(lib3270_get_user_data(data->session)), data->id, data->on); + return FALSE; + } + + static void update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) + { + struct update_oia_data *data = g_new0(struct update_oia_data,1); + data->session = session; + data->id = id; + data->on = on; + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free); + } + static void v3270_init(v3270 *widget) { struct lib3270_session_callbacks *cbk; @@ -986,7 +1008,7 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title cbk->update_status = update_message; cbk->update_cursor = v3270_update_cursor; cbk->update_toggle = update_toggle; - cbk->update_oia = v3270_update_oia; + cbk->update_oia = update_oia; cbk->cursor = select_cursor; cbk->update_connect = update_connect; cbk->update_model = update_model; -- libgit2 0.21.2