mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-08 07:09:21 +00:00
* Fixed the log redraw which didn't happen as the display's scheduler
didn't get re-added to the task scheduler until a new event happened. * Added redraw delay interval of 100ms, consider 50ms. * Removed exceptions from core::DownloadStore::save. * Added load, load_run, tied_stop and tied_remove to man-page. * Cleaned up the command/option instances, move them to Control. * PCB::load_up_chunk grabbed the errno from m_downChunk, not m_upChunk. * Various string operations were moved to rak/string_manip.h. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@617 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+54
-17
@@ -47,6 +47,28 @@
|
||||
|
||||
namespace display {
|
||||
|
||||
Manager::Manager() {
|
||||
m_taskUpdate.set_slot(rak::mem_fn(this, &Manager::receive_update));
|
||||
}
|
||||
|
||||
Manager::~Manager() {
|
||||
priority_queue_erase(&taskScheduler, &m_taskUpdate);
|
||||
}
|
||||
|
||||
Manager::iterator
|
||||
Manager::insert(iterator pos, Window* w) {
|
||||
return Base::insert(pos, w);
|
||||
}
|
||||
|
||||
// Swap with the function below.
|
||||
Manager::iterator
|
||||
Manager::erase(iterator pos) {
|
||||
if (pos != end())
|
||||
return erase(*pos);
|
||||
else
|
||||
return end();
|
||||
}
|
||||
|
||||
Manager::iterator
|
||||
Manager::erase(Window* w) {
|
||||
iterator itr = std::find(begin(), end(), w);
|
||||
@@ -62,6 +84,19 @@ Manager::find(Window* w) {
|
||||
return std::find(begin(), end(), w);
|
||||
}
|
||||
|
||||
void
|
||||
Manager::schedule(Window* w, rak::timer t) {
|
||||
rak::priority_queue_erase(&m_scheduler, w->task_update());
|
||||
rak::priority_queue_insert(&m_scheduler, w->task_update(), t);
|
||||
schedule_update();
|
||||
}
|
||||
|
||||
void
|
||||
Manager::unschedule(Window* w) {
|
||||
rak::priority_queue_erase(&m_scheduler, w->task_update());
|
||||
schedule_update();
|
||||
}
|
||||
|
||||
void
|
||||
Manager::adjust_layout() {
|
||||
int staticHeight = std::for_each(begin(), end(),
|
||||
@@ -95,28 +130,30 @@ Manager::adjust_layout() {
|
||||
}
|
||||
|
||||
void
|
||||
Manager::do_update() {
|
||||
Manager::receive_update() {
|
||||
Canvas::refresh_std();
|
||||
|
||||
// std::list<rak::priority_item*> workQueue;
|
||||
|
||||
// std::copy(rak::queue_popper(displayScheduler, rak::bind2nd(std::mem_fun(&rak::priority_item::compare), cachedTime)),
|
||||
// rak::queue_popper(displayScheduler, rak::bind2nd(std::mem_fun(&rak::priority_item::compare), rak::timer())),
|
||||
// std::back_inserter(workQueue));
|
||||
// std::for_each(workQueue.begin(), workQueue.end(), std::mem_fun(&rak::priority_item::clear_time));
|
||||
// std::for_each(workQueue.begin(), workQueue.end(), std::mem_fun(&rak::priority_item::call));
|
||||
|
||||
while (!displayScheduler.empty() && displayScheduler.top()->time() <= cachedTime) {
|
||||
rak::priority_item* v = displayScheduler.top();
|
||||
displayScheduler.pop();
|
||||
|
||||
v->clear_time();
|
||||
v->call();
|
||||
}
|
||||
|
||||
rak::priority_queue_perform(&m_scheduler, cachedTime);
|
||||
std::for_each(begin(), end(), rak::if_then(std::mem_fun(&Window::is_active), std::mem_fun(&Window::refresh)));
|
||||
|
||||
Canvas::do_update();
|
||||
|
||||
m_timeLastUpdate = cachedTime;
|
||||
schedule_update();
|
||||
}
|
||||
|
||||
void
|
||||
Manager::schedule_update() {
|
||||
if (m_scheduler.empty()) {
|
||||
rak::priority_queue_erase(&taskScheduler, &m_taskUpdate);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_taskUpdate.is_queued() || m_taskUpdate.time() > m_scheduler.top()->time()) {
|
||||
rak::priority_queue_erase(&taskScheduler, &m_taskUpdate);
|
||||
rak::priority_queue_insert(&taskScheduler, &m_taskUpdate,
|
||||
std::max(m_scheduler.top()->time(), m_timeLastUpdate + 100000));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user