From 00030570c0bb5f960f0b8759d3dcd265f6f27376 Mon Sep 17 00:00:00 2001 From: Michael Webster Date: Mon, 23 Oct 2017 23:13:02 +0200 Subject: background: Don't realize() this immediately - only start the image gathering thread during initialization. Wait for the main window to be realized before passing its cairo surface to the background object and drawing the background for the first time. We also need to make sure in our background's size_allocate function to abort if we're not really active yet (no GdkWindow realized, and no AnimateTimer yet). Moved some background init stuff from the main window to the background class for clarity, and removed the default_background setting - it is already grabbing the default color in Background's class init. Obtained (and modified) from the following slick-greeter commits: d2a7122d731c0f19f502a9efba1feee651bcfa7c d4a2a94eb7120393bb225b680fdfecf5c1d3c4ea 941ecbc5dcb4e7a072c1ca8816d9678f59a96418 Adaptations by: Mike Gabriel --- src/main-window.vala | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/main-window.vala') diff --git a/src/main-window.vala b/src/main-window.vala index ac87200..4ffd51f 100644 --- a/src/main-window.vala +++ b/src/main-window.vala @@ -50,15 +50,7 @@ public class MainWindow : Gtk.Window has_resize_grip = false; ArcticaGreeter.add_style_class (this); - realize (); - Gdk.DrawingContext background_context; - background_context = get_window().begin_draw_frame(get_window().get_visible_region()); - background = new Background (background_context.get_cairo_context().get_target()); - background.draw_grid = AGSettings.get_boolean (AGSettings.KEY_DRAW_GRID); - background.default_background = AGSettings.get_string (AGSettings.KEY_BACKGROUND); - background.set_logo (AGSettings.get_string (AGSettings.KEY_LOGO)); - get_window().end_draw_frame(background_context); - background.show (); + background = new Background (); add (background); ArcticaGreeter.add_style_class (background); @@ -207,6 +199,17 @@ public class MainWindow : Gtk.Window menubar.cleanup(); } + public override void realize () + { + base.realize (); + Gdk.DrawingContext background_context; + background_context = get_window().begin_draw_frame(get_window().get_visible_region()); + + background.set_surface (background_context.get_cairo_context().get_target()); + + get_window().end_draw_frame(background_context); + } + private void monitors_changed_cb (Gdk.Screen screen) { Gdk.Display display; -- cgit v1.2.3