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

View file

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

View file

@ -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
};
};

View file

@ -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);