[compiz] [PATCH] Make focusDefaultWindow () take a CompScreen as
argument
kristian at beryl-project.org
kristian at beryl-project.org
Thu Apr 19 08:22:51 PDT 2007
From: Kristian Lyngstol <kristian at beryl-project.org>
Avoids focus jumping from one screen to another.
---
include/compiz.h | 4 ++--
plugins/rotate.c | 2 +-
src/display.c | 38 +++++++++++++++++---------------------
src/event.c | 6 +++---
4 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/include/compiz.h b/include/compiz.h
index 4c72dd3..f882b84 100644
--- a/include/compiz.h
+++ b/include/compiz.h
@@ -26,7 +26,7 @@
#ifndef _COMPIZ_H
#define _COMPIZ_H
-#define ABIVERSION 20070417
+#define ABIVERSION 20070418
#include <stdio.h>
#include <sys/time.h>
@@ -985,7 +985,7 @@ Time
getCurrentTimeFromDisplay (CompDisplay *d);
void
-focusDefaultWindow (CompDisplay *d);
+focusDefaultWindow (CompScreen *s);
void
forEachWindowOnDisplay (CompDisplay *display,
diff --git a/plugins/rotate.c b/plugins/rotate.c
index bf6bb95..640c8f4 100644
--- a/plugins/rotate.c
+++ b/plugins/rotate.c
@@ -521,7 +521,7 @@ rotatePreparePaintScreen (CompScreen *s,
/* only focus default window if switcher isn't active */
if (i == s->maxGrab)
- focusDefaultWindow (s->display);
+ focusDefaultWindow (s);
}
rs->moveWindow = 0;
diff --git a/src/display.c b/src/display.c
index 220b982..e804bbb 100644
--- a/src/display.c
+++ b/src/display.c
@@ -2527,7 +2527,7 @@ addDisplay (char *name)
if (focus == None || focus == PointerRoot)
{
- focusDefaultWindow (d);
+ focusDefaultWindow (d->screens);
}
else
{
@@ -2539,7 +2539,7 @@ addDisplay (char *name)
moveInputFocusToWindow (w);
}
else
- focusDefaultWindow (d);
+ focusDefaultWindow (d->screens);
}
d->pingHandle =
@@ -2565,45 +2565,41 @@ getCurrentTimeFromDisplay (CompDisplay *d)
}
void
-focusDefaultWindow (CompDisplay *d)
+focusDefaultWindow (CompScreen *s)
{
- CompScreen *s;
CompWindow *w;
CompWindow *focus = NULL;
- for (s = d->screens; s; s = s->next)
+ for (w = s->reverseWindows; w; w = w->prev)
{
- for (w = s->reverseWindows; w; w = w->prev)
- {
- if (w->type & CompWindowTypeDockMask)
- continue;
+ if (w->type & CompWindowTypeDockMask)
+ continue;
- if ((*s->focusWindow) (w))
+ if ((*s->focusWindow) (w))
+ {
+ if (focus)
{
- if (focus)
+ if (w->type & (CompWindowTypeNormalMask |
+ CompWindowTypeDialogMask |
+ CompWindowTypeModalDialogMask))
{
- if (w->type & (CompWindowTypeNormalMask |
- CompWindowTypeDialogMask |
- CompWindowTypeModalDialogMask))
- {
- if (compareWindowActiveness (focus, w) < 0)
+ if (compareWindowActiveness (focus, w) < 0)
focus = w;
- }
}
- else
- focus = w;
}
+ else
+ focus = w;
}
}
if (focus)
{
- if (focus->id != d->activeWindow)
+ if (focus->id != s->display->activeWindow)
moveInputFocusToWindow (focus);
}
else
{
- XSetInputFocus (d->display, d->screens->root, RevertToPointerRoot,
+ XSetInputFocus (s->display->display, s->display->screens->root, RevertToPointerRoot,
CurrentTime);
}
}
diff --git a/src/event.c b/src/event.c
index 8c91cb6..127c222 100644
--- a/src/event.c
+++ b/src/event.c
@@ -142,7 +142,7 @@ moveInputFocusToOtherWindow (CompWindow *w)
moveInputFocusToWindow (ancestor);
}
else
- focusDefaultWindow (display);
+ focusDefaultWindow (w->screen);
}
else if (w->type & (CompWindowTypeDialogMask |
CompWindowTypeModalDialogMask))
@@ -177,10 +177,10 @@ moveInputFocusToOtherWindow (CompWindow *w)
moveInputFocusToWindow (focus);
}
else
- focusDefaultWindow (display);
+ focusDefaultWindow (w->screen);
}
else
- focusDefaultWindow (display);
+ focusDefaultWindow (w->screen);
}
}
--
1.4.4.4
More information about the compiz
mailing list