GtkWindow base_instance;
GtkWindow *parent;
+ GtkWidget *spinner;
gint x;
gint y;
GtkWindow *gtk_window = GTK_WINDOW (window);
GtkWidget *widget = GTK_WIDGET (window);
GtkWidget *hbox;
- GtkWidget *spinner;
GtkWidget *label;
- GtkStyle *style;
- GdkColor fg, bg;
+ GtkStyleContext *context;
+ GdkRGBA fg, bg;
const gchar *loading_text = _("Loading…");
const gchar *fg_color_name = "info_fg_color";
const gchar *bg_color_name = "info_bg_color";
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);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+ gtk_window_set_type_hint (gtk_window, GDK_WINDOW_TYPE_HINT_NOTIFICATION);
gtk_window_set_accept_focus (gtk_window, FALSE);
- gtk_window_set_focus_on_map (gtk_window, FALSE);
gtk_window_set_decorated (gtk_window, FALSE);
- gtk_window_set_skip_taskbar_hint (gtk_window, TRUE);
- gtk_window_set_skip_pager_hint (gtk_window, TRUE);
gtk_window_set_resizable (gtk_window, FALSE);
- style = gtk_widget_get_style (widget);
- if (!gtk_style_lookup_color (style, fg_color_name, &fg) ||
- !gtk_style_lookup_color (style, bg_color_name, &bg)) {
- fg.pixel = 0;
- fg.red = 0xb800;
- fg.green = 0xad00;
- fg.blue = 0x9d00;
-
- bg.pixel = 0;
- bg.red = 0xff00;
- bg.green = 0xff00;
- bg.blue = 0xbf00;
+ context = gtk_widget_get_style_context (widget);
+ if (!gtk_style_context_lookup_color (context, fg_color_name, &fg) ||
+ !gtk_style_context_lookup_color (context, bg_color_name, &bg)) {
+ fg.red = 0.7;
+ fg.green = 0.67;
+ fg.blue = 0.63;
+ fg.alpha = 1.0;
+
+ bg.red = 0.99;
+ bg.green = 0.99;
+ bg.blue = 0.71;
+ bg.alpha = 1.0;
}
- if (!gdk_color_equal (&bg, &style->bg[GTK_STATE_NORMAL]))
- gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &bg);
- if (!gdk_color_equal (&fg, &style->fg[GTK_STATE_NORMAL]))
- gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &fg);
+ gtk_widget_override_background_color (widget, GTK_STATE_NORMAL, &bg);
+ gtk_widget_override_color (widget, GTK_STATE_NORMAL, &fg);
}
static GObject *
GtkAllocation *allocation)
{
EvLoadingWindow *window = EV_LOADING_WINDOW (widget);
- GdkPixmap *mask;
+ cairo_surface_t *surface;
+ cairo_region_t *shape;
cairo_t *cr;
double r;
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);
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
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)
{
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,
g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
window = g_object_new (EV_TYPE_LOADING_WINDOW,
+ "type", GTK_WINDOW_POPUP,
"parent", parent,
NULL);
return window;