~ubuntu-desktop/gnome-control-center/ubuntu

« back to all changes in this revision

Viewing changes to debian/patches/git-background-lock-screen.patch

  • Committer: Martin Pitt
  • Author(s): Tim Lunn
  • Date: 2014-09-30 12:51:59 UTC
  • mfrom: (646.1.2 g-c-c)
  • Revision ID: martin.pitt@canonical.com-20140930125159-busza4a4mli50axi
merge with 1:3.12.1-5 from Debian

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
From 5e7afdf89c5722f494ecaac6179e2aed256d1976 Mon Sep 17 00:00:00 2001
2
 
From: Bastien Nocera <hadess@hadess.net>
3
 
Date: Mon, 19 Aug 2013 21:00:48 +0200
4
 
Subject: [PATCH] background: Add support for lock screen background
5
 
 
6
 
https://bugzilla.gnome.org/show_bug.cgi?id=696166
7
 
---
8
 
 panels/background/background.ui         | 289 +++++++++++++++++++++++++-------
9
 
 panels/background/cc-background-panel.c | 208 ++++++++++++++++-------
10
 
 2 files changed, 375 insertions(+), 122 deletions(-)
11
 
 
12
 
diff --git a/panels/background/background.ui b/panels/background/background.ui
13
 
index 77e9968..2b72502 100644
14
 
--- a/panels/background/background.ui
15
 
+++ b/panels/background/background.ui
16
 
@@ -4,115 +4,286 @@
17
 
   <object class="GtkHBox" id="background-panel">
18
 
     <property name="visible">True</property>
19
 
     <property name="can_focus">False</property>
20
 
+    <property name="margin_left">6</property>
21
 
+    <property name="margin_right">6</property>
22
 
+    <property name="margin_top">6</property>
23
 
+    <property name="margin_bottom">6</property>
24
 
     <property name="border_width">10</property>
25
 
     <property name="spacing">12</property>
26
 
-    <property name="margin-left">6</property>
27
 
-    <property name="margin-right">6</property>
28
 
-    <property name="margin-top">6</property>
29
 
-    <property name="margin-bottom">6</property>
30
 
     <child>
31
 
-      <object class="GtkVBox" id="vbox3">
32
 
+      <object class="GtkBox" id="box1">
33
 
         <property name="visible">True</property>
34
 
         <property name="can_focus">False</property>
35
 
-        <property name="spacing">6</property>
36
 
+        <property name="margin_top">100</property>
37
 
+        <property name="margin_bottom">100</property>
38
 
         <child>
39
 
-          <object class="GtkAspectFrame" id="aspectframe1">
40
 
+          <object class="GtkVBox" id="vbox3">
41
 
             <property name="visible">True</property>
42
 
             <property name="can_focus">False</property>
43
 
-            <property name="margin_left">12</property>
44
 
-            <property name="label_xalign">0</property>
45
 
-            <property name="shadow_type">none</property>
46
 
             <child>
47
 
-              <object class="GtkButton" id="background-set-button">
48
 
-                <property name="use_action_appearance">False</property>
49
 
+              <object class="GtkAspectFrame" id="aspectframe1">
50
 
                 <property name="visible">True</property>
51
 
-                <property name="can_focus">True</property>
52
 
-                <property name="receives_default">True</property>
53
 
-                <property name="valign">center</property>
54
 
+                <property name="can_focus">False</property>
55
 
+                <property name="margin_right">12</property>
56
 
+                <property name="label_xalign">0</property>
57
 
+                <property name="shadow_type">none</property>
58
 
                 <child>
59
 
-                  <object class="GtkDrawingArea" id="background-desktop-drawingarea">
60
 
-                    <property name="width_request">417</property>
61
 
-                    <property name="height_request">250</property>
62
 
+                  <object class="GtkButton" id="background-set-button">
63
 
                     <property name="visible">True</property>
64
 
-                    <property name="can_focus">False</property>
65
 
+                    <property name="can_focus">True</property>
66
 
+                    <property name="receives_default">True</property>
67
 
                     <property name="valign">center</property>
68
 
-                    <property name="margin_left">6</property>
69
 
-                    <property name="margin_right">6</property>
70
 
-                    <property name="margin_top">6</property>
71
 
-                    <property name="margin_bottom">6</property>
72
 
-                    <property name="hexpand">True</property>
73
 
-                    <property name="vexpand">True</property>
74
 
+                    <child>
75
 
+                      <object class="GtkBox" id="box2">
76
 
+                        <property name="visible">True</property>
77
 
+                        <property name="can_focus">False</property>
78
 
+                        <property name="orientation">vertical</property>
79
 
+                        <child>
80
 
+                          <object class="GtkDrawingArea" id="background-desktop-drawingarea">
81
 
+                            <property name="width_request">310</property>
82
 
+                            <property name="height_request">170</property>
83
 
+                            <property name="visible">True</property>
84
 
+                            <property name="can_focus">False</property>
85
 
+                            <property name="valign">center</property>
86
 
+                            <property name="margin_left">6</property>
87
 
+                            <property name="margin_right">6</property>
88
 
+                            <property name="margin_top">6</property>
89
 
+                            <property name="margin_bottom">6</property>
90
 
+                            <property name="hexpand">True</property>
91
 
+                            <property name="vexpand">True</property>
92
 
+                          </object>
93
 
+                          <packing>
94
 
+                            <property name="expand">False</property>
95
 
+                            <property name="fill">True</property>
96
 
+                            <property name="position">0</property>
97
 
+                          </packing>
98
 
+                        </child>
99
 
+                        <child>
100
 
+                          <object class="GtkLabel" id="label1">
101
 
+                            <property name="visible">True</property>
102
 
+                            <property name="can_focus">False</property>
103
 
+                            <property name="label" translatable="yes">Background</property>
104
 
+                          </object>
105
 
+                          <packing>
106
 
+                            <property name="expand">False</property>
107
 
+                            <property name="fill">True</property>
108
 
+                            <property name="position">1</property>
109
 
+                          </packing>
110
 
+                        </child>
111
 
+                      </object>
112
 
+                    </child>
113
 
                   </object>
114
 
                 </child>
115
 
               </object>
116
 
+              <packing>
117
 
+                <property name="expand">True</property>
118
 
+                <property name="fill">True</property>
119
 
+                <property name="position">0</property>
120
 
+              </packing>
121
 
             </child>
122
 
-          </object>
123
 
-          <packing>
124
 
-            <property name="expand">True</property>
125
 
-            <property name="fill">True</property>
126
 
-            <property name="position">0</property>
127
 
-          </packing>
128
 
-        </child>
129
 
-        <child>
130
 
-          <object class="GtkHBox" id="bottom-hbox">
131
 
-            <property name="visible">True</property>
132
 
-            <property name="can_focus">False</property>
133
 
-            <property name="spacing">12</property>
134
 
             <child>
135
 
-              <object class="GtkHBox" id="hbox2">
136
 
+              <object class="GtkHBox" id="bottom-hbox">
137
 
                 <property name="visible">True</property>
138
 
                 <property name="can_focus">False</property>
139
 
-                <property name="halign">center</property>
140
 
-                <property name="spacing">2</property>
141
 
+                <property name="spacing">12</property>
142
 
                 <child>
143
 
-                  <object class="GtkImage" id="slide_image">
144
 
+                  <object class="GtkHBox" id="hbox2">
145
 
                     <property name="visible">True</property>
146
 
                     <property name="can_focus">False</property>
147
 
-                    <property name="icon_name">slideshow-symbolic</property>
148
 
+                    <property name="halign">center</property>
149
 
+                    <property name="margin_top">12</property>
150
 
+                    <property name="spacing">2</property>
151
 
+                    <child>
152
 
+                      <object class="GtkImage" id="slide_image">
153
 
+                        <property name="visible">True</property>
154
 
+                        <property name="can_focus">False</property>
155
 
+                        <property name="icon_name">slideshow-symbolic</property>
156
 
+                      </object>
157
 
+                      <packing>
158
 
+                        <property name="expand">False</property>
159
 
+                        <property name="fill">True</property>
160
 
+                        <property name="position">0</property>
161
 
+                      </packing>
162
 
+                    </child>
163
 
+                    <child>
164
 
+                      <object class="GtkLabel" id="strut">
165
 
+                        <property name="visible">True</property>
166
 
+                        <property name="can_focus">False</property>
167
 
+                        <property name="label"> </property>
168
 
+                      </object>
169
 
+                      <packing>
170
 
+                        <property name="expand">False</property>
171
 
+                        <property name="fill">True</property>
172
 
+                        <property name="position">1</property>
173
 
+                      </packing>
174
 
+                    </child>
175
 
+                    <child>
176
 
+                      <object class="GtkLabel" id="slide-label">
177
 
+                        <property name="visible">True</property>
178
 
+                        <property name="can_focus">False</property>
179
 
+                        <property name="xalign">0</property>
180
 
+                        <property name="label" translatable="yes" comments="This refers to a slideshow background">Changes throughout the day</property>
181
 
+                      </object>
182
 
+                      <packing>
183
 
+                        <property name="expand">False</property>
184
 
+                        <property name="fill">True</property>
185
 
+                        <property name="position">1</property>
186
 
+                      </packing>
187
 
+                    </child>
188
 
                   </object>
189
 
                   <packing>
190
 
-                    <property name="expand">False</property>
191
 
+                    <property name="expand">True</property>
192
 
                     <property name="fill">True</property>
193
 
                     <property name="position">0</property>
194
 
                   </packing>
195
 
                 </child>
196
 
+              </object>
197
 
+              <packing>
198
 
+                <property name="expand">False</property>
199
 
+                <property name="fill">True</property>
200
 
+                <property name="position">2</property>
201
 
+              </packing>
202
 
+            </child>
203
 
+          </object>
204
 
+          <packing>
205
 
+            <property name="expand">False</property>
206
 
+            <property name="fill">True</property>
207
 
+            <property name="position">0</property>
208
 
+          </packing>
209
 
+        </child>
210
 
+        <child>
211
 
+          <object class="GtkVBox" id="vbox1">
212
 
+            <property name="visible">True</property>
213
 
+            <property name="can_focus">False</property>
214
 
+            <child>
215
 
+              <object class="GtkAspectFrame" id="aspectframe2">
216
 
+                <property name="visible">True</property>
217
 
+                <property name="can_focus">False</property>
218
 
+                <property name="margin_left">12</property>
219
 
+                <property name="label_xalign">0</property>
220
 
+                <property name="shadow_type">none</property>
221
 
                 <child>
222
 
-                  <object class="GtkLabel" id="strut">
223
 
+                  <object class="GtkButton" id="background-lock-set-button">
224
 
                     <property name="visible">True</property>
225
 
-                    <property name="can_focus">False</property>
226
 
-                    <property name="label"> </property>
227
 
+                    <property name="can_focus">True</property>
228
 
+                    <property name="receives_default">True</property>
229
 
+                    <property name="valign">center</property>
230
 
+                    <child>
231
 
+                      <object class="GtkBox" id="box3">
232
 
+                        <property name="visible">True</property>
233
 
+                        <property name="can_focus">False</property>
234
 
+                        <property name="orientation">vertical</property>
235
 
+                        <child>
236
 
+                          <object class="GtkDrawingArea" id="background-lock-drawingarea">
237
 
+                            <property name="width_request">310</property>
238
 
+                            <property name="height_request">170</property>
239
 
+                            <property name="visible">True</property>
240
 
+                            <property name="can_focus">False</property>
241
 
+                            <property name="valign">center</property>
242
 
+                            <property name="margin_left">6</property>
243
 
+                            <property name="margin_right">6</property>
244
 
+                            <property name="margin_top">6</property>
245
 
+                            <property name="margin_bottom">6</property>
246
 
+                            <property name="hexpand">True</property>
247
 
+                            <property name="vexpand">True</property>
248
 
+                          </object>
249
 
+                          <packing>
250
 
+                            <property name="expand">False</property>
251
 
+                            <property name="fill">True</property>
252
 
+                            <property name="position">0</property>
253
 
+                          </packing>
254
 
+                        </child>
255
 
+                        <child>
256
 
+                          <object class="GtkLabel" id="label2">
257
 
+                            <property name="visible">True</property>
258
 
+                            <property name="can_focus">False</property>
259
 
+                            <property name="label" translatable="yes">Lock Screen</property>
260
 
+                          </object>
261
 
+                          <packing>
262
 
+                            <property name="expand">False</property>
263
 
+                            <property name="fill">True</property>
264
 
+                            <property name="position">1</property>
265
 
+                          </packing>
266
 
+                        </child>
267
 
+                      </object>
268
 
+                    </child>
269
 
                   </object>
270
 
-                  <packing>
271
 
-                    <property name="expand">False</property>
272
 
-                    <property name="fill">True</property>
273
 
-                    <property name="position">1</property>
274
 
-                  </packing>
275
 
                 </child>
276
 
+              </object>
277
 
+              <packing>
278
 
+                <property name="expand">True</property>
279
 
+                <property name="fill">True</property>
280
 
+                <property name="position">0</property>
281
 
+              </packing>
282
 
+            </child>
283
 
+            <child>
284
 
+              <object class="GtkHBox" id="bottom-hbox1">
285
 
+                <property name="visible">True</property>
286
 
+                <property name="can_focus">False</property>
287
 
+                <property name="spacing">12</property>
288
 
                 <child>
289
 
-                  <object class="GtkLabel" id="slide-label">
290
 
+                  <object class="GtkHBox" id="hbox1">
291
 
                     <property name="visible">True</property>
292
 
                     <property name="can_focus">False</property>
293
 
-                    <property name="xalign">0</property>
294
 
-                    <property name="label" translatable="yes" comments="This refers to a slideshow background">Changes throughout the day</property>
295
 
+                    <property name="halign">center</property>
296
 
+                    <property name="margin_top">12</property>
297
 
+                    <property name="spacing">2</property>
298
 
+                    <child>
299
 
+                      <object class="GtkImage" id="slide_image1">
300
 
+                        <property name="visible">True</property>
301
 
+                        <property name="can_focus">False</property>
302
 
+                        <property name="icon_name">slideshow-symbolic</property>
303
 
+                      </object>
304
 
+                      <packing>
305
 
+                        <property name="expand">False</property>
306
 
+                        <property name="fill">True</property>
307
 
+                        <property name="position">0</property>
308
 
+                      </packing>
309
 
+                    </child>
310
 
+                    <child>
311
 
+                      <object class="GtkLabel" id="strut1">
312
 
+                        <property name="visible">True</property>
313
 
+                        <property name="can_focus">False</property>
314
 
+                        <property name="label"> </property>
315
 
+                      </object>
316
 
+                      <packing>
317
 
+                        <property name="expand">False</property>
318
 
+                        <property name="fill">True</property>
319
 
+                        <property name="position">1</property>
320
 
+                      </packing>
321
 
+                    </child>
322
 
+                    <child>
323
 
+                      <object class="GtkLabel" id="slide-label1">
324
 
+                        <property name="visible">True</property>
325
 
+                        <property name="can_focus">False</property>
326
 
+                        <property name="xalign">0</property>
327
 
+                        <property name="label" translatable="yes" comments="This refers to a slideshow background">Changes throughout the day</property>
328
 
+                      </object>
329
 
+                      <packing>
330
 
+                        <property name="expand">False</property>
331
 
+                        <property name="fill">True</property>
332
 
+                        <property name="position">1</property>
333
 
+                      </packing>
334
 
+                    </child>
335
 
                   </object>
336
 
                   <packing>
337
 
-                    <property name="expand">False</property>
338
 
+                    <property name="expand">True</property>
339
 
                     <property name="fill">True</property>
340
 
-                    <property name="position">1</property>
341
 
+                    <property name="position">0</property>
342
 
                   </packing>
343
 
                 </child>
344
 
               </object>
345
 
               <packing>
346
 
-                <property name="expand">True</property>
347
 
+                <property name="expand">False</property>
348
 
                 <property name="fill">True</property>
349
 
-                <property name="position">0</property>
350
 
+                <property name="position">2</property>
351
 
               </packing>
352
 
             </child>
353
 
           </object>
354
 
           <packing>
355
 
             <property name="expand">False</property>
356
 
             <property name="fill">True</property>
357
 
-            <property name="position">2</property>
358
 
+            <property name="position">1</property>
359
 
           </packing>
360
 
         </child>
361
 
       </object>
362
 
diff --git a/panels/background/cc-background-panel.c b/panels/background/cc-background-panel.c
363
 
index 14fa244..8de6e23 100644
364
 
--- a/panels/background/cc-background-panel.c
365
 
+++ b/panels/background/cc-background-panel.c
366
 
@@ -38,6 +38,7 @@
367
 
 #include "bg-pictures-source.h"
368
 
 
369
 
 #define WP_PATH_ID "org.gnome.desktop.background"
370
 
+#define WP_LOCK_PATH_ID "org.gnome.desktop.screensaver"
371
 
 #define WP_URI_KEY "picture-uri"
372
 
 #define WP_OPTIONS_KEY "picture-options"
373
 
 #define WP_SHADING_KEY "color-shading-type"
374
 
@@ -55,10 +56,12 @@ struct _CcBackgroundPanelPrivate
375
 
   GDBusConnection *connection;
376
 
 
377
 
   GSettings *settings;
378
 
+  GSettings *lock_settings;
379
 
 
380
 
   GnomeDesktopThumbnailFactory *thumb_factory;
381
 
 
382
 
   CcBackgroundItem *current_background;
383
 
+  CcBackgroundItem *current_lock_background;
384
 
 
385
 
   GCancellable *copy_cancellable;
386
 
   GCancellable *capture_cancellable;
387
 
@@ -71,6 +74,8 @@ struct _CcBackgroundPanelPrivate
388
 
 };
389
 
 
390
 
 #define WID(y) (GtkWidget *) gtk_builder_get_object (priv->builder, y)
391
 
+#define CURRENT_BG (settings == priv->settings ? priv->current_background : priv->current_lock_background)
392
 
+#define SAVE_PATH (settings == priv->settings ? "last-edited.xml" : "last-edited-lock.xml")
393
 
 
394
 
 static const char *
395
 
 cc_background_panel_get_help_uri (CcPanel *panel)
396
 
@@ -89,6 +94,7 @@ cc_background_panel_dispose (GObject *object)
397
 
   priv->spinner = NULL;
398
 
 
399
 
   g_clear_object (&priv->settings);
400
 
+  g_clear_object (&priv->lock_settings);
401
 
 
402
 
   if (priv->copy_cancellable)
403
 
     {
404
 
@@ -131,6 +137,7 @@ cc_background_panel_finalize (GObject *object)
405
 
   CcBackgroundPanelPrivate *priv = CC_BACKGROUND_PANEL (object)->priv;
406
 
 
407
 
   g_clear_object (&priv->current_background);
408
 
+  g_clear_object (&priv->current_lock_background);
409
 
 
410
 
   G_OBJECT_CLASS (cc_background_panel_parent_class)->finalize (object);
411
 
 }
412
 
@@ -151,59 +158,77 @@ cc_background_panel_class_init (CcBackgroundPanelClass *klass)
413
 
 
414
 
 static void
415
 
 update_preview (CcBackgroundPanelPrivate *priv,
416
 
+                GSettings                *settings,
417
 
                 CcBackgroundItem         *item)
418
 
 {
419
 
   gboolean changes_with_time;
420
 
+  CcBackgroundItem *current_background;
421
 
+
422
 
+  current_background = CURRENT_BG;
423
 
 
424
 
-  if (item && priv->current_background)
425
 
+  if (item && current_background)
426
 
     {
427
 
-      g_object_unref (priv->current_background);
428
 
-      priv->current_background = cc_background_item_copy (item);
429
 
-      cc_background_item_load (priv->current_background, NULL);
430
 
+      g_object_unref (current_background);
431
 
+      current_background = cc_background_item_copy (item);
432
 
+      if (settings == priv->settings)
433
 
+        priv->current_background = current_background;
434
 
+      else
435
 
+        priv->current_lock_background = current_background;
436
 
+      cc_background_item_load (current_background, NULL);
437
 
     }
438
 
 
439
 
   changes_with_time = FALSE;
440
 
 
441
 
-  if (priv->current_background)
442
 
+  if (current_background)
443
 
     {
444
 
-      changes_with_time = cc_background_item_changes_with_time (priv->current_background);
445
 
+      changes_with_time = cc_background_item_changes_with_time (current_background);
446
 
     }
447
 
 
448
 
-  gtk_widget_set_visible (WID ("slide_image"), changes_with_time);
449
 
-  gtk_widget_set_visible (WID ("slide-label"), changes_with_time);
450
 
+  if (settings == priv->settings)
451
 
+    {
452
 
+      gtk_widget_set_visible (WID ("slide_image"), changes_with_time);
453
 
+      gtk_widget_set_visible (WID ("slide-label"), changes_with_time);
454
 
+
455
 
+      gtk_widget_queue_draw (WID ("background-desktop-drawingarea"));
456
 
+    }
457
 
+  else
458
 
+    {
459
 
+      gtk_widget_set_visible (WID ("slide_image1"), changes_with_time);
460
 
+      gtk_widget_set_visible (WID ("slide-label1"), changes_with_time);
461
 
 
462
 
-  gtk_widget_queue_draw (WID ("background-desktop-drawingarea"));
463
 
+      gtk_widget_queue_draw (WID ("background-lock-drawingarea"));
464
 
+    }
465
 
 }
466
 
 
467
 
 static char *
468
 
-get_save_path (void)
469
 
+get_save_path (const char *filename)
470
 
 {
471
 
   return g_build_filename (g_get_user_config_dir (),
472
 
                            "gnome-control-center",
473
 
                            "backgrounds",
474
 
-                           "last-edited.xml",
475
 
+                           filename,
476
 
                            NULL);
477
 
 }
478
 
 
479
 
 static void
480
 
-update_display_preview (CcBackgroundPanel *panel)
481
 
+update_display_preview (CcBackgroundPanel *panel,
482
 
+                        GtkWidget         *widget,
483
 
+                        CcBackgroundItem  *current_background)
484
 
 {
485
 
   CcBackgroundPanelPrivate *priv = panel->priv;
486
 
-  GtkWidget *widget;
487
 
   GtkAllocation allocation;
488
 
-  const gint preview_width = 416;
489
 
-  const gint preview_height = 248;
490
 
+  const gint preview_width = 309;
491
 
+  const gint preview_height = 168;
492
 
   GdkPixbuf *pixbuf;
493
 
   GIcon *icon;
494
 
   cairo_t *cr;
495
 
 
496
 
-  widget = WID ("background-desktop-drawingarea");
497
 
   gtk_widget_get_allocation (widget, &allocation);
498
 
 
499
 
-  if (!priv->current_background)
500
 
+  if (!current_background)
501
 
     return;
502
 
 
503
 
-  icon = cc_background_item_get_frame_thumbnail (priv->current_background,
504
 
+  icon = cc_background_item_get_frame_thumbnail (current_background,
505
 
                                                  priv->thumb_factory,
506
 
                                                  preview_width,
507
 
                                                  preview_height,
508
 
@@ -218,11 +243,14 @@ update_display_preview (CcBackgroundPanel *panel)
509
 
   g_object_unref (pixbuf);
510
 
 
511
 
   pixbuf = NULL;
512
 
-  if (panel->priv->display_screenshot != NULL)
513
 
-    pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot,
514
 
-                                      preview_width,
515
 
-                                      preview_height,
516
 
-                                      GDK_INTERP_BILINEAR);
517
 
+  if (current_background == priv->current_background &&
518
 
+      panel->priv->display_screenshot != NULL)
519
 
+    {
520
 
+      pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot,
521
 
+                                        preview_width,
522
 
+                                        preview_height,
523
 
+                                        GDK_INTERP_BILINEAR);
524
 
+    }
525
 
 
526
 
   if (pixbuf)
527
 
     {
528
 
@@ -271,6 +299,7 @@ on_screenshot_finished (GObject *source,
529
 
              error->message);
530
 
     g_error_free (error);
531
 
     /* fallback? */
532
 
+    priv = panel->priv;
533
 
     goto out;
534
 
   }
535
 
   g_variant_unref (result);
536
 
@@ -322,7 +351,7 @@ on_screenshot_finished (GObject *source,
537
 
   cairo_surface_destroy (surface);
538
 
 
539
 
  out:
540
 
-  update_display_preview (panel);
541
 
+  update_display_preview (panel, WID ("background-desktop-drawingarea"), priv->current_background);
542
 
 }
543
 
 
544
 
 static gboolean
545
 
@@ -407,6 +436,7 @@ on_preview_draw (GtkWidget         *widget,
546
 
                  cairo_t           *cr,
547
 
                  CcBackgroundPanel *panel)
548
 
 {
549
 
+  CcBackgroundPanelPrivate *priv = panel->priv;
550
 
   /* we have another shot in flight or an existing cache */
551
 
   if (panel->priv->display_screenshot == NULL
552
 
       && panel->priv->screenshot_path == NULL)
553
 
@@ -414,13 +444,24 @@ on_preview_draw (GtkWidget         *widget,
554
 
       get_screenshot_async (panel);
555
 
     }
556
 
   else
557
 
-    update_display_preview (panel);
558
 
+    update_display_preview (panel, widget, priv->current_background);
559
 
+
560
 
+  return TRUE;
561
 
+}
562
 
 
563
 
+static gboolean
564
 
+on_lock_preview_draw (GtkWidget         *widget,
565
 
+                      cairo_t           *cr,
566
 
+                      CcBackgroundPanel *panel)
567
 
+{
568
 
+  CcBackgroundPanelPrivate *priv = panel->priv;
569
 
+  update_display_preview (panel, widget, priv->current_lock_background);
570
 
   return TRUE;
571
 
 }
572
 
 
573
 
 static void
574
 
-reload_current_bg (CcBackgroundPanel *self)
575
 
+reload_current_bg (CcBackgroundPanel *self,
576
 
+                   GSettings         *settings)
577
 
 {
578
 
   CcBackgroundPanelPrivate *priv;
579
 
   CcBackgroundItem *saved, *configured;
580
 
@@ -429,12 +470,12 @@ reload_current_bg (CcBackgroundPanel *self)
581
 
   priv = self->priv;
582
 
 
583
 
   /* Load the saved configuration */
584
 
-  uri = get_save_path ();
585
 
+  uri = get_save_path (SAVE_PATH);
586
 
   saved = cc_background_xml_get_item (uri);
587
 
   g_free (uri);
588
 
 
589
 
   /* initalise the current background information from settings */
590
 
-  uri = g_settings_get_string (priv->settings, WP_URI_KEY);
591
 
+  uri = g_settings_get_string (settings, WP_URI_KEY);
592
 
   if (uri && *uri == '\0')
593
 
     {
594
 
       g_free (uri);
595
 
@@ -450,12 +491,12 @@ reload_current_bg (CcBackgroundPanel *self)
596
 
   configured = cc_background_item_new (uri);
597
 
   g_free (uri);
598
 
 
599
 
-  pcolor = g_settings_get_string (priv->settings, WP_PCOLOR_KEY);
600
 
-  scolor = g_settings_get_string (priv->settings, WP_SCOLOR_KEY);
601
 
+  pcolor = g_settings_get_string (settings, WP_PCOLOR_KEY);
602
 
+  scolor = g_settings_get_string (settings, WP_SCOLOR_KEY);
603
 
   g_object_set (G_OBJECT (configured),
604
 
                 "name", _("Current background"),
605
 
-                "placement", g_settings_get_enum (priv->settings, WP_OPTIONS_KEY),
606
 
-                "shading", g_settings_get_enum (priv->settings, WP_SHADING_KEY),
607
 
+                "placement", g_settings_get_enum (settings, WP_OPTIONS_KEY),
608
 
+                "shading", g_settings_get_enum (settings, WP_SHADING_KEY),
609
 
                 "primary-color", pcolor,
610
 
                 "secondary-color", scolor,
611
 
                 NULL);
612
 
@@ -479,9 +520,17 @@ reload_current_bg (CcBackgroundPanel *self)
613
 
   if (saved != NULL)
614
 
     g_object_unref (saved);
615
 
 
616
 
-  g_clear_object (&priv->current_background);
617
 
-  priv->current_background = configured;
618
 
-  cc_background_item_load (priv->current_background, NULL);
619
 
+  if (settings == priv->settings)
620
 
+    {
621
 
+      g_clear_object (&priv->current_background);
622
 
+      priv->current_background = configured;
623
 
+    }
624
 
+  else
625
 
+    {
626
 
+      g_clear_object (&priv->current_lock_background);
627
 
+      priv->current_lock_background = configured;
628
 
+    }
629
 
+  cc_background_item_load (configured, NULL);
630
 
 }
631
 
 
632
 
 static gboolean
633
 
@@ -512,6 +561,8 @@ copy_finished_cb (GObject      *source_object,
634
 
   CcBackgroundPanel *panel = (CcBackgroundPanel *) pointer;
635
 
   CcBackgroundPanelPrivate *priv = panel->priv;
636
 
   CcBackgroundItem *item;
637
 
+  CcBackgroundItem *current_background;
638
 
+  GSettings *settings;
639
 
 
640
 
   if (!g_file_copy_finish (G_FILE (source_object), result, &err))
641
 
     {
642
 
@@ -523,8 +574,10 @@ copy_finished_cb (GObject      *source_object,
643
 
       g_error_free (err);
644
 
     }
645
 
   item = g_object_get_data (source_object, "item");
646
 
+  settings = g_object_get_data (source_object, "settings");
647
 
+  current_background = CURRENT_BG;
648
 
 
649
 
-  g_settings_apply (priv->settings);
650
 
+  g_settings_apply (settings);
651
 
 
652
 
   /* the panel may have been destroyed before the callback is run, so be sure
653
 
    * to check the widgets are not NULL */
654
 
@@ -535,19 +588,19 @@ copy_finished_cb (GObject      *source_object,
655
 
       priv->spinner = NULL;
656
 
     }
657
 
 
658
 
-  if (priv->current_background)
659
 
-    cc_background_item_load (priv->current_background, NULL);
660
 
+  if (current_background)
661
 
+    cc_background_item_load (current_background, NULL);
662
 
 
663
 
   if (priv->builder)
664
 
     {
665
 
       char *filename;
666
 
 
667
 
-      update_preview (priv, item);
668
 
+      update_preview (priv, settings, item);
669
 
 
670
 
       /* Save the source XML if there is one */
671
 
-      filename = get_save_path ();
672
 
+      filename = get_save_path (SAVE_PATH);
673
 
       if (create_save_dir ())
674
 
-        cc_background_xml_save (priv->current_background, filename);
675
 
+        cc_background_xml_save (current_background, filename);
676
 
     }
677
 
 
678
 
   /* remove the reference taken when the copy was set up */
679
 
@@ -556,6 +609,7 @@ copy_finished_cb (GObject      *source_object,
680
 
 
681
 
 static void
682
 
 set_background (CcBackgroundPanel *panel,
683
 
+                GSettings         *settings,
684
 
                 CcBackgroundItem  *item)
685
 
 {
686
 
   CcBackgroundPanelPrivate *priv = panel->priv;
687
 
@@ -573,8 +627,8 @@ set_background (CcBackgroundPanel *panel,
688
 
 
689
 
   if ((flags & CC_BACKGROUND_ITEM_HAS_URI) && uri == NULL)
690
 
     {
691
 
-      g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, G_DESKTOP_BACKGROUND_STYLE_NONE);
692
 
-      g_settings_set_string (priv->settings, WP_URI_KEY, "");
693
 
+      g_settings_set_enum (settings, WP_OPTIONS_KEY, G_DESKTOP_BACKGROUND_STYLE_NONE);
694
 
+      g_settings_set_string (settings, WP_URI_KEY, "");
695
 
     }
696
 
   else if (cc_background_item_get_source_url (item) != NULL &&
697
 
            cc_background_item_get_needs_download (item))
698
 
@@ -631,6 +685,7 @@ set_background (CcBackgroundPanel *panel,
699
 
        * finished */
700
 
       g_object_ref (panel);
701
 
       g_object_set_data_full (G_OBJECT (source), "item", g_object_ref (item), g_object_unref);
702
 
+      g_object_set_data (G_OBJECT (source), "settings", settings);
703
 
       g_file_copy_async (source, dest, G_FILE_COPY_OVERWRITE,
704
 
                          G_PRIORITY_DEFAULT, priv->copy_cancellable,
705
 
                          NULL, NULL,
706
 
@@ -639,7 +694,7 @@ set_background (CcBackgroundPanel *panel,
707
 
       dest_uri = g_file_get_uri (dest);
708
 
       g_object_unref (dest);
709
 
 
710
 
-      g_settings_set_string (priv->settings, WP_URI_KEY, dest_uri);
711
 
+      g_settings_set_string (settings, WP_URI_KEY, dest_uri);
712
 
       g_object_set (G_OBJECT (item),
713
 
                     "uri", dest_uri,
714
 
                     "needs-download", FALSE,
715
 
@@ -653,37 +708,37 @@ set_background (CcBackgroundPanel *panel,
716
 
     }
717
 
   else
718
 
     {
719
 
-      g_settings_set_string (priv->settings, WP_URI_KEY, uri);
720
 
+      g_settings_set_string (settings, WP_URI_KEY, uri);
721
 
     }
722
 
 
723
 
   /* Also set the placement if we have a URI and the previous value was none */
724
 
   if (flags & CC_BACKGROUND_ITEM_HAS_PLACEMENT)
725
 
     {
726
 
-      g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item));
727
 
+      g_settings_set_enum (settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item));
728
 
     }
729
 
   else if (uri != NULL)
730
 
     {
731
 
-      style = g_settings_get_enum (priv->settings, WP_OPTIONS_KEY);
732
 
+      style = g_settings_get_enum (settings, WP_OPTIONS_KEY);
733
 
       if (style == G_DESKTOP_BACKGROUND_STYLE_NONE)
734
 
-        g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item));
735
 
+        g_settings_set_enum (settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item));
736
 
     }
737
 
 
738
 
   if (flags & CC_BACKGROUND_ITEM_HAS_SHADING)
739
 
-    g_settings_set_enum (priv->settings, WP_SHADING_KEY, cc_background_item_get_shading (item));
740
 
+    g_settings_set_enum (settings, WP_SHADING_KEY, cc_background_item_get_shading (item));
741
 
 
742
 
-  g_settings_set_string (priv->settings, WP_PCOLOR_KEY, cc_background_item_get_pcolor (item));
743
 
-  g_settings_set_string (priv->settings, WP_SCOLOR_KEY, cc_background_item_get_scolor (item));
744
 
+  g_settings_set_string (settings, WP_PCOLOR_KEY, cc_background_item_get_pcolor (item));
745
 
+  g_settings_set_string (settings, WP_SCOLOR_KEY, cc_background_item_get_scolor (item));
746
 
 
747
 
   /* update the preview information */
748
 
   if (save_settings != FALSE)
749
 
     {
750
 
       /* Apply all changes */
751
 
-      g_settings_apply (priv->settings);
752
 
+      g_settings_apply (settings);
753
 
 
754
 
       /* Save the source XML if there is one */
755
 
-      filename = get_save_path ();
756
 
+      filename = get_save_path (SAVE_PATH);
757
 
       if (create_save_dir ())
758
 
-        cc_background_xml_save (priv->current_background, filename);
759
 
+        cc_background_xml_save (CURRENT_BG, filename);
760
 
     }
761
 
 }
762
 
 
763
 
@@ -699,7 +754,7 @@ on_chooser_dialog_response (GtkDialog         *dialog,
764
 
       item = cc_background_chooser_dialog_get_item (CC_BACKGROUND_CHOOSER_DIALOG (dialog));
765
 
       if (item != NULL)
766
 
         {
767
 
-          set_background (self, item);
768
 
+          set_background (self, g_object_get_data (G_OBJECT (dialog), "settings"), item);
769
 
           g_object_unref (item);
770
 
         }
771
 
     }
772
 
@@ -708,13 +763,14 @@ on_chooser_dialog_response (GtkDialog         *dialog,
773
 
 }
774
 
 
775
 
 static void
776
 
-on_background_button_clicked (GtkButton         *button,
777
 
-                              CcBackgroundPanel *self)
778
 
+launch_chooser (CcBackgroundPanel *self,
779
 
+                GSettings         *settings)
780
 
 {
781
 
   CcBackgroundPanelPrivate *priv = self->priv;
782
 
   GtkWidget *dialog;
783
 
 
784
 
   dialog = cc_background_chooser_dialog_new ();
785
 
+  g_object_set_data (G_OBJECT (dialog), "settings", settings);
786
 
   gtk_window_set_transient_for (GTK_WINDOW (dialog),
787
 
                                 GTK_WINDOW (gtk_widget_get_toplevel (WID ("background-panel"))));
788
 
   gtk_widget_show (dialog);
789
 
@@ -724,12 +780,26 @@ on_background_button_clicked (GtkButton         *button,
790
 
 }
791
 
 
792
 
 static void
793
 
+on_background_button_clicked (GtkButton         *button,
794
 
+                              CcBackgroundPanel *self)
795
 
+{
796
 
+  launch_chooser (self, self->priv->settings);
797
 
+}
798
 
+
799
 
+static void
800
 
+on_lock_button_clicked (GtkButton         *button,
801
 
+                        CcBackgroundPanel *self)
802
 
+{
803
 
+  launch_chooser (self, self->priv->lock_settings);
804
 
+}
805
 
+
806
 
+static void
807
 
 on_settings_changed (GSettings         *settings,
808
 
                      gchar             *key,
809
 
                      CcBackgroundPanel *self)
810
 
 {
811
 
-  reload_current_bg (self);
812
 
-  update_preview (self->priv, NULL);
813
 
+  reload_current_bg (self, settings);
814
 
+  update_preview (self->priv, settings, NULL);
815
 
 }
816
 
 
817
 
 static void
818
 
@@ -760,6 +830,9 @@ cc_background_panel_init (CcBackgroundPanel *self)
819
 
   priv->settings = g_settings_new (WP_PATH_ID);
820
 
   g_settings_delay (priv->settings);
821
 
 
822
 
+  priv->lock_settings = g_settings_new (WP_LOCK_PATH_ID);
823
 
+  g_settings_delay (priv->lock_settings);
824
 
+
825
 
   /* add the top level widget */
826
 
   widget = WID ("background-panel");
827
 
 
828
 
@@ -768,19 +841,28 @@ cc_background_panel_init (CcBackgroundPanel *self)
829
 
 
830
 
   /* setup preview area */
831
 
   widget = WID ("background-desktop-drawingarea");
832
 
-  g_signal_connect (widget, "draw", G_CALLBACK (on_preview_draw),
833
 
-                    self);
834
 
+  g_signal_connect (widget, "draw", G_CALLBACK (on_preview_draw), self);
835
 
+  widget = WID ("background-lock-drawingarea");
836
 
+  g_signal_connect (widget, "draw", G_CALLBACK (on_lock_preview_draw), self);
837
 
 
838
 
   priv->copy_cancellable = g_cancellable_new ();
839
 
   priv->capture_cancellable = g_cancellable_new ();
840
 
 
841
 
   priv->thumb_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
842
 
 
843
 
-  reload_current_bg (self);
844
 
-  update_preview (priv, NULL);
845
 
+  /* Load the backgrounds */
846
 
+  reload_current_bg (self, priv->settings);
847
 
+  update_preview (priv, priv->settings, NULL);
848
 
+  reload_current_bg (self, priv->lock_settings);
849
 
+  update_preview (priv, priv->lock_settings, NULL);
850
 
 
851
 
+  /* Background settings */
852
 
   g_signal_connect (priv->settings, "changed", G_CALLBACK (on_settings_changed), self);
853
 
+  g_signal_connect (priv->lock_settings, "changed", G_CALLBACK (on_settings_changed), self);
854
 
 
855
 
+  /* Background buttons */
856
 
   widget = WID ("background-set-button");
857
 
   g_signal_connect (widget, "clicked", G_CALLBACK (on_background_button_clicked), self);
858
 
+  widget = WID ("background-lock-set-button");
859
 
+  g_signal_connect (widget, "clicked", G_CALLBACK (on_lock_button_clicked), self);
860
 
 }
861
 
1.8.3.1