Commit 5db3f4951a2b189aacbd533d94b8958f82ea54b6
1 parent
9a1f7f93
Exists in
master
and in
5 other branches
Comentando globais sem uso
Showing
6 changed files
with
90 additions
and
91 deletions
Show diff stats
src/include/lib3270.h
| @@ -763,14 +763,16 @@ | @@ -763,14 +763,16 @@ | ||
| 763 | 763 | ||
| 764 | LIB3270_EXPORT void * lib3270_malloc(int len); | 764 | LIB3270_EXPORT void * lib3270_malloc(int len); |
| 765 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len); | 765 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len); |
| 766 | + LIB3270_EXPORT void * lib3270_replace(void **p, void *ptr); | ||
| 766 | 767 | ||
| 767 | /** | 768 | /** |
| 768 | * Release allocated memory. | 769 | * Release allocated memory. |
| 769 | * | 770 | * |
| 770 | * @param p Memory block to release (can be NULL) | 771 | * @param p Memory block to release (can be NULL) |
| 771 | * | 772 | * |
| 773 | + * @return NULL | ||
| 772 | */ | 774 | */ |
| 773 | - LIB3270_EXPORT void lib3270_free(void *p); | 775 | + LIB3270_EXPORT void * lib3270_free(void *p); |
| 774 | 776 | ||
| 775 | 777 | ||
| 776 | /** | 778 | /** |
src/lib3270/actions.c
| @@ -134,44 +134,4 @@ check_usage(XtActionProc action, Cardinal nargs, Cardinal nargs_min, | @@ -134,44 +134,4 @@ check_usage(XtActionProc action, Cardinal nargs, Cardinal nargs_min, | ||
| 134 | return -1; | 134 | return -1; |
| 135 | } */ | 135 | } */ |
| 136 | 136 | ||
| 137 | -/* | ||
| 138 | - * Wrapper for calling an action internally. | ||
| 139 | - */ | ||
| 140 | - /* | ||
| 141 | -void | ||
| 142 | -action_internal(XtActionProc action, enum iaction cause, const char *parm1, | ||
| 143 | - const char *parm2) | ||
| 144 | -{ | ||
| 145 | - Cardinal count = 0; | ||
| 146 | - String parms[2]; | ||
| 147 | - | ||
| 148 | - // Duplicate the parms, because XtActionProc doesn't grok 'const'. | ||
| 149 | - if (parm1 != CN) { | ||
| 150 | - parms[0] = NewString(parm1); | ||
| 151 | - count++; | ||
| 152 | - if (parm2 != CN) { | ||
| 153 | - parms[1] = NewString(parm2); | ||
| 154 | - count++; | ||
| 155 | - } | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - ia_cause = cause; | ||
| 159 | - (*action)((Widget) NULL, (XEvent *) NULL, | ||
| 160 | - count ? parms : (String *) NULL, | ||
| 161 | - &count); | ||
| 162 | - | ||
| 163 | - // Free the parm copies. | ||
| 164 | - switch (count) { | ||
| 165 | - case 2: | ||
| 166 | - lib3270_free(parms[1]); | ||
| 167 | - // fall through... | ||
| 168 | - case 1: | ||
| 169 | - lib3270_free(parms[0]); | ||
| 170 | - break; | ||
| 171 | - default: | ||
| 172 | - break; | ||
| 173 | - } | ||
| 174 | -} | ||
| 175 | -*/ | ||
| 176 | - | ||
| 177 | 137 |
src/lib3270/ctlrc.h
| @@ -78,6 +78,8 @@ enum dbcs_state { | @@ -78,6 +78,8 @@ enum dbcs_state { | ||
| 78 | #define IS_LEFT(d) ((d) == DBCS_LEFT || (d) == DBCS_LEFT_WRAP) | 78 | #define IS_LEFT(d) ((d) == DBCS_LEFT || (d) == DBCS_LEFT_WRAP) |
| 79 | #define IS_RIGHT(d) ((d) == DBCS_RIGHT || (d) == DBCS_RIGHT_WRAP) | 79 | #define IS_RIGHT(d) ((d) == DBCS_RIGHT || (d) == DBCS_RIGHT_WRAP) |
| 80 | #define IS_DBCS(d) (IS_LEFT(d) || IS_RIGHT(d)) | 80 | #define IS_DBCS(d) (IS_LEFT(d) || IS_RIGHT(d)) |
| 81 | + | ||
| 82 | +/* | ||
| 81 | #define MAKE_LEFT(b) { \ | 83 | #define MAKE_LEFT(b) { \ |
| 82 | if (((b) % COLS) == ((ROWS * COLS) - 1)) \ | 84 | if (((b) % COLS) == ((ROWS * COLS) - 1)) \ |
| 83 | ea_buf[(b)].db = DBCS_LEFT_WRAP; \ | 85 | ea_buf[(b)].db = DBCS_LEFT_WRAP; \ |
| @@ -90,6 +92,8 @@ enum dbcs_state { | @@ -90,6 +92,8 @@ enum dbcs_state { | ||
| 90 | else \ | 92 | else \ |
| 91 | ea_buf[(b)].db = DBCS_RIGHT; \ | 93 | ea_buf[(b)].db = DBCS_RIGHT; \ |
| 92 | } | 94 | } |
| 95 | +*/ | ||
| 96 | + | ||
| 93 | #define SOSI(c) (((c) == EBC_so)? EBC_si: EBC_so) | 97 | #define SOSI(c) (((c) == EBC_so)? EBC_si: EBC_so) |
| 94 | 98 | ||
| 95 | enum dbcs_why { DBCS_FIELD, DBCS_SUBFIELD, DBCS_ATTRIBUTE }; | 99 | enum dbcs_why { DBCS_FIELD, DBCS_SUBFIELD, DBCS_ATTRIBUTE }; |
src/lib3270/globals.h
| @@ -106,7 +106,6 @@ | @@ -106,7 +106,6 @@ | ||
| 106 | * Prerequisite #includes. | 106 | * Prerequisite #includes. |
| 107 | */ | 107 | */ |
| 108 | #include <stdio.h> /* Unix standard I/O library */ | 108 | #include <stdio.h> /* Unix standard I/O library */ |
| 109 | -// #include <stdlib.h> /* Other Unix library functions */ | ||
| 110 | #include <unistd.h> /* Unix system calls */ | 109 | #include <unistd.h> /* Unix system calls */ |
| 111 | #include <ctype.h> /* Character classes */ | 110 | #include <ctype.h> /* Character classes */ |
| 112 | #include <string.h> /* String manipulations */ | 111 | #include <string.h> /* String manipulations */ |
| @@ -123,33 +122,11 @@ | @@ -123,33 +122,11 @@ | ||
| 123 | #undef X3270_MENUS | 122 | #undef X3270_MENUS |
| 124 | #endif /*]*/ | 123 | #endif /*]*/ |
| 125 | 124 | ||
| 126 | -/* Local process (-e) header files. */ /* | ||
| 127 | -#if defined(X3270_LOCAL_PROCESS) && defined(HAVE_LIBUTIL) | ||
| 128 | - #define LOCAL_PROCESS 1 | ||
| 129 | - #include <termios.h> | ||
| 130 | - | ||
| 131 | - #if defined(HAVE_PTY_H) | ||
| 132 | - #include <pty.h> | ||
| 133 | - #endif | ||
| 134 | - | ||
| 135 | - #if defined(HAVE_LIBUTIL_H) | ||
| 136 | - #include <libutil.h> | ||
| 137 | - #endif | ||
| 138 | - | ||
| 139 | - #if defined(HAVE_UTIL_H) | ||
| 140 | - #include <util.h> | ||
| 141 | - #endif | ||
| 142 | -#endif | ||
| 143 | -*/ | ||
| 144 | - | ||
| 145 | /* Functions we may need to supply. */ | 125 | /* Functions we may need to supply. */ |
| 146 | #if defined(NEED_STRTOK_R) /*[*/ | 126 | #if defined(NEED_STRTOK_R) /*[*/ |
| 147 | extern char *strtok_r(char *str, const char *sep, char **last); | 127 | extern char *strtok_r(char *str, const char *sep, char **last); |
| 148 | #endif /*]*/ | 128 | #endif /*]*/ |
| 149 | 129 | ||
| 150 | -/* Stop conflicting with curses' COLS, even if we don't link with it. */ | ||
| 151 | -// #define COLS cCOLS | ||
| 152 | - | ||
| 153 | #define CHECK_SESSION_HANDLE(x) if(!x) x = &h3270; | 130 | #define CHECK_SESSION_HANDLE(x) if(!x) x = &h3270; |
| 154 | 131 | ||
| 155 | 132 | ||
| @@ -162,9 +139,10 @@ enum iaction { | @@ -162,9 +139,10 @@ enum iaction { | ||
| 162 | IA_IDLE | 139 | IA_IDLE |
| 163 | }; | 140 | }; |
| 164 | 141 | ||
| 165 | -LIB3270_INTERNAL int COLS; | ||
| 166 | -LIB3270_INTERNAL int ROWS; | ||
| 167 | -extern H3270 h3270; | 142 | +// LIB3270_INTERNAL int COLS; |
| 143 | +// LIB3270_INTERNAL int ROWS; | ||
| 144 | + | ||
| 145 | +LIB3270_INTERNAL H3270 h3270; | ||
| 168 | 146 | ||
| 169 | #if defined(X3270_DISPLAY) /*[*/ | 147 | #if defined(X3270_DISPLAY) /*[*/ |
| 170 | LIB3270_INTERNAL Atom a_3270, a_registry, a_encoding; | 148 | LIB3270_INTERNAL Atom a_3270, a_registry, a_encoding; |
| @@ -232,14 +210,14 @@ LIB3270_INTERNAL Boolean exiting; | @@ -232,14 +210,14 @@ LIB3270_INTERNAL Boolean exiting; | ||
| 232 | // LIB3270_INTERNAL int maxROWS; | 210 | // LIB3270_INTERNAL int maxROWS; |
| 233 | // LIB3270_INTERNAL char *model_name; | 211 | // LIB3270_INTERNAL char *model_name; |
| 234 | // LIB3270_INTERNAL int model_num; | 212 | // LIB3270_INTERNAL int model_num; |
| 235 | -LIB3270_INTERNAL Boolean no_login_host; | ||
| 236 | -LIB3270_INTERNAL Boolean non_tn3270e_host; | 213 | +// LIB3270_INTERNAL Boolean no_login_host; |
| 214 | +// LIB3270_INTERNAL Boolean non_tn3270e_host; | ||
| 237 | // LIB3270_INTERNAL int ov_cols, ov_rows; | 215 | // LIB3270_INTERNAL int ov_cols, ov_rows; |
| 238 | - LIB3270_INTERNAL Boolean passthru_host; | ||
| 239 | -extern const char *programname; | ||
| 240 | -LIB3270_INTERNAL char *qualified_host; | ||
| 241 | -LIB3270_INTERNAL char *reconnect_host; | ||
| 242 | -LIB3270_INTERNAL int screen_depth; | 216 | +// LIB3270_INTERNAL Boolean passthru_host; |
| 217 | +// extern const char *programname; | ||
| 218 | +// LIB3270_INTERNAL char *qualified_host; | ||
| 219 | +// LIB3270_INTERNAL char *reconnect_host; | ||
| 220 | +// LIB3270_INTERNAL int screen_depth; | ||
| 243 | LIB3270_INTERNAL Boolean scroll_initted; | 221 | LIB3270_INTERNAL Boolean scroll_initted; |
| 244 | 222 | ||
| 245 | //#if defined(HAVE_LIBSSL) /*[*/ | 223 | //#if defined(HAVE_LIBSSL) /*[*/ |
| @@ -247,13 +225,13 @@ LIB3270_INTERNAL Boolean scroll_initted; | @@ -247,13 +225,13 @@ LIB3270_INTERNAL Boolean scroll_initted; | ||
| 247 | //#endif /*]*/ | 225 | //#endif /*]*/ |
| 248 | 226 | ||
| 249 | LIB3270_INTERNAL Boolean shifted; | 227 | LIB3270_INTERNAL Boolean shifted; |
| 250 | -LIB3270_INTERNAL Boolean ssl_host; | 228 | +// LIB3270_INTERNAL Boolean ssl_host; |
| 251 | LIB3270_INTERNAL Boolean *standard_font; | 229 | LIB3270_INTERNAL Boolean *standard_font; |
| 252 | -LIB3270_INTERNAL Boolean std_ds_host; | ||
| 253 | -LIB3270_INTERNAL char *termtype; | ||
| 254 | -LIB3270_INTERNAL Widget toplevel; | 230 | +// LIB3270_INTERNAL Boolean std_ds_host; |
| 231 | +// LIB3270_INTERNAL char *termtype; | ||
| 232 | +// LIB3270_INTERNAL Widget toplevel; | ||
| 255 | // LIB3270_INTERNAL Boolean visible_control; | 233 | // LIB3270_INTERNAL Boolean visible_control; |
| 256 | -LIB3270_INTERNAL int *xtra_width; | 234 | +// LIB3270_INTERNAL int *xtra_width; |
| 257 | 235 | ||
| 258 | /* | 236 | /* |
| 259 | #if defined(X3270_DISPLAY) | 237 | #if defined(X3270_DISPLAY) |
| @@ -318,7 +296,7 @@ LIB3270_INTERNAL struct trans_list *trans_list; | @@ -318,7 +296,7 @@ LIB3270_INTERNAL struct trans_list *trans_list; | ||
| 318 | 296 | ||
| 319 | #define CN ((char *) NULL) | 297 | #define CN ((char *) NULL) |
| 320 | #define PN ((XtPointer) NULL) | 298 | #define PN ((XtPointer) NULL) |
| 321 | -#define Replace(var, value) { lib3270_free(var); var = (value); } | 299 | +#define Replace(var, value) { lib3270_free(var); var = (value); }; |
| 322 | 300 | ||
| 323 | /* Configuration change masks. */ | 301 | /* Configuration change masks. */ |
| 324 | #define NO_CHANGE 0x0000 /* no change */ | 302 | #define NO_CHANGE 0x0000 /* no change */ |
src/lib3270/util.c
| @@ -880,10 +880,11 @@ rpf_free(rpf_t *r) | @@ -880,10 +880,11 @@ rpf_free(rpf_t *r) | ||
| 880 | r->cur_len = 0; | 880 | r->cur_len = 0; |
| 881 | } | 881 | } |
| 882 | 882 | ||
| 883 | -LIB3270_EXPORT void lib3270_free(void *p) | 883 | +LIB3270_EXPORT void * lib3270_free(void *p) |
| 884 | { | 884 | { |
| 885 | if(p) | 885 | if(p) |
| 886 | free(p); | 886 | free(p); |
| 887 | + return NULL; | ||
| 887 | } | 888 | } |
| 888 | 889 | ||
| 889 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len) | 890 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len) |
src/pw3270/print.c
| @@ -49,12 +49,15 @@ | @@ -49,12 +49,15 @@ | ||
| 49 | int rows; | 49 | int rows; |
| 50 | int cols; | 50 | int cols; |
| 51 | int pages; | 51 | int pages; |
| 52 | + int lpp; /**< Lines per page */ | ||
| 52 | cairo_font_extents_t extents; | 53 | cairo_font_extents_t extents; |
| 53 | double left; | 54 | double left; |
| 54 | - double width; | ||
| 55 | - double height; | 55 | + double width; /**< Report width */ |
| 56 | + double height; /**< Report height (all pages) */ | ||
| 56 | cairo_scaled_font_t * font_scaled; | 57 | cairo_scaled_font_t * font_scaled; |
| 57 | 58 | ||
| 59 | + gchar **text; | ||
| 60 | + | ||
| 58 | } PRINT_INFO; | 61 | } PRINT_INFO; |
| 59 | 62 | ||
| 60 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 63 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| @@ -83,10 +86,16 @@ | @@ -83,10 +86,16 @@ | ||
| 83 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) | 86 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) |
| 84 | { | 87 | { |
| 85 | setup_font(context,info); | 88 | setup_font(context,info); |
| 86 | - gtk_print_operation_set_n_pages(prt,1); | 89 | + |
| 90 | + info->lpp = (gtk_print_context_get_height(context) / (info->extents.height + info->extents.descent)); | ||
| 91 | + info->pages = (info->rows / info->lpp)+1; | ||
| 92 | + | ||
| 93 | + trace("%d lines per page, %d pages to print",info->lpp,info->pages); | ||
| 94 | + | ||
| 95 | + gtk_print_operation_set_n_pages(prt,info->pages); | ||
| 87 | } | 96 | } |
| 88 | 97 | ||
| 89 | - static void draw_page(GtkPrintOperation *prt, GtkPrintContext *context, gint pg, PRINT_INFO *info) | 98 | + static void draw_screen(GtkPrintOperation *prt, GtkPrintContext *context, gint pg, PRINT_INFO *info) |
| 90 | { | 99 | { |
| 91 | int row; | 100 | int row; |
| 92 | int col; | 101 | int col; |
| @@ -101,6 +110,7 @@ | @@ -101,6 +110,7 @@ | ||
| 101 | rect.height = (info->extents.height + info->extents.descent); | 110 | rect.height = (info->extents.height + info->extents.descent); |
| 102 | rect.width = info->extents.max_x_advance; | 111 | rect.width = info->extents.max_x_advance; |
| 103 | 112 | ||
| 113 | + // Clear page | ||
| 104 | gdk_cairo_set_source_color(cr,info->color+V3270_COLOR_BACKGROUND); | 114 | gdk_cairo_set_source_color(cr,info->color+V3270_COLOR_BACKGROUND); |
| 105 | cairo_rectangle(cr, info->left-2, 0, (rect.width*info->cols)+4, (rect.height*info->rows)+4); | 115 | cairo_rectangle(cr, info->left-2, 0, (rect.width*info->cols)+4, (rect.height*info->rows)+4); |
| 106 | cairo_fill(cr); | 116 | cairo_fill(cr); |
| @@ -244,6 +254,9 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -244,6 +254,9 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 244 | if(info->font) | 254 | if(info->font) |
| 245 | g_free(info->font); | 255 | g_free(info->font); |
| 246 | 256 | ||
| 257 | + if(info->text) | ||
| 258 | + g_strfreev(info->text); | ||
| 259 | + | ||
| 247 | g_free(info); | 260 | g_free(info); |
| 248 | } | 261 | } |
| 249 | 262 | ||
| @@ -478,13 +491,15 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -478,13 +491,15 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 478 | PRINT_INFO * info = NULL; | 491 | PRINT_INFO * info = NULL; |
| 479 | GtkPrintOperation * print = begin_print_operation(action,widget,&info); | 492 | GtkPrintOperation * print = begin_print_operation(action,widget,&info); |
| 480 | 493 | ||
| 481 | - trace("Action %s activated on widget %p print=%p",gtk_action_get_name(action),widget,print); | 494 | + #ifdef X3270_TRACE |
| 495 | + lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); | ||
| 496 | + #endif | ||
| 482 | 497 | ||
| 483 | lib3270_get_screen_size(info->session,&info->rows,&info->cols); | 498 | lib3270_get_screen_size(info->session,&info->rows,&info->cols); |
| 484 | 499 | ||
| 485 | info->all = 1; | 500 | info->all = 1; |
| 486 | g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); | 501 | g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); |
| 487 | - g_signal_connect(print,"draw_page",G_CALLBACK(draw_page),info); | 502 | + g_signal_connect(print,"draw_page",G_CALLBACK(draw_screen),info); |
| 488 | 503 | ||
| 489 | // Run Print dialog | 504 | // Run Print dialog |
| 490 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); | 505 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); |
| @@ -499,7 +514,9 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -499,7 +514,9 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 499 | int start, end, rows; | 514 | int start, end, rows; |
| 500 | GtkPrintOperation * print = begin_print_operation(action,widget,&info);; | 515 | GtkPrintOperation * print = begin_print_operation(action,widget,&info);; |
| 501 | 516 | ||
| 502 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | 517 | + #ifdef X3270_TRACE |
| 518 | + lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); | ||
| 519 | + #endif | ||
| 503 | 520 | ||
| 504 | if(!lib3270_get_selection_bounds(info->session,&start,&end)) | 521 | if(!lib3270_get_selection_bounds(info->session,&start,&end)) |
| 505 | { | 522 | { |
| @@ -517,18 +534,55 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -517,18 +534,55 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 517 | 534 | ||
| 518 | info->all = 0; | 535 | info->all = 0; |
| 519 | g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); | 536 | g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); |
| 520 | - g_signal_connect(print,"draw_page",G_CALLBACK(draw_page),info); | 537 | + g_signal_connect(print,"draw_page",G_CALLBACK(draw_screen),info); |
| 521 | 538 | ||
| 522 | // Run Print dialog | 539 | // Run Print dialog |
| 523 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); | 540 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); |
| 524 | 541 | ||
| 525 | - | ||
| 526 | g_object_unref(print); | 542 | g_object_unref(print); |
| 527 | } | 543 | } |
| 528 | 544 | ||
| 545 | + static void draw_text(GtkPrintOperation *prt, GtkPrintContext *context, gint pg, PRINT_INFO *info) | ||
| 546 | + { | ||
| 547 | + cairo_t * cr = gtk_print_context_get_cairo_context(context); | ||
| 548 | + | ||
| 549 | + cairo_set_scaled_font(cr,info->font_scaled); | ||
| 550 | + | ||
| 551 | + | ||
| 552 | + | ||
| 553 | + } | ||
| 554 | + | ||
| 529 | void print_copy_action(GtkAction *action, GtkWidget *widget) | 555 | void print_copy_action(GtkAction *action, GtkWidget *widget) |
| 530 | { | 556 | { |
| 531 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | 557 | + PRINT_INFO * info = NULL; |
| 558 | + GtkPrintOperation * print; | ||
| 559 | + const gchar * text = v3270_get_copy(widget); | ||
| 560 | + int r; | ||
| 561 | + | ||
| 562 | + #ifdef X3270_TRACE | ||
| 563 | + lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); | ||
| 564 | + #endif | ||
| 565 | + | ||
| 566 | + if(!text) | ||
| 567 | + return; | ||
| 568 | + | ||
| 569 | + print = begin_print_operation(action,widget,&info); | ||
| 570 | + info->text = g_strsplit(text,"\n",-1); | ||
| 571 | + info->rows = g_strv_length(info->text); | ||
| 572 | + | ||
| 573 | + for(r=0;r < info->rows;r++) | ||
| 574 | + { | ||
| 575 | + size_t sz = strlen(info->text[r]); | ||
| 576 | + if(sz > info->cols) | ||
| 577 | + info->cols = sz; | ||
| 578 | + } | ||
| 579 | + | ||
| 580 | + g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); | ||
| 581 | + g_signal_connect(print,"draw_page",G_CALLBACK(draw_text),info); | ||
| 532 | 582 | ||
| 583 | + // Run Print dialog | ||
| 584 | + gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); | ||
| 585 | + | ||
| 586 | + g_object_unref(print); | ||
| 533 | } | 587 | } |
| 534 | 588 |