Commit 402173bcbeb93486cb004ffbfaeb26d118aca43f
1 parent
ac6936f0
Exists in
master
and in
5 other branches
Iniciando inclusão da ação "pastenext"
Showing
3 changed files
with
33 additions
and
13 deletions
Show diff stats
src/gtk/mainwindow.c
... | ... | @@ -123,6 +123,7 @@ |
123 | 123 | gtk_action_group_set_sensitive(group[ACTION_GROUP_OFFLINE],TRUE); |
124 | 124 | } |
125 | 125 | |
126 | +/* | |
126 | 127 | #ifndef WIN32 |
127 | 128 | static void clipboard_text_check(GtkClipboard *clipboard, const gchar *text, GtkActionGroup **group) |
128 | 129 | { |
... | ... | @@ -130,18 +131,22 @@ |
130 | 131 | gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],text != NULL); |
131 | 132 | } |
132 | 133 | #endif |
134 | +*/ | |
133 | 135 | |
134 | 136 | static void connected(GtkWidget *widget, GtkActionGroup **group) |
135 | 137 | { |
136 | 138 | gtk_action_group_set_sensitive(group[ACTION_GROUP_ONLINE],TRUE); |
137 | 139 | gtk_action_group_set_sensitive(group[ACTION_GROUP_OFFLINE],FALSE); |
140 | + gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],TRUE); | |
138 | 141 | |
142 | +/* | |
139 | 143 | #ifdef WIN32 |
140 | 144 | gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],TRUE); |
141 | 145 | #else |
142 | 146 | gtk_action_group_set_sensitive(group[ACTION_GROUP_PASTE],FALSE); |
143 | 147 | gtk_clipboard_request_text(gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD),(GtkClipboardTextReceivedFunc) clipboard_text_check,(gpointer) group); |
144 | 148 | #endif |
149 | +*/ | |
145 | 150 | |
146 | 151 | } |
147 | 152 | |
... | ... | @@ -193,6 +198,11 @@ |
193 | 198 | |
194 | 199 | } |
195 | 200 | |
201 | + static void pastenext(GtkWidget *widget, gboolean on, GtkAction **action) | |
202 | + { | |
203 | + gtk_action_set_sensitive(action[ACTION_PASTENEXT],on); | |
204 | + } | |
205 | + | |
196 | 206 | static void setup_input_method(GtkWidget *widget, GtkWidget *obj) |
197 | 207 | { |
198 | 208 | GtkWidget *menu = gtk_menu_new(); |
... | ... | @@ -316,7 +326,10 @@ |
316 | 326 | gtk_action_set_visible(action[ACTION_UNFULLSCREEN],lib3270_get_toggle(host,LIB3270_TOGGLE_FULL_SCREEN)); |
317 | 327 | |
318 | 328 | if(action[ACTION_PASTENEXT]) |
329 | + { | |
319 | 330 | gtk_action_set_sensitive(action[ACTION_PASTENEXT],FALSE); |
331 | + g_signal_connect(terminal,"pastenext",G_CALLBACK(pastenext),action); | |
332 | + } | |
320 | 333 | |
321 | 334 | if(action[ACTION_RESELECT]) |
322 | 335 | gtk_action_set_sensitive(action[ACTION_RESELECT],FALSE); | ... | ... |
src/gtk/v3270/clipboard.c
... | ... | @@ -227,6 +227,8 @@ void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encod |
227 | 227 | |
228 | 228 | next = lib3270_paste(session,buffer) ? TRUE : FALSE; |
229 | 229 | |
230 | + trace("Pastenext is %s",next ? "On" : "Off"); | |
231 | + | |
230 | 232 | g_free(buffer); |
231 | 233 | |
232 | 234 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_PASTENEXT], 0, next); | ... | ... |
src/lib3270/paste.c
... | ... | @@ -99,7 +99,7 @@ |
99 | 99 | * Move the cursor back within the legal paste area. |
100 | 100 | * Returns a Boolean indicating success. |
101 | 101 | */ |
102 | - static int remargin(int lmargin) | |
102 | + static int remargin(H3270 *session, int lmargin) | |
103 | 103 | { |
104 | 104 | int ever = False; |
105 | 105 | int baddr, b0 = 0; |
... | ... | @@ -108,7 +108,7 @@ |
108 | 108 | |
109 | 109 | if(toggled(MARGINED_PASTE)) |
110 | 110 | { |
111 | - baddr = h3270.cursor_addr; | |
111 | + baddr = session->cursor_addr; | |
112 | 112 | while(BA_TO_COL(baddr) < lmargin) |
113 | 113 | { |
114 | 114 | baddr = ROWCOL_TO_BA(BA_TO_ROW(baddr), lmargin); |
... | ... | @@ -118,8 +118,8 @@ |
118 | 118 | ever = True; |
119 | 119 | } |
120 | 120 | |
121 | - faddr = find_field_attribute(&h3270,baddr); | |
122 | - fa = h3270.ea_buf[faddr].fa; | |
121 | + faddr = find_field_attribute(session,baddr); | |
122 | + fa = session->ea_buf[faddr].fa; | |
123 | 123 | if (faddr == baddr || FA_IS_PROTECTED(fa)) |
124 | 124 | { |
125 | 125 | baddr = next_unprotected(baddr); |
... | ... | @@ -152,12 +152,12 @@ |
152 | 152 | |
153 | 153 | data->qtd++; |
154 | 154 | |
155 | - if(BA_TO_ROW(h3270.cursor_addr) != data->row) | |
155 | + if(BA_TO_ROW(session->cursor_addr) != data->row) | |
156 | 156 | { |
157 | - Trace("Row changed from %d to %d",data->row,BA_TO_ROW(h3270.cursor_addr)); | |
158 | - if(!remargin(data->orig_col)) | |
157 | + Trace("Row changed from %d to %d",data->row,BA_TO_ROW(session->cursor_addr)); | |
158 | + if(!remargin(session,data->orig_col)) | |
159 | 159 | return 0; |
160 | - data->row = BA_TO_ROW(h3270.cursor_addr); | |
160 | + data->row = BA_TO_ROW(session->cursor_addr); | |
161 | 161 | return '\n'; |
162 | 162 | } |
163 | 163 | |
... | ... | @@ -177,9 +177,6 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) |
177 | 177 | { |
178 | 178 | PASTE_DATA data; |
179 | 179 | unsigned char last = 1; |
180 | - int baddr; | |
181 | - int faddr; | |
182 | - unsigned char fa; | |
183 | 180 | |
184 | 181 | CHECK_SESSION_HANDLE(h); |
185 | 182 | |
... | ... | @@ -204,10 +201,14 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) |
204 | 201 | case '\n': |
205 | 202 | if(last != '\n') |
206 | 203 | { |
204 | + int baddr; | |
205 | + int faddr; | |
206 | + unsigned char fa; | |
207 | + | |
207 | 208 | baddr = (h->cursor_addr + h->cols) % (h->cols * h->rows); /* down */ |
208 | 209 | baddr = (baddr / h->cols) * h->cols; /* 1st col */ |
209 | 210 | faddr = find_field_attribute(h,baddr); |
210 | - fa = h3270.ea_buf[faddr].fa; | |
211 | + fa = h->ea_buf[faddr].fa; | |
211 | 212 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) |
212 | 213 | cursor_move(baddr); |
213 | 214 | else |
... | ... | @@ -226,12 +227,16 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) |
226 | 227 | |
227 | 228 | if(IN_3270 && toggled(MARGINED_PASTE) && BA_TO_COL(h->cursor_addr) < data.orig_col) |
228 | 229 | { |
229 | - if(!remargin(data.orig_col)) | |
230 | + if(!remargin(h,data.orig_col)) | |
230 | 231 | last = 0; |
231 | 232 | } |
233 | + | |
234 | + if(h->cursor_addr == data.orig_addr) | |
235 | + break; | |
232 | 236 | } |
233 | 237 | |
234 | 238 | h->resume(h); |
239 | + | |
235 | 240 | return data.qtd; |
236 | 241 | } |
237 | 242 | ... | ... |