Hello community,
here is the log from the commit of package cinnamon-screensaver for
openSUSE:Factory checked in at 2018-10-18 15:35:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cinnamon-screensaver (Old)
and /work/SRC/openSUSE:Factory/.cinnamon-screensaver.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cinnamon-screensaver"
Thu Oct 18 15:35:56 2018 rev:16 rq:642666 version:3.8.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/cinnamon-screensaver/cinnamon-screensaver.changes
2018-07-06 10:43:43.243131553 +0200
+++
/work/SRC/openSUSE:Factory/.cinnamon-screensaver.new/cinnamon-screensaver.changes
2018-10-18 15:36:50.886262910 +0200
@@ -1,0 +2,15 @@
+Wed Oct 17 14:17:51 UTC 2018 - [email protected]
+
+- Update to version 3.8.3:
+ * CsScreen/stage: Fix coverage changes when plugging in monitors
+ that may affect scale factor.
+ * power widget: Ensure widget state is correct when becoming
+ Active, instead of only updating at the next power state change.
+ * monitorView: Do not use a transition for the view stack.
+ * fader: Always run the callback, even if the fade is halted due
+ to the widget not being mapped.
+ * stage/screen: During any screen change, resize the stage
+ backdrop immediately, to try to prevent incomplete coverage.
+ * Fall back to os.path.expanduser to find the Home directory.
+
+-------------------------------------------------------------------
Old:
----
cinnamon-screensaver-3.8.2.tar.gz
New:
----
cinnamon-screensaver-3.8.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cinnamon-screensaver.spec ++++++
--- /var/tmp/diff_new_pack.npbYMA/_old 2018-10-18 15:37:00.994251330 +0200
+++ /var/tmp/diff_new_pack.npbYMA/_new 2018-10-18 15:37:00.998251324 +0200
@@ -12,12 +12,12 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: cinnamon-screensaver
-Version: 3.8.2
+Version: 3.8.3
Release: 0
Summary: Cinnamon screensaver and locker
License: GPL-2.0-or-later
++++++ cinnamon-screensaver-3.8.2.tar.gz -> cinnamon-screensaver-3.8.3.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/configure.ac
new/cinnamon-screensaver-3.8.3/configure.ac
--- old/cinnamon-screensaver-3.8.2/configure.ac 2018-06-08 12:38:11.000000000
+0200
+++ new/cinnamon-screensaver-3.8.3/configure.ac 2018-10-16 17:35:37.000000000
+0200
@@ -2,7 +2,7 @@
AC_PREREQ(2.60)
AC_INIT([cinnamon-screensaver],
- [3.8.2],
+ [3.8.3],
[https://github.com/linuxmint/cinnamon-screensaver/issues])
PKG_PROG_PKG_CONFIG([0.26])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/debian/changelog
new/cinnamon-screensaver-3.8.3/debian/changelog
--- old/cinnamon-screensaver-3.8.2/debian/changelog 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/debian/changelog 2018-10-16
17:35:37.000000000 +0200
@@ -1,3 +1,17 @@
+cinnamon-screensaver (3.8.3) tara; urgency=medium
+
+ [ Michael Webster ]
+ * CsScreen/stage: Fix coverage changes when plugging in monitors that may
affect scale factor.
+ * power widget: Ensure widget state is correct when becoming Active, instead
of only updating at the next power state change.
+ * monitorView: don't use a transition for the view stack.
+ * fader: Always run the callback, even if the fade is halted due to the
widget not being mapped.
+ * stage/screen: During any screen change, resize the stage backdrop
immediately, to try to prevent incomplete coverage.
+
+ [ Andrew Geng ]
+ * Fall back to os.path.expanduser to find home dir. (#284)
+
+ -- Clement Lefebvre <[email protected]> Tue, 16 Oct 2018 16:35:16 +0100
+
cinnamon-screensaver (3.8.2) tara; urgency=medium
[ Michael Webster ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cinnamon-screensaver-3.8.2/libcscreensaver/cs-screen-x11.c
new/cinnamon-screensaver-3.8.3/libcscreensaver/cs-screen-x11.c
--- old/cinnamon-screensaver-3.8.2/libcscreensaver/cs-screen-x11.c
2018-06-08 12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/libcscreensaver/cs-screen-x11.c
2018-10-16 17:35:37.000000000 +0200
@@ -26,8 +26,8 @@
#endif
enum {
- MONITORS_CHANGED,
- SCREEN_CHANGED,
+ SCREEN_MONITORS_CHANGED,
+ SCREEN_SIZE_CHANGED,
LAST_SIGNAL
};
@@ -378,15 +378,19 @@
screen = CS_SCREEN (user_data);
+ reload_screen_info (screen);
+ g_signal_emit (screen, signals[SCREEN_SIZE_CHANGED], 0);
+
gdk_flush ();
- old_monitor_infos = screen->monitor_infos;
+ DEBUG ("CsScreen received 'monitors-changed' signal from GdkScreen\n");
+ old_monitor_infos = screen->monitor_infos;
reload_monitor_infos (screen);
g_free (old_monitor_infos);
- g_signal_emit (screen, signals[MONITORS_CHANGED], 0);
+ g_signal_emit (screen, signals[SCREEN_MONITORS_CHANGED], 0);
}
static void
@@ -396,11 +400,10 @@
screen = CS_SCREEN (user_data);
- gdk_flush ();
+ DEBUG ("CsScreen received 'size-changed' signal from GdkScreen\n");
reload_screen_info (screen);
-
- g_signal_emit (screen, signals[SCREEN_CHANGED], 0);
+ g_signal_emit (screen, signals[SCREEN_SIZE_CHANGED], 0);
}
static void
@@ -470,14 +473,14 @@
object_class->finalize = cs_screen_finalize;
object_class->dispose = cs_screen_dispose;
- signals[MONITORS_CHANGED] = g_signal_new ("monitors-changed",
+ signals[SCREEN_MONITORS_CHANGED] = g_signal_new ("monitors-changed",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
- signals[SCREEN_CHANGED] = g_signal_new ("size-changed",
+ signals[SCREEN_SIZE_CHANGED] = g_signal_new ("size-changed",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/constants.py
new/cinnamon-screensaver-3.8.3/src/constants.py
--- old/cinnamon-screensaver-3.8.2/src/constants.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/constants.py 2018-10-16
17:35:37.000000000 +0200
@@ -18,6 +18,10 @@
# after an idle-activation is canceled.
GRAB_RELEASE_TIMEOUT = 1 * 1000
+# Used by powerWidget - the level a battery must be below before the battery
icon widget in the infopanel
+# will show even when asleep (active but not awake.)
+BATTERY_CRITICAL_PERCENT = 20
+
# Cinnamon Screensaver
SS_SERVICE = "org.cinnamon.ScreenSaver"
SS_PATH = "/org/cinnamon/ScreenSaver"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cinnamon-screensaver-3.8.2/src/dbusdepot/accountsServiceClient.py
new/cinnamon-screensaver-3.8.3/src/dbusdepot/accountsServiceClient.py
--- old/cinnamon-screensaver-3.8.2/src/dbusdepot/accountsServiceClient.py
2018-06-08 12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/dbusdepot/accountsServiceClient.py
2018-10-16 17:35:37.000000000 +0200
@@ -35,8 +35,11 @@
def get_face_path(self):
face_path = None
+ home_path = self.service.get_home_dir()
+ if home_path is None:
+ home_path = os.path.expanduser('~')
- for path in [os.path.join(self.service.get_home_dir(), ".face"),
+ for path in [os.path.join(home_path, ".face"),
self.service.get_icon_file()]:
if os.path.exists(path):
face_path = path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/infoPanel.py
new/cinnamon-screensaver-3.8.3/src/infoPanel.py
--- old/cinnamon-screensaver-3.8.2/src/infoPanel.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/infoPanel.py 2018-10-16
17:35:37.000000000 +0200
@@ -46,6 +46,7 @@
self.power_widget = PowerWidget()
self.power_widget.set_no_show_all(True)
+
self.power_widget.connect("power-state-changed",self.on_power_state_changed)
hbox.pack_start(self.power_widget, True, True, 2)
self.show_all()
@@ -53,6 +54,9 @@
def on_notification_received(self, obj):
self.update_revealed()
+ def on_power_state_changed(self, obj):
+ self.update_revealed()
+
def update_revealed(self):
"""
Determines whether or not to show the panel, depending on:
@@ -66,20 +70,22 @@
return
do_reveal = False
+ battery_critical = False
self.show_power = self.power_widget.should_show()
+ if self.show_power:
+ battery_critical = self.power_widget.battery_critical
+
self.show_notifications = self.notification_widget.should_show()
# Determine if we want to show all the time or only when status.Awake
-
if status.Awake:
if self.show_power or self.show_notifications:
do_reveal = True
- elif status.Active and not status.PluginRunning:
- if self.show_notifications:
+ elif not status.PluginRunning:
+ if self.show_notifications or battery_critical:
do_reveal = True
-
if do_reveal:
self.power_widget.set_visible(self.show_power)
self.notification_widget.set_visible(self.show_notifications)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/manager.py
new/cinnamon-screensaver-3.8.3/src/manager.py
--- old/cinnamon-screensaver-3.8.2/src/manager.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/manager.py 2018-10-16
17:35:37.000000000 +0200
@@ -262,7 +262,10 @@
if self.stage == None:
return
- self.stage.refresh()
+ if status.Debug:
+ print("manager: queuing stage refresh (login manager reported
active?")
+
+ self.stage.queue_refresh_stage()
def start_timers(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/monitorView.py
new/cinnamon-screensaver-3.8.3/src/monitorView.py
--- old/cinnamon-screensaver-3.8.2/src/monitorView.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/monitorView.py 2018-10-16
17:35:37.000000000 +0200
@@ -108,8 +108,8 @@
self.update_geometry()
self.stack = Gtk.Stack()
- self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
- self.stack.set_transition_duration(250)
+ self.stack.set_transition_type(Gtk.StackTransitionType.NONE)
+ self.stack.set_transition_duration(0)
self.add(self.stack)
self.wallpaper_stack = WallpaperStack()
@@ -183,9 +183,7 @@
return
self.stack.set_visible_child_name("plugin")
- trackers.con_tracker_get().connect(self.stack,
- "notify::transition-running",
- self.notify_transition_callback)
+ self.emit("current-view-change-complete")
def show_wallpaper(self):
"""
@@ -201,25 +199,7 @@
return
self.stack.set_visible_child_name("wallpaper")
- trackers.con_tracker_get().connect(self.stack,
- "notify::transition-running",
- self.notify_transition_callback)
-
- def notify_transition_callback(self, stack, pspec, data=None):
- """
- GtkStacks don't have any signal for telling you 'we're done
transitioning'
- the closest we can come to it is for every animation tick they call a
notify
- on the 'transition-running' property. We wait until it returns False
- to emit our own transition completed signal. This only works because
our
- stack here *does* use a duration and transition type that isn't "None".
- """
- if stack.get_transition_running():
- return
- else:
- trackers.con_tracker_get().disconnect(self.stack,
- "notify::transition-running",
-
self.notify_transition_callback)
- self.emit("current-view-change-complete")
+ self.emit("current-view-change-complete")
def update_view(self, widget=None, data=None):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/stage.py
new/cinnamon-screensaver-3.8.3/src/stage.py
--- old/cinnamon-screensaver-3.8.2/src/stage.py 2018-06-08 12:38:11.000000000
+0200
+++ new/cinnamon-screensaver-3.8.3/src/stage.py 2018-10-16 17:35:37.000000000
+0200
@@ -67,6 +67,8 @@
self.audio_panel = None
self.info_panel = None
+ self.stage_refresh_id = 0
+
self.floaters = []
self.event_handler = EventHandler(manager)
@@ -144,32 +146,63 @@
print("Problem updating monitor views views: %s" % str(e))
def on_screen_size_changed(self, screen, data=None):
- if status.Debug:
- print("Stage: Received screen changed signal, updating backdrop")
+ """
+ The screen changing size should be acted upon immediately, to ensure
coverage.
+ Wallpapers and plugins are secondary.
+ """
- Gdk.flush()
+ if status.Debug:
+ print("Stage: Received screen size-changed signal, refreshing
stage")
self.update_geometry()
self.move_onscreen()
-
self.overlay.queue_resize()
+
def on_monitors_changed(self, screen, data=None):
+ """
+ Updating monitors also will trigger an immediate stage coverage update
(same
+ as on_screen_size_changed), and follow up at idle with actual monitor
view
+ refreshes (wallpapers/plugins.)
+ """
if status.Debug:
- print("Stage: Received screen monitors-changed signal, updating
monitor views")
+ print("Stage: Received screen monitors-changed signal, refreshing
stage")
+
+ self.update_geometry()
+ self.move_onscreen()
+ self.overlay.queue_resize()
Gdk.flush()
- self.update_monitors()
- self.overlay.queue_resize()
+ self.queue_refresh_stage()
def on_grab_broken_event(self, widget, event, data=None):
GObject.idle_add(self.manager.grab_stage)
return False
- def refresh(self):
+ def queue_refresh_stage(self):
+ """
+ Queues a complete refresh of the stage, resizing the screen if
necessary,
+ reconstructing the individual monitor objects, etc...
+ """
+ if self.stage_refresh_id > 0:
+ GObject.source_remove(self.stage_refresh_id)
+ self.stage_refresh_id = 0
+
+ self.stage_refresh_id =
GObject.idle_add(self._update_full_stage_on_idle)
+
+ def _update_full_stage_on_idle(self, data=None):
+ self.stage_refresh_id = 0
+
+ self._refresh()
+
+ return False
+
+ def _refresh(self):
Gdk.flush()
+ if status.Debug:
+ print("Stage: refresh callback")
self.update_geometry()
self.move_onscreen()
@@ -231,6 +264,14 @@
self.gdk_filter.start(self)
def move_onscreen(self):
+ w = self.get_window()
+
+ if w:
+ w.move_resize(self.rect.x,
+ self.rect.y,
+ self.rect.width,
+ self.rect.height)
+
self.move(self.rect.x, self.rect.y)
self.resize(self.rect.width, self.rect.height)
@@ -535,6 +576,8 @@
self.info_panel = InfoPanel()
self.add_child_widget(self.info_panel)
+ self.info_panel.update_revealed()
+
def queue_dialog_key_event(self, event):
"""
Sent from our EventHandler via the ScreensaverManager, this catches
@@ -732,8 +775,12 @@
Updates all of our MonitorViews based on the power
or Awake states.
"""
+
if not status.Awake:
if (not status.shouldShowPlugin()):
+ if status.Debug:
+ if settings.should_show_plugin():
+ print("Stage: plugin configured but disabling because
we're on battery")
if self.clock_widget != None and settings.get_show_clock():
self.clock_widget.start_positioning()
if self.albumart_widget != None and
settings.get_show_albumart():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cinnamon-screensaver-3.8.2/src/util/fader.py
new/cinnamon-screensaver-3.8.3/src/util/fader.py
--- old/cinnamon-screensaver-3.8.2/src/util/fader.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/util/fader.py 2018-10-16
17:35:37.000000000 +0200
@@ -48,6 +48,8 @@
self.tick_id =
self.widget.add_tick_callback(self._on_frame_tick_fade_in)
self._fade_in_step(self.start_time)
+ else:
+ self.finished_cb()
return GLib.SOURCE_REMOVE
@@ -64,6 +66,8 @@
self.tick_id =
self.widget.add_tick_callback(self._on_frame_tick_fade_out)
self._fade_out_step(self.start_time)
+ else:
+ self.finished_cb()
return GLib.SOURCE_REMOVE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cinnamon-screensaver-3.8.2/src/widgets/powerWidget.py
new/cinnamon-screensaver-3.8.3/src/widgets/powerWidget.py
--- old/cinnamon-screensaver-3.8.2/src/widgets/powerWidget.py 2018-06-08
12:38:11.000000000 +0200
+++ new/cinnamon-screensaver-3.8.3/src/widgets/powerWidget.py 2018-10-16
17:35:37.000000000 +0200
@@ -4,6 +4,7 @@
from util import trackers
import singletons
+import constants as c
class PowerWidget(Gtk.Frame):
"""
@@ -29,6 +30,8 @@
self.power_client = singletons.UPowerClient
+ self.battery_critical = False
+
trackers.con_tracker_get().connect(self.power_client,
"power-state-changed",
self.on_power_state_changed)
@@ -39,11 +42,14 @@
self.power_client.rescan_devices()
+ self.on_power_state_changed(self.power_client)
+
def on_power_state_changed(self, client):
for widget in self.box.get_children():
widget.destroy()
self.path_widget_pairs = []
+ self.battery_critical = False
self.construct_icons()
@@ -81,6 +87,8 @@
if pct > 0:
text = _("%d%%" % pct)
+ if pct < c.BATTERY_CRITICAL_PERCENT:
+ self.battery_critical = True
except Exception as e:
pass