SF.net SVN: geany: [2161] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Fri Jan 11 14:23:29 UTC 2008
Revision: 2161
http://geany.svn.sourceforge.net/geany/?rev=2161&view=rev
Author: eht16
Date: 2008-01-11 06:23:29 -0800 (Fri, 11 Jan 2008)
Log Message:
-----------
Fix crash while reading Scintilla styles.
Add GTK's progress dialog when printing large documents which also provides the ability to cancel a print operation.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/printing.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-01-11 13:17:00 UTC (rev 2160)
+++ trunk/ChangeLog 2008-01-11 14:23:29 UTC (rev 2161)
@@ -1,6 +1,10 @@
2008-01-11 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/dialogs.c: Fix broken Rename functionality (closes #1868621).
+ * src/printing.c:
+ Fix crash while reading Scintilla styles.
+ Add GTK's progress dialog when printing large documents which also
+ provides the ability to cancel a print operation.
2008-01-10 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/printing.c
===================================================================
--- trunk/src/printing.c 2008-01-11 13:17:00 UTC (rev 2160)
+++ trunk/src/printing.c 2008-01-11 14:23:29 UTC (rev 2161)
@@ -83,6 +83,7 @@
gint styles[STYLE_MAX + 1][MAX_TYPES];
gdouble line_height;
gboolean long_line; // whether we have a wrapped line on page end to take care of on next page
+ gboolean cancelled;
// set in begin_print() to hold the time when printing was started to ensure all printed
// pages have the same date and time (in case of slow machines and many pages where rendering
// takes more than a second)
@@ -266,7 +267,7 @@
g_free(data);
g_free(file_name);
- data = g_strdup_printf("<b>page %d of %d</b>", page_nr + 1, dinfo->n_pages);
+ data = g_strdup_printf(_("<b>Page %d of %d</b>"), page_nr + 1, dinfo->n_pages);
pango_layout_set_markup(layout, data, -1);
pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
cairo_move_to(cr, 4, dinfo->line_height * 1.5);
@@ -409,6 +410,7 @@
DocInfo *dinfo = user_data;
PangoFontDescription *desc;
gint i;
+ gint style_max;
if (dinfo == NULL)
return;
@@ -421,6 +423,7 @@
dinfo->cur_line = 0;
dinfo->cur_pos = 0;
dinfo->long_line = FALSE;
+ dinfo->cancelled = FALSE;
dinfo->print_time = time(NULL);
dinfo->max_line_number_margin = get_line_numbers_arity(dinfo->lines) + 1;
// increase font width by 1 (looks better)
@@ -432,7 +435,8 @@
dinfo->n_pages = get_page_count(context, dinfo);
// read all styles from Scintilla
- for (i = 0; i <= STYLE_MAX; i++)
+ style_max = pow(2, scintilla_send_message(doc_list[dinfo->idx].sci, SCI_GETSTYLEBITS, 0, 0));
+ for (i = 0; i < style_max; i++)
{
dinfo->styles[i][FORE] = ROTATE_RGB(scintilla_send_message(
doc_list[dinfo->idx].sci, SCI_STYLEGETFORE, i, 0));
@@ -455,6 +459,11 @@
if (dinfo->n_pages >= 0)
gtk_print_operation_set_n_pages(operation, dinfo->n_pages);
+ // if we have many pages we show GTK's progress dialog which also allows cancelling of the
+ // print operation
+ if (dinfo->n_pages > 3)
+ gtk_print_operation_set_show_progress(operation, TRUE);
+
pango_font_description_free(desc);
}
@@ -707,6 +716,15 @@
}
+static void status_changed(GtkPrintOperation *op, gpointer data)
+{
+ if (gtk_print_operation_get_status(op) == GTK_PRINT_STATUS_FINISHED_ABORTED)
+ {
+ ((DocInfo*)data)->cancelled = TRUE;
+ }
+}
+
+
static void printing_print_gtk(gint idx)
{
GtkPrintOperation *op;
@@ -729,6 +747,7 @@
g_signal_connect(op, "begin-print", G_CALLBACK(begin_print), dinfo);
g_signal_connect(op, "end-print", G_CALLBACK(end_print), dinfo);
g_signal_connect(op, "draw-page", G_CALLBACK(draw_page), dinfo);
+ g_signal_connect(op, "status-changed", G_CALLBACK(status_changed), dinfo);
g_signal_connect(op, "create-custom-widget", G_CALLBACK(create_custom_widget), widgets);
g_signal_connect(op, "custom-widget-apply", G_CALLBACK(custom_widget_apply), widgets);
@@ -745,14 +764,21 @@
if (settings != NULL)
g_object_unref(settings);
settings = g_object_ref(gtk_print_operation_get_print_settings(op));
- msgwin_status_add(_("File %s printed."), doc_list[idx].file_name);
+ if (dinfo->cancelled)
+ msgwin_status_add(_("Printing of file %s was cancelled."), doc_list[idx].file_name);
+ else
+ msgwin_status_add(_("File %s printed."), doc_list[idx].file_name);
}
else if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
{
- dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Printing of \"%s\" failed (%s)."),
+ dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Printing of %s failed (%s)."),
doc_list[idx].file_name, error->message);
g_error_free(error);
}
+ else if (res == GTK_PRINT_OPERATION_RESULT_CANCEL)
+ { // not sure when this actually happens but just in case we print a message
+ msgwin_status_add(_("Printing of file %s was cancelled."), doc_list[idx].file_name);
+ }
g_object_unref(op);
g_free(dinfo);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list