- layout = gtk_widget_create_pango_layout (GTK_WIDGET (view), loading_text);
-
- font_desc = pango_font_description_new ();
-
- /* We set the font to be 10 points, get the size, and scale appropriately */
- pango_font_description_set_size (font_desc, 10 * PANGO_SCALE);
- pango_layout_set_font_description (layout, font_desc);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-
- target_width = MAX (page_area->width / 2, 1);
- real_scale = ((double)target_width / (double) logical_rect.width) * (PANGO_SCALE * 10);
- pango_font_description_set_size (font_desc, (int)real_scale);
- pango_layout_set_font_description (layout, font_desc);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-
- view->loading_text = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- logical_rect.width,
- logical_rect.height);
- cr = cairo_create (view->loading_text);
- cairo_set_source_rgb (cr,
- 155 / (double)255,
- 155 / (double)255,
- 155 / (double)255);
- pango_cairo_show_layout (cr, layout);
- cairo_destroy (cr);
-
- pango_font_description_free (font_desc);
- g_object_unref (layout);
-
- ev_document_fc_mutex_unlock ();
- }
-
- width = (page_area->width - cairo_image_surface_get_width (view->loading_text)) / 2;
- height = (page_area->height - cairo_image_surface_get_height (view->loading_text)) / 2;
-
- cr = gdk_cairo_create (view->layout.bin_window);
- cairo_translate (cr,
- page_area->x + width,
- page_area->y + height);
- cairo_set_source_surface (cr, view->loading_text, 0, 0);
- cairo_paint (cr);
- cairo_destroy (cr);
+ ev_loading_window_move (window, root_x, root_y);
+}
+
+static gboolean
+show_loading_window_cb (EvView *view)
+{
+ if (!view->loading_window) {
+ GtkWindow *parent;
+ GdkScreen *screen;
+
+ parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+ view->loading_window = ev_loading_window_new (parent);
+
+ /* Show the window off screen to get a valid size asap */
+ screen = gtk_widget_get_screen (GTK_WIDGET (view));
+ gtk_window_move (GTK_WINDOW (view->loading_window),
+ gdk_screen_get_width (screen) + 1,
+ gdk_screen_get_height (screen) + 1);
+ gtk_widget_show (view->loading_window);
+ }
+
+ ev_view_loading_window_move (view);
+
+ gtk_widget_show (view->loading_window);
+
+ view->loading_timeout = 0;
+
+ return FALSE;
+}
+
+static void
+show_loading_window (EvView *view)
+{
+ if (view->loading_window && gtk_widget_get_visible (view->loading_window)) {
+ ev_view_loading_window_move (view);
+ return;
+ }
+
+ if (!view->loading_timeout) {
+ view->loading_timeout =
+ g_timeout_add_full (G_PRIORITY_LOW,
+ 0.5, (GSourceFunc)show_loading_window_cb,
+ view, NULL);
+ }
+}
+
+static void
+hide_loading_window (EvView *view)
+{
+ if (view->loading_timeout) {
+ g_source_remove (view->loading_timeout);
+ view->loading_timeout = 0;
+ }
+
+ if (view->loading_window && gtk_widget_get_visible (view->loading_window)) {
+ gtk_widget_hide (view->loading_window);
+ }