2000-03-24 22:23:02 +00:00
|
|
|
/*****************************************************************
|
|
|
|
kwin - the KDE window manager
|
2000-06-22 18:08:35 +00:00
|
|
|
|
2000-03-24 22:23:02 +00:00
|
|
|
Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
|
|
|
|
******************************************************************/
|
1999-08-19 23:26:42 +00:00
|
|
|
#ifndef OPTIONS_H
|
|
|
|
#define OPTIONS_H
|
|
|
|
|
1999-11-25 12:53:17 +00:00
|
|
|
#include <qobject.h>
|
1999-10-10 03:22:21 +00:00
|
|
|
#include <qfont.h>
|
1999-10-11 02:00:06 +00:00
|
|
|
#include <qpalette.h>
|
|
|
|
|
|
|
|
// increment this when you add a color type (mosfet)
|
2000-04-28 15:53:00 +00:00
|
|
|
#define KWINCOLORS 6
|
1999-08-19 23:26:42 +00:00
|
|
|
|
1999-11-25 12:53:17 +00:00
|
|
|
class Options : public QObject {
|
|
|
|
Q_OBJECT
|
1999-08-19 23:26:42 +00:00
|
|
|
public:
|
|
|
|
|
1999-11-25 12:53:17 +00:00
|
|
|
Options();
|
|
|
|
~Options();
|
1999-11-25 16:05:27 +00:00
|
|
|
|
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
/*!
|
|
|
|
Different focus policies:
|
|
|
|
<ul>
|
1999-09-27 16:02:44 +00:00
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
<li>ClickToFocus - Clicking into a window activates it. This is
|
|
|
|
also the default.
|
1999-09-27 16:02:44 +00:00
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
<li>FocusFollowsMouse - Moving the mouse pointer actively onto a
|
2000-06-22 18:08:35 +00:00
|
|
|
normal window activates it. For convenience, the desktop and
|
|
|
|
windows on the dock are excluded. They require clicking.
|
1999-09-27 16:02:44 +00:00
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
<li>FocusUnderMouse - The window that happens to be under the
|
2000-06-22 18:08:35 +00:00
|
|
|
mouse pointer becomes active. The invariant is: no window can
|
|
|
|
have focus that is not under the mouse. This also means that
|
|
|
|
Alt-Tab won't work properly and popup dialogs are usually
|
|
|
|
unsable with the keyboard. Note that the desktop and windows on
|
|
|
|
the dock are excluded for convenience. They get focus only when
|
|
|
|
clicking on it.
|
|
|
|
|
|
|
|
<li>FocusStrictlyUnderMouse - this is even worse than
|
|
|
|
FocusUnderMouse. Only the window under the mouse pointer is
|
|
|
|
active. If the mouse points nowhere, nothing has the focus. If
|
|
|
|
the mouse points onto the desktop, the desktop has focus. The
|
|
|
|
same holds for windows on the dock.
|
1999-09-27 16:02:44 +00:00
|
|
|
|
1999-12-22 04:49:43 +00:00
|
|
|
Note that FocusUnderMouse and FocusStrictlyUnderMouse are not
|
1999-08-19 23:26:42 +00:00
|
|
|
particulary useful. They are only provided for old-fashined
|
|
|
|
die-hard UNIX people ;-)
|
1999-09-27 16:02:44 +00:00
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
</ul>
|
|
|
|
*/
|
1999-12-22 04:49:43 +00:00
|
|
|
enum FocusPolicy { ClickToFocus, FocusFollowsMouse, FocusUnderMouse, FocusStrictlyUnderMouse };
|
1999-08-19 23:26:42 +00:00
|
|
|
FocusPolicy focusPolicy;
|
1999-11-25 12:53:17 +00:00
|
|
|
|
2000-06-22 18:08:35 +00:00
|
|
|
|
1999-10-10 03:22:21 +00:00
|
|
|
/**
|
2000-06-22 18:08:35 +00:00
|
|
|
Different Alt-Tab-Styles:
|
|
|
|
<ul>
|
|
|
|
|
|
|
|
<li> KDE - the recommended KDE style. Alt-Tab opens a nice icon
|
|
|
|
box that makes it easy to select the window you want to tab
|
|
|
|
to. The order automatically adjusts to the most recently used
|
|
|
|
windows. Note that KDE style does not work with the
|
|
|
|
FocusUnderMouse and FocusStrictlyUnderMouse focus
|
|
|
|
policies. Choose ClickToFocus or FocusFollowsMouse instead.
|
|
|
|
|
|
|
|
<li> CDE - the old-fashion CDE style. Alt-Tab cycles between
|
|
|
|
the windows in static order. The current window gets raised,
|
|
|
|
the previous window gets lowered.
|
|
|
|
|
|
|
|
</ul>
|
1999-10-10 03:22:21 +00:00
|
|
|
*/
|
2000-06-22 18:08:35 +00:00
|
|
|
enum AltTabStyle { KDE, CDE };
|
|
|
|
AltTabStyle altTabStyle;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
MoveResizeMode, either Tranparent or Opaque.
|
|
|
|
*/
|
|
|
|
enum MoveResizeMode { Transparent, Opaque };
|
1999-10-10 03:22:21 +00:00
|
|
|
|
1999-09-27 16:02:44 +00:00
|
|
|
MoveResizeMode resizeMode;
|
|
|
|
MoveResizeMode moveMode;
|
1999-08-19 23:26:42 +00:00
|
|
|
|
1999-11-16 08:53:02 +00:00
|
|
|
/**
|
|
|
|
* Placement policies. How workspace decides the way windows get positioned
|
|
|
|
* on the screen. The better the policy, the heavier the resource use.
|
|
|
|
* Normally you don't have to worry. What the WM adds to the startup time
|
|
|
|
* is nil compared to the creation of the window itself in the memory
|
|
|
|
*/
|
1999-11-20 06:27:07 +00:00
|
|
|
enum PlacementPolicy { Random, Smart, Cascade };
|
1999-11-16 08:53:02 +00:00
|
|
|
PlacementPolicy placement;
|
|
|
|
|
1999-08-19 23:26:42 +00:00
|
|
|
bool focusPolicyIsReasonable() {
|
1999-10-10 03:22:21 +00:00
|
|
|
return focusPolicy == ClickToFocus || focusPolicy == FocusFollowsMouse;
|
1999-08-19 23:26:42 +00:00
|
|
|
}
|
|
|
|
|
2000-06-22 18:08:35 +00:00
|
|
|
/**
|
|
|
|
* Basic color types that should be recognized by all decoration styles.
|
|
|
|
* Not all styles have to implement all the colors, but for the ones that
|
|
|
|
* are implemented you should retrieve them here.
|
|
|
|
*/
|
|
|
|
// increment KWINCOLORS if you add something (mosfet)
|
|
|
|
enum ColorType{TitleBar=0, TitleBlend, Font, ButtonBg, Frame, Handle};
|
|
|
|
|
1999-10-10 03:22:21 +00:00
|
|
|
/**
|
|
|
|
* Return the color for the given decoration.
|
|
|
|
*/
|
|
|
|
const QColor& color(ColorType type, bool active=true);
|
1999-10-11 02:00:06 +00:00
|
|
|
/**
|
|
|
|
* Return a colorgroup using the given decoration color as the background
|
|
|
|
*/
|
|
|
|
const QColorGroup& colorGroup(ColorType type, bool active=true);
|
1999-10-10 03:22:21 +00:00
|
|
|
/**
|
|
|
|
* Return the active or inactive decoration font.
|
|
|
|
*/
|
|
|
|
const QFont& font(bool active=true);
|
1999-11-20 06:27:07 +00:00
|
|
|
/**
|
|
|
|
* Return whether we animate the shading of windows to titlebar or not
|
|
|
|
*/
|
|
|
|
const bool animateShade() { return animate_shade; };
|
|
|
|
/**
|
|
|
|
* Return the number of animation steps (would this be general?)
|
|
|
|
*/
|
|
|
|
const int animSteps() { return anim_steps; };
|
1999-11-25 23:12:32 +00:00
|
|
|
/**
|
|
|
|
* Return the size of the zone that triggers snapping on desktop borders
|
|
|
|
*/
|
|
|
|
const int borderSnapZone() { return border_snap_zone; };
|
|
|
|
/**
|
|
|
|
* Return the number of animation steps (would this be general?)
|
|
|
|
*/
|
|
|
|
const int windowSnapZone() { return window_snap_zone; };
|
1999-11-29 02:06:41 +00:00
|
|
|
|
2000-03-24 22:23:02 +00:00
|
|
|
|
|
|
|
|
1999-11-29 02:06:41 +00:00
|
|
|
// mouse bindings
|
2000-03-24 22:23:02 +00:00
|
|
|
|
1999-11-29 02:06:41 +00:00
|
|
|
enum WindowOperation{
|
|
|
|
MaximizeOp = 5000,
|
|
|
|
RestoreOp,
|
|
|
|
IconifyOp,
|
|
|
|
MoveOp,
|
|
|
|
ResizeOp,
|
|
|
|
CloseOp,
|
|
|
|
StickyOp,
|
|
|
|
ShadeOp,
|
|
|
|
OperationsOp,
|
|
|
|
NoOp
|
|
|
|
};
|
|
|
|
|
|
|
|
WindowOperation operationTitlebarDblClick() { return OpTitlebarDblClick; }
|
2000-03-24 22:23:02 +00:00
|
|
|
|
1999-11-29 02:06:41 +00:00
|
|
|
enum MouseCommand {
|
|
|
|
MouseRaise, MouseLower, MouseOperationsMenu, MouseToggleRaiseAndLower,
|
|
|
|
MouseActivateAndRaise, MouseActivateAndLower, MouseActivate,
|
|
|
|
MouseActivateRaiseAndPassClick, MouseActivateAndPassClick,
|
|
|
|
MouseMove, MouseResize, MouseNothing
|
|
|
|
};
|
|
|
|
|
2000-03-24 22:23:02 +00:00
|
|
|
MouseCommand commandActiveTitlebar1() { return CmdActiveTitlebar1; }
|
1999-11-29 02:06:41 +00:00
|
|
|
MouseCommand commandActiveTitlebar2() { return CmdActiveTitlebar2; }
|
|
|
|
MouseCommand commandActiveTitlebar3() { return CmdActiveTitlebar3; }
|
|
|
|
MouseCommand commandInactiveTitlebar1() { return CmdInactiveTitlebar1; }
|
|
|
|
MouseCommand commandInactiveTitlebar2() { return CmdInactiveTitlebar2; }
|
|
|
|
MouseCommand commandInactiveTitlebar3() { return CmdInactiveTitlebar3; }
|
|
|
|
MouseCommand commandWindow1() { return CmdWindow1; }
|
|
|
|
MouseCommand commandWindow2() { return CmdWindow2; }
|
|
|
|
MouseCommand commandWindow3() { return CmdWindow3; }
|
|
|
|
MouseCommand commandAll1() { return CmdAll1; }
|
|
|
|
MouseCommand commandAll2() { return CmdAll2; }
|
|
|
|
MouseCommand commandAll3() { return CmdAll3; }
|
|
|
|
|
2000-03-24 22:23:02 +00:00
|
|
|
|
1999-11-29 02:06:41 +00:00
|
|
|
static WindowOperation windowOperation(const QString &name );
|
|
|
|
static MouseCommand mouseCommand(const QString &name);
|
|
|
|
|
1999-11-25 12:53:17 +00:00
|
|
|
|
|
|
|
public slots:
|
1999-10-10 03:22:21 +00:00
|
|
|
void reload();
|
1999-11-25 16:05:27 +00:00
|
|
|
|
2000-01-23 23:33:29 +00:00
|
|
|
signals:
|
|
|
|
void resetClients();
|
2000-03-24 22:23:02 +00:00
|
|
|
|
1999-10-10 03:22:21 +00:00
|
|
|
protected:
|
|
|
|
QFont activeFont, inactiveFont;
|
1999-10-11 02:00:06 +00:00
|
|
|
QColor colors[KWINCOLORS*2];
|
|
|
|
QColorGroup *cg[KWINCOLORS*2];
|
1999-11-20 06:27:07 +00:00
|
|
|
|
|
|
|
private:
|
1999-11-29 02:06:41 +00:00
|
|
|
bool animate_shade;
|
|
|
|
int anim_steps;
|
|
|
|
int border_snap_zone, window_snap_zone;
|
|
|
|
|
2000-03-24 22:23:02 +00:00
|
|
|
|
1999-11-29 02:06:41 +00:00
|
|
|
WindowOperation OpTitlebarDblClick;
|
|
|
|
|
|
|
|
// mouse bindings
|
|
|
|
MouseCommand CmdActiveTitlebar1;
|
|
|
|
MouseCommand CmdActiveTitlebar2;
|
|
|
|
MouseCommand CmdActiveTitlebar3;
|
|
|
|
MouseCommand CmdInactiveTitlebar1;
|
|
|
|
MouseCommand CmdInactiveTitlebar2;
|
|
|
|
MouseCommand CmdInactiveTitlebar3;
|
|
|
|
MouseCommand CmdWindow1;
|
|
|
|
MouseCommand CmdWindow2;
|
|
|
|
MouseCommand CmdWindow3;
|
|
|
|
MouseCommand CmdAll1;
|
|
|
|
MouseCommand CmdAll2;
|
|
|
|
MouseCommand CmdAll3;
|
1999-08-19 23:26:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern Options* options;
|
|
|
|
|
|
|
|
#endif
|