all repos — openbox @ 44d653e3e8d042bf3f1d68108a8197a895888da8

openbox fork - make it a bit more like ryudo

make struts get added to the screen when mapping a window. let the user disable window decorations.
Dana Jansens danakj@orodu.net
commit

44d653e3e8d042bf3f1d68108a8197a895888da8

parent

5f89f11dd3b69c0881273f32cfd4f113f744fae7

4 files changed, 107 insertions(+), 14 deletions(-)

jump to
M src/client.ccsrc/client.cc

@@ -288,6 +288,23 @@ // _functions &= ~Func_Close;

} } + // 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(); }

@@ -1319,6 +1336,15 @@ openbox->screen(_screen)->raiseWindow(this);

// try focus us when we go into fullscreen mode if (fs) focus(); +} + + +void Client::disableDecorations(DecorationFlags flags) +{ + _disabled_decorations = flags; + setupDecorAndFunctions(); + if (frame) + frame->adjustSize(); // change the decors on the frame }
M src/client.hhsrc/client.hh

@@ -326,6 +326,12 @@ displayed around it.

*/ 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 @@ inline bool positionRequested() const { return _positioned; }

//! 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 @@ @param h The height component of the new size for the client.

*/ 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 @@ @return true if the client is valid; false if the client has already

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);
M src/python.hhsrc/python.hh

@@ -36,8 +36,10 @@ IconifyButton,

AllDesktopsButton, Grip, Root, - MenuItem, - NUM_MOUSE_CONTEXT + MenuItem +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_MOUSE_CONTEXT +#endif }; };

@@ -46,40 +48,80 @@ enum MA {

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 }; };
M src/screen.ccsrc/screen.cc

@@ -520,6 +520,9 @@ EventData data(_number, client, EventAction::PlaceWindow, 0);

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 @@ otk::display->ungrab();

// 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 @@ changeClientList();

openbox->bindings()->grabButtons(true, client); - // call the python NEWWINDOW binding EventData data(_number, client, EventAction::NewWindow, 0); openbox->bindings()->fireEvent(&data);