~ubuntu-branches/ubuntu/trusty/fluxbox/trusty-proposed

« back to all changes in this revision

Viewing changes to src/FbTk/App.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
 
// App.cc
2
 
// Copyright (c) 2002 - 2005 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
 
#include "App.hh"
23
 
#include "Font.hh"
24
 
#include "Image.hh"
25
 
 
26
 
#include "EventManager.hh"
27
 
 
28
 
#ifdef HAVE_CASSERT
29
 
  #include <cassert>
30
 
#else
31
 
  #include <assert.h>
32
 
#endif
33
 
#include <string>
34
 
 
35
 
namespace FbTk {
36
 
 
37
 
App *App::s_app = 0;
38
 
 
39
 
App *App::instance() {
40
 
    if (s_app == 0)
41
 
        throw std::string("You must create an instance of FbTk::App first!");
42
 
    return s_app;
43
 
}
44
 
 
45
 
App::App(const char *displayname):m_done(false), m_display(0) {
46
 
    if (s_app != 0)
47
 
        throw std::string("Can't create more than one instance of FbTk::App");
48
 
    s_app = this;
49
 
    // this allows the use of std::string.c_str(), which returns 
50
 
    // a blank string, rather than a null string, so we make them equivalent
51
 
    if (displayname != 0 && displayname[0] == '\0')
52
 
        displayname = 0;
53
 
    m_display = XOpenDisplay(displayname);
54
 
    if (!m_display)
55
 
        throw std::string("Couldn't connect to XServer");
56
 
 
57
 
    Font::init();
58
 
    Image::init();
59
 
}
60
 
 
61
 
App::~App() {
62
 
    if (m_display != 0) {
63
 
        
64
 
        Font::shutdown();
65
 
        Image::shutdown();
66
 
        
67
 
        XCloseDisplay(m_display);
68
 
        m_display = 0;
69
 
    }
70
 
    s_app = 0;
71
 
}
72
 
 
73
 
void App::sync(bool discard) {
74
 
    XSync(display(), discard);
75
 
}
76
 
 
77
 
void App::eventLoop() {
78
 
    XEvent ev;
79
 
    while (!m_done) {
80
 
        XNextEvent(display(), &ev);
81
 
        EventManager::instance()->handleEvent(ev);
82
 
    }
83
 
}
84
 
 
85
 
 
86
 
void App::end() {
87
 
    m_done = true; //end loop in App::eventLoop
88
 
}
89
 
 
90
 
}; // end namespace FbTk