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

Reply via email to