summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-29 21:48:46 +0000
committerDana Jansens <danakj@orodu.net>2003-01-29 21:48:46 +0000
commit44d653e3e8d042bf3f1d68108a8197a895888da8 (patch)
tree4260520e37122d167a5aeb87c7f6670bce7b5601 /src
parent5f89f11dd3b69c0881273f32cfd4f113f744fae7 (diff)
make struts get added to the screen when mapping a window. let the user disable window decorations.
Diffstat (limited to 'src')
-rw-r--r--src/client.cc26
-rw-r--r--src/client.hh22
-rw-r--r--src/python.hh66
-rw-r--r--src/screen.cc7
4 files changed, 107 insertions, 14 deletions
diff --git a/src/client.cc b/src/client.cc
index 3939b0c6..e9136df4 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -288,6 +288,23 @@ void Client::setupDecorAndFunctions()
}
}
+ // finally, user specified disabled decorations are applied to subtract
+ // decorations
+ if (_disabled_decorations & Decor_Titlebar)
+ _decorations &= ~Decor_Titlebar;
+ if (_disabled_decorations & Decor_Handle)
+ _decorations &= ~Decor_Handle;
+ if (_disabled_decorations & Decor_Border)
+ _decorations &= ~Decor_Border;
+ if (_disabled_decorations & Decor_Iconify)
+ _decorations &= ~Decor_Iconify;
+ if (_disabled_decorations & Decor_Maximize)
+ _decorations &= ~Decor_Maximize;
+ if (_disabled_decorations & Decor_AllDesktops)
+ _decorations &= ~Decor_AllDesktops;
+ if (_disabled_decorations & Decor_Close)
+ _decorations &= ~Decor_Close;
+
changeAllowedActions();
}
@@ -1322,6 +1339,15 @@ void Client::fullscreen(bool fs)
}
+void Client::disableDecorations(DecorationFlags flags)
+{
+ _disabled_decorations = flags;
+ setupDecorAndFunctions();
+ if (frame)
+ frame->adjustSize(); // change the decors on the frame
+}
+
+
bool Client::focus()
{
// won't try focus if the client doesn't want it, or if the window isn't
diff --git a/src/client.hh b/src/client.hh
index 4bc7a517..2a55d992 100644
--- a/src/client.hh
+++ b/src/client.hh
@@ -326,6 +326,12 @@ private:
*/
DecorationFlags _decorations;
+ //! A bitmask of values in the Client::Decoration enum.
+ /*!
+ Specifies the decorations that should NOT be displayed on the client.
+ */
+ DecorationFlags _disabled_decorations;
+
//! A bitmask of values in the Client::Function enum
/*!
The values in the variable specify the ways in which the user is allowed to
@@ -527,6 +533,10 @@ BB @param window The window id that the Client class should handle
//! Returns the decorations that the client window wishes to be displayed on
//! it
inline DecorationFlags decorations() const { return _decorations; }
+ //! Returns the decorations that the user has requested to be disabled on the
+ //! client
+ inline DecorationFlags disabledDecorations() const
+ { return _disabled_decorations; }
//! Returns the functions that the user can perform on the window
inline FunctionFlags funtions() const { return _functions; }
@@ -596,6 +606,16 @@ BB @param window The window id that the Client class should handle
*/
void resize(Corner anchor, int w, int h);
+ //! Choose a mask of decorations to not display on the client
+ /*!
+ Pass a value of 0 to the function to turn all decorations back on. Note
+ that you cannot add decorations to a window with this, you can only remove
+ decorations that would otherwise have been displayed.
+ @param flags The mask of values from Client::Decoration to specify which
+ decorations should not be displayed.
+ */
+ void disableDecorations(DecorationFlags flags);
+
//! Attempt to focus the client window
bool focus();
@@ -609,7 +629,7 @@ BB @param window The window id that the Client class should handle
been unmapped/destroyed, and so is invalid.
*/
bool validate() const;
-
+
virtual void focusHandler(const XFocusChangeEvent &e);
virtual void unfocusHandler(const XFocusChangeEvent &e);
virtual void propertyHandler(const XPropertyEvent &e);
diff --git a/src/python.hh b/src/python.hh
index ac5bd3e1..42b9726f 100644
--- a/src/python.hh
+++ b/src/python.hh
@@ -36,8 +36,10 @@ struct MouseContext {
AllDesktopsButton,
Grip,
Root,
- MenuItem,
- NUM_MOUSE_CONTEXT
+ MenuItem
+#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
+ , NUM_MOUSE_CONTEXT
+#endif
};
};
@@ -46,40 +48,80 @@ struct MouseAction {
Press,
Click,
DoubleClick,
- Motion,
- NUM_MOUSE_ACTION
+ Motion
+#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
+ , NUM_MOUSE_ACTION
+#endif
};
};
struct KeyContext {
enum KC {
Menu,
- All,
- NUM_KEY_CONTEXT
+ All
+#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
+ , NUM_KEY_CONTEXT
+#endif
};
};
struct KeyAction {
enum KA {
Press,
- Release,
- NUM_KEY_ACTION
+ Release
+#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
+ , NUM_KEY_ACTION
+#endif
};
};
struct EventAction {
enum EA {
- EnterWindow,
- LeaveWindow,
+ EnterWindow, //!< Occurs when the mouse enters a window
+ LeaveWindow, //!< Occurs when the mouse leaves a window
+ //! Occurs while a window is being managed. The handler should call
+ //! Client::move to the window
PlaceWindow,
+ //! Occurs while a window is being managed, just before the window is
+ //! displayed
+ /*!
+ Note that the window's state may not be completely stabilized by this
+ point. The NewWindow event should be used when possible.
+ */
+ DisplayingWindow,
+ //! Occurs when a window is finished being managed
NewWindow,
+ //! Occurs when a window has been closed and is going to be unmanaged
CloseWindow,
+ //! Occurs when the window manager manages a screen
+ /*!
+ This event occurs on each managed screen during startup.
+ */
Startup,
+ //! Occurs when the window manager unmanages a screen
+ /*!
+ This event occurs on each managed screen during shutdown.
+ */
Shutdown,
+ //! Occurs when the input focus target changes
+ /*!
+ The data.client will be None of no client is focused.
+ */
Focus,
+ //! Occurs when the system is fired through X.
+ /*!
+ The data.client will hold the client associated with the bell if
+ one has been specified, or None.
+ */
Bell,
- UrgentWindow,
- NUM_EVENTS
+ //! Occurs when a client toggles its urgent status.
+ /*!
+ The Client::urgent method can be used to get the status.
+ */
+ UrgentWindow
+#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
+ , NUM_EVENTS
+#endif
};
};
diff --git a/src/screen.cc b/src/screen.cc
index e2bab5c8..d47a1540 100644
--- a/src/screen.cc
+++ b/src/screen.cc
@@ -520,6 +520,9 @@ void Screen::manageWindow(Window window)
openbox->bindings()->fireEvent(&data);
}
+ EventData data(_number, client, EventAction::DisplayingWindow, 0);
+ openbox->bindings()->fireEvent(&data);
+
// if on the current desktop.. (or all desktops)
if (client->desktop() == _desktop ||
client->desktop() == (signed)0xffffffff) {
@@ -532,6 +535,9 @@ void Screen::manageWindow(Window window)
// add to the screen's list
clients.push_back(client);
+ // once the client is in the list, update our strut to include the new
+ // client's
+ updateStrut();
// this puts into the stacking order, then raises it
_stacking.push_back(client);
raiseWindow(client);
@@ -540,7 +546,6 @@ void Screen::manageWindow(Window window)
openbox->bindings()->grabButtons(true, client);
- // call the python NEWWINDOW binding
EventData data(_number, client, EventAction::NewWindow, 0);
openbox->bindings()->fireEvent(&data);