aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Carroll <thecarrolls@jiminger.com>2012-11-11 17:34:13 -0500
committerJim Carroll <thecarrolls@jiminger.com>2012-11-11 17:34:46 -0500
commit33c04d0d5d8fd89c77708da6f5af25bc5a4b73b1 (patch)
tree35b55a6cd9f6a4cad5eb5d320790d06ba76dd9e0
parent882b06c0c6ee3d33182e12fc81790150e7048822 (diff)
[fix] This allows the Monitor to receive onScreensaverDeactivated callbacks while in DoModal. This may have further reaching effects sicne it effecively allows the DoModal call to repeatedly invoke makePendingCalls avoiding the need for extraneous PulseActionEvent calls.
-rw-r--r--xbmc/interfaces/legacy/LanguageHook.h2
-rw-r--r--xbmc/interfaces/legacy/Window.cpp18
-rw-r--r--xbmc/interfaces/legacy/Window.h2
-rw-r--r--xbmc/interfaces/python/LanguageHook.cpp13
-rw-r--r--xbmc/interfaces/python/LanguageHook.h2
-rw-r--r--xbmc/interfaces/python/XBPython.cpp8
-rw-r--r--xbmc/interfaces/python/XBPython.h2
7 files changed, 25 insertions, 22 deletions
diff --git a/xbmc/interfaces/legacy/LanguageHook.h b/xbmc/interfaces/legacy/LanguageHook.h
index 87ff6cccbf..ae671bd162 100644
--- a/xbmc/interfaces/legacy/LanguageHook.h
+++ b/xbmc/interfaces/legacy/LanguageHook.h
@@ -117,7 +117,7 @@ namespace XBMCAddon
virtual void unregisterPlayerCallback(IPlayerCallback* player) = 0;
virtual void registerMonitorCallback(XBMCAddon::xbmc::Monitor* player) = 0;
virtual void unregisterMonitorCallback(XBMCAddon::xbmc::Monitor* player) = 0;
- virtual void waitForEvent(CEvent& hEvent) = 0;
+ virtual bool waitForEvent(CEvent& hEvent, unsigned int milliseconds) = 0;
static void setLanguageHook(LanguageHook* languageHook);
static LanguageHook* getLanguageHook();
diff --git a/xbmc/interfaces/legacy/Window.cpp b/xbmc/interfaces/legacy/Window.cpp
index b4fa531809..a043ad843d 100644
--- a/xbmc/interfaces/legacy/Window.cpp
+++ b/xbmc/interfaces/legacy/Window.cpp
@@ -371,13 +371,13 @@ namespace XBMCAddon
m_actionEvent.Set();
}
- void Window::WaitForActionEvent()
+ bool Window::WaitForActionEvent(unsigned int milliseconds)
{
TRACE;
// DO NOT MAKE THIS A DELAYED CALL!!!!
- if (languageHook)
- languageHook->waitForEvent(m_actionEvent);
+ bool ret = languageHook == NULL ? m_actionEvent.WaitMSec(milliseconds) : languageHook->waitForEvent(m_actionEvent,milliseconds);
m_actionEvent.Reset();
+ return ret;
}
bool Window::OnAction(const CAction &action)
@@ -672,10 +672,16 @@ namespace XBMCAddon
// break;
// }
languageHook->makePendingCalls(); // MakePendingCalls
+
+ bool stillWaiting;
+ do
{
- DelayedCallGuard dcguard(languageHook);
- WaitForActionEvent();
- }
+ {
+ DelayedCallGuard dcguard(languageHook);
+ stillWaiting = WaitForActionEvent(10) ? false : true;
+ }
+ languageHook->makePendingCalls();
+ } while (stillWaiting);
}
}
}
diff --git a/xbmc/interfaces/legacy/Window.h b/xbmc/interfaces/legacy/Window.h
index daacd73e4a..bbbf4c9d93 100644
--- a/xbmc/interfaces/legacy/Window.h
+++ b/xbmc/interfaces/legacy/Window.h
@@ -126,7 +126,7 @@ namespace XBMCAddon
Control* GetControlById(int iControlId) throw (WindowException);
SWIGHIDDENVIRTUAL void PulseActionEvent();
- SWIGHIDDENVIRTUAL void WaitForActionEvent();
+ SWIGHIDDENVIRTUAL bool WaitForActionEvent(unsigned int milliseconds);
#endif
public:
diff --git a/xbmc/interfaces/python/LanguageHook.cpp b/xbmc/interfaces/python/LanguageHook.cpp
index 4256808fcd..d7a66f4fdf 100644
--- a/xbmc/interfaces/python/LanguageHook.cpp
+++ b/xbmc/interfaces/python/LanguageHook.cpp
@@ -174,15 +174,10 @@ namespace XBMCAddon
void LanguageHook::unregisterPlayerCallback(IPlayerCallback* player) { g_pythonParser.UnregisterPythonPlayerCallBack(player); }
void LanguageHook::registerMonitorCallback(XBMCAddon::xbmc::Monitor* monitor) { g_pythonParser.RegisterPythonMonitorCallBack(monitor); }
void LanguageHook::unregisterMonitorCallback(XBMCAddon::xbmc::Monitor* monitor) { g_pythonParser.UnregisterPythonMonitorCallBack(monitor); }
- void LanguageHook::waitForEvent(CEvent& hEvent) { g_pythonParser.WaitForEvent(hEvent); }
-
-// void LanguageHook::constructing(AddonClass* beingConstructed)
-// {
-// }
-//
-// void LanguageHook::destructing(AddonClass* beingDestructed)
-// {
-// }
+ bool LanguageHook::waitForEvent(CEvent& hEvent, unsigned int milliseconds)
+ {
+ return g_pythonParser.WaitForEvent(hEvent,milliseconds);
+ }
}
}
diff --git a/xbmc/interfaces/python/LanguageHook.h b/xbmc/interfaces/python/LanguageHook.h
index cb07ea4287..3f1700bc17 100644
--- a/xbmc/interfaces/python/LanguageHook.h
+++ b/xbmc/interfaces/python/LanguageHook.h
@@ -78,7 +78,7 @@ namespace XBMCAddon
virtual void unregisterPlayerCallback(IPlayerCallback* player);
virtual void registerMonitorCallback(XBMCAddon::xbmc::Monitor* monitor);
virtual void unregisterMonitorCallback(XBMCAddon::xbmc::Monitor* monitor);
- virtual void waitForEvent(CEvent& hEvent);
+ virtual bool waitForEvent(CEvent& hEvent, unsigned int milliseconds);
static LanguageHook* getInstance();
};
diff --git a/xbmc/interfaces/python/XBPython.cpp b/xbmc/interfaces/python/XBPython.cpp
index c48fbdb746..266f320fe6 100644
--- a/xbmc/interfaces/python/XBPython.cpp
+++ b/xbmc/interfaces/python/XBPython.cpp
@@ -863,12 +863,14 @@ void XBPython::PulseGlobalEvent()
m_globalEvent.Set();
}
-void XBPython::WaitForEvent(CEvent& hEvent)
+bool XBPython::WaitForEvent(CEvent& hEvent, unsigned int milliseconds)
{
// wait for either this event our our global event
XbmcThreads::CEventGroup eventGroup(&hEvent, &m_globalEvent, NULL);
- eventGroup.wait();
- m_globalEvent.Reset();
+ CEvent* ret = eventGroup.wait(milliseconds);
+ if (ret)
+ m_globalEvent.Reset();
+ return ret == NULL ? false : true;
}
// execute script, returns -1 if script doesn't exist
diff --git a/xbmc/interfaces/python/XBPython.h b/xbmc/interfaces/python/XBPython.h
index 3e1364d424..3fccf6ef9e 100644
--- a/xbmc/interfaces/python/XBPython.h
+++ b/xbmc/interfaces/python/XBPython.h
@@ -85,7 +85,7 @@ public:
void Process();
void PulseGlobalEvent();
- void WaitForEvent(CEvent& hEvent);
+ bool WaitForEvent(CEvent& hEvent, unsigned int milliseconds);
int ScriptsSize();
int GetPythonScriptId(int scriptPosition);