X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libview%2Fev-loading-window.c;h=434beac990552be164e3870c61af9e78965ffc0a;hb=da96134063e3f80a2774167a951225ff6924e0fd;hp=c04933b57e4df46a12bb3142a85e0cf43c31500a;hpb=55987f7d1bde72651c83b48cae7c8207a7ef08ab;p=evince.git diff --git a/libview/ev-loading-window.c b/libview/ev-loading-window.c index c04933b5..434beac9 100644 --- a/libview/ev-loading-window.c +++ b/libview/ev-loading-window.c @@ -33,6 +33,7 @@ struct _EvLoadingWindow { GtkWindow base_instance; GtkWindow *parent; + GtkWidget *spinner; gint x; gint y; @@ -69,7 +70,6 @@ ev_loading_window_init (EvLoadingWindow *window) GtkWindow *gtk_window = GTK_WINDOW (window); GtkWidget *widget = GTK_WIDGET (window); GtkWidget *hbox; - GtkWidget *spinner; GtkWidget *label; GtkStyle *style; GdkColor fg, bg; @@ -79,10 +79,9 @@ ev_loading_window_init (EvLoadingWindow *window) hbox = gtk_hbox_new (FALSE, 12); - spinner = gtk_spinner_new (); - gtk_spinner_start (GTK_SPINNER (spinner)); - gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0); - gtk_widget_show (spinner); + window->spinner = gtk_spinner_new (); + gtk_box_pack_start (GTK_BOX (hbox), window->spinner, FALSE, FALSE, 0); + gtk_widget_show (window->spinner); label = gtk_label_new (loading_text); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); @@ -177,7 +176,8 @@ ev_loading_window_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { EvLoadingWindow *window = EV_LOADING_WINDOW (widget); - GdkPixmap *mask; + cairo_surface_t *surface; + cairo_region_t *shape; cairo_t *cr; double r; @@ -189,8 +189,10 @@ ev_loading_window_size_allocate (GtkWidget *widget, window->width = allocation->width; window->height = allocation->height; - mask = gdk_pixmap_new (NULL, window->width, window->height, 1); - cr = gdk_cairo_create (GDK_DRAWABLE (mask)); + surface = cairo_image_surface_create (CAIRO_FORMAT_A8, + window->width, + window->height); + cr = cairo_create (surface); cairo_save (cr); cairo_rectangle (cr, 0, 0, window->width, window->height); @@ -205,8 +207,11 @@ ev_loading_window_size_allocate (GtkWidget *widget, cairo_destroy (cr); - gtk_widget_shape_combine_mask (widget, mask, 0, 0); - g_object_unref (mask); + shape = gdk_cairo_region_create_from_surface (surface); + cairo_surface_destroy (surface); + + gtk_widget_shape_combine_region (widget, shape); + cairo_region_destroy (shape); } static void @@ -216,9 +221,21 @@ ev_loading_window_hide (GtkWidget *widget) window->x = window->y = 0; + gtk_spinner_stop (GTK_SPINNER (window->spinner)); + GTK_WIDGET_CLASS (ev_loading_window_parent_class)->hide (widget); } +static void +ev_loading_window_show (GtkWidget *widget) +{ + EvLoadingWindow *window = EV_LOADING_WINDOW (widget); + + gtk_spinner_start (GTK_SPINNER (window->spinner)); + + GTK_WIDGET_CLASS (ev_loading_window_parent_class)->show (widget); +} + static void ev_loading_window_class_init (EvLoadingWindowClass *klass) { @@ -229,6 +246,7 @@ ev_loading_window_class_init (EvLoadingWindowClass *klass) g_object_class->set_property = ev_loading_window_set_property; gtk_widget_class->size_allocate = ev_loading_window_size_allocate; + gtk_widget_class->show = ev_loading_window_show; gtk_widget_class->hide = ev_loading_window_hide; g_object_class_install_property (g_object_class,