make struts get added to the screen when mapping a window. let the user disable window decorations.

This commit is contained in:
Dana Jansens 2003-01-29 21:48:46 +00:00
parent 5f89f11dd3
commit 44d653e3e8
4 changed files with 107 additions and 14 deletions

View file

@ -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(); 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() bool Client::focus()
{ {
// won't try focus if the client doesn't want it, or if the window isn't // won't try focus if the client doesn't want it, or if the window isn't

View file

@ -326,6 +326,12 @@ private:
*/ */
DecorationFlags _decorations; 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 //! A bitmask of values in the Client::Function enum
/*! /*!
The values in the variable specify the ways in which the user is allowed to 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 //! Returns the decorations that the client window wishes to be displayed on
//! it //! it
inline DecorationFlags decorations() const { return _decorations; } 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 //! Returns the functions that the user can perform on the window
inline FunctionFlags funtions() const { return _functions; } 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); 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 //! Attempt to focus the client window
bool focus(); 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. been unmapped/destroyed, and so is invalid.
*/ */
bool validate() const; bool validate() const;
virtual void focusHandler(const XFocusChangeEvent &e); virtual void focusHandler(const XFocusChangeEvent &e);
virtual void unfocusHandler(const XFocusChangeEvent &e); virtual void unfocusHandler(const XFocusChangeEvent &e);
virtual void propertyHandler(const XPropertyEvent &e); virtual void propertyHandler(const XPropertyEvent &e);

View file

@ -36,8 +36,10 @@ struct MouseContext {
AllDesktopsButton, AllDesktopsButton,
Grip, Grip,
Root, Root,
MenuItem, MenuItem
NUM_MOUSE_CONTEXT #if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
, NUM_MOUSE_CONTEXT
#endif
}; };
}; };
@ -46,40 +48,80 @@ struct MouseAction {
Press, Press,
Click, Click,
DoubleClick, DoubleClick,
Motion, Motion
NUM_MOUSE_ACTION #if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
, NUM_MOUSE_ACTION
#endif
}; };
}; };
struct KeyContext { struct KeyContext {
enum KC { enum KC {
Menu, Menu,
All, All
NUM_KEY_CONTEXT #if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
, NUM_KEY_CONTEXT
#endif
}; };
}; };
struct KeyAction { struct KeyAction {
enum KA { enum KA {
Press, Press,
Release, Release
NUM_KEY_ACTION #if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
, NUM_KEY_ACTION
#endif
}; };
}; };
struct EventAction { struct EventAction {
enum EA { enum EA {
EnterWindow, EnterWindow, //!< Occurs when the mouse enters a window
LeaveWindow, 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, 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, NewWindow,
//! Occurs when a window has been closed and is going to be unmanaged
CloseWindow, CloseWindow,
//! Occurs when the window manager manages a screen
/*!
This event occurs on each managed screen during startup.
*/
Startup, Startup,
//! Occurs when the window manager unmanages a screen
/*!
This event occurs on each managed screen during shutdown.
*/
Shutdown, Shutdown,
//! Occurs when the input focus target changes
/*!
The data.client will be None of no client is focused.
*/
Focus, 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, Bell,
UrgentWindow, //! Occurs when a client toggles its urgent status.
NUM_EVENTS /*!
The Client::urgent method can be used to get the status.
*/
UrgentWindow
#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG))
, NUM_EVENTS
#endif
}; };
}; };

View file

@ -520,6 +520,9 @@ void Screen::manageWindow(Window window)
openbox->bindings()->fireEvent(&data); openbox->bindings()->fireEvent(&data);
} }
EventData data(_number, client, EventAction::DisplayingWindow, 0);
openbox->bindings()->fireEvent(&data);
// if on the current desktop.. (or all desktops) // if on the current desktop.. (or all desktops)
if (client->desktop() == _desktop || if (client->desktop() == _desktop ||
client->desktop() == (signed)0xffffffff) { client->desktop() == (signed)0xffffffff) {
@ -532,6 +535,9 @@ void Screen::manageWindow(Window window)
// add to the screen's list // add to the screen's list
clients.push_back(client); 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 // this puts into the stacking order, then raises it
_stacking.push_back(client); _stacking.push_back(client);
raiseWindow(client); raiseWindow(client);
@ -540,7 +546,6 @@ void Screen::manageWindow(Window window)
openbox->bindings()->grabButtons(true, client); openbox->bindings()->grabButtons(true, client);
// call the python NEWWINDOW binding
EventData data(_number, client, EventAction::NewWindow, 0); EventData data(_number, client, EventAction::NewWindow, 0);
openbox->bindings()->fireEvent(&data); openbox->bindings()->fireEvent(&data);