Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package cinnamon-screensaver

As with the cinnamon package, Maxy and I went through the upstream changes done to cinnamon-screensaver and cherry picked those that we judged to have the most impact and that we would like to see released with stretch.

The latest upload includes the following fixes that I'd like to see included in
stretch:

cinnamon-screensaver (3.2.13-4) unstable; urgency=medium

* Cherry pick: "mediaPlayerWatcher.py: catch SyntaxError exception when
    evaluating PlaybackStatus property." (0063d84)
Prevents the screensaver from dying if the media player returns a status
    message with invalid syntax.
* Cherry pick: "framedImage.py: Just silently fail if a downloaded image fails
    to be loaded into a pixbuf." (935cde4)
Prevents the screensaver from dying if it fails to download the media player
    artwork.
  * Cherry pick "some theme fixes for gtk 3.20+" (2b96fb3)
    Makes the password entry use some new CSS properties in GTK 3.20+
* Cherry pick "xscreensaver plugin: Use GSubprocess instead of g_spawn_async
    for hacks" (cfa1f1a)
    Avoids left over screensaver processes when previewing them.
* Cherry pick "stage/fader: Realize the stage offscreen, then reposition it before starting our fade in" (2e73a9b) + "stage.py: fix screen changed
    callback" (39da3f0).
Avoids ugly flashes when starting and interrupting the screensaver, by precalculating the image off-screen before rendering (+ a fixup due to a
    function name change).
* Cherry pick "service.py: Add the invocation to the queue prior to calling on
    the manager to lock" (5561f3c)
    Prevents possible hung commands when locking the screen.
  * Cherry pick "passwordEntry.py: Reload the keyboard layout if the xkb
    configuration changes." (55a26c2)
Changes the default keyboard layout in the screensaver when the default is
    changed for the session.

-- Margarita Manterola <ma...@debian.org> Sat, 20 May 2017 12:55:14 +0200

I'm attaching the full debdiff, as well as the separate files for the patches
for easier reviewing.

unblock cinnamon-screensaver/3.2.13-4

--
Thanks,
Marga
diff -Nru cinnamon-screensaver-3.2.13/debian/changelog cinnamon-screensaver-3.2.13/debian/changelog
--- cinnamon-screensaver-3.2.13/debian/changelog	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/changelog	2017-04-02 13:24:49.000000000 +0200
@@ -1,34 +1,3 @@
-cinnamon-screensaver (3.2.13-4) unstable; urgency=medium
-
-  * Cherry pick: "mediaPlayerWatcher.py: catch SyntaxError exception when
-    evaluating PlaybackStatus property." (0063d84)
-    Prevents the screensaver from dying if the media player returns a status
-    message with invalid syntax.
-  * Cherry pick: "framedImage.py: Just silently fail if a downloaded image fails
-    to be loaded into a pixbuf." (935cde4)
-    Prevents the screensaver from dying if it fails to download the media player
-    artwork.
-  * Cherry pick "some theme fixes for gtk 3.20+" (2b96fb3)
-    Makes the password entry use some new CSS properties in GTK 3.20+
-  * Cherry pick "xscreensaver plugin: Use GSubprocess instead of g_spawn_async
-    for hacks" (cfa1f1a)
-    Avoids left over screensaver processes when previewing them.
-  * Cherry pick "stage/fader: Realize the stage offscreen, then reposition it
-    before starting our fade in" (2e73a9b) + "stage.py: fix screen changed
-    callback" (39da3f0).
-    Avoids ugly flashes when starting and interrupting the screensaver, by
-    precalculating the image off-screen before rendering (+ a fixup due to a
-    function name change).
-  * Cherry pick "service.py: Add the invocation to the queue prior to calling on
-    the manager to lock" (5561f3c)
-    Prevents possible hung commands when locking the screen.
-  * Cherry pick "passwordEntry.py: Reload the keyboard layout if the xkb
-    configuration changes." (55a26c2)
-    Changes the default keyboard layout in the screensaver when the default is
-    changed for the session.
-
- -- Margarita Manterola <ma...@debian.org>  Sat, 20 May 2017 12:55:14 +0200
-
 cinnamon-screensaver (3.2.13-3) unstable; urgency=medium
 
   * Import upstream's commit f579336 to allow users to select text in the
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/fixup-screen-changed-callaback.patch cinnamon-screensaver-3.2.13/debian/patches/fixup-screen-changed-callaback.patch
--- cinnamon-screensaver-3.2.13/debian/patches/fixup-screen-changed-callaback.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/fixup-screen-changed-callaback.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-From 39da3f05ed89358bb6c0a01efc5e1093d87e7776 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Thu, 9 Mar 2017 11:56:55 -0500
-Subject: [PATCH] stage.py: fix screen changed callback
-
----
- src/stage.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: cinnamon-screensaver/src/stage.py
-===================================================================
---- cinnamon-screensaver.orig/src/stage.py	2017-05-20 11:36:01.925262877 +0200
-+++ cinnamon-screensaver/src/stage.py	2017-05-20 11:36:01.921262808 +0200
-@@ -118,7 +118,7 @@
- 
-     def on_screen_changed(self, screen, data=None):
-         self.update_geometry()
--        self.size_to_screen()
-+        self.move_onscreen()
- 
-         for monitor in self.monitors:
-             monitor.update_geometry()
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/handle-lock-order.patch cinnamon-screensaver-3.2.13/debian/patches/handle-lock-order.patch
--- cinnamon-screensaver-3.2.13/debian/patches/handle-lock-order.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/handle-lock-order.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-From 5561f3c4c1373a5c1ca55d91c722d19ce8d4abd7 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Mon, 23 Jan 2017 19:36:31 -0500
-Subject: [PATCH] service.py: Add the invocation to the queue prior to calling
- on the manager to lock.  The active signal could be sent back before it gets
- added otherwise, causing us to leave the calling command hanging.
-
----
- src/service.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-Index: cinnamon-screensaver/src/service.py
-===================================================================
---- cinnamon-screensaver.orig/src/service.py	2017-05-20 11:49:28.596448273 +0200
-+++ cinnamon-screensaver/src/service.py	2017-05-20 11:49:28.588448126 +0200
-@@ -92,10 +92,10 @@
- 
- # Interface handlers
-     def handle_lock(self, iface, inv, msg):
--        self.manager.lock(msg)
--
-         self.lock_queue.append(inv)
- 
-+        self.manager.lock(msg)
-+
-         return True
- 
-     def handle_quit(self, iface, inv):
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/improve-fades.patch cinnamon-screensaver-3.2.13/debian/patches/improve-fades.patch
--- cinnamon-screensaver-3.2.13/debian/patches/improve-fades.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/improve-fades.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,140 +0,0 @@
-From 2e73a9b44eb82b384bd698253a9e930bbb77aa50 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Thu, 26 Jan 2017 23:00:27 -0500
-Subject: [PATCH] stage/fader: Realize the stage offscreen, then reposition it
- before starting our fade in.  This prevents the initial flash sometimes seen
- when the idle fade kicks in.
-
-Also, fix the fade-out when interrupting an idle fade.  It was starting
-the fade-out at 1.0 opacity, rather than the widgets current opacity, so
-deactivating a partially faded screensaver would briefly show it fully
-visible before fading out again.
----
- src/stage.py      | 23 +++++++++++++++--------
- src/util/fader.py | 18 +++++++-----------
- 2 files changed, 22 insertions(+), 19 deletions(-)
-
-Index: cinnamon-screensaver/src/stage.py
-===================================================================
---- cinnamon-screensaver.orig/src/stage.py	2017-05-20 11:24:14.778028730 +0200
-+++ cinnamon-screensaver/src/stage.py	2017-05-20 11:24:14.770028395 +0200
-@@ -79,6 +79,7 @@
-         self.override_background_color (Gtk.StateFlags.NORMAL, c);
- 
-         self.update_geometry()
-+        self.move_offscreen()
- 
-         self.overlay = Gtk.Overlay()
-         self.fader = Fader(self)
-@@ -136,13 +137,15 @@
-         """
-         if effect_time == 0:
-             self.set_opacity(1.0)
--
-+            self.move_onscreen()
-             self.show()
-+
-             callback()
-         else:
--            self.set_opacity(0.0)
-+            self.set_opacity(0.01)
-+            self.show()
-+            self.move_onscreen()
- 
--            self.realize()
-             self.fader.fade_in(effect_time, callback)
- 
-     def transition_out(self, effect_time, callback):
-@@ -172,16 +175,20 @@
-         From here we also proceed to construct all overlay children and
-         activate our window suppressor.
-         """
--        self.size_to_screen()
-+        window = self.get_window()
-+        utils.override_user_time(window)
-+
-         self.setup_children()
- 
-         self.gdk_filter.start(self)
- 
--    def size_to_screen(self):
--        window = self.get_window()
--
--        utils.override_user_time(window)
--        window.move_resize(self.rect.x, self.rect.y, self.rect.width, self.rect.height)
-+    def move_onscreen(self):
-+        self.move(self.rect.x, self.rect.y)
-+        self.resize(self.rect.width, self.rect.height)
-+
-+    def move_offscreen(self):
-+        self.move(-self.rect.width, -self.rect.height)
-+        self.resize(self.rect.width, self.rect.height)
- 
-     def setup_children(self):
-         """
-Index: cinnamon-screensaver/src/util/fader.py
-===================================================================
---- cinnamon-screensaver.orig/src/util/fader.py	2017-05-20 11:24:14.778028730 +0200
-+++ cinnamon-screensaver/src/util/fader.py	2017-05-20 11:24:14.770028395 +0200
-@@ -12,6 +12,7 @@
-         self.widget = widget
-         self.finished_cb = None
- 
-+        self.starting_opacity = 0.0
-         self.current_opacity = 0.0
-         self.target_opacity = 0.0
- 
-@@ -33,12 +34,9 @@
- 
-     def _fade_in_idle(self, ms, finished_cb=None):
-         self.finished_cb = finished_cb
--        self.current_opacity = self.widget.get_opacity()
-+        self.current_opacity = self.starting_opacity = self.widget.get_opacity()
-         self.target_opacity = 1.0
- 
--        if not self.widget.get_visible():
--            self.widget.set_visible(True)
--
-         if self.widget.get_mapped():
-             self.start_time = self.widget.get_frame_clock().get_frame_time()
-             self.end_time = self.start_time + (ms * 1000) # ms to microsec
-@@ -52,7 +50,7 @@
- 
-     def _fade_out_idle(self, ms, finished_cb=None):
-         self.finished_cb = finished_cb
--        self.current_opacity = self.widget.get_opacity()
-+        self.current_opacity = self.starting_opacity = self.widget.get_opacity()
-         self.target_opacity = 0.0
- 
-         if self.widget.get_mapped():
-@@ -80,14 +78,13 @@
- 
-     def _fade_in_step(self, now):
-         if now < self.end_time:
--            t = (now - self.start_time) / (self.end_time - self.start_time)
-+            t = ((now - self.start_time) / (self.end_time - self.start_time) * self.target_opacity)
-         else:
--            t = 1.0
-+            t = self.target_opacity
- 
-         self.current_opacity = t
- 
-         self.widget.set_opacity(self.current_opacity)
--        self.widget.queue_draw()
- 
-     def _on_frame_tick_fade_out(self, widget, clock, data=None):
-         now = clock.get_frame_time()
-@@ -103,11 +100,10 @@
- 
-     def _fade_out_step(self, now):
-         if now < self.end_time:
--            t = 1.0 - ((now - self.start_time) / (self.end_time - self.start_time))
-+            t = self.starting_opacity - (((now - self.start_time) / (self.end_time - self.start_time)) * self.starting_opacity)
-         else:
--            t = 0.0
-+            t = self.target_opacity
- 
-         self.current_opacity = t
- 
-         self.widget.set_opacity(self.current_opacity)
--        self.widget.queue_draw()
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/improve-gtk3.20+.patch cinnamon-screensaver-3.2.13/debian/patches/improve-gtk3.20+.patch
--- cinnamon-screensaver-3.2.13/debian/patches/improve-gtk3.20+.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/improve-gtk3.20+.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,103 +0,0 @@
-From df610bfb3e0d4df1e2fefe3831af983733ad3e34 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Mon, 9 Jan 2017 22:46:46 -0500
-Subject: [PATCH] some theme fixes for gtk 3.20+
-
----
- src/cinnamon-screensaver-gtk3.20.css | 16 +++++++++++-----
- src/passwordEntry.py                 |  5 +++++
- 2 files changed, 16 insertions(+), 5 deletions(-)
-
-Index: cinnamon-screensaver/src/cinnamon-screensaver-gtk3.20.css
-===================================================================
---- cinnamon-screensaver.orig/src/cinnamon-screensaver-gtk3.20.css	2017-05-19 18:57:34.482400030 +0200
-+++ cinnamon-screensaver/src/cinnamon-screensaver-gtk3.20.css	2017-05-19 19:00:45.971539105 +0200
-@@ -44,12 +44,12 @@
- }
- 
- .csstage .auth-message {
--    font-size: 12px;
-+    font-size: 15px;
-     color: red;
- }
- 
- .csstage .caps-message {
--    font-size: 12px;
-+    font-size: 15px;
-     color: orange;
- }
- 
-@@ -64,7 +64,7 @@
- }
- 
- .csstage .passwordentry {
--    font-size: 11px;
-+    font-size: 15px;
-     box-shadow: none;
-     border-color: alpha(white, .2);
-     border-style: solid;
-@@ -72,9 +72,10 @@
-     background-image: none;
-     background-color: transparent;
-     border-width: 1px;
-+    box-shadow: none;
- }
- 
--.csstage .passwordentry.progressbar {
-+.csstage .passwordentry progress {
-     margin: 2px;
-     padding: 0;
-     border-radius: 0;
-@@ -82,12 +83,19 @@
-     border-color: alpha(@theme_selected_bg_color, .7);
- }
- 
--.csstage .passwordentry.progressbar:focus {
-+.csstage .passwordentry progress:focus {
-     background-color: transparent;
- }
- 
--.csstage .passwordentry.image.left {
--    padding: 0 10px 0 0;
-+.csstage .passwordentry image.left {
-+    padding-right: 10px;
-+}
-+
-+/* Use :backdrop for alt-text keyboard layout */
-+.csstage .passwordentry:backdrop {
-+    font-family: monospace;
-+    font-size: 14px;
-+    color: @theme_selected_bg_color;
- }
- 
- .csstage .transparentbutton {
-@@ -184,4 +192,4 @@
- .csstage GtkViewport {
-     background-color: transparent;
-     background-image: none;
--}
-\ No newline at end of file
-+}
-Index: cinnamon-screensaver/src/passwordEntry.py
-===================================================================
---- cinnamon-screensaver.orig/src/passwordEntry.py	2017-05-19 18:57:34.482400030 +0200
-+++ cinnamon-screensaver/src/passwordEntry.py	2017-05-19 18:57:34.478399923 +0200
-@@ -94,6 +94,9 @@
-                 name = name.upper()
- 
-             ctx = widget.get_style_context()
-+            ctx.save()
-+
-+            ctx.set_state(Gtk.StateFlags.BACKDROP)
-             font_size = ctx.get_property("font-size", Gtk.StateFlags.BACKDROP)
-             family = ctx.get_property("font-family", Gtk.StateFlags.BACKDROP)
-             cr.select_font_face(family[0], cairo.FONT_WEIGHT_NORMAL, cairo.FONT_SLANT_NORMAL)
-@@ -118,6 +121,8 @@
- 
-             cr.show_text(name)
- 
-+            ctx.restore()
-+
-         return False
- 
-     def start_progress(self):
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/reload-xkb-config.patch cinnamon-screensaver-3.2.13/debian/patches/reload-xkb-config.patch
--- cinnamon-screensaver-3.2.13/debian/patches/reload-xkb-config.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/reload-xkb-config.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,76 +0,0 @@
-From 55a26c219fe2e2dbb925730d7530001e8fa5b186 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Mon, 6 Mar 2017 16:55:01 -0500
-Subject: [PATCH] passwordEntry.py: Reload the keyboard layout if the xkb
- configuration changes.
-
----
- src/passwordEntry.py | 27 +++++++++++++++++++--------
- 1 file changed, 19 insertions(+), 8 deletions(-)
-
-Index: cinnamon-screensaver/src/passwordEntry.py
-===================================================================
---- cinnamon-screensaver.orig/src/passwordEntry.py	2017-05-20 11:50:44.933819061 +0200
-+++ cinnamon-screensaver/src/passwordEntry.py	2017-05-20 11:50:44.929818990 +0200
-@@ -33,6 +33,14 @@
-         self.current_flag_id = 0
- 
-         self.keyboard_controller = singletons.KeyboardLayoutController
-+        trackers.con_tracker_get().connect(self.keyboard_controller,
-+                                           "config-changed",
-+                                           self.on_config_changed)
-+
-+        trackers.con_tracker_get().connect(self.keyboard_controller,
-+                                           "layout-changed",
-+                                           self.on_layout_changed)
-+
-         self.set_lockscreen_keyboard_layout()
- 
-         trackers.con_tracker_get().connect(self,
-@@ -146,6 +154,9 @@
-         self.grab_focus()
-         self.update_layout_icon()
- 
-+    def on_config_changed(self, controller):
-+        self.set_lockscreen_keyboard_layout()
-+
-     def on_icon_pressed(self, entry, icon_pos, event):
-         if icon_pos == Gtk.EntryIconPosition.PRIMARY:
-             self.keyboard_controller.next_group()
-@@ -162,6 +173,14 @@
-         self.update_saved_group(self.keyboard_controller.get_current_group())
- 
-     def on_destroy(self, widget, data=None):
-+        trackers.con_tracker_get().disconnect(self.keyboard_controller,
-+                                              "config-changed",
-+                                              self.on_config_changed)
-+
-+        trackers.con_tracker_get().disconnect(self.keyboard_controller,
-+                                              "layout-changed",
-+                                              self.on_layout_changed)
-+
-         self.restore_original_layout()
- 
-     def set_lockscreen_keyboard_layout(self):
-@@ -195,10 +214,6 @@
-                                            "draw",
-                                            self.on_draw)
- 
--        trackers.con_tracker_get().connect(self.keyboard_controller,
--                                           "layout-changed",
--                                           self.on_layout_changed)
--
-     def update_saved_group(self, group):
-         settings.set_kb_group(group)
- 
-@@ -210,10 +225,6 @@
-         if not self.keyboard_controller.get_enabled():
-             return
- 
--        trackers.con_tracker_get().disconnect(self.keyboard_controller,
--                                              "layout-changed",
--                                              self.on_layout_changed)
--
-         self.keyboard_controller.set_current_group(self.original_group)
- 
-     def grab_focus(self):
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/series cinnamon-screensaver-3.2.13/debian/patches/series
--- cinnamon-screensaver-3.2.13/debian/patches/series	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/series	2017-04-02 13:24:49.000000000 +0200
@@ -2,11 +2,3 @@
 move_pamhelper_to_libexec.patch
 upstream_fix-textselection.patch
 upstream_fix-suspend-lock.patch
-survive-syntax-error.patch
-survive-download-error.patch
-improve-gtk3.20+.patch
-xscreensaver-processes.patch
-improve-fades.patch
-fixup-screen-changed-callaback.patch
-handle-lock-order.patch
-reload-xkb-config.patch
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/survive-download-error.patch cinnamon-screensaver-3.2.13/debian/patches/survive-download-error.patch
--- cinnamon-screensaver-3.2.13/debian/patches/survive-download-error.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/survive-download-error.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,44 +0,0 @@
-From 935cde46aeed5b4865a0494017f7415f46da4a09 Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Mon, 9 Jan 2017 15:13:41 -0500
-Subject: [PATCH] framedImage.py:  Just silently fail if a downloaded image
- fails to be loaded into a pixbuf.
-
-see: https://bugzilla.redhat.com/show_bug.cgi?id=1399731
----
- src/widgets/framedImage.py | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
-Index: cinnamon-screensaver/src/widgets/framedImage.py
-===================================================================
---- cinnamon-screensaver.orig/src/widgets/framedImage.py	2017-05-19 18:52:08.461796119 +0200
-+++ cinnamon-screensaver/src/widgets/framedImage.py	2017-05-19 18:52:08.457796015 +0200
-@@ -67,8 +67,11 @@
-         self.set_size_request(-1, self.get_theme_height())
- 
-         if self.path:
--            pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.path, -1, self.get_theme_height(), True)
--            self.set_from_pixbuf(pixbuf)
-+            try:
-+                pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.path, -1, self.get_theme_height(), True)
-+                self.set_from_pixbuf(pixbuf)
-+            except:
-+                self.clear_image()
-             self.emit("pixbuf-changed", pixbuf)
- 
-         elif self.file:
-@@ -100,8 +103,11 @@
-     def on_file_written(self, file, result, data=None):
-         try:
-             if file.replace_contents_finish(result):
--                pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(file.get_path(), -1, self.get_theme_height(), True)
--                self.set_from_pixbuf(pixbuf)
-+                try:
-+                    pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(file.get_path(), -1, self.get_theme_height(), True)
-+                    self.set_from_pixbuf(pixbuf)
-+                except:
-+                    self.clear_image()
-                 self.emit("pixbuf-changed", pixbuf)
-         except GLib.Error:
-             pass
-\ No newline at end of file
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/survive-syntax-error.patch cinnamon-screensaver-3.2.13/debian/patches/survive-syntax-error.patch
--- cinnamon-screensaver-3.2.13/debian/patches/survive-syntax-error.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/survive-syntax-error.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-From 0063d84028ba393ee2ab0b403047699c50b5b9fa Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Mon, 9 Jan 2017 15:06:16 -0500
-Subject: [PATCH] mediaPlayerWatcher.py: catch SyntaxError exception when
- evaluating PlaybackStatus property.
-
-Fixes #196
----
- src/dbusdepot/mediaPlayerWatcher.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: cinnamon-screensaver/src/dbusdepot/mediaPlayerWatcher.py
-===================================================================
---- cinnamon-screensaver.orig/src/dbusdepot/mediaPlayerWatcher.py	2017-05-19 18:49:43.650039979 +0200
-+++ cinnamon-screensaver/src/dbusdepot/mediaPlayerWatcher.py	2017-05-19 18:49:43.646039876 +0200
-@@ -56,7 +56,7 @@
- 
-             try:
-                 status = PlaybackStatus(eval("PlaybackStatus." + str_prop))
--            except (ValueError, TypeError):
-+            except (ValueError, TypeError, SyntaxError):
-                 pass
- 
-         return status
diff -Nru cinnamon-screensaver-3.2.13/debian/patches/xscreensaver-processes.patch cinnamon-screensaver-3.2.13/debian/patches/xscreensaver-processes.patch
--- cinnamon-screensaver-3.2.13/debian/patches/xscreensaver-processes.patch	2017-05-20 12:55:14.000000000 +0200
+++ cinnamon-screensaver-3.2.13/debian/patches/xscreensaver-processes.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,67 +0,0 @@
-From cfa1f1aa45908f4e92aa2572a0cf6d563a1938ad Mon Sep 17 00:00:00 2001
-From: Michael Webster <miketwebs...@gmail.com>
-Date: Fri, 13 Jan 2017 18:20:19 -0500
-Subject: [PATCH] xscreensaver plugin: Use GSubprocess instead of g_spawn_async
- for hacks.
-
----
- screensavers/xscreensa...@cinnamon.org/main | 24 ++++++++++++++++++------
- 1 file changed, 18 insertions(+), 6 deletions(-)
-
-Index: cinnamon-screensaver/screensavers/xscreensa...@cinnamon.org/main
-===================================================================
---- cinnamon-screensaver.orig/screensavers/xscreensa...@cinnamon.org/main	2017-05-20 11:23:27.035953879 +0200
-+++ cinnamon-screensaver/screensavers/xscreensa...@cinnamon.org/main	2017-05-20 11:23:27.027953518 +0200
-@@ -9,6 +9,7 @@
- import argparse
- import syslog
- import signal
-+import os
- 
- signal.signal(signal.SIGINT, signal.SIG_DFL)
- 
-@@ -22,6 +23,8 @@
- 
-         GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGTERM, self.on_terminate)
- 
-+        self.proc = None
-+
-         if self.args.standalone:
-             self.plug = Gtk.Window()
-         else:
-@@ -61,12 +64,15 @@
-         for direc in directories:
-             try:
-                 path = shlex.split(direc + hack)
--                path.append("-window-id")
--                path.append(str(self.xid))
--                GLib.spawn_async(path)
--                success = True
--                break;
--            except:
-+                if os.path.exists(path[0]):
-+                    path.append("-window-id")
-+                    path.append(str(self.xid))
-+                    try:
-+                        self.proc = Gio.Subprocess.new(path, Gio.SubprocessFlags.NONE)
-+                        success = True
-+                    except GLib.Error as e:
-+                        print("Error spawning screensaver hack: %s" % e.message)
-+            except Exception as e:
-                 pass
- 
-         if not success:
-@@ -81,7 +87,13 @@
-             label.show()
-             self.plug.add(label)
- 
-+    def kill_plugin(self):
-+        if self.proc:
-+            self.proc.send_signal(signal.SIGTERM)
-+            self.proc = None
-+
-     def on_terminate(self, data=None):
-+        self.kill_plugin()
-         self.plug.destroy()
-         Gtk.main_quit()
- 
From cfa1f1aa45908f4e92aa2572a0cf6d563a1938ad Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Fri, 13 Jan 2017 18:20:19 -0500
Subject: [PATCH] xscreensaver plugin: Use GSubprocess instead of g_spawn_async
 for hacks.

---
 screensavers/xscreensa...@cinnamon.org/main | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

Index: cinnamon-screensaver/screensavers/xscreensa...@cinnamon.org/main
===================================================================
--- cinnamon-screensaver.orig/screensavers/xscreensa...@cinnamon.org/main	2017-05-20 11:23:27.035953879 +0200
+++ cinnamon-screensaver/screensavers/xscreensa...@cinnamon.org/main	2017-05-20 11:23:27.027953518 +0200
@@ -9,6 +9,7 @@
 import argparse
 import syslog
 import signal
+import os
 
 signal.signal(signal.SIGINT, signal.SIG_DFL)
 
@@ -22,6 +23,8 @@
 
         GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGTERM, self.on_terminate)
 
+        self.proc = None
+
         if self.args.standalone:
             self.plug = Gtk.Window()
         else:
@@ -61,12 +64,15 @@
         for direc in directories:
             try:
                 path = shlex.split(direc + hack)
-                path.append("-window-id")
-                path.append(str(self.xid))
-                GLib.spawn_async(path)
-                success = True
-                break;
-            except:
+                if os.path.exists(path[0]):
+                    path.append("-window-id")
+                    path.append(str(self.xid))
+                    try:
+                        self.proc = Gio.Subprocess.new(path, Gio.SubprocessFlags.NONE)
+                        success = True
+                    except GLib.Error as e:
+                        print("Error spawning screensaver hack: %s" % e.message)
+            except Exception as e:
                 pass
 
         if not success:
@@ -81,7 +87,13 @@
             label.show()
             self.plug.add(label)
 
+    def kill_plugin(self):
+        if self.proc:
+            self.proc.send_signal(signal.SIGTERM)
+            self.proc = None
+
     def on_terminate(self, data=None):
+        self.kill_plugin()
         self.plug.destroy()
         Gtk.main_quit()
 
From 0063d84028ba393ee2ab0b403047699c50b5b9fa Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Mon, 9 Jan 2017 15:06:16 -0500
Subject: [PATCH] mediaPlayerWatcher.py: catch SyntaxError exception when
 evaluating PlaybackStatus property.

Fixes #196
---
 src/dbusdepot/mediaPlayerWatcher.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: cinnamon-screensaver/src/dbusdepot/mediaPlayerWatcher.py
===================================================================
--- cinnamon-screensaver.orig/src/dbusdepot/mediaPlayerWatcher.py	2017-05-19 18:49:43.650039979 +0200
+++ cinnamon-screensaver/src/dbusdepot/mediaPlayerWatcher.py	2017-05-19 18:49:43.646039876 +0200
@@ -56,7 +56,7 @@
 
             try:
                 status = PlaybackStatus(eval("PlaybackStatus." + str_prop))
-            except (ValueError, TypeError):
+            except (ValueError, TypeError, SyntaxError):
                 pass
 
         return status
From 935cde46aeed5b4865a0494017f7415f46da4a09 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Mon, 9 Jan 2017 15:13:41 -0500
Subject: [PATCH] framedImage.py:  Just silently fail if a downloaded image
 fails to be loaded into a pixbuf.

see: https://bugzilla.redhat.com/show_bug.cgi?id=1399731
---
 src/widgets/framedImage.py | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Index: cinnamon-screensaver/src/widgets/framedImage.py
===================================================================
--- cinnamon-screensaver.orig/src/widgets/framedImage.py	2017-05-19 18:52:08.461796119 +0200
+++ cinnamon-screensaver/src/widgets/framedImage.py	2017-05-19 18:52:08.457796015 +0200
@@ -67,8 +67,11 @@
         self.set_size_request(-1, self.get_theme_height())
 
         if self.path:
-            pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.path, -1, self.get_theme_height(), True)
-            self.set_from_pixbuf(pixbuf)
+            try:
+                pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.path, -1, self.get_theme_height(), True)
+                self.set_from_pixbuf(pixbuf)
+            except:
+                self.clear_image()
             self.emit("pixbuf-changed", pixbuf)
 
         elif self.file:
@@ -100,8 +103,11 @@
     def on_file_written(self, file, result, data=None):
         try:
             if file.replace_contents_finish(result):
-                pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(file.get_path(), -1, self.get_theme_height(), True)
-                self.set_from_pixbuf(pixbuf)
+                try:
+                    pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(file.get_path(), -1, self.get_theme_height(), True)
+                    self.set_from_pixbuf(pixbuf)
+                except:
+                    self.clear_image()
                 self.emit("pixbuf-changed", pixbuf)
         except GLib.Error:
             pass
\ No newline at end of file
From 55a26c219fe2e2dbb925730d7530001e8fa5b186 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Mon, 6 Mar 2017 16:55:01 -0500
Subject: [PATCH] passwordEntry.py: Reload the keyboard layout if the xkb
 configuration changes.

---
 src/passwordEntry.py | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

Index: cinnamon-screensaver/src/passwordEntry.py
===================================================================
--- cinnamon-screensaver.orig/src/passwordEntry.py	2017-05-20 11:50:44.933819061 +0200
+++ cinnamon-screensaver/src/passwordEntry.py	2017-05-20 11:50:44.929818990 +0200
@@ -33,6 +33,14 @@
         self.current_flag_id = 0
 
         self.keyboard_controller = singletons.KeyboardLayoutController
+        trackers.con_tracker_get().connect(self.keyboard_controller,
+                                           "config-changed",
+                                           self.on_config_changed)
+
+        trackers.con_tracker_get().connect(self.keyboard_controller,
+                                           "layout-changed",
+                                           self.on_layout_changed)
+
         self.set_lockscreen_keyboard_layout()
 
         trackers.con_tracker_get().connect(self,
@@ -146,6 +154,9 @@
         self.grab_focus()
         self.update_layout_icon()
 
+    def on_config_changed(self, controller):
+        self.set_lockscreen_keyboard_layout()
+
     def on_icon_pressed(self, entry, icon_pos, event):
         if icon_pos == Gtk.EntryIconPosition.PRIMARY:
             self.keyboard_controller.next_group()
@@ -162,6 +173,14 @@
         self.update_saved_group(self.keyboard_controller.get_current_group())
 
     def on_destroy(self, widget, data=None):
+        trackers.con_tracker_get().disconnect(self.keyboard_controller,
+                                              "config-changed",
+                                              self.on_config_changed)
+
+        trackers.con_tracker_get().disconnect(self.keyboard_controller,
+                                              "layout-changed",
+                                              self.on_layout_changed)
+
         self.restore_original_layout()
 
     def set_lockscreen_keyboard_layout(self):
@@ -195,10 +214,6 @@
                                            "draw",
                                            self.on_draw)
 
-        trackers.con_tracker_get().connect(self.keyboard_controller,
-                                           "layout-changed",
-                                           self.on_layout_changed)
-
     def update_saved_group(self, group):
         settings.set_kb_group(group)
 
@@ -210,10 +225,6 @@
         if not self.keyboard_controller.get_enabled():
             return
 
-        trackers.con_tracker_get().disconnect(self.keyboard_controller,
-                                              "layout-changed",
-                                              self.on_layout_changed)
-
         self.keyboard_controller.set_current_group(self.original_group)
 
     def grab_focus(self):
From df610bfb3e0d4df1e2fefe3831af983733ad3e34 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Mon, 9 Jan 2017 22:46:46 -0500
Subject: [PATCH] some theme fixes for gtk 3.20+

---
 src/cinnamon-screensaver-gtk3.20.css | 16 +++++++++++-----
 src/passwordEntry.py                 |  5 +++++
 2 files changed, 16 insertions(+), 5 deletions(-)

Index: cinnamon-screensaver/src/cinnamon-screensaver-gtk3.20.css
===================================================================
--- cinnamon-screensaver.orig/src/cinnamon-screensaver-gtk3.20.css	2017-05-19 18:57:34.482400030 +0200
+++ cinnamon-screensaver/src/cinnamon-screensaver-gtk3.20.css	2017-05-19 19:00:45.971539105 +0200
@@ -44,12 +44,12 @@
 }
 
 .csstage .auth-message {
-    font-size: 12px;
+    font-size: 15px;
     color: red;
 }
 
 .csstage .caps-message {
-    font-size: 12px;
+    font-size: 15px;
     color: orange;
 }
 
@@ -64,7 +64,7 @@
 }
 
 .csstage .passwordentry {
-    font-size: 11px;
+    font-size: 15px;
     box-shadow: none;
     border-color: alpha(white, .2);
     border-style: solid;
@@ -72,9 +72,10 @@
     background-image: none;
     background-color: transparent;
     border-width: 1px;
+    box-shadow: none;
 }
 
-.csstage .passwordentry.progressbar {
+.csstage .passwordentry progress {
     margin: 2px;
     padding: 0;
     border-radius: 0;
@@ -82,12 +83,19 @@
     border-color: alpha(@theme_selected_bg_color, .7);
 }
 
-.csstage .passwordentry.progressbar:focus {
+.csstage .passwordentry progress:focus {
     background-color: transparent;
 }
 
-.csstage .passwordentry.image.left {
-    padding: 0 10px 0 0;
+.csstage .passwordentry image.left {
+    padding-right: 10px;
+}
+
+/* Use :backdrop for alt-text keyboard layout */
+.csstage .passwordentry:backdrop {
+    font-family: monospace;
+    font-size: 14px;
+    color: @theme_selected_bg_color;
 }
 
 .csstage .transparentbutton {
@@ -184,4 +192,4 @@
 .csstage GtkViewport {
     background-color: transparent;
     background-image: none;
-}
\ No newline at end of file
+}
Index: cinnamon-screensaver/src/passwordEntry.py
===================================================================
--- cinnamon-screensaver.orig/src/passwordEntry.py	2017-05-19 18:57:34.482400030 +0200
+++ cinnamon-screensaver/src/passwordEntry.py	2017-05-19 18:57:34.478399923 +0200
@@ -94,6 +94,9 @@
                 name = name.upper()
 
             ctx = widget.get_style_context()
+            ctx.save()
+
+            ctx.set_state(Gtk.StateFlags.BACKDROP)
             font_size = ctx.get_property("font-size", Gtk.StateFlags.BACKDROP)
             family = ctx.get_property("font-family", Gtk.StateFlags.BACKDROP)
             cr.select_font_face(family[0], cairo.FONT_WEIGHT_NORMAL, cairo.FONT_SLANT_NORMAL)
@@ -118,6 +121,8 @@
 
             cr.show_text(name)
 
+            ctx.restore()
+
         return False
 
     def start_progress(self):
From 2e73a9b44eb82b384bd698253a9e930bbb77aa50 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Thu, 26 Jan 2017 23:00:27 -0500
Subject: [PATCH] stage/fader: Realize the stage offscreen, then reposition it
 before starting our fade in.  This prevents the initial flash sometimes seen
 when the idle fade kicks in.

Also, fix the fade-out when interrupting an idle fade.  It was starting
the fade-out at 1.0 opacity, rather than the widgets current opacity, so
deactivating a partially faded screensaver would briefly show it fully
visible before fading out again.
---
 src/stage.py      | 23 +++++++++++++++--------
 src/util/fader.py | 18 +++++++-----------
 2 files changed, 22 insertions(+), 19 deletions(-)

Index: cinnamon-screensaver/src/stage.py
===================================================================
--- cinnamon-screensaver.orig/src/stage.py	2017-05-20 11:24:14.778028730 +0200
+++ cinnamon-screensaver/src/stage.py	2017-05-20 11:24:14.770028395 +0200
@@ -79,6 +79,7 @@
         self.override_background_color (Gtk.StateFlags.NORMAL, c);
 
         self.update_geometry()
+        self.move_offscreen()
 
         self.overlay = Gtk.Overlay()
         self.fader = Fader(self)
@@ -136,13 +137,15 @@
         """
         if effect_time == 0:
             self.set_opacity(1.0)
-
+            self.move_onscreen()
             self.show()
+
             callback()
         else:
-            self.set_opacity(0.0)
+            self.set_opacity(0.01)
+            self.show()
+            self.move_onscreen()
 
-            self.realize()
             self.fader.fade_in(effect_time, callback)
 
     def transition_out(self, effect_time, callback):
@@ -172,16 +175,20 @@
         From here we also proceed to construct all overlay children and
         activate our window suppressor.
         """
-        self.size_to_screen()
+        window = self.get_window()
+        utils.override_user_time(window)
+
         self.setup_children()
 
         self.gdk_filter.start(self)
 
-    def size_to_screen(self):
-        window = self.get_window()
-
-        utils.override_user_time(window)
-        window.move_resize(self.rect.x, self.rect.y, self.rect.width, self.rect.height)
+    def move_onscreen(self):
+        self.move(self.rect.x, self.rect.y)
+        self.resize(self.rect.width, self.rect.height)
+
+    def move_offscreen(self):
+        self.move(-self.rect.width, -self.rect.height)
+        self.resize(self.rect.width, self.rect.height)
 
     def setup_children(self):
         """
Index: cinnamon-screensaver/src/util/fader.py
===================================================================
--- cinnamon-screensaver.orig/src/util/fader.py	2017-05-20 11:24:14.778028730 +0200
+++ cinnamon-screensaver/src/util/fader.py	2017-05-20 11:24:14.770028395 +0200
@@ -12,6 +12,7 @@
         self.widget = widget
         self.finished_cb = None
 
+        self.starting_opacity = 0.0
         self.current_opacity = 0.0
         self.target_opacity = 0.0
 
@@ -33,12 +34,9 @@
 
     def _fade_in_idle(self, ms, finished_cb=None):
         self.finished_cb = finished_cb
-        self.current_opacity = self.widget.get_opacity()
+        self.current_opacity = self.starting_opacity = self.widget.get_opacity()
         self.target_opacity = 1.0
 
-        if not self.widget.get_visible():
-            self.widget.set_visible(True)
-
         if self.widget.get_mapped():
             self.start_time = self.widget.get_frame_clock().get_frame_time()
             self.end_time = self.start_time + (ms * 1000) # ms to microsec
@@ -52,7 +50,7 @@
 
     def _fade_out_idle(self, ms, finished_cb=None):
         self.finished_cb = finished_cb
-        self.current_opacity = self.widget.get_opacity()
+        self.current_opacity = self.starting_opacity = self.widget.get_opacity()
         self.target_opacity = 0.0
 
         if self.widget.get_mapped():
@@ -80,14 +78,13 @@
 
     def _fade_in_step(self, now):
         if now < self.end_time:
-            t = (now - self.start_time) / (self.end_time - self.start_time)
+            t = ((now - self.start_time) / (self.end_time - self.start_time) * self.target_opacity)
         else:
-            t = 1.0
+            t = self.target_opacity
 
         self.current_opacity = t
 
         self.widget.set_opacity(self.current_opacity)
-        self.widget.queue_draw()
 
     def _on_frame_tick_fade_out(self, widget, clock, data=None):
         now = clock.get_frame_time()
@@ -103,11 +100,10 @@
 
     def _fade_out_step(self, now):
         if now < self.end_time:
-            t = 1.0 - ((now - self.start_time) / (self.end_time - self.start_time))
+            t = self.starting_opacity - (((now - self.start_time) / (self.end_time - self.start_time)) * self.starting_opacity)
         else:
-            t = 0.0
+            t = self.target_opacity
 
         self.current_opacity = t
 
         self.widget.set_opacity(self.current_opacity)
-        self.widget.queue_draw()
From 5561f3c4c1373a5c1ca55d91c722d19ce8d4abd7 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Mon, 23 Jan 2017 19:36:31 -0500
Subject: [PATCH] service.py: Add the invocation to the queue prior to calling
 on the manager to lock.  The active signal could be sent back before it gets
 added otherwise, causing us to leave the calling command hanging.

---
 src/service.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: cinnamon-screensaver/src/service.py
===================================================================
--- cinnamon-screensaver.orig/src/service.py	2017-05-20 11:49:28.596448273 +0200
+++ cinnamon-screensaver/src/service.py	2017-05-20 11:49:28.588448126 +0200
@@ -92,10 +92,10 @@
 
 # Interface handlers
     def handle_lock(self, iface, inv, msg):
-        self.manager.lock(msg)
-
         self.lock_queue.append(inv)
 
+        self.manager.lock(msg)
+
         return True
 
     def handle_quit(self, iface, inv):
From 39da3f05ed89358bb6c0a01efc5e1093d87e7776 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebs...@gmail.com>
Date: Thu, 9 Mar 2017 11:56:55 -0500
Subject: [PATCH] stage.py: fix screen changed callback

---
 src/stage.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: cinnamon-screensaver/src/stage.py
===================================================================
--- cinnamon-screensaver.orig/src/stage.py	2017-05-20 11:36:01.925262877 +0200
+++ cinnamon-screensaver/src/stage.py	2017-05-20 11:36:01.921262808 +0200
@@ -118,7 +118,7 @@
 
     def on_screen_changed(self, screen, data=None):
         self.update_geometry()
-        self.size_to_screen()
+        self.move_onscreen()
 
         for monitor in self.monitors:
             monitor.update_geometry()

Reply via email to