summaryrefslogtreecommitdiff
path: root/gui/gdmwm.c
diff options
context:
space:
mode:
authorGeorge Lebl <jirka@5z.com>2001-05-15 09:38:25 +0000
committerGeorge Lebl <jirka@src.gnome.org>2001-05-15 09:38:25 +0000
commit74f0ebff7381423845b162e35c18366c81d8eb66 (patch)
tree0035e040fbb89ebdc03807b0369a1ff20b4093d8 /gui/gdmwm.c
parent266410dcca484bc1e58382b531d7fa85e8dcb1ec (diff)
downloadgdm-74f0ebff7381423845b162e35c18366c81d8eb66.tar.gz
fix focusing windows on enter notify
Tue May 15 02:39:23 2001 George Lebl <jirka@5z.com> * gui/gdmwm.c: fix focusing windows on enter notify
Diffstat (limited to 'gui/gdmwm.c')
-rw-r--r--gui/gdmwm.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/gui/gdmwm.c b/gui/gdmwm.c
index d53373cb..ace8bf83 100644
--- a/gui/gdmwm.c
+++ b/gui/gdmwm.c
@@ -274,7 +274,7 @@ gdm_wm_focus_window (Window window)
}
static GList *
-find_window_list (Window w)
+find_window_list (Window w, gboolean deco_ok)
{
GList *li;
@@ -283,15 +283,19 @@ find_window_list (Window w)
if (gw->win == w)
return li;
+ if (deco_ok &&
+ (gw->deco == w ||
+ gw->shadow == w))
+ return li;
}
return NULL;
}
static GdmWindow *
-find_window (Window w)
+find_window (Window w, gboolean deco_ok)
{
- GList *li = find_window_list (w);
+ GList *li = find_window_list (w, deco_ok);
if (li == NULL)
return NULL;
else
@@ -414,7 +418,7 @@ add_window (Window w)
{
GdmWindow *gw;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw == NULL) {
int x, y;
Window root;
@@ -454,7 +458,7 @@ add_window (Window w)
static void
remove_window (Window w)
{
- GList *li = find_window_list (w);
+ GList *li = find_window_list (w, FALSE);
if (li != NULL) {
GdmWindow *gw = li->data;
@@ -579,7 +583,7 @@ event_process (XEvent *ev)
switch (ev->type) {
case MapRequest:
w = ev->xmaprequest.window;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw == NULL) {
if (ev->xmaprequest.parent == wm_root) {
XGrabServer (wm_disp);
@@ -592,7 +596,7 @@ event_process (XEvent *ev)
case ConfigureRequest:
XGrabServer (wm_disp);
w = ev->xconfigurerequest.window;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
wchanges.border_width = ev->xconfigurerequest.border_width;
wchanges.sibling = ev->xconfigurerequest.above;
wchanges.stack_mode = ev->xconfigurerequest.detail;
@@ -632,7 +636,7 @@ event_process (XEvent *ev)
break;
case CirculateRequest:
w = ev->xcirculaterequest.window;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw == NULL) {
if (ev->xcirculaterequest.place == PlaceOnTop)
XRaiseWindow (wm_disp, w);
@@ -653,14 +657,14 @@ event_process (XEvent *ev)
case MapNotify:
w = ev->xmap.window;
if ( ! ev->xmap.override_redirect) {
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw != NULL && focus_new_windows)
gdm_wm_focus_window (w);
}
break;
case UnmapNotify:
w = ev->xunmap.window;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw != NULL) {
XGrabServer (wm_disp);
XUnmapWindow (wm_disp, gw->deco);
@@ -676,7 +680,7 @@ event_process (XEvent *ev)
break;
case DestroyNotify:
w = ev->xdestroywindow.window;
- gw = find_window (w);
+ gw = find_window (w, FALSE);
if (gw != NULL) {
XGrabServer (wm_disp);
remove_window (w);
@@ -687,7 +691,7 @@ event_process (XEvent *ev)
break;
case EnterNotify:
w = ev->xcrossing.window;
- gw = find_window (w);
+ gw = find_window (w, TRUE);
if (gw != NULL)
gdm_wm_focus_window (gw->win);
break;