moved BlackboxHints from BaseDisplay

This commit is contained in:
fluxgen 2003-05-10 14:27:57 +00:00
parent c9638d0473
commit 08b94c6243
2 changed files with 87 additions and 60 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Window.cc,v 1.165 2003/05/08 15:14:50 rathnor Exp $ // $Id: Window.cc,v 1.166 2003/05/10 14:27:57 fluxgen Exp $
#include "Window.hh" #include "Window.hh"
@ -213,6 +213,9 @@ void LayerMenuItem<FluxboxWindow>::click(int button, int time) {
} }
//int FluxboxWindow::PropBlackboxHintsElements = 5;
//int FluxboxWindow::PropBlackboxAttributesElements = 8;
FluxboxWindow::FluxboxWindow(WinClient &client, BScreen &scr, FbWinFrameTheme &tm, FluxboxWindow::FluxboxWindow(WinClient &client, BScreen &scr, FbWinFrameTheme &tm,
FbTk::MenuTheme &menutheme, FbTk::MenuTheme &menutheme,
FbTk::XLayer &layer): FbTk::XLayer &layer):
@ -1050,33 +1053,33 @@ void FluxboxWindow::getBlackboxHints() {
(unsigned char **) &m_client->blackbox_hint) == Success && (unsigned char **) &m_client->blackbox_hint) == Success &&
m_client->blackbox_hint) { m_client->blackbox_hint) {
if (num == PropBlackboxHintsElements) { if (num == (unsigned)PropBlackboxHintsElements) {
if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_SHADED) if (m_client->blackbox_hint->flags & ATTRIB_SHADED)
shaded = (m_client->blackbox_hint->attrib & BaseDisplay::ATTRIB_SHADED); shaded = (m_client->blackbox_hint->attrib & ATTRIB_SHADED);
if ((m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_MAXHORIZ) && if ((m_client->blackbox_hint->flags & ATTRIB_MAXHORIZ) &&
(m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_MAXVERT)) (m_client->blackbox_hint->flags & ATTRIB_MAXVERT))
maximized = ((m_client->blackbox_hint->attrib & maximized = ((m_client->blackbox_hint->attrib &
(BaseDisplay::ATTRIB_MAXHORIZ | (ATTRIB_MAXHORIZ |
BaseDisplay::ATTRIB_MAXVERT)) ? 1 : 0); ATTRIB_MAXVERT)) ? 1 : 0);
else if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_MAXVERT) else if (m_client->blackbox_hint->flags & ATTRIB_MAXVERT)
maximized = ((m_client->blackbox_hint->attrib & maximized = ((m_client->blackbox_hint->attrib &
BaseDisplay::ATTRIB_MAXVERT) ? 2 : 0); ATTRIB_MAXVERT) ? 2 : 0);
else if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_MAXHORIZ) else if (m_client->blackbox_hint->flags & ATTRIB_MAXHORIZ)
maximized = ((m_client->blackbox_hint->attrib & maximized = ((m_client->blackbox_hint->attrib &
BaseDisplay::ATTRIB_MAXHORIZ) ? 3 : 0); ATTRIB_MAXHORIZ) ? 3 : 0);
if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_OMNIPRESENT) if (m_client->blackbox_hint->flags & ATTRIB_OMNIPRESENT)
stuck = (m_client->blackbox_hint->attrib & stuck = (m_client->blackbox_hint->attrib &
BaseDisplay::ATTRIB_OMNIPRESENT); ATTRIB_OMNIPRESENT);
if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_WORKSPACE) if (m_client->blackbox_hint->flags & ATTRIB_WORKSPACE)
workspace_number = m_client->blackbox_hint->workspace; workspace_number = m_client->blackbox_hint->workspace;
if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_STACK) if (m_client->blackbox_hint->flags & ATTRIB_STACK)
workspace_number = m_client->blackbox_hint->stack; workspace_number = m_client->blackbox_hint->stack;
if (m_client->blackbox_hint->flags & BaseDisplay::ATTRIB_DECORATION) { if (m_client->blackbox_hint->flags & ATTRIB_DECORATION) {
old_decoration = static_cast<Decoration>(m_client->blackbox_hint->decoration); old_decoration = static_cast<Decoration>(m_client->blackbox_hint->decoration);
setDecoration(old_decoration); setDecoration(old_decoration);
} }
@ -1363,7 +1366,7 @@ void FluxboxWindow::setWorkspace(int n) {
workspace_number = n; workspace_number = n;
blackbox_attrib.flags |= BaseDisplay::ATTRIB_WORKSPACE; blackbox_attrib.flags |= ATTRIB_WORKSPACE;
blackbox_attrib.workspace = workspace_number; blackbox_attrib.workspace = workspace_number;
// notify workspace change // notify workspace change
@ -1376,7 +1379,7 @@ void FluxboxWindow::setWorkspace(int n) {
void FluxboxWindow::setLayerNum(int layernum) { void FluxboxWindow::setLayerNum(int layernum) {
m_layernum = layernum; m_layernum = layernum;
blackbox_attrib.flags |= BaseDisplay::ATTRIB_STACK; blackbox_attrib.flags |= ATTRIB_STACK;
blackbox_attrib.stack = layernum; blackbox_attrib.stack = layernum;
saveBlackboxHints(); saveBlackboxHints();
@ -1396,14 +1399,14 @@ void FluxboxWindow::shade() {
if (shaded) { if (shaded) {
shaded = false; shaded = false;
blackbox_attrib.flags ^= BaseDisplay::ATTRIB_SHADED; blackbox_attrib.flags ^= ATTRIB_SHADED;
blackbox_attrib.attrib ^= BaseDisplay::ATTRIB_SHADED; blackbox_attrib.attrib ^= ATTRIB_SHADED;
setState(NormalState); setState(NormalState);
} else { } else {
shaded = true; shaded = true;
blackbox_attrib.flags |= BaseDisplay::ATTRIB_SHADED; blackbox_attrib.flags |= ATTRIB_SHADED;
blackbox_attrib.attrib |= BaseDisplay::ATTRIB_SHADED; blackbox_attrib.attrib |= ATTRIB_SHADED;
// shading is the same as iconic // shading is the same as iconic
setState(IconicState); setState(IconicState);
} }
@ -1414,16 +1417,16 @@ void FluxboxWindow::shade() {
void FluxboxWindow::stick() { void FluxboxWindow::stick() {
if (stuck) { if (stuck) {
blackbox_attrib.flags ^= BaseDisplay::ATTRIB_OMNIPRESENT; blackbox_attrib.flags ^= ATTRIB_OMNIPRESENT;
blackbox_attrib.attrib ^= BaseDisplay::ATTRIB_OMNIPRESENT; blackbox_attrib.attrib ^= ATTRIB_OMNIPRESENT;
stuck = false; stuck = false;
} else { } else {
stuck = true; stuck = true;
blackbox_attrib.flags |= BaseDisplay::ATTRIB_OMNIPRESENT; blackbox_attrib.flags |= ATTRIB_OMNIPRESENT;
blackbox_attrib.attrib |= BaseDisplay::ATTRIB_OMNIPRESENT; blackbox_attrib.attrib |= ATTRIB_OMNIPRESENT;
} }
@ -1774,13 +1777,13 @@ void FluxboxWindow::restoreAttributes() {
unsigned long ulfoo, nitems; unsigned long ulfoo, nitems;
FbAtoms *fbatoms = FbAtoms::instance(); FbAtoms *fbatoms = FbAtoms::instance();
BaseDisplay::BlackboxAttributes *net; BlackboxAttributes *net;
if (XGetWindowProperty(display, m_client->window(), if (XGetWindowProperty(display, m_client->window(),
fbatoms->getFluxboxAttributesAtom(), 0l, fbatoms->getFluxboxAttributesAtom(), 0l,
PropBlackboxAttributesElements, false, PropBlackboxAttributesElements, false,
fbatoms->getFluxboxAttributesAtom(), &atom_return, &foo, fbatoms->getFluxboxAttributesAtom(), &atom_return, &foo,
&nitems, &ulfoo, (unsigned char **) &net) == &nitems, &ulfoo, (unsigned char **) &net) ==
Success && net && nitems == PropBlackboxAttributesElements) { Success && net && nitems == (unsigned)PropBlackboxAttributesElements) {
blackbox_attrib.flags = net->flags; blackbox_attrib.flags = net->flags;
blackbox_attrib.attrib = net->attrib; blackbox_attrib.attrib = net->attrib;
blackbox_attrib.workspace = net->workspace; blackbox_attrib.workspace = net->workspace;
@ -1794,8 +1797,8 @@ void FluxboxWindow::restoreAttributes() {
} else } else
return; return;
if (blackbox_attrib.flags & BaseDisplay::ATTRIB_SHADED && if (blackbox_attrib.flags & ATTRIB_SHADED &&
blackbox_attrib.attrib & BaseDisplay::ATTRIB_SHADED) { blackbox_attrib.attrib & ATTRIB_SHADED) {
int save_state = int save_state =
((current_state == IconicState) ? NormalState : current_state); ((current_state == IconicState) ? NormalState : current_state);
@ -1812,29 +1815,29 @@ void FluxboxWindow::restoreAttributes() {
} else if (current_state == WithdrawnState) } else if (current_state == WithdrawnState)
current_state = NormalState; current_state = NormalState;
if (blackbox_attrib.flags & BaseDisplay::ATTRIB_OMNIPRESENT && if (blackbox_attrib.flags & ATTRIB_OMNIPRESENT &&
blackbox_attrib.attrib & BaseDisplay::ATTRIB_OMNIPRESENT) { blackbox_attrib.attrib & ATTRIB_OMNIPRESENT) {
stuck = true; stuck = true;
current_state = NormalState; current_state = NormalState;
} }
if (blackbox_attrib.flags & BaseDisplay::ATTRIB_STACK) { if (blackbox_attrib.flags & ATTRIB_STACK) {
//!! TODO check value? //!! TODO check value?
m_layernum = blackbox_attrib.stack; m_layernum = blackbox_attrib.stack;
} }
if ((blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXHORIZ) || if ((blackbox_attrib.flags & ATTRIB_MAXHORIZ) ||
(blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXVERT)) { (blackbox_attrib.flags & ATTRIB_MAXVERT)) {
int x = blackbox_attrib.premax_x, y = blackbox_attrib.premax_y; int x = blackbox_attrib.premax_x, y = blackbox_attrib.premax_y;
unsigned int w = blackbox_attrib.premax_w, h = blackbox_attrib.premax_h; unsigned int w = blackbox_attrib.premax_w, h = blackbox_attrib.premax_h;
maximized = false; maximized = false;
if ((blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXHORIZ) && if ((blackbox_attrib.flags & ATTRIB_MAXHORIZ) &&
(blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXVERT)) (blackbox_attrib.flags & ATTRIB_MAXVERT))
maximized = true; maximized = true;
else if (blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXVERT) else if (blackbox_attrib.flags & ATTRIB_MAXVERT)
maximizeVertical(); maximizeVertical();
else if (blackbox_attrib.flags & BaseDisplay::ATTRIB_MAXHORIZ) else if (blackbox_attrib.flags & ATTRIB_MAXHORIZ)
maximizeHorizontal(); maximizeHorizontal();
blackbox_attrib.premax_x = x; blackbox_attrib.premax_x = x;
@ -3071,34 +3074,34 @@ unsigned int FluxboxWindow::getClientHeight() const { return m_client->height();
unsigned int FluxboxWindow::getClientWidth() const { return m_client->width(); } unsigned int FluxboxWindow::getClientWidth() const { return m_client->width(); }
int FluxboxWindow::initialState() const { return m_client->initial_state; } int FluxboxWindow::initialState() const { return m_client->initial_state; }
void FluxboxWindow::changeBlackboxHints(const BaseDisplay::BlackboxHints &net) { void FluxboxWindow::changeBlackboxHints(const BlackboxHints &net) {
if ((net.flags & BaseDisplay::ATTRIB_SHADED) && if ((net.flags & ATTRIB_SHADED) &&
((blackbox_attrib.attrib & BaseDisplay::ATTRIB_SHADED) != ((blackbox_attrib.attrib & ATTRIB_SHADED) !=
(net.attrib & BaseDisplay::ATTRIB_SHADED))) (net.attrib & ATTRIB_SHADED)))
shade(); shade();
if ((net.flags & (BaseDisplay::ATTRIB_MAXVERT | BaseDisplay::ATTRIB_MAXHORIZ)) && if ((net.flags & (ATTRIB_MAXVERT | ATTRIB_MAXHORIZ)) &&
((blackbox_attrib.attrib & (BaseDisplay::ATTRIB_MAXVERT | BaseDisplay::ATTRIB_MAXHORIZ)) != ((blackbox_attrib.attrib & (ATTRIB_MAXVERT | ATTRIB_MAXHORIZ)) !=
(net.attrib & (BaseDisplay::ATTRIB_MAXVERT | BaseDisplay::ATTRIB_MAXHORIZ)))) { (net.attrib & (ATTRIB_MAXVERT | ATTRIB_MAXHORIZ)))) {
if (maximized) { if (maximized) {
maximize(); maximize();
} else { } else {
if ((net.flags & BaseDisplay::ATTRIB_MAXHORIZ) && (net.flags & BaseDisplay::ATTRIB_MAXVERT)) if ((net.flags & ATTRIB_MAXHORIZ) && (net.flags & ATTRIB_MAXVERT))
maximize(); maximize();
else if (net.flags & BaseDisplay::ATTRIB_MAXVERT) else if (net.flags & ATTRIB_MAXVERT)
maximizeVertical(); maximizeVertical();
else if (net.flags & BaseDisplay::ATTRIB_MAXHORIZ) else if (net.flags & ATTRIB_MAXHORIZ)
maximizeHorizontal(); maximizeHorizontal();
} }
} }
if ((net.flags & BaseDisplay::ATTRIB_OMNIPRESENT) && if ((net.flags & ATTRIB_OMNIPRESENT) &&
((blackbox_attrib.attrib & BaseDisplay::ATTRIB_OMNIPRESENT) != ((blackbox_attrib.attrib & ATTRIB_OMNIPRESENT) !=
(net.attrib & BaseDisplay::ATTRIB_OMNIPRESENT))) (net.attrib & ATTRIB_OMNIPRESENT)))
stick(); stick();
if ((net.flags & BaseDisplay::ATTRIB_WORKSPACE) && if ((net.flags & ATTRIB_WORKSPACE) &&
(workspace_number != net.workspace)) { (workspace_number != net.workspace)) {
screen.reassociateWindow(this, net.workspace, true); screen.reassociateWindow(this, net.workspace, true);
@ -3109,13 +3112,13 @@ void FluxboxWindow::changeBlackboxHints(const BaseDisplay::BlackboxHints &net) {
deiconify(); deiconify();
} }
if (net.flags & BaseDisplay::ATTRIB_STACK) { if (net.flags & ATTRIB_STACK) {
if ((unsigned int) m_layernum != net.stack) { if ((unsigned int) m_layernum != net.stack) {
moveToLayer(net.stack); moveToLayer(net.stack);
} }
} }
if (net.flags & BaseDisplay::ATTRIB_DECORATION) { if (net.flags & ATTRIB_DECORATION) {
old_decoration = static_cast<Decoration>(net.decoration); old_decoration = static_cast<Decoration>(net.decoration);
setDecoration(old_decoration); setDecoration(old_decoration);
} }

View file

@ -22,12 +22,11 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Window.hh,v 1.67 2003/05/07 16:21:26 rathnor Exp $ // $Id: Window.hh,v 1.68 2003/05/10 14:23:29 fluxgen Exp $
#ifndef WINDOW_HH #ifndef WINDOW_HH
#define WINDOW_HH #define WINDOW_HH
#include "BaseDisplay.hh"
#include "Timer.hh" #include "Timer.hh"
#include "Menu.hh" #include "Menu.hh"
#include "Subject.hh" #include "Subject.hh"
@ -100,6 +99,31 @@ public:
MwmDecorMaximize = (1l << 6) /// maximize MwmDecorMaximize = (1l << 6) /// maximize
}; };
/// attributes for BlackboxHints
enum Attrib {
ATTRIB_SHADED = 0x01,
ATTRIB_MAXHORIZ = 0x02,
ATTRIB_MAXVERT = 0x04,
ATTRIB_OMNIPRESENT = 0x08,
ATTRIB_WORKSPACE = 0x10,
ATTRIB_STACK = 0x20,
ATTRIB_DECORATION = 0x40
};
static const int PropBlackboxHintsElements = 5;
static const int PropBlackboxAttributesElements = 8;
typedef struct _blackbox_hints {
unsigned long flags, attrib, workspace, stack;
int decoration;
} BlackboxHints;
typedef struct _blackbox_attributes {
unsigned long flags, attrib, workspace, stack;
int premax_x, premax_y;
unsigned int premax_w, premax_h;
} BlackboxAttributes;
typedef std::list<WinClient *> ClientList; typedef std::list<WinClient *> ClientList;
/// create a window from a client /// create a window from a client
@ -174,7 +198,7 @@ public:
void moveResize(int x, int y, unsigned int width, unsigned int height); void moveResize(int x, int y, unsigned int width, unsigned int height);
void setWorkspace(int n); void setWorkspace(int n);
void changeBlackboxHints(const BaseDisplay::BlackboxHints &bh); void changeBlackboxHints(const BlackboxHints &bh);
void restoreAttributes(); void restoreAttributes();
void showMenu(int mx, int my); void showMenu(int mx, int my);
// popup menu on last button press position // popup menu on last button press position
@ -388,7 +412,7 @@ private:
BScreen &screen; /// screen on which this window exist BScreen &screen; /// screen on which this window exist
FbTk::Timer timer; FbTk::Timer timer;
Display *display; /// display connection Display *display; /// display connection
BaseDisplay::BlackboxAttributes blackbox_attrib; BlackboxAttributes blackbox_attrib;
Time lastButtonPressTime; Time lastButtonPressTime;
FbTk::Menu m_windowmenu; FbTk::Menu m_windowmenu;