From 8a08110f194170cff462d292d5851735aa5f19ed Mon Sep 17 00:00:00 2001 From: Mathias Gumz <akira at fluxbox dot org> Date: Wed, 8 Sep 2010 22:09:06 +0200 Subject: simpler way of expressing 'Singleton' for 'FbAtoms' --- src/FbAtoms.cc | 44 +++++++++++++++++++------------------------- src/FbAtoms.hh | 17 ++++++++--------- src/fluxbox.cc | 2 +- 3 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/FbAtoms.cc b/src/FbAtoms.cc index 13b1703..409a99f 100644 --- a/src/FbAtoms.cc +++ b/src/FbAtoms.cc @@ -22,42 +22,36 @@ #include "FbAtoms.hh" #include "FbTk/App.hh" -#include <string> +namespace { -using std::string; +FbAtoms* s_singleton = 0; -FbAtoms *FbAtoms::s_singleton = 0; +} // end of anonymous namespace -FbAtoms::FbAtoms():m_init(false) { - if (s_singleton != 0) - throw string("You can only create one instance of FbAtoms"); +FbAtoms::FbAtoms() { + + Display* dpy = FbTk::App::instance()->display(); + + xa_wm_protocols = XInternAtom(dpy, "WM_PROTOCOLS", False); + xa_wm_state = XInternAtom(dpy, "WM_STATE", False); + xa_wm_change_state = XInternAtom(dpy, "WM_CHANGE_STATE", False); + xa_wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + xa_wm_take_focus = XInternAtom(dpy, "WM_TAKE_FOCUS", False); + motif_wm_hints = XInternAtom(dpy, "_MOTIF_WM_HINTS", False); + + blackbox_attributes = XInternAtom(dpy, "_BLACKBOX_ATTRIBUTES", False); s_singleton = this; - initAtoms(); } FbAtoms::~FbAtoms() { - + s_singleton = 0; } FbAtoms *FbAtoms::instance() { - if (s_singleton == 0) - throw string("Create one instance of FbAtoms first!"); + if (s_singleton == 0) { + s_singleton = new FbAtoms(); + } return s_singleton; } -void FbAtoms::initAtoms() { - Display *display = FbTk::App::instance()->display(); - if (display == 0) - return; - - xa_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", False); - xa_wm_state = XInternAtom(display, "WM_STATE", False); - xa_wm_change_state = XInternAtom(display, "WM_CHANGE_STATE", False); - xa_wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False); - xa_wm_take_focus = XInternAtom(display, "WM_TAKE_FOCUS", False); - motif_wm_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False); - - blackbox_attributes = XInternAtom(display, "_BLACKBOX_ATTRIBUTES", False); - -} diff --git a/src/FbAtoms.hh b/src/FbAtoms.hh index 2a48e6e..3ed52a5 100644 --- a/src/FbAtoms.hh +++ b/src/FbAtoms.hh @@ -27,7 +27,6 @@ /// atom handler for basic X atoms class FbAtoms { public: - FbAtoms(); ~FbAtoms(); static FbAtoms *instance(); @@ -45,16 +44,16 @@ public: Atom getFluxboxAttributesAtom() const { return blackbox_attributes; } private: - void initAtoms(); -// NETAttributes + FbAtoms(); + Atom blackbox_attributes; Atom motif_wm_hints; - - Atom xa_wm_protocols, xa_wm_state, - xa_wm_delete_window, xa_wm_take_focus, xa_wm_change_state; - - bool m_init; - static FbAtoms *s_singleton; + Atom xa_wm_protocols; + Atom xa_wm_state; + Atom xa_wm_delete_window; + Atom xa_wm_take_focus; + Atom xa_wm_change_state; }; #endif //FBATOMS_HH + diff --git a/src/fluxbox.cc b/src/fluxbox.cc index 192b44c..d55029b 100644 --- a/src/fluxbox.cc +++ b/src/fluxbox.cc @@ -181,7 +181,7 @@ Fluxbox *Fluxbox::s_singleton=0; Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfilename, bool xsync) : FbTk::App(dpy_name), - m_fbatoms(new FbAtoms()), + m_fbatoms(FbAtoms::instance()), m_resourcemanager(rcfilename, true), // TODO: shouldn't need a separate one for screen m_screen_rm(m_resourcemanager), -- cgit v0.11.2