}
case ConfigureRequest: {
- // compress configure requests...
- XEvent realevent;
- unsigned int i = 0;
- while(XCheckTypedWindowEvent(getXDisplay(), e->xconfigurerequest.window,
- ConfigureRequest, &realevent)) {
- i++;
- }
- if ( i > 0 )
- e = &realevent;
-
BlackboxWindow *win = (BlackboxWindow *) 0;
Slit *slit = (Slit *) 0;
focus = True;
}
- if (focus && (win->isTransient() || win->getScreen()->doFocusNew()))
+ if (focus && (win->isTransient() || win->getScreen()->doFocusNew()) &&
+ win->isVisible())
win->setInputFocus();
} else {
BScreen *screen = searchScreen(e->xmaprequest.parent);
if ( i > 0 )
e = &realevent;
+ // the pointer is on the wrong screen
+ if (! e->xmotion.same_screen)
+ break;
+
// strip the lock key modifiers
- e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ e->xmotion.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xmotion.time;
if (win->getScreen()->isSloppyFocus() &&
(! win->isFocused()) && (! no_focus) &&
win->isNormal()) { // don't focus non-normal windows with mouseover
- if (((! sa.leave) || sa.inferior) && win->isVisible()) {
+ if ((! sa.leave || sa.inferior) && win->isVisible()) {
if (win->setInputFocus())
win->installColormap(True); // XXX: shouldnt we honour no install?
}
if (win->isIconic())
win->deiconify(False, True);
- if (win->isShaded())
- win->shade();
- if (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())
+ if (! win->isStuck() &&
+ (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID()))
screen->changeWorkspaceID(win->getWorkspaceNumber());
if (win->isVisible() && win->setInputFocus()) {
win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
bool Blackbox::handleSignal(int sig) {
switch (sig) {
case SIGHUP:
- restart();
+ reconfigure();
break;
case SIGUSR1:
- reconfigure();
+ restart();
break;
case SIGUSR2:
}
+#ifdef XINERAMA
+void Blackbox::saveXineramaPlacement(bool x) {
+ resource.xinerama_placement = x;
+ config.setValue("session.xineramaSupport.windowPlacement",
+ resource.xinerama_placement);
+ reconfigure(); // make sure all screens get this change
+}
+
+
+void Blackbox::saveXineramaMaximizing(bool x) {
+ resource.xinerama_maximize = x;
+ config.setValue("session.xineramaSupport.windowMaximizing",
+ resource.xinerama_maximize);
+ reconfigure(); // make sure all screens get this change
+}
+
+
+void Blackbox::saveXineramaSnapping(bool x) {
+ resource.xinerama_snap = x;
+ config.setValue("session.xineramaSupport.windowSnapping",
+ resource.xinerama_snap);
+ reconfigure(); // make sure all screens get this change
+}
+#endif // XINERAMA
+
+
/*
* Save all values as they are so that the defaults will be written to the rc
* file
config.setValue("session.styleFile", resource.style_file);
config.setValue("session.titlebarLayout", resource.titlebar_layout);
+#ifdef XINERAMA
+ saveXineramaPlacement(resource.xinerama_placement);
+ saveXineramaMaximizing(resource.xinerama_maximize);
+ saveXineramaSnapping(resource.xinerama_snap);
+#endif // XINERAMA
+
std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::save_rc));
if (! config.getValue("session.titlebarLayout", resource.titlebar_layout))
resource.titlebar_layout = "ILMC";
+
+#ifdef XINERAMA
+ if (! config.getValue("session.xineramaSupport.windowPlacement",
+ resource.xinerama_placement))
+ resource.xinerama_placement = false;
+
+ if (! config.getValue("session.xineramaSupport.windowMaximizing",
+ resource.xinerama_maximize))
+ resource.xinerama_maximize = false;
+
+ if (! config.getValue("session.xineramaSupport.windowSnapping",
+ resource.xinerama_snap))
+ resource.xinerama_snap = false;
+#endif // XINERAMA
}
void Blackbox::reconfigure(void) {
+ // don't reconfigure while saving the initial rc file, it's a waste and it
+ // breaks somethings (workspace names)
+ if (isStartup()) return;
+
reconfigure_wait = True;
if (! timer->isTiming()) timer->start();