Author: titmuss
Date: Tue Nov 18 03:59:36 2008
New Revision: 3396
URL: http://svn.slimdevices.com?rev=3396&root=Jive&view=rev
Log:
Bug: 9925
Description:
Allow global event listeners to have different priorities, so we can ensure
that the screensaver is always
processed last.
Fix screen saver so that it will only close the screensaver if no other events
have been processed.
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/NowPlaying/NowPlayingApplet.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/ScreenSavers/ScreenSaversApplet.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Framework.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Window.lua
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/NowPlaying/NowPlayingApplet.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/applets/NowPlaying/NowPlayingApplet.lua?rev=3396&root=Jive&r1=3395&r2=3396&view=diff
==============================================================================
---
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/NowPlaying/NowPlayingApplet.lua
(original)
+++
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/NowPlaying/NowPlayingApplet.lua
Tue Nov 18 03:59:36 2008
@@ -439,15 +439,26 @@
local playlistSize = self.player and self.player:getPlaylistSize()
window:addListener(
- EVENT_KEY_ALL | EVENT_KEY_PRESS | EVENT_KEY_HOLD,
+ EVENT_KEY_PRESS | EVENT_KEY_HOLD,
function(event)
+
local type = event:getType()
local keyPress = event:getKeycode()
- if (keyPress == KEY_BACK and windowStyle == 'browse')
then
- -- back to Home
+
+ if keyPress == KEY_BACK and windowStyle == 'browse' then
+ window:playSound("WINDOWHIDE")
+ window:hide()
+ return EVENT_CONSUME
+ end
+
+ if keyPress == KEY_HOME then
+ -- make sure home goes home
appletManager:callService("goHome")
-
- elseif (keyPress == KEY_GO) then
+ return EVENT_CONSUME
+
+ elseif keyPress == KEY_GO then
+ window:playSound("WINDOWSHOW")
+
if playlistSize == 1 then
-- use special showTrackOne method from
SlimBrowser
appletManager:callService("showTrackOne")
@@ -455,6 +466,8 @@
-- show playlist
appletManager:callService("showPlaylist")
end
+ return EVENT_CONSUME
+
end
return EVENT_UNUSED
end
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/ScreenSavers/ScreenSaversApplet.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/applets/ScreenSavers/ScreenSaversApplet.lua?rev=3396&root=Jive&r1=3395&r2=3396&view=diff
==============================================================================
---
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/ScreenSavers/ScreenSaversApplet.lua
(original)
+++
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/ScreenSavers/ScreenSaversApplet.lua
Tue Nov 18 03:59:36 2008
@@ -73,6 +73,43 @@
true
)
+ -- listener to quit screensaver
+ Framework:addListener(EVENT_KEY_PRESS | EVENT_KEY_HOLD | EVENT_SCROLL |
EVENT_MOUSE_PRESS | EVENT_MOUSE_HOLD,
+ function(event)
+ -- screensaver is not active
+ if #self.active == 0 then
+ return EVENT_UNUSED
+ end
+
+ log:debug("Closing screensaver event=",
event:tostring())
+
+ -- close all screensaver windows
+ for i,w in ipairs(self.active) do
+ _deactivate(self, w, self.demoScreensaver)
+ end
+
+ -- keys should close the screensaver, and not
+ -- perform an action
+ if event:getType() == EVENT_KEY_PRESS then
+ local keycode = event:getKeycode()
+
+ if keycode == KEY_GO or
+ keycode == KEY_LEFT then
+ return EVENT_CONSUME
+ end
+
+ -- make sure when exiting a screensaver we
+ -- really go home.
+ if keycode == KEY_HOME then
+ appletManager:callService("goHome")
+ return EVENT_CONSUME
+ end
+ end
+ return EVENT_UNUSED
+ end,
+ 100 -- process after all other event handlers
+ )
+
jnt:subscribe(self)
return self
@@ -140,6 +177,7 @@
-- screensavers can have methods that are executed on close
function _deactivate(self, window, the_screensaver)
+ log:debug("Screensaver deactivate")
if not the_screensaver then
local player = appletManager:callService("getCurrentPlayer")
@@ -213,35 +251,6 @@
log:debug("screensaver closed ",
#self.active)
return EVENT_UNUSED
end)
-
- -- key or scroll events quit the screensaver
- window:addListener(EVENT_CHAR_PRESS | EVENT_KEY_PRESS | EVENT_KEY_HOLD
| EVENT_SCROLL | EVENT_MOUSE_PRESS | EVENT_MOUSE_HOLD,
- function(event)
-
- -- close all screensaver windows
- for i,w in ipairs(self.active) do
- _deactivate(self, w, self.demoScreensaver)
- end
-
- -- keys should close the screensaver, and not
- -- perform an action
- if event:getType() == EVENT_KEY_PRESS then
- local keycode = event:getKeycode()
-
- if keycode == KEY_GO or
- keycode == KEY_LEFT then
- return EVENT_CONSUME
- end
-
- -- make sure when exiting a screensaver we
- -- really go home.
- if keycode == KEY_HOME then
- appletManager:callService("goHome")
- return EVENT_CONSUME
- end
- end
- return EVENT_UNUSED
- end)
if hideOnMotion then
window:addListener(EVENT_MOTION,
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua?rev=3396&root=Jive&r1=3395&r2=3396&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua (original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua Tue Nov 18
03:59:36 2008
@@ -211,15 +211,15 @@
function(event)
_homeHandler(event)
end,
- false
- )
+ 10)
-- global listener: resize window (only desktop versions)
Framework:addListener(EVENT_WINDOW_RESIZE,
- function(event)
- jiveMain:reloadSkin()
- return EVENT_UNUSED
- end)
+ function(event)
+ jiveMain:reloadSkin()
+ return EVENT_UNUSED
+ end,
+ 10)
-- show our window!
jiveMain.window:show()
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Framework.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Framework.lua?rev=3396&root=Jive&r1=3395&r2=3396&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Framework.lua (original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Framework.lua Tue Nov
18 03:59:36 2008
@@ -32,6 +32,8 @@
local oo = require("loop.simple")
local table = require("jive.utils.table")
+
+local debug = require("jive.utils.debug")
local EVENT_SHOW = jive.ui.EVENT_SHOW
local EVENT_HIDE = jive.ui.EVENT_HIDE
@@ -491,7 +493,7 @@
=head2 jive.ui.Framework:addListener(mask, listener, priority)
-Add a global event listener I<listener>. The listener is called for events
that match the event mask I<mask>. By default the listener is called before any
widget event listeners, and can stop event processing by returned
EVENT_CONSUME. If priority is false then the listener is only called if no
other global or widget listeners have processed the event. Returns a I<handle>
to use in removeEventListener().
+Add a global event listener I<listener>. The listener is called for events
that match the event mask I<mask>. By default the listener is called before any
widget event listeners, and can stop event processing by returned
EVENT_CONSUME. If priority is negative then it is called before any other
listeners, otherwise if it is posible then the listener is only called after
the widget listeners have processed the event. Returns a I<handle> to use in
removeEventListener().
=cut
--]]
@@ -499,12 +501,33 @@
_assert(type(mask) == "number")
_assert(type(listener) == "function")
- local handle = { mask, listener }
- if priority == false then
- table.insert(self.unusedListeners, 1, handle)
+ -- compatilibty with older api
+ if priority == nil or priority == true then
+ priority = -1
+ elseif priority == false then
+ priority = 1
+ end
+
+ _assert(type(priority) == "number")
+
+ local handle = { mask, listener, math.abs(priority), self:getTicks() }
+
+ local listeners
+ if priority < 0 then
+ listeners = self.globalListeners
else
- table.insert(self.globalListeners, 1, handle)
- end
+ listeners = self.unusedListeners
+ end
+
+ table.insert(listeners, handle)
+ table.sort(listeners,
+ function(a, b)
+ -- stable sort, most recent first
+ if a[3] == b[3] then
+ return a[4] < b[4]
+ end
+ return a[3] < b[3]
+ end)
return handle
end
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Window.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Window.lua?rev=3396&root=Jive&r1=3395&r2=3396&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Window.lua (original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/ui/Window.lua Tue Nov 18
03:59:36 2008
@@ -1278,8 +1278,10 @@
local r = self:_eventHandler(event)
if r & EVENT_CONSUME == 0 then
- Widget._event(self, event)
- end
+ r = Widget._event(self, event)
+ end
+
+ return r
end
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins