Merge lp:~kalgasnik/lightdm-gtk-greeter/background-fixes-r333 into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk

Proposed by Andrew P.
Status: Merged
Merged at revision: 334
Proposed branch: lp:~kalgasnik/lightdm-gtk-greeter/background-fixes-r333
Merge into: lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk
Diff against target: 183 lines (+48/-54)
2 files modified
src/greeterbackground.c (+47/-54)
src/lightdm-gtk-greeter.glade (+1/-0)
To merge this branch: bzr merge lp:~kalgasnik/lightdm-gtk-greeter/background-fixes-r333
Reviewer Review Type Date Requested Status
Sean Davis Approve
Review via email: mp+263066@code.launchpad.net

Description of the change

1. Restoring user background after changing display setup.
2. Patch removes login box blinking on login.
3. Solid color instead of background for some themes - must be ok now.

To post a comment you must log in.
336. By Andrew P.

Missing property for #screen child (solid color background fix)

Revision history for this message
Sean Davis (bluesabre) wrote :

This looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/greeterbackground.c'
2--- src/greeterbackground.c 2015-03-27 05:29:45 +0000
3+++ src/greeterbackground.c 2015-06-29 15:11:32 +0000
4@@ -165,6 +165,8 @@
5
6 /* List of monitors <Monitor*> with user-background=true*/
7 GSList* customized_monitors;
8+ /* Initialized by set_custom_background() */
9+ BackgroundConfig customized_background;
10
11 /* List of monitors <Monitor*> with laptop=true */
12 GSList* laptop_monitors;
13@@ -339,25 +341,28 @@
14 static void
15 greeter_background_init(GreeterBackground* self)
16 {
17- self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, GREETER_BACKGROUND_TYPE, GreeterBackgroundPrivate);
18- self->priv->screen = NULL;
19- self->priv->screen_monitors_changed_handler_id = 0;
20- self->priv->accel_groups = NULL;
21-
22- self->priv->configs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)monitor_config_free);
23- self->priv->default_config = monitor_config_copy(&DEFAULT_MONITOR_CONFIG, NULL);
24-
25- self->priv->monitors = NULL;
26- self->priv->monitors_size = 0;
27- self->priv->monitors_map = NULL;
28-
29- self->priv->customized_monitors = NULL;
30- self->priv->active_monitors_config = NULL;
31- self->priv->active_monitor = NULL;
32-
33- self->priv->laptop_monitors = NULL;
34- self->priv->laptop_upower_proxy = NULL;
35- self->priv->laptop_lid_closed = FALSE;
36+ GreeterBackgroundPrivate* priv = G_TYPE_INSTANCE_GET_PRIVATE(self, GREETER_BACKGROUND_TYPE, GreeterBackgroundPrivate);
37+ self->priv = priv;
38+
39+ priv->screen = NULL;
40+ priv->screen_monitors_changed_handler_id = 0;
41+ priv->accel_groups = NULL;
42+
43+ priv->configs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)monitor_config_free);
44+ priv->default_config = monitor_config_copy(&DEFAULT_MONITOR_CONFIG, NULL);
45+
46+ priv->monitors = NULL;
47+ priv->monitors_size = 0;
48+ priv->monitors_map = NULL;
49+
50+ priv->customized_monitors = NULL;
51+ priv->customized_background.type = BACKGROUND_TYPE_INVALID;
52+ priv->active_monitors_config = NULL;
53+ priv->active_monitor = NULL;
54+
55+ priv->laptop_monitors = NULL;
56+ priv->laptop_upower_proxy = NULL;
57+ priv->laptop_lid_closed = FALSE;
58 }
59
60 GreeterBackground*
61@@ -594,13 +599,24 @@
62 if(config->laptop)
63 priv->laptop_monitors = g_slist_prepend(priv->laptop_monitors, monitor);
64
65+ if(config->transition.duration && config->transition.func)
66+ monitor->transition.config = config->transition;
67+
68 monitor->background_configured = background_new(&config->bg, monitor, images_cache);
69 if(!monitor->background_configured)
70 monitor->background_configured = background_new(&DEFAULT_MONITOR_CONFIG.bg, monitor, images_cache);
71- monitor_set_background(monitor, monitor->background_configured);
72-
73- if(config->transition.duration && config->transition.func)
74- monitor->transition.config = config->transition;
75+
76+ Background* background = NULL;
77+ if(config->user_bg && priv->customized_background.type != BACKGROUND_TYPE_INVALID)
78+ background = background_new(&priv->customized_background, monitor, images_cache);
79+
80+ if(background)
81+ {
82+ monitor_set_background(monitor, background);
83+ background_unref(&background);
84+ }
85+ else
86+ monitor_set_background(monitor, monitor->background_configured);
87
88 if(monitor->name)
89 g_hash_table_insert(priv->monitors_map, g_strdup(monitor->name), monitor);
90@@ -949,14 +965,16 @@
91 g_return_if_fail(GREETER_IS_BACKGROUND(background));
92
93 GreeterBackgroundPrivate* priv = background->priv;
94+
95+ if(priv->customized_background.type != BACKGROUND_TYPE_INVALID)
96+ background_config_finalize(&priv->customized_background);
97+ background_config_initialize(&priv->customized_background, value);
98+
99 if(!priv->customized_monitors)
100 return;
101
102- BackgroundConfig config;
103- background_config_initialize(&config, value);
104-
105 GHashTable *images_cache = NULL;
106- if(config.type == BACKGROUND_TYPE_IMAGE)
107+ if(priv->customized_background.type == BACKGROUND_TYPE_IMAGE)
108 images_cache = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
109
110 GSList* iter;
111@@ -966,8 +984,8 @@
112
113 /* Old background_custom (if used) will be unrefed in monitor_set_background() */
114 Background* bg = NULL;
115- if(config.type != BACKGROUND_TYPE_INVALID)
116- bg = background_new(&config, monitor, images_cache);
117+ if(priv->customized_background.type != BACKGROUND_TYPE_INVALID)
118+ bg = background_new(&priv->customized_background, monitor, images_cache);
119 if(bg)
120 {
121 monitor_set_background(monitor, bg);
122@@ -979,8 +997,6 @@
123
124 if(images_cache)
125 g_hash_table_unref(images_cache);
126- if(config.type != BACKGROUND_TYPE_INVALID)
127- background_config_finalize(&config);
128 }
129
130 void
131@@ -992,7 +1008,6 @@
132 cairo_surface_t* surface = create_root_surface(priv->screen);
133 cairo_t* cr = cairo_create(surface);
134 gsize i;
135- gdouble child_opacity;
136
137 const GdkRGBA ROOT_COLOR = {1.0, 1.0, 1.0, 1.0};
138 gdk_cairo_set_source_rgba(cr, &ROOT_COLOR);
139@@ -1003,32 +1018,10 @@
140 const Monitor* monitor = &priv->monitors[i];
141 if(!monitor->background)
142 continue;
143-
144- #ifdef XROOT_DRAW_BACKGROUND_DIRECTLY
145- /* Old method: can't draw default GtkWindow background */
146 cairo_save(cr);
147 cairo_translate(cr, monitor->geometry.x, monitor->geometry.y);
148 monitor_draw_background(monitor, monitor->background, cr);
149 cairo_restore(cr);
150- #else
151- /* New - can draw anything, but looks tricky a bit */
152- child_opacity = gtk_widget_get_opacity(priv->child);
153- if(monitor == priv->active_monitor)
154- {
155- gtk_widget_set_opacity(priv->child, 0.0);
156- gdk_window_process_updates(gtk_widget_get_window(GTK_WIDGET(priv->child)), FALSE);
157- }
158-
159- gdk_cairo_set_source_window(cr, gtk_widget_get_window(GTK_WIDGET(monitor->window)),
160- monitor->geometry.x, monitor->geometry.y);
161- cairo_paint(cr);
162-
163- if(monitor == priv->active_monitor)
164- {
165- gtk_widget_set_opacity(priv->child, child_opacity);
166- gdk_window_process_updates(gtk_widget_get_window(GTK_WIDGET(priv->child)), FALSE);
167- }
168- #endif
169 }
170 set_surface_as_root(priv->screen, surface);
171
172
173=== modified file 'src/lightdm-gtk-greeter.glade'
174--- src/lightdm-gtk-greeter.glade 2015-02-25 08:25:32 +0000
175+++ src/lightdm-gtk-greeter.glade 2015-06-29 15:11:32 +0000
176@@ -331,6 +331,7 @@
177 <object class="GtkEventBox" id="screen_overlay_child">
178 <property name="visible">True</property>
179 <property name="can_focus">False</property>
180+ <property name="visible_window">False</property>
181 <child>
182 <placeholder/>
183 </child>

Subscribers

People subscribed via source and target branches