X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWindow.cc;h=dcbb5f08afc55654e5c2f1806fd7d6cbaf33670a;hb=7f001973a8154b1fa9db110092c438b862f81c3b;hp=72643c2de73d4bddf8faa6cc9a28d36e67d913bb;hpb=923c381dc177aa64b1da847ae6a27bff19ec817c;p=chaz%2Fopenbox diff --git a/src/Window.cc b/src/Window.cc index 72643c2d..dcbb5f08 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -475,7 +475,13 @@ Window BlackboxWindow::createToplevelWindow(void) { attrib_create.background_pixmap = None; attrib_create.colormap = screen->getColormap(); attrib_create.override_redirect = True; - attrib_create.event_mask = EnterWindowMask | LeaveWindowMask; + attrib_create.event_mask = EnterWindowMask | LeaveWindowMask | + ButtonPress; + /* + We catch button presses because other wise they get passed down to the + root window, which will then cause root menus to show when you click the + window's frame. + */ return XCreateWindow(blackbox->getXDisplay(), screen->getRootWindow(), 0, 0, 1, 1, frame.border_w, screen->getDepth(), @@ -2681,7 +2687,7 @@ void BlackboxWindow::redrawCloseButton(bool pressed) const { XClearWindow(blackbox->getXDisplay(), frame.close_button); BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus : - screen->getWindowStyle()->b_pic_unfocus, 0, 2); + screen->getWindowStyle()->b_pic_unfocus); XDrawLine(blackbox->getXDisplay(), frame.close_button, pen.gc(), 2, 2, (frame.button_w - 3), (frame.button_w - 3)); XDrawLine(blackbox->getXDisplay(), frame.close_button, pen.gc(), @@ -2736,7 +2742,8 @@ void BlackboxWindow::mapRequestEvent(const XMapRequestEvent *re) { Even though the window wants to be shown, if it is not on the current workspace, then it isn't going to be shown right now. */ - if (blackbox_attrib.workspace != screen->getCurrentWorkspaceID() && + if (! flags.stuck && + blackbox_attrib.workspace != screen->getCurrentWorkspaceID() && blackbox_attrib.workspace < screen->getWorkspaceCount()) if (current_state == NormalState) current_state = WithdrawnState; @@ -3859,10 +3866,15 @@ void BlackboxWindow::enterNotifyEvent(const XCrossingEvent* ce) { bool success = setInputFocus(); if (success) // if focus succeeded install the colormap installColormap(True); // XXX: shouldnt we honour no install? - } - if (screen->doAutoRaise()) - timer->start(); + /* + We only auto-raise when the window wasn't focused because otherwise + we run into problems with gtk+ drop-down lists. The window ends up + raising over the list. + */ + if (screen->doAutoRaise()) + timer->start(); + } } }