summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--src/data.h6
-rw-r--r--src/events.c39
-rw-r--r--src/list.c4
-rw-r--r--src/manage.c5
5 files changed, 33 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index aa0b2ed..71d4500 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2001-06-02 shawn <sabetts@diggin.lamenet.tmp>
+
+ * src/manage.c (hide_window): ignore unmap_notify events when
+ unmapping the window.
+
+ * src/list.c (add_to_window_list): use WIN_EVENTS in XSelectInput.
+
+ * src/data.h (struct rp_window): remove iconizing field. remove
+ code using iconizing.
+ (WIN_EVENTS): new define
+
2001-06-01 shawn <sabetts@diggin.lamenet.tmp>
* src/events.c (cleanup_frame): hide the frame's window's
diff --git a/src/data.h b/src/data.h
index 4584b21..9d1ec32 100644
--- a/src/data.h
+++ b/src/data.h
@@ -28,6 +28,8 @@
#define FONT_HEIGHT(f) ((f)->max_bounds.ascent + (f)->max_bounds.descent)
+#define WIN_EVENTS (PropertyChangeMask | ColormapChangeMask | FocusChangeMask)
+
typedef struct rp_window rp_window;
typedef struct screen_info screen_info;
typedef struct rp_action rp_action;
@@ -51,10 +53,6 @@ struct rp_window
int state;
int last_access;
int named;
-
- /* An indication to unmap_notify that the event was produced by
- iconizing a window. */
- int iconizing;
/* Dimensions */
int x, y, width, height, border;
diff --git a/src/events.c b/src/events.c
index db5a41f..824b98e 100644
--- a/src/events.c
+++ b/src/events.c
@@ -100,31 +100,22 @@ unmap_notify (XEvent *ev)
{
rp_window_frame *frame;
- if (win->iconizing)
- {
- /* This event is due to our hiding the window. */
- win->iconizing--;
- }
- else
+ switch (win->state)
{
- switch (win->state)
- {
- case IconicState:
- PRINT_DEBUG ("Withdrawing iconized window '%s'\n", win->name);
- if (ev->xunmap.send_event) withdraw_window (win);
- break;
- case NormalState:
- PRINT_DEBUG ("Withdrawing normal window '%s'\n", win->name);
- /* If the window was inside a frame, fill the frame with another
- window. */
- frame = find_windows_frame (win);
- if (frame) cleanup_frame (frame);
- if (frame == rp_current_frame) set_active_frame (frame);
-
-
- withdraw_window (win);
- break;
- }
+ case IconicState:
+ PRINT_DEBUG ("Withdrawing iconized window '%s'\n", win->name);
+ if (ev->xunmap.send_event) withdraw_window (win);
+ break;
+ case NormalState:
+ PRINT_DEBUG ("Withdrawing normal window '%s'\n", win->name);
+ /* If the window was inside a frame, fill the frame with another
+ window. */
+ frame = find_windows_frame (win);
+ if (frame) cleanup_frame (frame);
+ if (frame == rp_current_frame) set_active_frame (frame);
+
+ withdraw_window (win);
+ break;
}
update_window_names (s);
diff --git a/src/list.c b/src/list.c
index a53d0b8..0a5b96e 100644
--- a/src/list.c
+++ b/src/list.c
@@ -65,7 +65,6 @@ add_to_window_list (screen_info *s, Window w)
new_window->last_access = 0;
new_window->prev = NULL;
new_window->state = WithdrawnState;
- new_window->iconizing = 0;
new_window->number = -1;
new_window->named = 0;
new_window->hints = XAllocSizeHints ();
@@ -75,8 +74,7 @@ add_to_window_list (screen_info *s, Window w)
get_mouse_root_position (new_window, &new_window->mouse_x, &new_window->mouse_y);
- XSelectInput (dpy, new_window->w,
- PropertyChangeMask | ColormapChangeMask | FocusChangeMask);
+ XSelectInput (dpy, new_window->w, WIN_EVENTS);
new_window->name = xmalloc (strlen ("Unnamed") + 1);
diff --git a/src/manage.c b/src/manage.c
index e611b1f..8a7effc 100644
--- a/src/manage.c
+++ b/src/manage.c
@@ -500,9 +500,12 @@ hide_window (rp_window *win)
{
if (win == NULL) return;
+ /* Ignore the unmap_notify event. */
+ XSelectInput(dpy, win->w,
+ WIN_EVENTS&~(StructureNotifyMask|EnterWindowMask));
XUnmapWindow (dpy, win->w);
+ XSelectInput (dpy, win->w, WIN_EVENTS);
set_state (win, IconicState);
- win->iconizing++;
}
void