/* Returns the number of window for this application that reside on the current workspace */ int LauncherApplication::windowCountOnCurrentWorkspace() { int windowCount = 0; WnckWorkspace *current = wnck_screen_get_active_workspace(wnck_screen_get_default()); for (int i = 0; i < m_application->windows()->size(); i++) { BamfWindow *window = m_application->windows()->at(i); if (window == NULL) { continue; } /* When geting the wnck window, it's possible we get a NULL return value because wnck hasn't updated its internal list yet, so we need to force it once to be sure */ WnckWindow *wnck_window = wnck_window_get(window->xid()); if (wnck_window == NULL) { wnck_screen_force_update(wnck_screen_get_default()); wnck_window = wnck_window_get(window->xid()); if (wnck_window == NULL) { continue; } } WnckWorkspace *workspace = wnck_window_get_workspace(wnck_window); if (workspace == current) { windowCount++; } } return windowCount; }
QList<WnckWindow*> Trash::trashWindows() const { QList<WnckWindow*> trashWindows; BamfMatcher& matcher = BamfMatcher::get_default(); QScopedPointer<BamfApplicationList> running_applications(matcher.running_applications()); BamfApplication* bamfApplication; for(int i=0; i<running_applications->size(); i++) { bamfApplication = running_applications->at(i); QScopedPointer<BamfWindowList> windowApplications(bamfApplication->windows()); for (int j=0; j < windowApplications->size(); j++) { BamfWindow *bamfWindow = windowApplications->at(j); WnckWindow* wnckWindow = wnck_window_get(bamfWindow->xid()); if (wnckWindow != NULL && isTrashWindow(wnckWindow)) { trashWindows.append(wnckWindow); } } } return trashWindows; }
void LauncherApplication::show() { if (m_application == NULL) { return; } QScopedPointer<BamfWindowList> windows(m_application->windows()); int size = windows->size(); if (size < 1) { return; } /* Pick the most important window. The primary criterion to determine the most important window is urgency. The secondary criterion is the last_active timestamp (the last time the window was activated). */ BamfWindow* important = windows->at(0); for (int i = 0; i < size; ++i) { BamfWindow* current = windows->at(i); if (current->urgent() && !important->urgent()) { important = current; } else if (current->urgent() || !important->urgent()) { if (current->last_active() > important->last_active()) { important = current; } } } WnckScreen* screen = wnck_screen_get_default(); wnck_screen_force_update(screen); WnckWindow* window = wnck_window_get(important->xid()); LauncherUtility::showWindow(window); }