GTK+3: work with "draw" signal instead of "expose" in print preview
adapted from https://git.gnome.org/browse/gedit/commit?id=9453de86abac1cf1bf4702091944301ac800bdef fixes https://github.com/mate-desktop/pluma/issues/47
This commit is contained in:
		@@ -1103,26 +1103,40 @@ draw_page (cairo_t           *cr,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
 | 
					#if GTK_CHECK_VERSION (3, 0, 0)
 | 
				
			||||||
 | 
					preview_draw (GtkWidget         *widget,
 | 
				
			||||||
 | 
							cairo_t *cr,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
preview_expose (GtkWidget         *widget,
 | 
					preview_expose (GtkWidget         *widget,
 | 
				
			||||||
		GdkEventExpose    *event,
 | 
							GdkEventExpose    *event,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		PlumaPrintPreview *preview)
 | 
							PlumaPrintPreview *preview)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PlumaPrintPreviewPrivate *priv;
 | 
						PlumaPrintPreviewPrivate *priv;
 | 
				
			||||||
	GdkWindow *bin_window;
 | 
						GdkWindow *bin_window;
 | 
				
			||||||
	cairo_t *cr;
 | 
					 | 
				
			||||||
	gint pg;
 | 
						gint pg;
 | 
				
			||||||
	gint i, j;
 | 
						gint i, j;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	priv = preview->priv;
 | 
						priv = preview->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (priv->layout));
 | 
						bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (priv->layout));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if GTK_CHECK_VERSION (3, 0, 0)
 | 
				
			||||||
 | 
						if (!gtk_cairo_should_draw_window (cr, bin_window))
 | 
				
			||||||
 | 
							return TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cairo_save (cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gtk_cairo_transform_to_window (cr, widget, bin_window);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
	if (event->window != bin_window)
 | 
						if (event->window != bin_window)
 | 
				
			||||||
		return FALSE;
 | 
							return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cr = gdk_cairo_create (bin_window);
 | 
						cairo_t *cr = gdk_cairo_create (bin_window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gdk_cairo_rectangle (cr, &event->area);
 | 
						gdk_cairo_rectangle (cr, &event->area);
 | 
				
			||||||
	cairo_clip (cr);
 | 
						cairo_clip (cr);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* get the first page to display */
 | 
						/* get the first page to display */
 | 
				
			||||||
	pg = get_first_page_displayed (preview);
 | 
						pg = get_first_page_displayed (preview);
 | 
				
			||||||
@@ -1149,7 +1163,12 @@ preview_expose (GtkWidget         *widget,
 | 
				
			|||||||
			++pg;
 | 
								++pg;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if GTK_CHECK_VERSION (3, 0, 0)
 | 
				
			||||||
 | 
						cairo_restore (cr);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
	cairo_destroy (cr);
 | 
						cairo_destroy (cr);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return TRUE;
 | 
						return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1205,8 +1224,13 @@ preview_ready (GtkPrintOperationPreview *gtk_preview,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* let the default gtklayout handler clear the background */
 | 
						/* let the default gtklayout handler clear the background */
 | 
				
			||||||
	g_signal_connect_after (preview->priv->layout,
 | 
						g_signal_connect_after (preview->priv->layout,
 | 
				
			||||||
 | 
					#if GTK_CHECK_VERSION (3, 0, 0)
 | 
				
			||||||
 | 
									"draw",
 | 
				
			||||||
 | 
									G_CALLBACK (preview_draw),
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
				"expose-event",
 | 
									"expose-event",
 | 
				
			||||||
				G_CALLBACK (preview_expose),
 | 
									G_CALLBACK (preview_expose),
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
				preview);
 | 
									preview);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gtk_widget_queue_draw (preview->priv->layout);
 | 
						gtk_widget_queue_draw (preview->priv->layout);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user