getArea();
getDesktop();
getType();
- getMwmHints();
+
+ // set the decorations and functions
+ switch (_type) {
+ case Type_Normal:
+ // normal windows retain all of the possible decorations and
+ // functionality
+ _decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
+ Decor_Iconify | Decor_Maximize;
+ _functions = Func_Resize | Func_Move | Func_Iconify | Func_Maximize;
+
+ case Type_Dialog:
+ // dialogs cannot be maximized
+ _decorations &= ~Decor_Maximize;
+ _functions &= ~Func_Maximize;
+ break;
+
+ case Type_Menu:
+ case Type_Toolbar:
+ case Type_Utility:
+ // these windows get less functionality
+ _decorations &= ~(Decor_Iconify | Decor_Handle);
+ _functions &= ~(Func_Iconify | Func_Resize);
+ break;
+
+ case Type_Desktop:
+ case Type_Dock:
+ case Type_Splash:
+ // none of these windows are manipulated by the window manager
+ _decorations = 0;
+ _functions = 0;
+ break;
+ }
+
+ getMwmHints(); // this fucks (in good ways) with the decors and functions
getState();
getShaped();
//else
_type = Type_Normal;
}
-
- // set the decorations and functions based on the type of the window
}
-void OBClient::getMWMHints()
+void OBClient::getMwmHints()
{
const otk::OBProperty *property = Openbox::instance->property();
// Mwm Hints are applied subtractively to what has already been chosen for
// decor and functionality
- if (hints->flags & MwmDecorations) {
+ if (hints->flags & MwmFlag_Decorations) {
if (! (hints->decorations & MwmDecor_All)) {
if (! (hints->decorations & MwmDecor_Border))
_decorations &= ~Decor_Border;
}
}
- _mwm_functions = 0xffffffff; // everything!
-
- if (hints->flags & MwmFunctions) {
+ if (hints->flags & MwmFlag_Functions) {
if (! (hints->functions & MwmFunc_All)) {
- _mwm_functions = hints->functions;
-
if (! (hints->functions & MwmFunc_Resize))
- functions &= ~Func_Resize;
+ _functions &= ~Func_Resize;
if (! (hints->functions & MwmFunc_Move))
- functions &= ~Func_Move;
+ _functions &= ~Func_Move;
if (! (hints->functions & MwmFunc_Iconify))
- functions &= ~Func_Iconify;
+ _functions &= ~Func_Iconify;
if (! (hints->functions & MwmFunc_Maximize))
- functions &= ~Func_Maximize;
- if (! (hints->functions & MwmFunc_Close))
- functions &= ~Func_Close;
+ _functions &= ~Func_Maximize;
+ //if (! (hints->functions & MwmFunc_Close))
+ // _functions &= ~Func_Close;
}
}
delete [] hints;
if (XGetWMProtocols(otk::OBDisplay::display, _window, &proto, &num_return)) {
for (int i = 0; i < num_return; ++i) {
if (proto[i] == property->atom(otk::OBProperty::wm_delete_window)) {
- // add the close button/functionality only if the mwm hints didnt
- // exclude it
- if (_mwm_functions & MwmFunc_Close) {
- decorations |= Decor_Close;
- functions |= Func_Close;
- // XXX: update the decor?
- }
+ _decorations |= Decor_Close;
+ _functions |= Func_Close;
+ // XXX: update the decor?
} else if (proto[i] == property->atom(otk::OBProperty::wm_take_focus))
// if this protocol is requested, then the window will be notified
// by the window manager whenever it receives focus
Type_Dialog,
Type_Normal };
- enum MwmFlags { MwmFunctions = 1 << 0,
- MwmDecorations = 1 << 1 };
+ enum MwmFlags { MwmFlag_Functions = 1 << 0,
+ MwmFlag_Decorations = 1 << 1 };
enum MwmFunctions { MwmFunc_All = 1 << 0,
MwmFunc_Resize = 1 << 1,
MwmFunc_Move = 1 << 2,
MwmFunc_Iconify = 1 << 3,
- MwmFunc_Maximize = 1 << 4,
- MwmFunc_Close = 1 << 5 };
+ MwmFunc_Maximize = 1 << 4
+ //MwmFunc_Close = 1 << 5
+ };
- enum MemDecorations { MemDecor_All = 1 << 0,
- MemDecor_Border = 1 << 1,
- MemDecor_Handle = 1 << 2,
- MemDecor_Title = 1 << 3,
- //MemDecor_Menu = 1 << 4,
- MemDecor_Iconify = 1 << 5,
- MemDecor_Maximize = 1 << 6 };
+ enum MemDecorations { MwmDecor_All = 1 << 0,
+ MwmDecor_Border = 1 << 1,
+ MwmDecor_Handle = 1 << 2,
+ MwmDecor_Title = 1 << 3,
+ //MwmDecor_Menu = 1 << 4,
+ MwmDecor_Iconify = 1 << 5,
+ MwmDecor_Maximize = 1 << 6 };
// the things the user can do to the client window
enum Function { Func_Resize = 1 << 0,
// this structure only contains 3 elements... the Motif 2.0 structure
// contains 5... we only need the first 3... so that is all we will define
typedef struct MwmHints {
- static const int elements = 3;
+ static const unsigned int elements = 3;
unsigned long flags;
unsigned long functions;
unsigned long decorations;
*/
DecorationFlags _decorations;
- //! The functions requested by the Mwm Hints
- int _mwm_functions;
-
//! A bitmask of values in the OBClient::Function enum
/*!
The values in the variable specify the ways in which the user is allowed to