added gnome win state

This commit is contained in:
fluxgen 2002-02-07 14:41:52 +00:00
parent 8043a7f303
commit 52ed056621

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.24 2002/02/04 06:53:14 fluxgen Exp $ // $Id: Window.cc,v 1.25 2002/02/07 14:41:52 fluxgen Exp $
// stupid macros needed to access some functions in version 2 of the GNU C // stupid macros needed to access some functions in version 2 of the GNU C
// library // library
@ -196,7 +196,8 @@ tab(0)
getWMHints(); getWMHints();
getWMNormalHints(); getWMNormalHints();
#ifdef SLIT #ifdef SLIT
if (client.initial_state == WithdrawnState) { if (client.initial_state == WithdrawnState) {
screen->getSlit()->addClient(client.window); screen->getSlit()->addClient(client.window);
throw NOERROR; throw NOERROR;
@ -391,17 +392,15 @@ tab(0)
} }
setFocusFlag(false); setFocusFlag(false);
/*
#ifdef GNOME
updateGnomeAtoms();
#endif
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "%s(%d): FluxboxWindow(this=%p)\n", __FILE__, __LINE__, this); fprintf(stderr, "%s(%d): FluxboxWindow(this=%p)\n", __FILE__, __LINE__, this);
#endif #endif
*/
//TODO move this
#ifdef GNOME
int val = workspace_number;
XChangeProperty(display, client.window, screen->getBaseDisplay()->getGnomeWorkspaceAtom(),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&val, 1);
#endif
} }
@ -573,9 +572,10 @@ void FluxboxWindow::showError(FluxboxWindow::Error error) {
#endif // DEBUG #endif // DEBUG
} }
Window FluxboxWindow::createToplevelWindow(int x, int y, unsigned int width, Window FluxboxWindow::createToplevelWindow(
unsigned int height, int x, int y, unsigned int width,
unsigned int borderwidth) unsigned int height,
unsigned int borderwidth)
{ {
XSetWindowAttributes attrib_create; XSetWindowAttributes attrib_create;
unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWColormap | unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWColormap |
@ -861,6 +861,39 @@ void FluxboxWindow::createButton(int type, ButtonEventProc pressed, ButtonEventP
b.released = released; b.released = released;
buttonlist.push_back(b); buttonlist.push_back(b);
} }
#ifdef GNOME
void FluxboxWindow::updateGnomeAtoms() {
int val = workspace_number;
XChangeProperty(display, client.window, screen->getBaseDisplay()->getGnomeWorkspaceAtom(),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&val, 1);
long state = getGnomeWindowState();
XChangeProperty(display, client.window, screen->getBaseDisplay()->getGnomeStateAtom(),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&state, 1);
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): 0x"<<hex<<screen->getBaseDisplay()->getGnomeStateAtom()<<dec<<endl;
#endif
}
long FluxboxWindow::getGnomeWindowState() {
long state=0;
if (isStuck())
state |= BaseDisplay::WIN_STATE_STICKY;
if (isIconic())
state |= BaseDisplay::WIN_STATE_MINIMIZED;
if (isShaded())
state |= BaseDisplay::WIN_STATE_SHADED;
/*TODO: states:
WIN_STATE_MAXIMIZED_VERT = (1<<2), // window in maximized V state
WIN_STATE_MAXIMIZED_HORIZ = (1<<3), // window in maximized H state
WIN_STATE_HIDDEN = (1<<4), // not on taskbar but window visible
WIN_STATE_HID_WORKSPACE = (1<<6), // not on current desktop
WIN_STATE_HID_TRANSIENT = (1<<7), // owner of transient is hidden
WIN_STATE_FIXED_POSITION = (1<<8), // window is fixed in position even
WIN_STATE_ARRANGE_IGNORE = (1<<9) // ignore for auto arranging
*/
return state;
}
#endif //!GNOME
Window FluxboxWindow::findTitleButton(int type) { Window FluxboxWindow::findTitleButton(int type) {
for (unsigned int i=0; i<buttonlist.size(); i++) { for (unsigned int i=0; i<buttonlist.size(); i++) {
@ -1720,6 +1753,7 @@ void FluxboxWindow::setTab(bool flag) {
//-------------------------------------- //--------------------------------------
void FluxboxWindow::iconify(void) { void FluxboxWindow::iconify(void) {
if (iconic) if (iconic)
return; return;
@ -1748,9 +1782,10 @@ void FluxboxWindow::iconify(void) {
if (tab) //if this window got a tab then iconify it too if (tab) //if this window got a tab then iconify it too
tab->iconify(); tab->iconify();
if (client.transient) if (client.transient) {
if (! client.transient->iconic) if (! client.transient->iconic)
client.transient->iconify(); client.transient->iconify();
}
} }