From 7b175210c8389d1a0715dfe6f04c2049f9c6a7b8 Mon Sep 17 00:00:00 2001 From: fluxgen Date: Mon, 4 Feb 2002 06:53:14 +0000 Subject: _WIN_WORKSPACE atom and some indent --- src/Window.cc | 163 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 85 insertions(+), 78 deletions(-) diff --git a/src/Window.cc b/src/Window.cc index c2f66e1..67d772c 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -22,7 +22,7 @@ // 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 @@ tab(0) 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 @@ tab(0) // 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 @@ tab(0) 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 @@ tab(0) } 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 @@ FluxboxWindow::~FluxboxWindow(void) { 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 @@ Window FluxboxWindow::createToplevelWindow(int x, int y, unsigned int width, { 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 @@ Window FluxboxWindow::createChildWindow(Window parent, 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 @@ void FluxboxWindow::associateClientWindow(void) { 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 @@ void FluxboxWindow::associateClientWindow(void) { 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 @@ void FluxboxWindow::associateClientWindow(void) { } 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 @@ void FluxboxWindow::decorate(void) { if (tmp) image_ctrl->removeImage(tmp); XSetWindowBorder(display, frame.title, - screen->getBorderColor()->getPixel()); + screen->getBorderColor()->getPixel()); decorateLabel(); @@ -821,7 +824,7 @@ void FluxboxWindow::decorate(void) { } XSetWindowBorder(display, frame.window, - screen->getBorderColor()->getPixel()); + screen->getBorderColor()->getPixel()); } @@ -860,10 +863,10 @@ void FluxboxWindow::createButton(int type, ButtonEventProc pressed, ButtonEventP } Window FluxboxWindow::findTitleButton(int type) { - for (unsigned int i=0; idrawButtonBase(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 @@ void FluxboxWindow::positionButtons(bool redecorate_label) { //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::getBlackboxHints(void) { 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 @@ void FluxboxWindow::configure(int dx, int dy, 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 @@ void FluxboxWindow::stick(void) { blackbox_attrib.attrib |= BaseDisplay::ATTRIB_OMNIPRESENT; } - + //find a STICK button in window + redrawAllButtons(); setState(current_state); } @@ -2530,17 +2537,17 @@ void FluxboxWindow::mapNotifyEvent(XMapEvent *ne) { 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 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent *me) { resizing = true; - fluxbox->grab(); +// fluxbox->grab(); int gx, gy; frame.grab_x = me->x - screen->getBorderWidth(); -- cgit v0.11.2