2006-12-14 [paul] 2.6.1cvs33
authorColin Leroy <colin@colino.net>
Thu, 14 Dec 2006 09:49:25 +0000 (09:49 +0000)
committerColin Leroy <colin@colino.net>
Thu, 14 Dec 2006 09:49:25 +0000 (09:49 +0000)
* src/messageview.c
* src/messageview.h
* src/mimeview.c
* src/mimeview.h
* src/summaryview.c
* src/textview.c
* src/textview.h
Fix printing of selection
Fix printing of message parts
Fix printing of images
* src/gtk/gtksourceprintjob.c
Fix page count when there are images

ChangeLog
PATCHSETS
configure.ac
src/gtk/gtksourceprintjob.c
src/messageview.c
src/messageview.h
src/mimeview.c
src/mimeview.h
src/summaryview.c
src/textview.c
src/textview.h

index 2a6ec47ab93ef63a3411176a52b1fed1f2541e3f..03f61de77b14202d4539718832b93a82531130d3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2006-12-14 [paul]      2.6.1cvs33
+
+       * src/messageview.c
+       * src/messageview.h
+       * src/mimeview.c
+       * src/mimeview.h
+       * src/summaryview.c
+       * src/textview.c
+       * src/textview.h
+               Fix printing of selection
+               Fix printing of message parts
+               Fix printing of images
+       * src/gtk/gtksourceprintjob.c
+               Fix page count when there are images
+
 2006-12-14 [wwp]       2.6.1cvs32
 
        * src/mainwindow.c
index b11ae2f6b1069a623b6e95eb34f642af81e6172c..1b2370f25f3f0d5acd5d5ac2f271ccb93e5222bf 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.3.2.9 -r 1.3.2.10 src/ldapquery.c;  cvs diff -u -r 1.1.4.4 -r 1.1.4.5 src/ldaputil.c;  cvs diff -u -r -1.16.2.5 -r -1.16.2.6 src/syldap.c;  cvs diff -u -r -1.9.2.3 -r -1.9.2.4 src/syldap.h;  ) > 2.6.1cvs30.patchset
 ( cvs diff -u -r 1.274.2.157 -r 1.274.2.158 src/mainwindow.c;  cvs diff -u -r 1.395.2.270 -r 1.395.2.271 src/summaryview.c;  cvs diff -u -r 1.68.2.29 -r 1.68.2.30 src/summaryview.h;  cvs diff -u -r 1.1.2.55 -r 1.1.2.56 src/gtk/quicksearch.c;  ) > 2.6.1cvs31.patchset
 ( cvs diff -u -r 1.274.2.157 -r 1.274.2.158 src/mainwindow.c;  cvs diff -u -r 1.395.2.270 -r 1.395.2.271 src/summaryview.c;  cvs diff -u -r 1.68.2.29 -r 1.68.2.30 src/summaryview.h;  cvs diff -u -r 1.1.2.55 -r 1.1.2.56 src/gtk/quicksearch.c;  ) > 2.6.1cvs32.patchset
+( cvs diff -u -r 1.94.2.111 -r 1.94.2.112 src/messageview.c;  cvs diff -u -r 1.19.2.11 -r 1.19.2.12 src/messageview.h;  cvs diff -u -r 1.83.2.93 -r 1.83.2.94 src/mimeview.c;  cvs diff -u -r 1.20.2.16 -r 1.20.2.17 src/mimeview.h;  cvs diff -u -r 1.395.2.271 -r 1.395.2.272 src/summaryview.c;  cvs diff -u -r 1.96.2.161 -r 1.96.2.162 src/textview.c;  cvs diff -u -r 1.12.2.15 -r 1.12.2.16 src/textview.h;  cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/gtk/gtksourceprintjob.c;  ) > 2.6.1cvs33.patchset
index fe4b0e0dfd2b37c53bf0aa61400d639c212ba623..0263f99822921556392f446e082f3b119078cdd1 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=6
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=32
+EXTRA_VERSION=33
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 2944bf17ce274ae02a1edb833d1814ca9164b0e7..79c3bde59ee4f5afa9ade77469ffb635ec5172bd 100644 (file)
@@ -1461,9 +1461,7 @@ paginate_paragraph (GtkSourcePrintJob *job,
 
                }
                while (pango_layout_iter_next_line (iter));
-
                job->priv->available_height -= max - page_skip;
-
                pango_layout_iter_free (iter);
                g_object_unref (layout);
        } else {
@@ -1476,10 +1474,9 @@ paginate_paragraph (GtkSourcePrintJob *job,
                                         job->priv->text_width, 
                                         job->priv->text_height,
                                         &scaled_width, &scaled_height);
-
                if (scaled_height > max_height) {
                        job->priv->page_count++;
-                       job->priv->available_height = job->priv->text_height;
+                       job->priv->available_height = job->priv->text_height - scaled_height;
                } else {
                        job->priv->available_height -= scaled_height;
                }
index e2be8703abdab6d2c484d5b4b80f2da2d056eb4e..3a6d549abd7a1192bd6041e271595b61121a3563 100644 (file)
@@ -1448,7 +1448,7 @@ static void save_as_cb(gpointer data, guint action, GtkWidget *widget)
 }
 
 #ifdef USE_GNOMEPRINT
-static void print_mimeview(MimeView *mimeview) 
+static void print_mimeview(MimeView *mimeview, gint sel_start, gint sel_end, gint partnum
 {
        if (!mimeview 
        ||  !mimeview->textview
@@ -1457,11 +1457,25 @@ static void print_mimeview(MimeView *mimeview)
                                     "contain text."));
        else {
                gtk_widget_realize(mimeview->textview->text);
+               if (partnum > 0) {
+                       mimeview_select_part_num(mimeview, partnum);
+               }
+               if (sel_start != -1 && sel_end != -1) {
+                       GtkTextIter start, end;
+                       GtkTextView *text = GTK_TEXT_VIEW(mimeview->textview->text);
+                       GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+
+                       gtk_text_buffer_get_iter_at_offset(buffer, &start, sel_start);
+                       gtk_text_buffer_get_iter_at_offset(buffer, &end, sel_end);
+                       gtk_text_buffer_select_range(buffer, &start, &end);
+               }
+
                gedit_print(GTK_TEXT_VIEW(mimeview->textview->text));
        }
 }
 
-void messageview_print(MsgInfo *msginfo, gboolean all_headers) 
+void messageview_print(MsgInfo *msginfo, gboolean all_headers, 
+                       gint sel_start, gint sel_end, gint partnum) 
 {
        PangoFontDescription *font_desc = NULL;
        MessageView *tmpview = messageview_create_with_new_window_visible(
@@ -1483,7 +1497,8 @@ void messageview_print(MsgInfo *msginfo, gboolean all_headers)
        tmpview->all_headers = all_headers;
        if (msginfo && messageview_show(tmpview, msginfo, 
                tmpview->all_headers) >= 0) {
-                       print_mimeview(tmpview->mimeview);
+                       print_mimeview(tmpview->mimeview, 
+                               sel_start, sel_end, partnum);
        }
        messageview_destroy(tmpview);
 }
@@ -1495,6 +1510,8 @@ static void print_cb(gpointer data, guint action, GtkWidget *widget)
 #ifndef USE_GNOMEPRINT
        gchar *cmdline = NULL;
        gchar *p;
+#else
+       gint sel_start = -1, sel_end = -1, partnum = 0;
 #endif
 
        if (!messageview->msginfo) return;
@@ -1514,7 +1531,11 @@ static void print_cb(gpointer data, guint action, GtkWidget *widget)
        procmsg_print_message(messageview->msginfo, cmdline);
        g_free(cmdline);
 #else
-       messageview_print(messageview->msginfo, messageview->all_headers);
+       partnum = mimeview_get_selected_part_num(messageview->mimeview);
+       textview_get_selection_offsets(messageview->mimeview->textview,
+               &sel_start, &sel_end);
+       messageview_print(messageview->msginfo, messageview->all_headers, 
+               sel_start, sel_end, partnum);
 #endif
 }
 
index 1edac29f327d0ce19483f4e8cee1cdba3ebaaabb..7949fa6d1eb00fa086e60789ff4cfc5c38d67d79 100644 (file)
@@ -119,6 +119,9 @@ void messageview_learn                              (MessageView    *msgview,
                                                 gboolean is_spam);
 #ifdef USE_GNOMEPRINT
 void messageview_print                         (MsgInfo        *msginfo,
-                                                gboolean        all_headers);
+                                                gboolean        all_headers,
+                                                gint            sel_start,
+                                                gint            sel_end,
+                                                gint            partnum);
 #endif
 #endif /* __MESSAGEVIEW_H__ */
index da4a9d0e5900d4a8da770414ddfb8903480313df..67ff4473bc589d37e437ebe5a0ee6b206a593efd 100644 (file)
@@ -427,6 +427,28 @@ MimeInfo *mimeview_get_selected_part(MimeView *mimeview)
                (GTK_CTREE(mimeview->ctree), mimeview->opened);
 }
 
+gint mimeview_get_selected_part_num(MimeView *mimeview)
+{
+       gint i = 0;
+       GList *rows = GTK_CLIST(mimeview->ctree)->row_list;
+       while (rows) {
+               if (mimeview->opened == GTK_CTREE_NODE(rows))
+                       return i;
+               i++;
+               rows = rows->next;
+       }
+       return -1;
+}
+
+void mimeview_select_part_num(MimeView *mimeview, gint i)
+{
+       if (i < 0)
+               return;
+       gtk_clist_unselect_all(GTK_CLIST(mimeview->ctree));
+       gtk_clist_select_row(GTK_CLIST(mimeview->ctree), i, -1);
+       gtkut_clist_set_focus_row(GTK_CLIST(mimeview->ctree), i);
+}
+
 static void mimeview_set_multipart_tree(MimeView *mimeview,
                                        MimeInfo *mimeinfo,
                                        GtkCTreeNode *parent)
index 5ea5a3241ac57b27ee9e4ae7518707ab8404ce4e..a24c5614c36758db8ee3a78e06929df0341d1464 100644 (file)
@@ -162,6 +162,9 @@ gboolean mimeview_scroll_page               (MimeView       *mimeview,
                                         gboolean        up);
 void mimeview_scroll_one_line          (MimeView       *mimeview, 
                                         gboolean        up);
+gint mimeview_get_selected_part_num    (MimeView       *mimeview);
+void mimeview_select_part_num          (MimeView       *mimeview, 
+                                        gint            i);
 
 
 #ifdef __cplusplus
index 49c3d05fffe61cd5053a1612ee4f23b9c8afe277..af09bad06230830e651817a94e666c43f7e80b0c 100644 (file)
@@ -4151,7 +4151,15 @@ void summary_print(SummaryView *summaryview)
                MsgInfo *msginfo = gtk_ctree_node_get_row_data(
                                        GTK_CTREE(summaryview->ctree),
                                        node);
-               messageview_print(msginfo, summaryview->messageview->all_headers);
+               gint sel_start = -1, sel_end = -1, partnum = 0;
+               
+               if (node == summaryview->displayed) {
+                       partnum = mimeview_get_selected_part_num(summaryview->messageview->mimeview);
+                       textview_get_selection_offsets(summaryview->messageview->mimeview->textview,
+                               &sel_start, &sel_end);
+               } 
+               messageview_print(msginfo, summaryview->messageview->all_headers,
+                       sel_start, sel_end, partnum);
        }
 #endif
 }
index 2a02d86e996e856819c80015e4e0595b7bce057c..cefe1500fbb66db764cf759e918503f9236f74b0 100644 (file)
@@ -673,7 +673,8 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo)
                        } else {
                                gint w, h;
                                gdk_pixbuf_get_file_info(filename, &w, &h);
-                               if (w > textview->scrolledwin->allocation.width - 100)
+                               if (textview->scrolledwin->allocation.width - 100 > 0 &&
+                                   w > textview->scrolledwin->allocation.width - 100)
                                        pixbuf = gdk_pixbuf_new_from_file_at_scale(filename, 
                                                textview->scrolledwin->allocation.width - 100, 
                                                -1, TRUE, &error);
@@ -2740,3 +2741,20 @@ static void copy_mail_to_uri_cb  (TextView *textview, guint action, void *data)
                          NULL);
 }
 
+void textview_get_selection_offsets(TextView *textview, gint *sel_start, gint *sel_end)
+{
+               GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+               GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+               GtkTextIter start, end;
+               if (gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) {
+                       if (sel_start)
+                               *sel_start = gtk_text_iter_get_offset(&start);
+                       if (sel_end)
+                               *sel_end = gtk_text_iter_get_offset(&end);
+               } else {
+                       if (sel_start)
+                               *sel_start = -1;
+                       if (sel_end)
+                               *sel_end = -1;
+               }
+}
index 3a1c1e16a256a8b7850025c4bca4bdb98b51a9e6..01e0ae45b2065bb3a3b8cf079b1f73a0afb46b8b 100644 (file)
@@ -120,6 +120,9 @@ gboolean textview_search_string_backward    (TextView       *textview,
 void textview_cursor_wait(TextView *textview);
 void textview_cursor_normal(TextView *textview);
 void textview_show_icon(TextView *textview, const gchar *stock_id);
+void textview_get_selection_offsets    (TextView       *textview, 
+                                        gint           *sel_start, 
+                                        gint           *sel_end);
 
 #define TEXTVIEW_INSERT(str) \
        gtk_text_buffer_insert_with_tags_by_name \