#include "i18n.hh"
#include "blackbox.hh"
+#include "Clientmenu.hh"
#include "Font.hh"
#include "GCCache.hh"
#include "Iconmenu.hh"
client.rect.setRect(wattrib.x, wattrib.y, wattrib.width, wattrib.height);
client.old_bw = wattrib.border_width;
- timer = 0;
windowmenu = 0;
lastButtonPressTime = 0;
+ timer = new BTimer(blackbox, this);
+ timer->setTimeout(blackbox->getAutoRaiseDelay());
+
+ if (! getBlackboxHints()) {
+ getMWMHints();
+ getNetWMHints();
+ }
+
// get size, aspect, minimum/maximum size and other hints set by the
// client
getWMProtocols();
return;
}
- timer = new BTimer(blackbox, this);
- timer->setTimeout(blackbox->getAutoRaiseDelay());
-
- if (! getBlackboxHints()) {
- getMWMHints();
- getNetWMHints();
- }
-
frame.window = createToplevelWindow();
frame.plate = createChildWindow(frame.window);
associateClientWindow();
void BlackboxWindow::grabButtons(void) {
- if ((! screen->isSloppyFocus()) || screen->doClickRaise())
+ if (! screen->isSloppyFocus() || screen->doClickRaise())
// grab button 1 for changing focus/raising
blackbox->grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
- GrabModeSync, GrabModeSync, frame.plate, None);
-
+ GrabModeSync, GrabModeSync, frame.plate, None,
+ screen->allowScrollLock());
+
if (functions & Func_Move)
blackbox->grabButton(Button1, Mod1Mask, frame.window, True,
ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
- GrabModeAsync, frame.window,
- blackbox->getMoveCursor());
+ GrabModeAsync, frame.window, None,
+ screen->allowScrollLock());
if (functions & Func_Resize)
blackbox->grabButton(Button3, Mod1Mask, frame.window, True,
ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
- GrabModeAsync, frame.window, None);
+ GrabModeAsync, frame.window, None,
+ screen->allowScrollLock());
// alt+middle lowers the window
blackbox->grabButton(Button2, Mod1Mask, frame.window, True,
ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
- frame.window, None);
+ frame.window, None,
+ screen->allowScrollLock());
}
blackbox_attrib.premax_h =
client.rect.height() + frame.margin.top + frame.margin.bottom;
- const Rect &screen_area = screen->availableArea();
- frame.changing = screen_area;
+#ifdef XINERAMA
+ if (screen->isXineramaActive() && blackbox->doXineramaMaximizing()) {
+ // find the area to use
+ RectList availableAreas = screen->allAvailableAreas();
+ RectList::iterator it, end = availableAreas.end();
+
+ for (it = availableAreas.begin(); it != end; ++it)
+ if (it->intersects(frame.rect)) break;
+ if (it == end) // the window isn't inside an area
+ it = availableAreas.begin(); // so just default to the first one
+
+ frame.changing = *it;
+ } else
+#endif
+ frame.changing = screen->availableArea();
switch(button) {
case 1:
if (isFocused())
blackbox->setFocusedWindow(this);
+
+ Clientmenu *menu = screen->getWorkspace(blackbox_attrib.workspace)->getMenu();
+ menu->setItemSelected(window_number, isFocused());
}
if (isNormal()) {
if (! blackbox->isStartup()) {
XSync(blackbox->getXDisplay(), False); // make sure the frame is mapped
- if (isTransient() || screen->doFocusNew()) {
+ if (screen->doFocusNew()|| (isTransient() && getTransientFor() &&
+ getTransientFor()->isFocused())) {
setInputFocus();
}
if (screen->getPlacementPolicy() == BScreen::ClickMousePlacement) {