From 82047e6a391a12be9583168f28ac72c1154108d6 Mon Sep 17 00:00:00 2001
From: Mark Tiefenbruck <mark@fluxbox.org>
Date: Wed, 27 Aug 2008 18:29:33 -0400
Subject: move some things from FluxboxWindow to WindowState

---
 src/Ewmh.cc        | 16 ++++++------
 src/FbWinFrame.cc  |  7 +++--
 src/FbWinFrame.hh  |  4 +--
 src/Focusable.hh   | 13 ---------
 src/Screen.cc      |  6 ++---
 src/WinClient.cc   |  6 ++---
 src/WinClient.hh   |  6 ++---
 src/Window.cc      | 77 +++++++++++++++++++++++++-----------------------------
 src/Window.hh      | 20 ++++++--------
 src/WindowState.hh | 26 ++++++++++++++----
 10 files changed, 85 insertions(+), 96 deletions(-)

diff --git a/src/Ewmh.cc b/src/Ewmh.cc
index 2617491..aacb2ed 100644
--- a/src/Ewmh.cc
+++ b/src/Ewmh.cc
@@ -586,22 +586,22 @@ void Ewmh::setupClient(WinClient &winclient) {
     winclient.property(m_net->wm_window_type, 0, 0x7fffffff, False, XA_ATOM,
                        &ret_type, &fmt, &nitems, &bytes_after,
                        &data);
-    Focusable::WindowType type = Focusable::TYPE_NORMAL;
+    WindowState::WindowType type = WindowState::TYPE_NORMAL;
     if (data) {
         Atom *atoms = (unsigned long *)data;
         for (unsigned long l = 0; l < nitems; ++l) {
             if (atoms[l] == m_net->wm_window_type_dock)
-                type = Focusable::TYPE_DOCK;
+                type = WindowState::TYPE_DOCK;
             else if (atoms[l] == m_net->wm_window_type_desktop)
-                type = Focusable::TYPE_DESKTOP;
+                type = WindowState::TYPE_DESKTOP;
             else if (atoms[l] == m_net->wm_window_type_splash)
-                type = Focusable::TYPE_SPLASH;
+                type = WindowState::TYPE_SPLASH;
             else if (atoms[l] == m_net->wm_window_type_dialog)
-                type = Focusable::TYPE_DIALOG;
+                type = WindowState::TYPE_DIALOG;
             else if (atoms[l] == m_net->wm_window_type_menu)
-                type = Focusable::TYPE_MENU;
+                type = WindowState::TYPE_MENU;
             else if (atoms[l] == m_net->wm_window_type_toolbar)
-                type = Focusable::TYPE_TOOLBAR;
+                type = WindowState::TYPE_TOOLBAR;
             else if (atoms[l] != m_net->wm_window_type_normal)
                 continue;
             /*
@@ -615,7 +615,7 @@ void Ewmh::setupClient(WinClient &winclient) {
         // if _NET_WM_WINDOW_TYPE not set and this window
         // has transient_for the type must be set to _NET_WM_WINDOW_TYPE_DIALOG
         if (winclient.isTransient()) {
-            type = Focusable::TYPE_DIALOG;
+            type = WindowState::TYPE_DIALOG;
             winclient.
                 changeProperty(m_net->wm_window_type,
                                XA_ATOM, 32, PropModeReplace,
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index 0fa71d5..8617c1b 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -41,9 +41,8 @@
 using std::mem_fun;
 using std::string;
 
-FbWinFrame::FbWinFrame(BScreen &screen,
-                       FocusableTheme<FbWinFrameTheme> &theme,
-                       FbTk::XLayer &layer, WindowState &state):
+FbWinFrame::FbWinFrame(BScreen &screen, WindowState &state,
+                       FocusableTheme<FbWinFrameTheme> &theme):
     m_screen(screen),
     m_theme(theme),
     m_imagectrl(screen.imageControl()),
@@ -52,7 +51,7 @@ FbWinFrame::FbWinFrame(BScreen &screen,
              ButtonPressMask | ButtonReleaseMask |
              ButtonMotionMask | EnterWindowMask |
              LeaveWindowMask, true),
-    m_layeritem(window(), layer),
+    m_layeritem(window(), *screen.layerManager().getLayer(Layer::NORMAL)),
     m_titlebar(m_window, 0, 0, 100, 16,
                ButtonPressMask | ButtonReleaseMask |
                ButtonMotionMask | ExposureMask |
diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh
index 7891c36..45953ba 100644
--- a/src/FbWinFrame.hh
+++ b/src/FbWinFrame.hh
@@ -71,8 +71,8 @@ public:
     };
 
     /// create a top level window
-    FbWinFrame(BScreen &screen, FocusableTheme<FbWinFrameTheme> &theme,
-               FbTk::XLayer &layer, WindowState &state);
+    FbWinFrame(BScreen &screen, WindowState &state,
+               FocusableTheme<FbWinFrameTheme> &theme);
 
 /*    /// create a frame window inside another FbWindow, NOT IMPLEMENTED!
     FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageControl &imgctrl,
diff --git a/src/Focusable.hh b/src/Focusable.hh
index 007aea9..453a114 100644
--- a/src/Focusable.hh
+++ b/src/Focusable.hh
@@ -45,16 +45,6 @@ public:
         m_attentionsig(*this) { }
     virtual ~Focusable() { }
 
-    enum WindowType {
-        TYPE_NORMAL,
-        TYPE_DOCK,
-        TYPE_DESKTOP,
-        TYPE_SPLASH,
-        TYPE_DIALOG,
-        TYPE_MENU,
-        TYPE_TOOLBAR
-    };
-
     /**
      * Take focus.
      * @return true if the focuable took focus
@@ -96,9 +86,6 @@ public:
     /// @return wm role string (for pattern matching)
     virtual std::string getWMRole() const { return "Focusable"; }
 
-    /// @return window type
-    virtual WindowType getWindowType() const { return TYPE_NORMAL; }
-
     /// @return whether this window is a transient (for pattern matching)
     virtual bool isTransient() const { return false; }
 
diff --git a/src/Screen.cc b/src/Screen.cc
index 34cb829..4340ef1 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -1357,8 +1357,7 @@ FluxboxWindow *BScreen::createWindow(Window client) {
             if (workspace)
                 workspace->updateClientmenu();
         } else {
-            win = new FluxboxWindow(*winclient,
-                                    *layerManager().getLayer(Layer::NORMAL));
+            win = new FluxboxWindow(*winclient);
 
             if (!win->isManaged()) {
                 delete win;
@@ -1394,8 +1393,7 @@ FluxboxWindow *BScreen::createWindow(WinClient &client) {
         return 0;
     }
 
-    FluxboxWindow *win = new FluxboxWindow(client,
-                                           *layerManager().getLayer(Layer::NORMAL));
+    FluxboxWindow *win = new FluxboxWindow(client);
 
 #ifdef SLIT
     if (win->initialState() == WithdrawnState && slit() != 0) {
diff --git a/src/WinClient.cc b/src/WinClient.cc
index aa8c6ed..3a22e4a 100644
--- a/src/WinClient.cc
+++ b/src/WinClient.cc
@@ -77,7 +77,7 @@ WinClient::WinClient(Window win, BScreen &screen, FluxboxWindow *fbwin):
                      send_close_message(false),
                      m_title_override(false),
                      m_icon_override(false),
-                     m_window_type(Focusable::TYPE_NORMAL),
+                     m_window_type(WindowState::TYPE_NORMAL),
                      m_mwm_hint(0),
                      m_strut(0) {
 
@@ -163,8 +163,8 @@ WinClient::~WinClient() {
 bool WinClient::acceptsFocus() const {
     return ((accepts_input || send_focus_message) &&
             // focusing fbpanel messes up quite a few things
-            m_window_type != Focusable::TYPE_DOCK &&
-            m_window_type != Focusable::TYPE_SPLASH);
+            m_window_type != WindowState::TYPE_DOCK &&
+            m_window_type != WindowState::TYPE_SPLASH);
 }
 
 bool WinClient::sendFocus() {
diff --git a/src/WinClient.hh b/src/WinClient.hh
index 1903040..90c5b14 100644
--- a/src/WinClient.hh
+++ b/src/WinClient.hh
@@ -95,8 +95,8 @@ public:
     bool getWMName(XTextProperty &textprop) const;
     bool getWMIconName(XTextProperty &textprop) const;
     std::string getWMRole() const;
-    Focusable::WindowType getWindowType() const { return m_window_type; }
-    void setWindowType(Focusable::WindowType type) { m_window_type = type; }
+    WindowState::WindowType getWindowType() const { return m_window_type; }
+    void setWindowType(WindowState::WindowType type) { m_window_type = type; }
 
     WinClient *transientFor() { return transient_for; }
     const WinClient *transientFor() const { return transient_for; }
@@ -156,7 +156,7 @@ private:
     bool m_title_override;
     bool m_icon_override;
 
-    Focusable::WindowType m_window_type;
+    WindowState::WindowType m_window_type;
     MwmHints *m_mwm_hint;
     SizeHints m_size_hints;
 
diff --git a/src/Window.cc b/src/Window.cc
index 57fa1f5..7c3e36c 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -39,7 +39,6 @@
 #include "Remember.hh"
 #include "MenuCreator.hh"
 #include "FocusControl.hh"
-#include "Layer.hh"
 #include "IconButton.hh"
 #include "ScreenPlacement.hh"
 
@@ -261,7 +260,7 @@ private:
 
 int FluxboxWindow::s_num_grabs = 0;
 
-FluxboxWindow::FluxboxWindow(WinClient &client, FbTk::XLayer &layer):
+FluxboxWindow::FluxboxWindow(WinClient &client):
     Focusable(client.screen(), this),
     oplock(false),
     m_hintsig(*this),
@@ -269,7 +268,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbTk::XLayer &layer):
     m_layersig(*this),
     m_workspacesig(*this),
     m_creation_time(0),
-    moving(false), resizing(false), iconic(false), stuck(false),
+    moving(false), resizing(false),
     m_initialized(false),
     m_attaching_tab(0),
     display(FbTk::App::instance()->display()),
@@ -281,8 +280,6 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbTk::XLayer &layer):
     m_old_decoration_mask(0),
     m_client(&client),
     m_toggled_decos(false),
-    m_icon_hidden(false),
-    m_focus_hidden(false),
     m_focus_new(BoolAcc(screen().focusControl(), &FocusControl::focusNew)),
     m_mouse_focus(BoolAcc(screen().focusControl(), &FocusControl::isMouseFocus)),
     m_click_focus(true),
@@ -291,9 +288,8 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbTk::XLayer &layer):
                    screen().unfocusedWinButtonTheme()),
     m_theme(*this, screen().focusedWinFrameTheme(),
             screen().unfocusedWinFrameTheme()),
-    m_frame(client.screen(), m_theme, layer, m_state),
+    m_frame(client.screen(), m_state, m_theme),
     m_placed(false),
-    m_layernum(layer.getLayerNum()),
     m_old_layernum(0),
     m_parent(client.screen().rootWindow()),
     m_resize_corner(RIGHTBOTTOM) {
@@ -440,7 +436,7 @@ void FluxboxWindow::init() {
     /**************************************************/
 
     if (m_client->isTransient() && m_client->transientFor()->fbwindow())
-        stuck = m_client->transientFor()->fbwindow()->isStuck();
+        m_state.stuck = m_client->transientFor()->fbwindow()->isStuck();
 
     if (!m_client->sizeHints().isResizable()) {
         functions.resize = functions.maximize = false;
@@ -485,7 +481,7 @@ void FluxboxWindow::init() {
         m_client->transientFor()->fbwindow() != this)
         layerItem().setLayer(m_client->transientFor()->fbwindow()->layerItem().getLayer());
     else // if no parent then set default layer
-        moveToLayer(m_layernum, m_layernum != ::Layer::NORMAL);
+        moveToLayer(m_state.layernum, m_state.layernum != ::Layer::NORMAL);
     
     // transients should be on the same workspace as parent
     if (m_client->isTransient() &&
@@ -515,8 +511,8 @@ void FluxboxWindow::init() {
 
     setFocusFlag(false); // update graphics before mapping
 
-    if (stuck) {
-        stuck = false;
+    if (m_state.stuck) {
+        m_state.stuck = false;
         stick();
     }
 
@@ -525,11 +521,11 @@ void FluxboxWindow::init() {
         shade();
     }
 
-    if (iconic) {
-        iconic = false;
+    if (m_state.iconic) {
+        m_state.iconic = false;
         iconify();
     } else if (m_workspace_number == screen().currentWorkspaceID()) {
-        iconic = true;
+        m_state.iconic = true;
         deiconify(false);
         // check if we should prevent this window from gaining focus
         m_focused = false; // deiconify sets this
@@ -1374,7 +1370,7 @@ void FluxboxWindow::iconify() {
     if (isIconic()) // no need to iconify if we're already
         return;
 
-    iconic = true;
+    m_state.iconic = true;
     m_statesig.notify();
 
     hide(true);
@@ -1396,14 +1392,14 @@ void FluxboxWindow::iconify() {
 }
 
 void FluxboxWindow::deiconify(bool do_raise) {
-    if (numClients() == 0 || !iconic || oplock)
+    if (numClients() == 0 || !m_state.iconic || oplock)
         return;
 
     oplock = true;
 
     // reassociate first, so it gets removed from screen's icon list
     screen().reassociateWindow(this, m_workspace_number, false);
-    iconic = false;
+    m_state.iconic = false;
     m_statesig.notify();
 
     // deiconify all transients
@@ -1544,7 +1540,7 @@ void FluxboxWindow::setWorkspace(int n) {
     m_workspace_number = n;
 
     // notify workspace change
-    if (m_initialized && !stuck && old_wkspc != m_workspace_number) {
+    if (m_initialized && old_wkspc != m_workspace_number) {
 #ifdef DEBUG
         cerr<<this<<" notify workspace signal"<<endl;
 #endif // DEBUG
@@ -1553,7 +1549,7 @@ void FluxboxWindow::setWorkspace(int n) {
 }
 
 void FluxboxWindow::setLayerNum(int layernum) {
-    m_layernum = layernum;
+    m_state.layernum = layernum;
 
     if (m_initialized) {
 #ifdef DEBUG
@@ -1595,7 +1591,7 @@ void FluxboxWindow::setShaded(bool val) {
 
 void FluxboxWindow::stick() {
 
-    stuck = !stuck;
+    m_state.stuck = !m_state.stuck;
 
     if (m_initialized) {
         stateSig().notify();
@@ -1611,7 +1607,7 @@ void FluxboxWindow::stick() {
         WinClient::TransientList::const_iterator it_end = (*client_it)->transientList().end();
         for (; it != it_end; ++it) {
             if ((*it)->fbwindow())
-                (*it)->fbwindow()->setStuck(stuck);
+                (*it)->fbwindow()->setStuck(m_state.stuck);
         }
 
     }
@@ -1619,7 +1615,7 @@ void FluxboxWindow::stick() {
 }
 
 void FluxboxWindow::setStuck(bool val) {
-    if (val != stuck)
+    if (val != m_state.stuck)
         stick();
 }
 
@@ -1685,11 +1681,11 @@ void FluxboxWindow::tempRaise() {
 
 
 void FluxboxWindow::raiseLayer() {
-    moveToLayer(m_layernum-1);
+    moveToLayer(m_state.layernum-1);
 }
 
 void FluxboxWindow::lowerLayer() {
-    moveToLayer(m_layernum+1);
+    moveToLayer(m_state.layernum+1);
 }
 
 
@@ -1705,9 +1701,9 @@ void FluxboxWindow::moveToLayer(int layernum, bool force) {
         layernum = ::Layer::NUM_LAYERS - 1;
 
     if (!m_initialized)
-        m_layernum = layernum;
+        m_state.layernum = layernum;
 
-    if ((m_layernum == layernum && !force) || !m_client)
+    if ((m_state.layernum == layernum && !force) || !m_client)
         return;
 
     // get root window
@@ -1741,13 +1737,13 @@ void FluxboxWindow::moveToLayer(int layernum, bool force) {
 }
 
 void FluxboxWindow::setFocusHidden(bool value) {
-    m_focus_hidden = value;
+    m_state.focus_hidden = value;
     if (m_initialized)
         m_statesig.notify();
 }
 
 void FluxboxWindow::setIconHidden(bool value) {
-    m_icon_hidden= value;
+    m_state.icon_hidden = value;
     if (m_initialized)
         m_statesig.notify();
 }
@@ -2058,7 +2054,7 @@ void FluxboxWindow::mapNotifyEvent(XMapEvent &ne) {
     if (ne.override_redirect || !isVisible() || !client->validateClient())
         return;
 
-    iconic = false;
+    m_state.iconic = false;
 
     // setting state will cause all tabs to be mapped, but we only want the
     // original tab to be focused
@@ -3415,10 +3411,6 @@ std::string FluxboxWindow::getWMRole() const {
     return (m_client ? m_client->getWMRole() : "FluxboxWindow");
 }
 
-Focusable::WindowType FluxboxWindow::getWindowType() const {
-    return (m_client ? m_client->getWindowType() : Focusable::TYPE_NORMAL);
-}
-
 bool FluxboxWindow::isTransient() const {
     return (m_client && m_client->isTransient());
 }
@@ -3803,9 +3795,10 @@ void FluxboxWindow::placeWindow(int head) {
     move(new_x, new_y);
 }
 
-void FluxboxWindow::setWindowType(Focusable::WindowType type) {
+void FluxboxWindow::setWindowType(WindowState::WindowType type) {
+    m_state.type = type;
     switch (type) {
-    case Focusable::TYPE_DOCK:
+    case WindowState::TYPE_DOCK:
         /* From Extended Window Manager Hints, draft 1.3:
          *
          * _NET_WM_WINDOW_TYPE_DOCK indicates a dock or panel feature.
@@ -3821,7 +3814,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) {
         setDecorationMask(WindowState::DECOR_NONE);
         moveToLayer(::Layer::DOCK);
         break;
-    case Focusable::TYPE_DESKTOP:
+    case WindowState::TYPE_DESKTOP:
         /*
          * _NET_WM_WINDOW_TYPE_DESKTOP indicates a "false desktop" window
          * We let it be the size it wants, but it gets no decoration,
@@ -3837,9 +3830,9 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) {
         setTabable(false);
         setMovable(false);
         setResizable(false);
-        stick();
+        setStuck(true);
         break;
-    case Focusable::TYPE_SPLASH:
+    case WindowState::TYPE_SPLASH:
         /*
          * _NET_WM_WINDOW_TYPE_SPLASH indicates that the
          * window is a splash screen displayed as an application
@@ -3853,11 +3846,11 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) {
         setClickFocus(false);
         setMovable(false);
         break;
-    case Focusable::TYPE_DIALOG:
+    case WindowState::TYPE_DIALOG:
         setTabable(false);
         break;
-    case Focusable::TYPE_MENU:
-    case Focusable::TYPE_TOOLBAR:
+    case WindowState::TYPE_MENU:
+    case WindowState::TYPE_TOOLBAR:
         /*
          * _NET_WM_WINDOW_TYPE_TOOLBAR and _NET_WM_WINDOW_TYPE_MENU
          * indicate toolbar and pinnable menu windows, respectively
@@ -3869,7 +3862,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) {
         setIconHidden(true);
         moveToLayer(::Layer::ABOVE_DOCK);
         break;
-    case Focusable::TYPE_NORMAL:
+    case WindowState::TYPE_NORMAL:
     default:
         break;
     }
diff --git a/src/Window.hh b/src/Window.hh
index b0b8248..220cedb 100644
--- a/src/Window.hh
+++ b/src/Window.hh
@@ -122,7 +122,7 @@ public:
     typedef std::list<WinClient *> ClientList;
 
     /// create a window from a client
-    FluxboxWindow(WinClient &client, FbTk::XLayer &layer);
+    FluxboxWindow(WinClient &client);
 
     virtual ~FluxboxWindow();
 
@@ -366,11 +366,11 @@ public:
     void setMovable(bool movable) { functions.move = movable; }
     void setResizable(bool resizable) { functions.resize = resizable; }
 
-    bool isFocusHidden() const { return m_focus_hidden; }
-    bool isIconHidden() const { return m_icon_hidden; }
+    bool isFocusHidden() const { return m_state.focus_hidden; }
+    bool isIconHidden() const { return m_state.icon_hidden; }
     bool isManaged() const { return m_initialized; }
     bool isVisible() const;
-    bool isIconic() const { return iconic; }
+    bool isIconic() const { return m_state.iconic; }
     bool isShaded() const { return m_state.shaded; }
     bool isFullscreen() const { return m_state.fullscreen; }
     bool isMaximized() const { return m_state.isMaximized(); }
@@ -382,7 +382,7 @@ public:
     bool isResizable() const { return functions.resize; }
     bool isClosable() const { return functions.close; }
     bool isMoveable() const { return functions.move; }
-    bool isStuck() const { return stuck; }
+    bool isStuck() const { return m_state.stuck; }
     bool hasTitlebar() const { return decorations.titlebar; }
     bool isMoving() const { return moving; }
     bool isResizing() const { return resizing; }
@@ -416,8 +416,7 @@ public:
     const std::string &getWMClassName() const;
     const std::string &getWMClassClass() const;
     std::string getWMRole() const;
-    Focusable::WindowType getWindowType() const;
-    void setWindowType(Focusable::WindowType type);
+    void setWindowType(WindowState::WindowType type);
     bool isTransient() const;
 
     int x() const { return frame().x(); }
@@ -437,7 +436,7 @@ public:
 
     unsigned int workspaceNumber() const { return m_workspace_number; }
 
-    int layerNum() const { return m_layernum; }
+    int layerNum() const { return m_state.layernum; }
     void setLayerNum(int layernum);
 
     unsigned int titlebarHeight() const;
@@ -531,7 +530,7 @@ private:
     time_t m_creation_time;
 
     // Window states
-    bool moving, resizing, iconic, stuck, m_initialized;
+    bool moving, resizing, m_initialized;
 
     WinClient *m_attaching_tab;
 
@@ -568,8 +567,6 @@ private:
         bool resize, move, iconify, maximize, close, tabable;
     } functions;
 
-    bool m_icon_hidden;  ///< if the window is in the iconbar
-    bool m_focus_hidden; ///< if the window is in the NextWindow list
     typedef FbTk::ConstObjectAccessor<bool, FocusControl> BoolAcc;
     /// if the window is normally focused when mapped
     FbTk::DefaultValue<bool, BoolAcc> m_focus_new;
@@ -587,7 +584,6 @@ private:
 
     bool m_placed; ///< determine whether or not we should place the window
 
-    int m_layernum;
     int m_old_layernum;
 
     FbTk::FbWindow &m_parent; ///< window on which we draw move/resize rectangle  (the "root window")
diff --git a/src/WindowState.hh b/src/WindowState.hh
index ea9b635..883443a 100644
--- a/src/WindowState.hh
+++ b/src/WindowState.hh
@@ -22,6 +22,8 @@
 #ifndef WINDOWSTATE_HH
 #define WINDOWSTATE_HH
 
+#include "Layer.hh"
+
 #include <X11/Xutil.h>
 
 #include <string>
@@ -93,11 +95,24 @@ public:
         DECOR_TAB = DECORM_BORDER|DECORM_MENU|DECORM_TAB
     };
 
+    enum WindowType {
+        TYPE_NORMAL,
+        TYPE_DOCK,
+        TYPE_DESKTOP,
+        TYPE_SPLASH,
+        TYPE_DIALOG,
+        TYPE_MENU,
+        TYPE_TOOLBAR
+    };
+
     WindowState():
         size_hints(),
         deco_mask(DECOR_NORMAL),
+        type(TYPE_NORMAL),
         focused(false),
-        shaded(false), fullscreen(false), maximized(0),
+        shaded(false), fullscreen(false), stuck(false), iconic(false),
+        focus_hidden(false), icon_hidden(false),
+        maximized(0), layernum(Layer::NORMAL),
         x(0), y(0), width(1), height(1) { }
 
     void saveGeometry(int x, int y, unsigned int width, unsigned int height,
@@ -112,15 +127,16 @@ public:
     bool useTitlebar() const;
 
     bool isMaximized() const { return maximized == MAX_FULL; }
-    bool isMaximizedHorz() const { return (bool)(maximized & MAX_HORZ); }
-    bool isMaximizedVert() const { return (bool)(maximized & MAX_VERT); }
+    bool isMaximizedHorz() const { return maximized & MAX_HORZ; }
+    bool isMaximizedVert() const { return maximized & MAX_VERT; }
 
     static int getDecoMaskFromString(const std::string &str);
 
     SizeHints size_hints;
     unsigned int deco_mask;
-    bool focused, shaded, fullscreen;
-    int maximized;
+    WindowType type;
+    bool focused, shaded, fullscreen, stuck, iconic, focus_hidden, icon_hidden;
+    int maximized, layernum;
     int x, y;
     unsigned int width, height;
 };
-- 
cgit v0.11.2