all repos — fluxbox @ 7b175210c8389d1a0715dfe6f04c2049f9c6a7b8

custom fork of the fluxbox windowmanager

_WIN_WORKSPACE atom and some indent
fluxgen fluxgen
commit

7b175210c8389d1a0715dfe6f04c2049f9c6a7b8

parent

ae9d3d84c99ab00b3054dab5b035065acac567b4

1 files changed, 85 insertions(+), 78 deletions(-)

jump to
M src/Window.ccsrc/Window.cc

@@ -22,7 +22,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Window.cc,v 1.23 2002/01/27 13:13:33 fluxgen Exp $ +// $Id: Window.cc,v 1.24 2002/02/04 06:53:14 fluxgen Exp $ // stupid macros needed to access some functions in version 2 of the GNU C // library

@@ -77,18 +77,18 @@ windowmenu(0),

tab(0) { -#ifdef DEBUG + #ifdef DEBUG fprintf(stderr, I18n::instance()-> getMessage( -# ifdef NLS + #ifdef NLS WindowSet, WindowCreating, -# else // !NLS + #else // !NLS 0, 0, -# endif // NLS + #endif // NLS "FluxboxWindow::FluxboxWindow(): creating 0x%lx\n"), w); -#endif // DEBUG + #endif // DEBUG Fluxbox *fluxbox = Fluxbox::instance(); display = fluxbox->getXDisplay();

@@ -116,24 +116,24 @@ for (unsigned int i=0; i<dir.size(); i++) {

switch (dir[i]) { case Fluxbox::SHADE: decorations.shade = true; - break; + break; case Fluxbox::MAXIMIZE: decorations.maximize = true; - break; + break; case Fluxbox::MINIMIZE: decorations.iconify = true; break; case Fluxbox::STICK: decorations.sticky = true; - break; + break; case Fluxbox::CLOSE: decorations.close = true; - break; + break; case Fluxbox::MENU: decorations.menu = true; - break; + break; default: - break; + break; } } //next right

@@ -161,8 +161,7 @@

// fetch client size and placement XWindowAttributes wattrib; if ((! XGetWindowAttributes(display, client.window, &wattrib)) || - (! wattrib.screen) || wattrib.override_redirect) { - //fluxbox->ungrab(); + (! wattrib.screen) || wattrib.override_redirect) { throw FluxboxWindow::XGETWINDOWATTRIB; }

@@ -197,12 +196,12 @@ getWMProtocols();

getWMHints(); getWMNormalHints(); -#ifdef SLIT + #ifdef SLIT if (client.initial_state == WithdrawnState) { screen->getSlit()->addClient(client.window); throw NOERROR; } -#endif // SLIT + #endif // SLIT managed = true; fluxbox->saveWindowSearch(client.window, this);

@@ -392,27 +391,28 @@ maximize(m);

} setFocusFlag(false); - + /* #ifdef DEBUG fprintf(stderr, "%s(%d): FluxboxWindow(this=%p)\n", __FILE__, __LINE__, this); #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); + XChangeProperty(display, client.window, screen->getBaseDisplay()->getGnomeWorkspaceAtom(), + XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&val, 1); #endif } FluxboxWindow::~FluxboxWindow(void) { + #ifdef GNOME + XDeleteProperty (display, client.window, screen->getBaseDisplay()->getGnomeWorkspaceAtom()); + #endif + Fluxbox *fluxbox = Fluxbox::instance(); - //TODO: Move this to Workspace::removeWindow - if (client.transient_for) - fluxbox->setFocusedWindow(client.transient_for); if (moving || resizing) { screen->hideGeometry();

@@ -448,6 +448,9 @@

if (client.blackbox_hint) XFree(client.blackbox_hint); + //TODO: Move this to Workspace::removeWindow + if (client.transient_for) + fluxbox->setFocusedWindow(client.transient_for); if (client.window_group) fluxbox->removeGroupSearch(client.window_group);

@@ -576,30 +579,29 @@ unsigned int borderwidth)

{ XSetWindowAttributes attrib_create; unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWColormap | - CWOverrideRedirect | CWEventMask; + CWOverrideRedirect | CWEventMask; attrib_create.background_pixmap = None; attrib_create.colormap = screen->getColormap(); attrib_create.override_redirect = True; attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | EnterWindowMask; + ButtonMotionMask | EnterWindowMask; return (XCreateWindow(display, screen->getRootWindow(), x, y, width, height, - borderwidth, screen->getDepth(), InputOutput, - screen->getVisual(), create_mask, - &attrib_create)); + borderwidth, screen->getDepth(), InputOutput, + screen->getVisual(), create_mask, + &attrib_create)); } Window FluxboxWindow::createChildWindow(Window parent, Cursor cursor) { XSetWindowAttributes attrib_create; - unsigned long create_mask = CWBackPixmap | CWBorderPixel | - CWEventMask; + unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWEventMask; attrib_create.background_pixmap = None; attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | ExposureMask | - EnterWindowMask | LeaveWindowMask; + ButtonMotionMask | ExposureMask | + EnterWindowMask | LeaveWindowMask; if (cursor) { create_mask |= CWCursor;

@@ -607,8 +609,8 @@ attrib_create.cursor = cursor;

} return (XCreateWindow(display, parent, 0, 0, 1, 1, 0, - screen->getDepth(), InputOutput, screen->getVisual(), - create_mask, &attrib_create)); + screen->getDepth(), InputOutput, screen->getVisual(), + create_mask, &attrib_create)); }

@@ -626,13 +628,13 @@ XSelectInput(display, frame.plate, SubstructureRedirectMask);

XFlush(display); - attrib_set.event_mask = PropertyChangeMask | StructureNotifyMask | - FocusChangeMask; - attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask; + attrib_set.event_mask = + PropertyChangeMask | StructureNotifyMask | FocusChangeMask; + attrib_set.do_not_propagate_mask = + ButtonPressMask | ButtonReleaseMask | ButtonMotionMask; XChangeWindowAttributes(display, client.window, CWEventMask|CWDontPropagate, - &attrib_set); + &attrib_set); #ifdef SHAPE if (Fluxbox::instance()->hasShapeExtensions()) {

@@ -642,13 +644,13 @@ int foo;

unsigned int ufoo; XShapeQueryExtents(display, client.window, &frame.shaped, &foo, &foo, - &ufoo, &ufoo, &foo, &foo, &foo, &ufoo, &ufoo); + &ufoo, &ufoo, &foo, &foo, &foo, &ufoo, &ufoo); if (frame.shaped) { XShapeCombineShape(display, frame.window, ShapeBounding, - frame.mwm_border_w, frame.y_border + - frame.mwm_border_w, client.window, - ShapeBounding, ShapeSet); + frame.mwm_border_w, frame.y_border + + frame.mwm_border_w, client.window, + ShapeBounding, ShapeSet); int num = 1; XRectangle xrect[2];

@@ -665,22 +667,23 @@ num++;

} XShapeCombineRectangles(display, frame.window, ShapeBounding, 0, 0, - xrect, num, ShapeUnion, Unsorted); + xrect, num, ShapeUnion, Unsorted); } } #endif // SHAPE //create the buttons if (decorations.iconify) - createButton(Fluxbox::MINIMIZE, FluxboxWindow::iconifyPressed_cb, FluxboxWindow::iconifyButton_cb, FluxboxWindow::iconifyDraw_cb); + createButton(Fluxbox::MINIMIZE, FluxboxWindow::iconifyPressed_cb, + FluxboxWindow::iconifyButton_cb, FluxboxWindow::iconifyDraw_cb); if (decorations.maximize) - createButton(Fluxbox::MAXIMIZE, FluxboxWindow::maximizePressed_cb, FluxboxWindow::maximizeButton_cb, - FluxboxWindow::maximizeDraw_cb); + createButton(Fluxbox::MAXIMIZE, FluxboxWindow::maximizePressed_cb, + FluxboxWindow::maximizeButton_cb, FluxboxWindow::maximizeDraw_cb); if (decorations.close) createButton(Fluxbox::CLOSE, FluxboxWindow::closePressed_cb, - FluxboxWindow::closeButton_cb, FluxboxWindow::closeDraw_cb); + FluxboxWindow::closeButton_cb, FluxboxWindow::closeDraw_cb); if (decorations.sticky) createButton(Fluxbox::STICK, FluxboxWindow::stickyPressed_cb, - FluxboxWindow::stickyButton_cb, FluxboxWindow::stickyDraw_cb); + FluxboxWindow::stickyButton_cb, FluxboxWindow::stickyDraw_cb); if (decorations.menu)//TODO createButton(Fluxbox::MENU, 0, 0, 0);

@@ -758,7 +761,7 @@ image_ctrl->renderImage(frame.width, frame.title_h, texture);

if (tmp) image_ctrl->removeImage(tmp); XSetWindowBorder(display, frame.title, - screen->getBorderColor()->getPixel()); + screen->getBorderColor()->getPixel()); decorateLabel();

@@ -821,7 +824,7 @@ screen->getBorderColor()->getPixel());

} XSetWindowBorder(display, frame.window, - screen->getBorderColor()->getPixel()); + screen->getBorderColor()->getPixel()); }

@@ -860,10 +863,10 @@ buttonlist.push_back(b);

} Window FluxboxWindow::findTitleButton(int type) { - for (unsigned int i=0; i<buttonlist.size(); i++) + for (unsigned int i=0; i<buttonlist.size(); i++) { if (buttonlist[i].type == type) return buttonlist[i].win; - + } return 0; } void FluxboxWindow::stickyButton_cb(FluxboxWindow *t, XButtonEvent *be) {

@@ -914,26 +917,25 @@ void FluxboxWindow::stickyDraw_cb(FluxboxWindow *t, Window w, bool pressed) {

t->drawButtonBase(w, pressed); if (t->stuck) { XFillRectangle(t->display, w, - ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : - t->screen->getWindowStyle()->b_pic_unfocus_gc), - t->frame.button_w/2-t->frame.button_w/4, t->frame.button_h/2-t->frame.button_h/4, - t->frame.button_w/2, t->frame.button_h/2); + ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : + t->screen->getWindowStyle()->b_pic_unfocus_gc), + t->frame.button_w/2-t->frame.button_w/4, t->frame.button_h/2-t->frame.button_h/4, + t->frame.button_w/2, t->frame.button_h/2); } else { XFillRectangle(t->display, w, - ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : - t->screen->getWindowStyle()->b_pic_unfocus_gc), - t->frame.button_w/2, t->frame.button_h/2, - t->frame.button_w/5, t->frame.button_h/5); + ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : + t->screen->getWindowStyle()->b_pic_unfocus_gc), + t->frame.button_w/2, t->frame.button_h/2, + t->frame.button_w/5, t->frame.button_h/5); } } void FluxboxWindow::iconifyDraw_cb(FluxboxWindow *t, Window w, bool pressed) { t->drawButtonBase(w, pressed); XDrawRectangle(t->display, w, - ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : - t->screen->getWindowStyle()->b_pic_unfocus_gc), - 2, t->frame.button_h - 5, t->frame.button_w - 5, 2); - + ((t->focused) ? t->screen->getWindowStyle()->b_pic_focus_gc : + t->screen->getWindowStyle()->b_pic_unfocus_gc), + 2, t->frame.button_h - 5, t->frame.button_w - 5, 2); } void FluxboxWindow::maximizeDraw_cb(FluxboxWindow *t, Window w, bool pressed) {

@@ -1065,7 +1067,7 @@

//Draw the label frame.label_w = lw - by; XMoveResizeWindow(display, frame.label, lx, frame.bevel_w, - frame.label_w, frame.label_h); + frame.label_w, frame.label_h); if (redecorate_label) decorateLabel(); if (tab) {

@@ -1537,6 +1539,10 @@

void FluxboxWindow::configure(int dx, int dy, unsigned int dw, unsigned int dh) { + //we don't want negative size + if (dw <0 || dh<0) + return; + bool send_event = (frame.x != dx || frame.y != dy); if ((dw != frame.width) || (dh != frame.height)) {

@@ -1598,7 +1604,7 @@

if (send_event && ! moving) { client.x = dx + frame.mwm_border_w + screen->getBorderWidth(); client.y = dy + frame.y_border + frame.mwm_border_w + - screen->getBorderWidth(); + screen->getBorderWidth(); XEvent event; event.type = ConfigureNotify;

@@ -2079,7 +2085,8 @@ blackbox_attrib.flags |= BaseDisplay::ATTRIB_OMNIPRESENT;

blackbox_attrib.attrib |= BaseDisplay::ATTRIB_OMNIPRESENT; } - + //find a STICK button in window + redrawAllButtons(); setState(current_state); }

@@ -2530,17 +2537,17 @@

void FluxboxWindow::unmapNotifyEvent(XUnmapEvent *ue) { if (ue->window == client.window) { -#ifdef DEBUG + #ifdef DEBUG fprintf(stderr, I18n::instance()->getMessage( -#ifdef NLS - WindowSet, WindowUnmapNotify, -#else // !NLS - 0, 0, -#endif // NLS - "FluxboxWindow::unmapNotifyEvent() for 0x%lx\n"), - client.window); -#endif // DEBUG + #ifdef NLS + WindowSet, WindowUnmapNotify, + #else // !NLS + 0, 0, + #endif // NLS + "FluxboxWindow::unmapNotifyEvent() for 0x%lx\n"), + client.window); + #endif // DEBUG Fluxbox *fluxbox = Fluxbox::instance(); BaseDisplay::GrabGuard gg(*fluxbox);

@@ -3099,7 +3106,7 @@ CurrentTime);

resizing = true; - fluxbox->grab(); +// fluxbox->grab(); int gx, gy; frame.grab_x = me->x - screen->getBorderWidth();