~ubuntu-branches/ubuntu/precise/fluxbox/precise

« back to all changes in this revision

Viewing changes to src/IconMenu.cc

  • Committer: Bazaar Package Importer
  • Author(s): Dmitry E. Oboukhov
  • Date: 2008-07-01 10:38:14 UTC
  • mfrom: (2.1.12 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080701103814-khx2b6il152x9p93
Tags: 1.0.0+deb1-8
* x-dev has been removed from build-depends (out-of-date package).
* Standards-Version bumped to 3.8.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// IconMenu.cc for Fluxbox
2
 
// Copyright (c) 2004 Henrik Kinnunen (fluxgen at fluxbox dot org)
3
 
//
4
 
// Permission is hereby granted, free of charge, to any person obtaining a
5
 
// copy of this software and associated documentation files (the "Software"),
6
 
// to deal in the Software without restriction, including without limitation
7
 
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 
// and/or sell copies of the Software, and to permit persons to whom the
9
 
// Software is furnished to do so, subject to the following conditions:
10
 
//
11
 
// The above copyright notice and this permission notice shall be included in
12
 
// all copies or substantial portions of the Software.
13
 
//
14
 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
 
// DEALINGS IN THE SOFTWARE.
21
 
 
22
 
// $Id: IconMenu.cc 4073 2005-07-04 18:19:09Z fluxgen $
23
 
 
24
 
#include "IconMenu.hh"
25
 
 
26
 
#include "Screen.hh"
27
 
#include "IconMenuItem.hh"
28
 
#include "fluxbox.hh"
29
 
#include "FbTk/I18n.hh"
30
 
 
31
 
#include <typeinfo>
32
 
 
33
 
static void updateItems(FbTk::Menu &menu, BScreen &screen) {
34
 
    menu.removeAll();
35
 
    BScreen::Icons::iterator it = screen.iconList().begin();
36
 
    BScreen::Icons::iterator it_end = screen.iconList().end();
37
 
    for (; it != it_end; ++it) {
38
 
        FluxboxWindow::ClientList::iterator client_it = (*it)->clientList().begin();
39
 
        FluxboxWindow::ClientList::iterator client_it_end = (*it)->clientList().end();
40
 
        for (; client_it != client_it_end; ++client_it)
41
 
            menu.insert(new IconMenuItem(**client_it));
42
 
    }
43
 
    menu.updateMenu();
44
 
}
45
 
 
46
 
IconMenu::IconMenu(BScreen &screen):
47
 
    FbMenu(screen.menuTheme(), 
48
 
           screen.imageControl(), 
49
 
           *screen.layerManager().
50
 
           getLayer(Fluxbox::instance()->getMenuLayer())) {
51
 
 
52
 
    _FB_USES_NLS;
53
 
    setLabel(_FBTEXT(Menu, Icons, "Icons", "Iconic windows menu title"));
54
 
    screen.iconListSig().attach(this);
55
 
    updateItems(*this, screen);
56
 
}
57
 
 
58
 
void IconMenu::update(FbTk::Subject *subj) {
59
 
    if (subj == 0)
60
 
        FbTk::Menu::update(subj);
61
 
    else if (typeid(*subj) == typeid(BScreen::ScreenSubject)) {
62
 
        BScreen &screen = static_cast<BScreen::ScreenSubject *>(subj)->screen();
63
 
        updateItems(*this, screen);
64
 
    } else 
65
 
        FbTk::Menu::update(subj);
66
 
}