コード例 #1
0
void RunLoop::runImpl(RunMode runMode)
{
    ASSERT(this == &RunLoop::current());

    Status statusOfThisLoop = Status::Clear;
    {
        LockHolder locker(m_loopLock);
        m_mainLoops.append(&statusOfThisLoop);
    }

    Deque<RefPtr<TimerBase::ScheduledTask>> firedTimers;
    while (true) {
        if (!populateTasks(runMode, statusOfThisLoop, firedTimers))
            return;

        // Dispatch scheduled timers.
        while (!firedTimers.isEmpty()) {
            RefPtr<TimerBase::ScheduledTask> task = firedTimers.takeFirst();
            if (task->fired()) {
                // Reschedule because the timer requires repeating.
                // Since we will query the timers' time points before sleeping,
                // we do not call wakeUp() here.
                schedule(*task);
            }
        }
        performWork();
    }
}
コード例 #2
0
TaskArea::TaskArea(bool pVertical, LPCSTR p_itemName): Collection(pVertical, p_itemName, 0, 2),
		stretchTaskarea(s_settingsManager.AssociateBool(m_pluginPrefix, m_itemPrefix, "Stretch", true)),
		m_basePrefix(p_itemName)
{
	m_basePrefix.resize(m_basePrefix.find_first_of("."));
	m_dragTask = NULL;
	m_dragTimer = getTimerID();
	readSettings();
	populateTasks();
	m_dropTarget = new DropTarget(this, DragAction);
	RegisterDragDrop(barWnd, m_dropTarget);

}
コード例 #3
0
/** @brief wndProc
  *
  * @TODO: document this function
  */
LRESULT TaskArea::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_TIMER:
		if (wParam == m_dragTimer)
		{
			if (m_dragTask)
			{
				SendMessage(hBlackboxWnd, BB_BRINGTOFRONT, 0,  (LPARAM)m_dragTask->GetTaskWnd());
				m_dragTask = NULL;
			}
			KillTimer(barWnd, m_dragTimer);
		}
		break;
	case BB_RECONFIGURE:
		readSettings();
		populateTasks();
		break;
	case BB_BROADCAST:
	{
		LPCSTR msg_string = (LPCSTR)lParam;
		LPCSTR element = NULL;
		msg_string += 1;
		if (!strnicmp(msg_string, m_pluginPrefix, strlen(m_pluginPrefix)))
		{
			msg_string += strlen(m_pluginPrefix) + 1;
			if (!strnicmp(msg_string, m_itemPrefix, strlen(m_itemPrefix)))
			{
				msg_string += strlen(m_itemPrefix) + 1;
				if ((element = "Stretch") && !strnicmp(msg_string, element, strlen(element)))
				{
					//msg_string += strlen(element);
					//m_iconSize = atoi(msg_string);
					//s_settingsManager.WriteSetting(m_pluginPrefix, "Tasks", element);
					//populateTasks();
					//PostMessage(barWnd, BOXBAR_UPDATESIZE, 1, 0);
				}
			}
			else if (!strnicmp(msg_string, m_basePrefix.c_str(), m_basePrefix.size()))
			{
				if (itemList.size())
				{
					itemList.front()->wndProc(hWnd, msg, wParam, lParam);
				}
				PostMessage(barWnd, BOXBAR_UPDATESIZE, 1, 0);
				configMenu(NULL, true);
				return 0;
			}
		}
	}
	break;
	case BB_TASKSUPDATE:
		switch (lParam)
		{
		case TASKITEM_FLASHED:
		case TASKITEM_ACTIVATED:
			Collection::wndProc(hWnd, msg, wParam, lParam);
			RedrawWindow(barWnd, NULL, NULL, RDW_INVALIDATE | RDW_INTERNALPAINT);
			return 0;
		case TASKITEM_ADDED:

			if (std::find_if(itemList.begin(), itemList.end(), bind2nd(TaskIsHWnd(), reinterpret_cast<HWND>(wParam))) == itemList.end())
			{
				Task *newTask = new Task(reinterpret_cast<HWND>(wParam), vertical);
				itemList_t::iterator insertLoc = itemList.end();
				if (vertical && stretchTaskarea)
				{
					insertLoc--;
				}
				itemList.insert(insertLoc, newTask);
				if (stretchTaskarea)
				{
					calculateSizes(true);
					RedrawWindow(barWnd, NULL, NULL, RDW_INVALIDATE | RDW_INTERNALPAINT);
				}
				else
				{
					PostMessage(barWnd, BOXBAR_UPDATESIZE, 1, 0);
				}
			}
			break;

		case TASKITEM_REMOVED:
		{
			itemList.remove_if(bind2nd(TaskIsHWnd(), reinterpret_cast<HWND>(wParam)));
			if (stretchTaskarea)
			{
				calculateSizes(true);
				RedrawWindow(barWnd, NULL, NULL, RDW_INVALIDATE | RDW_INTERNALPAINT);
			}
			else
			{
				PostMessage(barWnd, BOXBAR_UPDATESIZE, 1, 0);
			}
			break;
		}
		//populateTasks();
		}
		break;
	}
	return Collection::wndProc(hWnd, msg, wParam, lParam);
}