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
6
https://bugzilla.gnome.org/show_bug.cgi?id=696166
8
panels/background/background.ui | 289 +++++++++++++++++++++++++-------
9
panels/background/cc-background-panel.c | 208 ++++++++++++++++-------
10
2 files changed, 375 insertions(+), 122 deletions(-)
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
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>
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>
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>
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>
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>
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>
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>
94
+ <property name="expand">False</property>
95
+ <property name="fill">True</property>
96
+ <property name="position">0</property>
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>
106
+ <property name="expand">False</property>
107
+ <property name="fill">True</property>
108
+ <property name="position">1</property>
117
+ <property name="expand">True</property>
118
+ <property name="fill">True</property>
119
+ <property name="position">0</property>
124
- <property name="expand">True</property>
125
- <property name="fill">True</property>
126
- <property name="position">0</property>
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>
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>
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>
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>
158
+ <property name="expand">False</property>
159
+ <property name="fill">True</property>
160
+ <property name="position">0</property>
164
+ <object class="GtkLabel" id="strut">
165
+ <property name="visible">True</property>
166
+ <property name="can_focus">False</property>
167
+ <property name="label"> </property>
170
+ <property name="expand">False</property>
171
+ <property name="fill">True</property>
172
+ <property name="position">1</property>
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>
183
+ <property name="expand">False</property>
184
+ <property name="fill">True</property>
185
+ <property name="position">1</property>
190
- <property name="expand">False</property>
191
+ <property name="expand">True</property>
192
<property name="fill">True</property>
193
<property name="position">0</property>
198
+ <property name="expand">False</property>
199
+ <property name="fill">True</property>
200
+ <property name="position">2</property>
205
+ <property name="expand">False</property>
206
+ <property name="fill">True</property>
207
+ <property name="position">0</property>
211
+ <object class="GtkVBox" id="vbox1">
212
+ <property name="visible">True</property>
213
+ <property name="can_focus">False</property>
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>
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>
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>
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>
250
+ <property name="expand">False</property>
251
+ <property name="fill">True</property>
252
+ <property name="position">0</property>
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>
262
+ <property name="expand">False</property>
263
+ <property name="fill">True</property>
264
+ <property name="position">1</property>
271
- <property name="expand">False</property>
272
- <property name="fill">True</property>
273
- <property name="position">1</property>
278
+ <property name="expand">True</property>
279
+ <property name="fill">True</property>
280
+ <property name="position">0</property>
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>
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>
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>
305
+ <property name="expand">False</property>
306
+ <property name="fill">True</property>
307
+ <property name="position">0</property>
311
+ <object class="GtkLabel" id="strut1">
312
+ <property name="visible">True</property>
313
+ <property name="can_focus">False</property>
314
+ <property name="label"> </property>
317
+ <property name="expand">False</property>
318
+ <property name="fill">True</property>
319
+ <property name="position">1</property>
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>
330
+ <property name="expand">False</property>
331
+ <property name="fill">True</property>
332
+ <property name="position">1</property>
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>
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>
355
<property name="expand">False</property>
356
<property name="fill">True</property>
357
- <property name="position">2</property>
358
+ <property name="position">1</property>
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
367
#include "bg-pictures-source.h"
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;
378
+ GSettings *lock_settings;
380
GnomeDesktopThumbnailFactory *thumb_factory;
382
CcBackgroundItem *current_background;
383
+ CcBackgroundItem *current_lock_background;
385
GCancellable *copy_cancellable;
386
GCancellable *capture_cancellable;
387
@@ -71,6 +74,8 @@ struct _CcBackgroundPanelPrivate
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")
395
cc_background_panel_get_help_uri (CcPanel *panel)
396
@@ -89,6 +94,7 @@ cc_background_panel_dispose (GObject *object)
397
priv->spinner = NULL;
399
g_clear_object (&priv->settings);
400
+ g_clear_object (&priv->lock_settings);
402
if (priv->copy_cancellable)
404
@@ -131,6 +137,7 @@ cc_background_panel_finalize (GObject *object)
405
CcBackgroundPanelPrivate *priv = CC_BACKGROUND_PANEL (object)->priv;
407
g_clear_object (&priv->current_background);
408
+ g_clear_object (&priv->current_lock_background);
410
G_OBJECT_CLASS (cc_background_panel_parent_class)->finalize (object);
412
@@ -151,59 +158,77 @@ cc_background_panel_class_init (CcBackgroundPanelClass *klass)
415
update_preview (CcBackgroundPanelPrivate *priv,
416
+ GSettings *settings,
417
CcBackgroundItem *item)
419
gboolean changes_with_time;
420
+ CcBackgroundItem *current_background;
422
+ current_background = CURRENT_BG;
424
- if (item && priv->current_background)
425
+ if (item && current_background)
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;
435
+ priv->current_lock_background = current_background;
436
+ cc_background_item_load (current_background, NULL);
439
changes_with_time = FALSE;
441
- if (priv->current_background)
442
+ if (current_background)
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);
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)
452
+ gtk_widget_set_visible (WID ("slide_image"), changes_with_time);
453
+ gtk_widget_set_visible (WID ("slide-label"), changes_with_time);
455
+ gtk_widget_queue_draw (WID ("background-desktop-drawingarea"));
459
+ gtk_widget_set_visible (WID ("slide_image1"), changes_with_time);
460
+ gtk_widget_set_visible (WID ("slide-label1"), changes_with_time);
462
- gtk_widget_queue_draw (WID ("background-desktop-drawingarea"));
463
+ gtk_widget_queue_draw (WID ("background-lock-drawingarea"));
468
-get_save_path (void)
469
+get_save_path (const char *filename)
471
return g_build_filename (g_get_user_config_dir (),
472
"gnome-control-center",
480
-update_display_preview (CcBackgroundPanel *panel)
481
+update_display_preview (CcBackgroundPanel *panel,
483
+ CcBackgroundItem *current_background)
485
CcBackgroundPanelPrivate *priv = panel->priv;
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;
496
- widget = WID ("background-desktop-drawingarea");
497
gtk_widget_get_allocation (widget, &allocation);
499
- if (!priv->current_background)
500
+ if (!current_background)
503
- icon = cc_background_item_get_frame_thumbnail (priv->current_background,
504
+ icon = cc_background_item_get_frame_thumbnail (current_background,
508
@@ -218,11 +243,14 @@ update_display_preview (CcBackgroundPanel *panel)
509
g_object_unref (pixbuf);
512
- if (panel->priv->display_screenshot != NULL)
513
- pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot,
516
- GDK_INTERP_BILINEAR);
517
+ if (current_background == priv->current_background &&
518
+ panel->priv->display_screenshot != NULL)
520
+ pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot,
523
+ GDK_INTERP_BILINEAR);
528
@@ -271,6 +299,7 @@ on_screenshot_finished (GObject *source,
530
g_error_free (error);
532
+ priv = panel->priv;
535
g_variant_unref (result);
536
@@ -322,7 +351,7 @@ on_screenshot_finished (GObject *source,
537
cairo_surface_destroy (surface);
540
- update_display_preview (panel);
541
+ update_display_preview (panel, WID ("background-desktop-drawingarea"), priv->current_background);
545
@@ -407,6 +436,7 @@ on_preview_draw (GtkWidget *widget,
547
CcBackgroundPanel *panel)
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);
557
- update_display_preview (panel);
558
+ update_display_preview (panel, widget, priv->current_background);
564
+on_lock_preview_draw (GtkWidget *widget,
566
+ CcBackgroundPanel *panel)
568
+ CcBackgroundPanelPrivate *priv = panel->priv;
569
+ update_display_preview (panel, widget, priv->current_lock_background);
574
-reload_current_bg (CcBackgroundPanel *self)
575
+reload_current_bg (CcBackgroundPanel *self,
576
+ GSettings *settings)
578
CcBackgroundPanelPrivate *priv;
579
CcBackgroundItem *saved, *configured;
580
@@ -429,12 +470,12 @@ reload_current_bg (CcBackgroundPanel *self)
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);
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')
595
@@ -450,12 +491,12 @@ reload_current_bg (CcBackgroundPanel *self)
596
configured = cc_background_item_new (uri);
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,
612
@@ -479,9 +520,17 @@ reload_current_bg (CcBackgroundPanel *self)
614
g_object_unref (saved);
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)
621
+ g_clear_object (&priv->current_background);
622
+ priv->current_background = configured;
626
+ g_clear_object (&priv->current_lock_background);
627
+ priv->current_lock_background = configured;
629
+ cc_background_item_load (configured, NULL);
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;
640
if (!g_file_copy_finish (G_FILE (source_object), result, &err))
642
@@ -523,8 +574,10 @@ copy_finished_cb (GObject *source_object,
645
item = g_object_get_data (source_object, "item");
646
+ settings = g_object_get_data (source_object, "settings");
647
+ current_background = CURRENT_BG;
649
- g_settings_apply (priv->settings);
650
+ g_settings_apply (settings);
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;
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);
667
- update_preview (priv, item);
668
+ update_preview (priv, settings, item);
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);
678
/* remove the reference taken when the copy was set up */
679
@@ -556,6 +609,7 @@ copy_finished_cb (GObject *source_object,
682
set_background (CcBackgroundPanel *panel,
683
+ GSettings *settings,
684
CcBackgroundItem *item)
686
CcBackgroundPanelPrivate *priv = panel->priv;
687
@@ -573,8 +627,8 @@ set_background (CcBackgroundPanel *panel,
689
if ((flags & CC_BACKGROUND_ITEM_HAS_URI) && uri == NULL)
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, "");
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,
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,
706
@@ -639,7 +694,7 @@ set_background (CcBackgroundPanel *panel,
707
dest_uri = g_file_get_uri (dest);
708
g_object_unref (dest);
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),
714
"needs-download", FALSE,
715
@@ -653,37 +708,37 @@ set_background (CcBackgroundPanel *panel,
719
- g_settings_set_string (priv->settings, WP_URI_KEY, uri);
720
+ g_settings_set_string (settings, WP_URI_KEY, uri);
723
/* Also set the placement if we have a URI and the previous value was none */
724
if (flags & CC_BACKGROUND_ITEM_HAS_PLACEMENT)
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));
729
else if (uri != NULL)
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));
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));
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));
747
/* update the preview information */
748
if (save_settings != FALSE)
750
/* Apply all changes */
751
- g_settings_apply (priv->settings);
752
+ g_settings_apply (settings);
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);
763
@@ -699,7 +754,7 @@ on_chooser_dialog_response (GtkDialog *dialog,
764
item = cc_background_chooser_dialog_get_item (CC_BACKGROUND_CHOOSER_DIALOG (dialog));
767
- set_background (self, item);
768
+ set_background (self, g_object_get_data (G_OBJECT (dialog), "settings"), item);
769
g_object_unref (item);
772
@@ -708,13 +763,14 @@ on_chooser_dialog_response (GtkDialog *dialog,
776
-on_background_button_clicked (GtkButton *button,
777
- CcBackgroundPanel *self)
778
+launch_chooser (CcBackgroundPanel *self,
779
+ GSettings *settings)
781
CcBackgroundPanelPrivate *priv = self->priv;
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,
793
+on_background_button_clicked (GtkButton *button,
794
+ CcBackgroundPanel *self)
796
+ launch_chooser (self, self->priv->settings);
800
+on_lock_button_clicked (GtkButton *button,
801
+ CcBackgroundPanel *self)
803
+ launch_chooser (self, self->priv->lock_settings);
807
on_settings_changed (GSettings *settings,
809
CcBackgroundPanel *self)
811
- reload_current_bg (self);
812
- update_preview (self->priv, NULL);
813
+ reload_current_bg (self, settings);
814
+ update_preview (self->priv, settings, NULL);
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);
822
+ priv->lock_settings = g_settings_new (WP_LOCK_PATH_ID);
823
+ g_settings_delay (priv->lock_settings);
825
/* add the top level widget */
826
widget = WID ("background-panel");
828
@@ -768,19 +841,28 @@ cc_background_panel_init (CcBackgroundPanel *self)
830
/* setup preview area */
831
widget = WID ("background-desktop-drawingarea");
832
- g_signal_connect (widget, "draw", G_CALLBACK (on_preview_draw),
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);
838
priv->copy_cancellable = g_cancellable_new ();
839
priv->capture_cancellable = g_cancellable_new ();
841
priv->thumb_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
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);
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);
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);