Skip to content

Commit 1b8e478

Browse files
committed
Make changing lock screen background an option
This adds a new option under the Customize tab, as well as a new set_lock_screen script that only runs when the change lock screen option is enabled. Fixes varietywalls#309. Fixes varietywalls#764.
1 parent 76cd133 commit 1b8e478

File tree

6 files changed

+104
-47
lines changed

6 files changed

+104
-47
lines changed

variety/Options.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ def read(self):
107107
except Exception:
108108
pass
109109

110+
try:
111+
self.change_lock_screen = config["change_lock_screen"].lower() in TRUTH_VALUES
112+
except Exception:
113+
pass
114+
110115
try:
111116
self.set_wallpaper_script = os.path.expanduser(config["set_wallpaper_script"])
112117
except Exception:
@@ -117,6 +122,11 @@ def read(self):
117122
except Exception:
118123
pass
119124

125+
try:
126+
self.set_lock_screen_script = os.path.expanduser(config["set_lock_screen_script"])
127+
except Exception:
128+
pass
129+
120130
try:
121131
self.download_folder = os.path.expanduser(config["download_folder"])
122132
except Exception:
@@ -632,9 +642,11 @@ def set_defaults(self):
632642
self.change_interval = 300
633643
self.internet_enabled = True
634644
self.safe_mode = False
645+
self.change_lock_screen = False
635646

636647
self.set_wallpaper_script = os.path.join(get_profile_path(), "scripts", "set_wallpaper")
637648
self.get_wallpaper_script = os.path.join(get_profile_path(), "scripts", "get_wallpaper")
649+
self.set_lock_screen_script = os.path.join(get_profile_path(), "scripts", "set_lock_screen")
638650

639651
self.download_folder = os.path.join(get_profile_path(), "Downloaded")
640652
self.download_preference_ratio = 0.9
@@ -748,6 +760,7 @@ def write(self):
748760
config["change_interval"] = str(self.change_interval)
749761
config["internet_enabled"] = str(self.internet_enabled)
750762
config["safe_mode"] = str(self.safe_mode)
763+
config["change_lock_screen"] = str(self.change_lock_screen)
751764

752765
config["set_wallpaper_script"] = Util.collapseuser(self.set_wallpaper_script)
753766
config["get_wallpaper_script"] = Util.collapseuser(self.get_wallpaper_script)

variety/PreferencesVarietyDialog.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ def reload(self):
180180

181181
self.favorites_operations = self.options.favorites_operations
182182

183+
self.ui.change_lock_screen_box.set_active(self.options.change_lock_screen)
183184
self.ui.copyto_enabled.set_active(self.options.copyto_enabled)
184185
self.copyto_chooser.set_folder(self.parent.get_actual_copyto_folder())
185186

@@ -1020,6 +1021,7 @@ def apply(self):
10201021
pass
10211022

10221023
self.options.copyto_enabled = self.ui.copyto_enabled.get_active()
1024+
self.options.change_lock_screen = self.ui.change_lock_screen_box.get_active()
10231025
copyto = os.path.normpath(self.copyto_chooser.get_folder())
10241026
if copyto == os.path.normpath(self.parent.get_actual_copyto_folder("Default")):
10251027
self.options.copyto_folder = "Default"

variety/VarietyWindow.py

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,19 @@ def on_mnu_preferences_activate(self, widget=None, data=None):
243243

244244
self.preferences_dialog.present()
245245

246+
def _maybe_copy_script(self, script):
247+
"""Copy a script, if missing, to the Variety profile path."""
248+
if not os.path.exists(os.path.join(self.scripts_folder, script)):
249+
logger.info(
250+
lambda: "Missing %s file, copying it from %s"
251+
% (script, varietyconfig.get_data_file("scripts", script))
252+
)
253+
Util.copy_with_replace(
254+
varietyconfig.get_data_file("scripts", script),
255+
os.path.join(self.scripts_folder, script),
256+
{DEFAULT_PROFILE_PATH.replace("~", "$HOME"): get_profile_path(expanded=True)},
257+
)
258+
246259
def prepare_config_folder(self):
247260
self.config_folder = get_profile_path()
248261
Util.makedirs(self.config_folder)
@@ -277,27 +290,9 @@ def prepare_config_folder(self):
277290
self.scripts_folder = os.path.join(self.config_folder, "scripts")
278291
Util.makedirs(self.scripts_folder)
279292

280-
if not os.path.exists(os.path.join(self.scripts_folder, "set_wallpaper")):
281-
logger.info(
282-
lambda: "Missing set_wallpaper file, copying it from "
283-
+ varietyconfig.get_data_file("scripts", "set_wallpaper")
284-
)
285-
Util.copy_with_replace(
286-
varietyconfig.get_data_file("scripts", "set_wallpaper"),
287-
os.path.join(self.scripts_folder, "set_wallpaper"),
288-
{DEFAULT_PROFILE_PATH.replace("~", "$HOME"): get_profile_path(expanded=True)},
289-
)
290-
291-
if not os.path.exists(os.path.join(self.scripts_folder, "get_wallpaper")):
292-
logger.info(
293-
lambda: "Missing get_wallpaper file, copying it from "
294-
+ varietyconfig.get_data_file("scripts", "get_wallpaper")
295-
)
296-
Util.copy_with_replace(
297-
varietyconfig.get_data_file("scripts", "get_wallpaper"),
298-
os.path.join(self.scripts_folder, "get_wallpaper"),
299-
{DEFAULT_PROFILE_PATH.replace("~", "$HOME"): get_profile_path(expanded=True)},
300-
)
293+
self._maybe_copy_script("set_wallpaper")
294+
self._maybe_copy_script("get_wallpaper")
295+
self._maybe_copy_script("set_lock_screen")
301296

302297
# make all scripts executable:
303298
for f in os.listdir(self.scripts_folder):
@@ -1559,6 +1554,8 @@ def _update_inidicator():
15591554
Util.add_mainloop_task(_update_inidicator)
15601555

15611556
self.set_desktop_wallpaper(to_set, filename, refresh_level, display_mode_param)
1557+
if self.options.change_lock_screen:
1558+
self.set_desktop_wallpaper(to_set, filename, refresh_level, display_mode_param, lock_screen=True)
15621559
self.current = filename
15631560

15641561
if self.options.icon == "Current" and self.current:
@@ -2753,8 +2750,8 @@ def cleanup_old_wallpapers(self, folder, prefix, new_wallpaper=None):
27532750
except Exception:
27542751
logger.exception(lambda: "Cannot remove all old wallpaper files from %s:" % folder)
27552752

2756-
def set_desktop_wallpaper(self, wallpaper, original_file, refresh_level, display_mode):
2757-
script = self.options.set_wallpaper_script
2753+
def set_desktop_wallpaper(self, wallpaper, original_file, refresh_level, display_mode, lock_screen=False):
2754+
script = self.options.set_lock_screen_script if lock_screen else self.options.set_wallpaper_script
27582755
if os.access(script, os.X_OK):
27592756
auto = (
27602757
"manual"
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/usr/bin/env bash
2+
#
3+
# This script is run by Variety to change lock screen backgrounds, when that option is enabled.
4+
# The parameters are the same as set_wallpaper.
5+
WP=$1
6+
7+
detect_desktop() {
8+
if [ -n "$XDG_CURRENT_DESKTOP" ]; then
9+
case "${XDG_CURRENT_DESKTOP,,}" in
10+
*"gnome"*) echo "gnome" ;;
11+
*"unity"*) echo "unity" ;;
12+
*"budgie"*) echo "budgie" ;;
13+
*"kde"*) echo "kde" ;;
14+
esac
15+
return
16+
fi
17+
echo "unknown"
18+
}
19+
20+
DE=$(detect_desktop)
21+
22+
if [ "$DE" == "kde" ]; then
23+
kwriteconfig6 --file kscreenlockerrc --group Greeter --group Wallpaper --group org.kde.image --group General --key Image "$WP"
24+
25+
elif [ "$DE" == "gnome" ] || [ "$DE" == "unity" ] || [ "$DE" == "budgie" ]; then
26+
# GNOME Screensaver / Lock screen - thanks to George C. de Araujo for the patch
27+
gsettings set org.gnome.desktop.screensaver picture-uri "file://$WP" 2>/dev/null
28+
if [[ "$4" =~ ^(wallpaper|centered|scaled|stretched|zoom|spanned)$ ]]; then
29+
gsettings set org.gnome.desktop.screensaver picture-options "$4"
30+
fi
31+
if [ "$(gsettings get org.gnome.desktop.screensaver picture-options)" == "'none'" ]; then
32+
gsettings set org.gnome.desktop.screensaver picture-options 'zoom'
33+
fi
34+
else
35+
echo "Unsupported desktop for automatic lock screen changing"
36+
exit 1
37+
fi
38+
39+
exit 0

variety/data/scripts/set_wallpaper

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,6 @@ elif [ "$DE" == "kde" ]; then
162162
"
163163
dbus-send --type=method_call --dest=org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript string:"$plasma_qdbus_script"
164164
dbus_exitcode="$?"
165-
if [[ "$dbus_exitcode" -eq 0 && "${KDE_SESSION_VERSION}" -eq '6' ]]; then
166-
# Update KDE lock screen background
167-
kwriteconfig6 --file kscreenlockerrc --group Greeter --group Wallpaper --group org.kde.image --group General --key Image "$WP"
168-
fi
169165
if [[ "$dbus_exitcode" -ne 0 && "${KDE_SESSION_VERSION}" -eq '5' ]]; then
170166
kdialog --title "Variety: cannot change Plasma wallpaper" --passivepopup "Could not change the Plasma 5 wallpaper; \
171167
make sure that you're using Plasma 5.7+ and have widgets unlocked.\n----\n \
@@ -184,14 +180,6 @@ elif [ "$DE" == "gnome" ] || [ "$DE" == "unity" ] || [ "$DE" == "budgie" ]; then
184180
if [ "$(gsettings get org.gnome.desktop.background picture-options)" == "'none'" ]; then
185181
gsettings set org.gnome.desktop.background picture-options 'zoom'
186182
fi
187-
# GNOME Screensaver / Lock screen - thanks to George C. de Araujo for the patch
188-
gsettings set org.gnome.desktop.screensaver picture-uri "file://$WP" 2>/dev/null
189-
if [[ "$4" =~ ^(wallpaper|centered|scaled|stretched|zoom|spanned)$ ]]; then
190-
gsettings set org.gnome.desktop.screensaver picture-options "$4"
191-
fi
192-
if [ "$(gsettings get org.gnome.desktop.screensaver picture-options)" == "'none'" ]; then
193-
gsettings set org.gnome.desktop.screensaver picture-options 'zoom'
194-
fi
195183

196184
elif [ "$DE" == "deepin" ]; then
197185
# Deepin

variety/data/ui/PreferencesVarietyDialog.ui

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3606,7 +3606,7 @@ To show the icon in the launcher choose About or Preferences. You may wish to lo
36063606
</packing>
36073607
</child>
36083608
<child>
3609-
<object class="GtkBox" id="lightdm_box">
3609+
<object class="GtkBox" id="login_screen_support_box">
36103610
<property name="visible">True</property>
36113611
<property name="can-focus">False</property>
36123612
<property name="valign">start</property>
@@ -3640,8 +3640,8 @@ To show the icon in the launcher choose About or Preferences. You may wish to lo
36403640
<property name="hexpand">True</property>
36413641
<property name="orientation">vertical</property>
36423642
<child>
3643-
<object class="GtkCheckButton" id="copyto_enabled">
3644-
<property name="label" translatable="yes">Copy wallpapers to a static location (for programs like LightDM that require a static path)</property>
3643+
<object class="GtkCheckButton" id="change_lock_screen_box">
3644+
<property name="label" translatable="yes">Change lock screen background automatically</property>
36453645
<property name="use-action-appearance">False</property>
36463646
<property name="visible">True</property>
36473647
<property name="can-focus">True</property>
@@ -3650,8 +3650,6 @@ To show the icon in the launcher choose About or Preferences. You may wish to lo
36503650
<property name="margin-top">7</property>
36513651
<property name="xalign">0</property>
36523652
<property name="draw-indicator">True</property>
3653-
<signal name="toggled" handler="delayed_apply" swapped="no"/>
3654-
<signal name="toggled" handler="on_copyto_enabled_toggled" swapped="no"/>
36553653
</object>
36563654
<packing>
36573655
<property name="expand">False</property>
@@ -3660,16 +3658,18 @@ To show the icon in the launcher choose About or Preferences. You may wish to lo
36603658
</packing>
36613659
</child>
36623660
<child>
3663-
<object class="GtkLabel" id="label19">
3661+
<object class="GtkCheckButton" id="copyto_enabled">
3662+
<property name="label" translatable="yes">Copy wallpapers to a static location (for programs like LightDM that require a static path)</property>
3663+
<property name="use-action-appearance">False</property>
36643664
<property name="visible">True</property>
3665-
<property name="can-focus">False</property>
3665+
<property name="can-focus">True</property>
3666+
<property name="receives-default">False</property>
36663667
<property name="halign">start</property>
36673668
<property name="margin-top">7</property>
3668-
<property name="label" translatable="yes">&lt;b&gt;Privacy warning:&lt;/b&gt; To show your wallpaper in a display manager, it may need read permissions to the image. With this option on, Variety will copy the wallpapers to a public folder and change their permissions to make them readable by all. By default, the folder is ~/Pictures if your home folder in not encrypted, and /usr/share/backgrounds if it is. Please use with care on multiuser systems.</property>
3669-
<property name="use-markup">True</property>
3670-
<property name="justify">fill</property>
3671-
<property name="wrap">True</property>
3672-
<property name="max-width-chars">130</property>
3669+
<property name="xalign">0</property>
3670+
<property name="draw-indicator">True</property>
3671+
<signal name="toggled" handler="delayed_apply" swapped="no"/>
3672+
<signal name="toggled" handler="on_copyto_enabled_toggled" swapped="no"/>
36733673
</object>
36743674
<packing>
36753675
<property name="expand">False</property>
@@ -3848,6 +3848,24 @@ To show the icon in the launcher choose About or Preferences. You may wish to lo
38483848
<property name="position">4</property>
38493849
</packing>
38503850
</child>
3851+
<child>
3852+
<object class="GtkLabel" id="label19">
3853+
<property name="visible">True</property>
3854+
<property name="can-focus">False</property>
3855+
<property name="halign">start</property>
3856+
<property name="margin-top">7</property>
3857+
<property name="label" translatable="yes">&lt;b&gt;Privacy warning:&lt;/b&gt; To show your wallpaper in a display manager, it may need read permissions to the image. With this option on, Variety will copy the wallpapers to a public folder and change their permissions to make them readable by all. By default, the folder is ~/Pictures if your home folder in not encrypted, and /usr/share/backgrounds if it is. Please use with care on multiuser systems.</property>
3858+
<property name="use-markup">True</property>
3859+
<property name="justify">fill</property>
3860+
<property name="wrap">True</property>
3861+
<property name="max-width-chars">130</property>
3862+
</object>
3863+
<packing>
3864+
<property name="expand">False</property>
3865+
<property name="fill">True</property>
3866+
<property name="position">5</property>
3867+
</packing>
3868+
</child>
38513869
</object>
38523870
<packing>
38533871
<property name="expand">False</property>

0 commit comments

Comments
 (0)