moving strut into its own .hh. adding OBClient class
This commit is contained in:
parent
d017db67e4
commit
d3b7c84d4c
9 changed files with 225 additions and 201 deletions
|
@ -139,6 +139,7 @@ OBProperty::OBProperty()
|
||||||
_atoms[net_wm_state_skip_pager] = create("_NET_WM_STATE_SKIP_PAGER");
|
_atoms[net_wm_state_skip_pager] = create("_NET_WM_STATE_SKIP_PAGER");
|
||||||
_atoms[net_wm_state_hidden] = create("_NET_WM_STATE_HIDDEN");
|
_atoms[net_wm_state_hidden] = create("_NET_WM_STATE_HIDDEN");
|
||||||
_atoms[net_wm_state_fullscreen] = create("_NET_WM_STATE_FULLSCREEN");
|
_atoms[net_wm_state_fullscreen] = create("_NET_WM_STATE_FULLSCREEN");
|
||||||
|
_atoms[net_wm_state_floating] = create("_NET_WM_STATE_FLOATING");
|
||||||
|
|
||||||
_atoms[kde_net_system_tray_windows] = create("_KDE_NET_SYSTEM_TRAY_WINDOWS");
|
_atoms[kde_net_system_tray_windows] = create("_KDE_NET_SYSTEM_TRAY_WINDOWS");
|
||||||
_atoms[kde_net_wm_system_tray_window_for] =
|
_atoms[kde_net_wm_system_tray_window_for] =
|
||||||
|
|
|
@ -136,6 +136,7 @@ public:
|
||||||
net_wm_state_skip_pager,
|
net_wm_state_skip_pager,
|
||||||
net_wm_state_hidden,
|
net_wm_state_hidden,
|
||||||
net_wm_state_fullscreen,
|
net_wm_state_fullscreen,
|
||||||
|
net_wm_state_floating,
|
||||||
|
|
||||||
kde_net_system_tray_windows,
|
kde_net_system_tray_windows,
|
||||||
kde_net_wm_system_tray_window_for,
|
kde_net_wm_system_tray_window_for,
|
||||||
|
@ -317,7 +318,7 @@ public:
|
||||||
value to return
|
value to return
|
||||||
@return The value of the specified Atom
|
@return The value of the specified Atom
|
||||||
*/
|
*/
|
||||||
inline Atom atom(Atoms a) {
|
inline Atom atom(Atoms a) const {
|
||||||
assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a]; assert(ret != 0);
|
assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a]; assert(ret != 0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
28
otk/strut.hh
Normal file
28
otk/strut.hh
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
||||||
|
#ifndef __strut_hh
|
||||||
|
#define __strut_hh
|
||||||
|
|
||||||
|
/*! @file strut.hh
|
||||||
|
@brief The Strut struct defines a margin on 4 sides
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace otk {
|
||||||
|
|
||||||
|
//! Defines a margin on 4 sides
|
||||||
|
struct Strut {
|
||||||
|
//! The margin on the top of the Strut
|
||||||
|
unsigned int top;
|
||||||
|
//! The margin on the bottom of the Strut
|
||||||
|
unsigned int bottom;
|
||||||
|
//! The margin on the left of the Strut
|
||||||
|
unsigned int left;
|
||||||
|
//! The margin on the right of the Strut
|
||||||
|
unsigned int right;
|
||||||
|
|
||||||
|
//! Constructs a new Strut with no margins
|
||||||
|
Strut(void): top(0), bottom(0), left(0), right(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __strut_hh
|
|
@ -2,3 +2,4 @@
|
||||||
|
|
||||||
src/openbox.cc
|
src/openbox.cc
|
||||||
src/display.cc
|
src/display.cc
|
||||||
|
src/client.cc
|
|
@ -15,7 +15,7 @@ bin_PROGRAMS= openbox
|
||||||
|
|
||||||
openbox_LDADD=../otk/libotk.a @LIBINTL@
|
openbox_LDADD=../otk/libotk.a @LIBINTL@
|
||||||
|
|
||||||
openbox_SOURCES= configuration.cc screen.cc openbox.cc \
|
openbox_SOURCES= client.cc configuration.cc screen.cc openbox.cc \
|
||||||
util.cc bbwindow.cc workspace.cc blackbox.cc \
|
util.cc bbwindow.cc workspace.cc blackbox.cc \
|
||||||
main.cc xeventhandler.cc
|
main.cc xeventhandler.cc
|
||||||
|
|
||||||
|
|
189
src/client.hh
Normal file
189
src/client.hh
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
||||||
|
#ifndef __client_hh
|
||||||
|
#define __client_hh
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "otk/strut.hh"
|
||||||
|
#include "otk/rect.hh"
|
||||||
|
|
||||||
|
namespace ob {
|
||||||
|
|
||||||
|
class BScreen;
|
||||||
|
|
||||||
|
class OBClient {
|
||||||
|
public:
|
||||||
|
enum Max { Max_None,
|
||||||
|
Max_Horz,
|
||||||
|
Max_Vert,
|
||||||
|
Max_Full };
|
||||||
|
|
||||||
|
enum WindowType { Type_Desktop,
|
||||||
|
Type_Dock,
|
||||||
|
Type_Toolbar,
|
||||||
|
Type_Menu,
|
||||||
|
Type_Utility,
|
||||||
|
Type_Splash,
|
||||||
|
Type_Dialog,
|
||||||
|
Type_Normal };
|
||||||
|
|
||||||
|
enum MwmFlags { Functions = 1 << 0,
|
||||||
|
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 };
|
||||||
|
|
||||||
|
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 };
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum StateAction { State_Remove = 0, // _NET_WM_STATE_REMOVE
|
||||||
|
State_Add, // _NET_WM_STATE_ADD
|
||||||
|
State_Toggle // _NET_WM_STATE_TOGGLE
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
BScreen *_screen;
|
||||||
|
Window _window;
|
||||||
|
|
||||||
|
//! The id of the group the window belongs to
|
||||||
|
XID _group;
|
||||||
|
|
||||||
|
// XXX: transient_for, transients
|
||||||
|
|
||||||
|
//! The desktop on which the window resides (0xffffffff for all desktops)
|
||||||
|
unsigned int _desktop;
|
||||||
|
|
||||||
|
//! Normal window title
|
||||||
|
std::string _title;
|
||||||
|
//! Window title when iconifiged
|
||||||
|
std::string _icon_title;
|
||||||
|
|
||||||
|
//! The application that created the window
|
||||||
|
std::string _app_name;
|
||||||
|
//! The class of the window, can used for grouping
|
||||||
|
std::string _app_class;
|
||||||
|
|
||||||
|
//! The type of window (what its function is)
|
||||||
|
WindowType _type;
|
||||||
|
|
||||||
|
//! Position and size of the window (relative to the root window)
|
||||||
|
otk::Rect _area;
|
||||||
|
|
||||||
|
// size bounds
|
||||||
|
// if min > max, then the window is not resizable
|
||||||
|
int _min_x, _min_y; // minumum size
|
||||||
|
int _max_x, _max_y; // maximum size
|
||||||
|
int _inc_x, _inc_y; // resize increments
|
||||||
|
int _base_x, _base_y; // base size
|
||||||
|
|
||||||
|
//! Where to place the decorated window in relation to the undecorated window
|
||||||
|
int _gravity;
|
||||||
|
|
||||||
|
//! The state of the window, one of WithdrawnState, IconicState, or
|
||||||
|
//! NormalState
|
||||||
|
long _state;
|
||||||
|
|
||||||
|
//! Can the window receive input focus?
|
||||||
|
bool _can_focus;
|
||||||
|
//! Urgency flag
|
||||||
|
bool _urgent;
|
||||||
|
//! Notify the window when it receives focus?
|
||||||
|
bool _focus_notify;
|
||||||
|
|
||||||
|
//! The window uses shape extension to be non-rectangular?
|
||||||
|
bool _shaped;
|
||||||
|
|
||||||
|
//! The window is modal, so it must be processed before any windows it is
|
||||||
|
//! related to can be focused
|
||||||
|
bool _modal;
|
||||||
|
//! Only the window's titlebar is displayed
|
||||||
|
bool _shaded;
|
||||||
|
//! The window is iconified
|
||||||
|
bool _iconic;
|
||||||
|
//! The window is maximized to fill the screen vertically
|
||||||
|
bool _max_vert;
|
||||||
|
//! The window is maximized to fill the screen horizontally
|
||||||
|
bool _max_horz;
|
||||||
|
//! The window is a 'fullscreen' window, and should be on top of all others
|
||||||
|
bool _fullscreen;
|
||||||
|
//! The window should be on top of other windows of the same type
|
||||||
|
bool _floating;
|
||||||
|
|
||||||
|
// XXX: motif decoration hints!
|
||||||
|
|
||||||
|
void setWMState(long state);
|
||||||
|
void setDesktop(long desktop);
|
||||||
|
void setState(StateAction action, long data1, long data2);
|
||||||
|
|
||||||
|
void updateNormalHints();
|
||||||
|
void updateWMHints();
|
||||||
|
void updateTitle();
|
||||||
|
void updateClass();
|
||||||
|
|
||||||
|
public:
|
||||||
|
OBClient(BScreen *screen, Window window);
|
||||||
|
virtual ~OBClient();
|
||||||
|
|
||||||
|
inline Window window() const { return _window; }
|
||||||
|
|
||||||
|
inline WindowType type() const { return _type; }
|
||||||
|
inline unsigned int desktop() const { return _desktop; }
|
||||||
|
inline const std::string &title() const { return _title; }
|
||||||
|
inline const std::string &iconTitle() const { return _title; }
|
||||||
|
inline const std::string &appName() const { return _app_name; }
|
||||||
|
inline const std::string &appClass() const { return _app_class; }
|
||||||
|
inline bool canFocus() const { return _can_focus; }
|
||||||
|
inline bool urgent() const { return _urgent; }
|
||||||
|
inline bool focusNotify() const { return _focus_notify; }
|
||||||
|
inline bool shaped() const { return _shaped; }
|
||||||
|
inline int gravity() const { return _gravity; }
|
||||||
|
|
||||||
|
// states
|
||||||
|
inline bool modal() const { return _modal; }
|
||||||
|
inline bool shaded() const { return _shaded; }
|
||||||
|
inline bool iconic() const { return _iconic; }
|
||||||
|
inline bool maxVert() const { return _max_vert; }
|
||||||
|
inline bool maxHorz() const { return _max_horz; }
|
||||||
|
inline bool fullscreen() const { return _fullscreen; }
|
||||||
|
inline bool floating() const { return _floating; }
|
||||||
|
|
||||||
|
inline int minX() const { return _min_x; }
|
||||||
|
inline int minY() const { return _min_y; }
|
||||||
|
inline int maxX() const { return _max_x; }
|
||||||
|
inline int maxY() const { return _max_y; }
|
||||||
|
inline int incrementX() const { return _inc_x; }
|
||||||
|
inline int incrementY() const { return _inc_y; }
|
||||||
|
inline int baseX() const { return _base_x; }
|
||||||
|
inline int baseY() const { return _base_y; }
|
||||||
|
|
||||||
|
inline const otk::Rect &area() const { return _area; }
|
||||||
|
|
||||||
|
void update(const XPropertyEvent &e);
|
||||||
|
void update(const XClientMessageEvent &e);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __client_hh
|
|
@ -118,6 +118,8 @@ public:
|
||||||
*/
|
*/
|
||||||
inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; }
|
inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; }
|
||||||
|
|
||||||
|
inline const otk::OBProperty *property() const { return _property; }
|
||||||
|
|
||||||
//! The main function of the Openbox class
|
//! The main function of the Openbox class
|
||||||
/*!
|
/*!
|
||||||
This function should be called after instantiating the Openbox class.
|
This function should be called after instantiating the Openbox class.
|
||||||
|
|
|
@ -24,12 +24,6 @@ extern "C" {
|
||||||
|
|
||||||
namespace ob {
|
namespace ob {
|
||||||
|
|
||||||
struct Strut {
|
|
||||||
unsigned int top, bottom, left, right;
|
|
||||||
|
|
||||||
Strut(void): top(0), bottom(0), left(0), right(0) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* XXX: this needs autoconf help */
|
/* XXX: this needs autoconf help */
|
||||||
const unsigned int BSENTINEL = 65535;
|
const unsigned int BSENTINEL = 65535;
|
||||||
|
|
||||||
|
|
|
@ -389,15 +389,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
|
||||||
if (e.format != 32)
|
if (e.format != 32)
|
||||||
return;
|
return;
|
||||||
/*
|
/*
|
||||||
if (e->xclient.message_type == xatom->getAtom(XAtom::wm_change_state)) {
|
|
||||||
// WM_CHANGE_STATE message
|
|
||||||
BlackboxWindow *win = searchWindow(e->xclient.window);
|
|
||||||
if (! win || ! win->validateClient()) return;
|
|
||||||
|
|
||||||
if (e->xclient.data.l[0] == IconicState)
|
|
||||||
win->iconify();
|
|
||||||
if (e->xclient.data.l[0] == NormalState)
|
|
||||||
win->deiconify();
|
|
||||||
} else if (e->xclient.message_type ==
|
} else if (e->xclient.message_type ==
|
||||||
xatom->getAtom(XAtom::blackbox_change_workspace) ||
|
xatom->getAtom(XAtom::blackbox_change_workspace) ||
|
||||||
e->xclient.message_type ==
|
e->xclient.message_type ==
|
||||||
|
@ -408,13 +399,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
|
||||||
unsigned int workspace = e->xclient.data.l[0];
|
unsigned int workspace = e->xclient.data.l[0];
|
||||||
if (screen && workspace < screen->getWorkspaceCount())
|
if (screen && workspace < screen->getWorkspaceCount())
|
||||||
screen->changeWorkspaceID(workspace);
|
screen->changeWorkspaceID(workspace);
|
||||||
} else if (e->xclient.message_type ==
|
|
||||||
xatom->getAtom(XAtom::blackbox_change_window_focus)) {
|
|
||||||
// TEMP HACK TO KEEP BBKEYS WORKING
|
|
||||||
BlackboxWindow *win = searchWindow(e->xclient.window);
|
|
||||||
|
|
||||||
if (win && win->isVisible() && win->setInputFocus())
|
|
||||||
win->installColormap(True);
|
|
||||||
} else if (e->xclient.message_type ==
|
} else if (e->xclient.message_type ==
|
||||||
xatom->getAtom(XAtom::net_active_window)) {
|
xatom->getAtom(XAtom::net_active_window)) {
|
||||||
// NET_ACTIVE_WINDOW
|
// NET_ACTIVE_WINDOW
|
||||||
|
@ -436,55 +420,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
|
||||||
win->installColormap(True);
|
win->installColormap(True);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (e->xclient.message_type ==
|
|
||||||
xatom->getAtom(XAtom::blackbox_cycle_window_focus)) {
|
|
||||||
// BLACKBOX_CYCLE_WINDOW_FOCUS
|
|
||||||
BScreen *screen = searchScreen(e->xclient.window);
|
|
||||||
|
|
||||||
if (screen) {
|
|
||||||
if (! e->xclient.data.l[0])
|
|
||||||
screen->prevFocus();
|
|
||||||
else
|
|
||||||
screen->nextFocus();
|
|
||||||
}
|
|
||||||
} else if (e->xclient.message_type ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_desktop)) {
|
|
||||||
// NET_WM_DESKTOP
|
|
||||||
BlackboxWindow *win = searchWindow(e->xclient.window);
|
|
||||||
|
|
||||||
if (win) {
|
|
||||||
BScreen *screen = win->getScreen();
|
|
||||||
unsigned long wksp = (unsigned) e->xclient.data.l[0];
|
|
||||||
if (wksp < screen->getWorkspaceCount()) {
|
|
||||||
if (win->isIconic()) win->deiconify(False, True);
|
|
||||||
if (win->isStuck()) win->stick();
|
|
||||||
if (wksp != screen->getCurrentWorkspaceID())
|
|
||||||
win->withdraw();
|
|
||||||
else
|
|
||||||
win->show();
|
|
||||||
screen->reassociateWindow(win, wksp, True);
|
|
||||||
} else if (wksp == 0xfffffffe || // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
|
|
||||||
wksp == 0xffffffff) {
|
|
||||||
if (win->isIconic()) win->deiconify(False, True);
|
|
||||||
if (! win->isStuck()) win->stick();
|
|
||||||
if (! win->isVisible()) win->show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (e->xclient.message_type ==
|
|
||||||
xatom->getAtom(XAtom::blackbox_change_attributes)) {
|
|
||||||
// BLACKBOX_CHANGE_ATTRIBUTES
|
|
||||||
BlackboxWindow *win = searchWindow(e->xclient.window);
|
|
||||||
|
|
||||||
if (win && win->validateClient()) {
|
|
||||||
BlackboxHints net;
|
|
||||||
net.flags = e->xclient.data.l[0];
|
|
||||||
net.attrib = e->xclient.data.l[1];
|
|
||||||
net.workspace = e->xclient.data.l[2];
|
|
||||||
net.stack = e->xclient.data.l[3];
|
|
||||||
net.decoration = e->xclient.data.l[4];
|
|
||||||
|
|
||||||
win->changeBlackboxHints(&net);
|
|
||||||
}
|
|
||||||
} else if (e->xclient.message_type ==
|
} else if (e->xclient.message_type ==
|
||||||
xatom->getAtom(XAtom::net_number_of_desktops)) {
|
xatom->getAtom(XAtom::net_number_of_desktops)) {
|
||||||
// NET_NUMBER_OF_DESKTOPS
|
// NET_NUMBER_OF_DESKTOPS
|
||||||
|
@ -523,133 +458,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
|
||||||
win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
|
win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (e->xclient.message_type ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state)) {
|
|
||||||
// NET_WM_STATE
|
|
||||||
BlackboxWindow *win = searchWindow(e->xclient.window);
|
|
||||||
if (win && win->validateClient()) {
|
|
||||||
const Atom action = (Atom) e->xclient.data.l[0];
|
|
||||||
const Atom state[] = { (Atom) e->xclient.data.l[1],
|
|
||||||
(Atom) e->xclient.data.l[2] };
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; ++i) {
|
|
||||||
if (! state[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ((Atom) e->xclient.data.l[0] == 1) {
|
|
||||||
// ADD
|
|
||||||
if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
|
|
||||||
win->setModal(True);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
|
|
||||||
if (win->isMaximizedHoriz()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(1); // full
|
|
||||||
} else if (! win->isMaximized()) {
|
|
||||||
win->maximize(2); // vert
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
|
|
||||||
if (win->isMaximizedVert()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(1); // full
|
|
||||||
} else if (! win->isMaximized()) {
|
|
||||||
win->maximize(3); // horiz
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_shaded)) {
|
|
||||||
if (! win->isShaded())
|
|
||||||
win->shade();
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
|
|
||||||
win->setSkipTaskbar(True);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
|
|
||||||
win->setSkipPager(True);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
|
|
||||||
win->setFullscreen(True);
|
|
||||||
}
|
|
||||||
} else if (action == 0) {
|
|
||||||
// REMOVE
|
|
||||||
if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
|
|
||||||
win->setModal(False);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
|
|
||||||
if (win->isMaximizedFull()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(3); // horiz
|
|
||||||
} else if (win->isMaximizedVert()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
|
|
||||||
if (win->isMaximizedFull()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(2); // vert
|
|
||||||
} else if (win->isMaximizedHoriz()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_shaded)) {
|
|
||||||
if (win->isShaded())
|
|
||||||
win->shade();
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
|
|
||||||
win->setSkipTaskbar(False);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
|
|
||||||
win->setSkipPager(False);
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
|
|
||||||
win->setFullscreen(False);
|
|
||||||
}
|
|
||||||
} else if (action == 2) {
|
|
||||||
// TOGGLE
|
|
||||||
if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
|
|
||||||
win->setModal(! win->isModal());
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
|
|
||||||
if (win->isMaximizedFull()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(3); // horiz
|
|
||||||
} else if (win->isMaximizedVert()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
} else if (win->isMaximizedHoriz()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(1); // full
|
|
||||||
} else {
|
|
||||||
win->maximize(2); // vert
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
|
|
||||||
if (win->isMaximizedFull()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(2); // vert
|
|
||||||
} else if (win->isMaximizedHoriz()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
} else if (win->isMaximizedVert()) {
|
|
||||||
win->maximize(0); // unmaximize
|
|
||||||
win->maximize(1); // full
|
|
||||||
} else {
|
|
||||||
win->maximize(3); // horiz
|
|
||||||
}
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_shaded)) {
|
|
||||||
win->shade();
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
|
|
||||||
win->setSkipTaskbar(! win->skipTaskbar());
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
|
|
||||||
win->setSkipPager(! win->skipPager());
|
|
||||||
} else if (state[i] ==
|
|
||||||
xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
|
|
||||||
win->setFullscreen(! win->isFullscreen());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue