From 402173bcbeb93486cb004ffbfaeb26d118aca43f Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Mon, 19 Mar 2012 12:50:58 +0000 Subject: [PATCH] Iniciando inclusão da ação "pastenext" --- src/gtk/mainwindow.c | 13 +++++++++++++ src/gtk/v3270/clipboard.c | 2 ++ src/lib3270/paste.c | 31 ++++++++++++++++++------------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/gtk/mainwindow.c b/src/gtk/mainwindow.c index 7fa8ea0..bb9b308 100644 --- a/src/gtk/mainwindow.c +++ b/src/gtk/mainwindow.c @@ -123,6 +123,7 @@ gtk_action_group_set_sensitive(group[ACTION_GROUP_OFFLINE],TRUE); } +/* #ifndef WIN32 static void clipboard_text_check(GtkClipboard *clipboard, const gchar *text, GtkActionGroup **group) { @@ -130,18 +131,22 @@ gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],text != NULL); } #endif +*/ static void connected(GtkWidget *widget, GtkActionGroup **group) { gtk_action_group_set_sensitive(group[ACTION_GROUP_ONLINE],TRUE); gtk_action_group_set_sensitive(group[ACTION_GROUP_OFFLINE],FALSE); + gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],TRUE); +/* #ifdef WIN32 gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],TRUE); #else gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],FALSE); gtk_clipboard_request_text(gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD),(GtkClipboardTextReceivedFunc) clipboard_text_check,(gpointer) group); #endif +*/ } @@ -193,6 +198,11 @@ } + static void pastenext(GtkWidget *widget, gboolean on, GtkAction **action) + { + gtk_action_set_sensitive(action[ACTION_PASTENEXT],on); + } + static void setup_input_method(GtkWidget *widget, GtkWidget *obj) { GtkWidget *menu = gtk_menu_new(); @@ -316,7 +326,10 @@ gtk_action_set_visible(action[ACTION_UNFULLSCREEN],lib3270_get_toggle(host,LIB3270_TOGGLE_FULL_SCREEN)); if(action[ACTION_PASTENEXT]) + { gtk_action_set_sensitive(action[ACTION_PASTENEXT],FALSE); + g_signal_connect(terminal,"pastenext",G_CALLBACK(pastenext),action); + } if(action[ACTION_RESELECT]) gtk_action_set_sensitive(action[ACTION_RESELECT],FALSE); diff --git a/src/gtk/v3270/clipboard.c b/src/gtk/v3270/clipboard.c index 2e33386..55e4793 100644 --- a/src/gtk/v3270/clipboard.c +++ b/src/gtk/v3270/clipboard.c @@ -227,6 +227,8 @@ void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encod next = lib3270_paste(session,buffer) ? TRUE : FALSE; + trace("Pastenext is %s",next ? "On" : "Off"); + g_free(buffer); g_signal_emit(widget,v3270_widget_signal[SIGNAL_PASTENEXT], 0, next); diff --git a/src/lib3270/paste.c b/src/lib3270/paste.c index 2955be6..81487dd 100644 --- a/src/lib3270/paste.c +++ b/src/lib3270/paste.c @@ -99,7 +99,7 @@ * Move the cursor back within the legal paste area. * Returns a Boolean indicating success. */ - static int remargin(int lmargin) + static int remargin(H3270 *session, int lmargin) { int ever = False; int baddr, b0 = 0; @@ -108,7 +108,7 @@ if(toggled(MARGINED_PASTE)) { - baddr = h3270.cursor_addr; + baddr = session->cursor_addr; while(BA_TO_COL(baddr) < lmargin) { baddr = ROWCOL_TO_BA(BA_TO_ROW(baddr), lmargin); @@ -118,8 +118,8 @@ ever = True; } - faddr = find_field_attribute(&h3270,baddr); - fa = h3270.ea_buf[faddr].fa; + faddr = find_field_attribute(session,baddr); + fa = session->ea_buf[faddr].fa; if (faddr == baddr || FA_IS_PROTECTED(fa)) { baddr = next_unprotected(baddr); @@ -152,12 +152,12 @@ data->qtd++; - if(BA_TO_ROW(h3270.cursor_addr) != data->row) + if(BA_TO_ROW(session->cursor_addr) != data->row) { - Trace("Row changed from %d to %d",data->row,BA_TO_ROW(h3270.cursor_addr)); - if(!remargin(data->orig_col)) + Trace("Row changed from %d to %d",data->row,BA_TO_ROW(session->cursor_addr)); + if(!remargin(session,data->orig_col)) return 0; - data->row = BA_TO_ROW(h3270.cursor_addr); + data->row = BA_TO_ROW(session->cursor_addr); return '\n'; } @@ -177,9 +177,6 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) { PASTE_DATA data; unsigned char last = 1; - int baddr; - int faddr; - unsigned char fa; CHECK_SESSION_HANDLE(h); @@ -204,10 +201,14 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) case '\n': if(last != '\n') { + int baddr; + int faddr; + unsigned char fa; + baddr = (h->cursor_addr + h->cols) % (h->cols * h->rows); /* down */ baddr = (baddr / h->cols) * h->cols; /* 1st col */ faddr = find_field_attribute(h,baddr); - fa = h3270.ea_buf[faddr].fa; + fa = h->ea_buf[faddr].fa; if (faddr != baddr && !FA_IS_PROTECTED(fa)) cursor_move(baddr); else @@ -226,12 +227,16 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) if(IN_3270 && toggled(MARGINED_PASTE) && BA_TO_COL(h->cursor_addr) < data.orig_col) { - if(!remargin(data.orig_col)) + if(!remargin(h,data.orig_col)) last = 0; } + + if(h->cursor_addr == data.orig_addr) + break; } h->resume(h); + return data.qtd; } -- libgit2 0.21.2