Ticket #2833: CloseAllWorkspace.diff

File CloseAllWorkspace.diff, 2.9 KB (added by nastee, 11 years ago)
  • Tracker.h

     
    192192
    193193        void CloseAllWindows();
    194194        void CloseWindowAndChildren(const node_ref *);
     195        void CloseAllInWorkspace();
    195196        void OpenInfoWindows(BMessage*);
    196197        void MoveRefsToTrash(const BMessage *);
    197198        void OpenContainerWindow(Model *, BMessage *refsList = NULL,
  • ContainerWindow.cpp

     
    14881488            be_app->PostMessage(B_QUIT_REQUESTED);
    14891489            break;
    14901490
     1491        case kCloseAllWindows:
     1492            be_app->PostMessage(kCloseAllWindows);
     1493            break;
     1494
     1495        case kCloseAllInWorkspace:
     1496            be_app->PostMessage(kCloseAllInWorkspace);
     1497            break;
     1498
    14911499        case kRestoreBackgroundImage:
    14921500            UpdateBackgroundImage();
    14931501            break;
     
    19751983    item->SetTarget(this);
    19761984    menu->AddItem(item);
    19771985
     1986    item = new BMenuItem("Close All", new BMessage(kCloseAllWindows), 'Q');
     1987    item->SetTarget(this);
     1988    menu->AddItem(item);
     1989
     1990    item = new BMenuItem("Close All In Workspace", new BMessage(kCloseAllInWorkspace),
     1991        'Q', B_SHIFT_KEY);
     1992    item->SetTarget(this);
     1993    menu->AddItem(item);
     1994
    19781995    menu->AddSeparatorItem();
    19791996
    19801997    item = new BMenuItem("Preferences"B_UTF8_ELLIPSIS, new BMessage(kShowSettingsWindow));
  • Tracker.cpp

     
    387387            CloseAllWindows();
    388388            break;
    389389
     390        case kCloseAllInWorkspace:
     391            CloseAllInWorkspace();
     392            break;
     393
    390394        case kFindButton:
    391395            (new FindWindow())->Show();
    392396            break;
     
    837841    }
    838842}
    839843
    840 
    841844void
    842845TTracker::OpenContainerWindow(Model *model, BMessage *originalRefsList,
    843846    OpenSelector openSelector, uint32 openFlags, bool checkAlreadyOpen,
     
    11731176
    11741177
    11751178void
     1179TTracker::CloseAllInWorkspace()
     1180{
     1181    AutoLock<WindowList> lock(&fWindowList);
     1182
     1183    int32 currentWorkspace = 1 << current_workspace();
     1184    // count from end to beginning so we can remove items safely
     1185    for (int32 index = fWindowList.CountItems() - 1; index >= 0; index--) {
     1186        BWindow *window = fWindowList.ItemAt(index);
     1187        if (window->Workspaces() & currentWorkspace)
     1188            // avoid the desktop
     1189            if (!dynamic_cast<BDeskWindow *>(window)
     1190                && !dynamic_cast<BStatusWindow *>(window))
     1191                window->PostMessage(B_QUIT_REQUESTED);
     1192    }   
     1193}   
     1194
     1195
     1196void
    11761197TTracker::CloseAllWindows()
    11771198{
    11781199    // this is a response to the DeskBar sending us a B_QUIT, when it really
  • Commands.h

     
    5050const uint32 kOpenSelectionWith = 'Tosu';
    5151const uint32 kCloseAllWindows = 'Tall';
    5252const uint32 kCloseWindowAndChildren = 'Tcwc';
     53const uint32 kCloseAllInWorkspace = 'Tciw';
    5354
    5455// end external app messages
    5556