summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--README8
-rw-r--r--src/keybindings.c6
-rw-r--r--src/window.c38
-rw-r--r--src/window.h3
5 files changed, 54 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index afcedcd..6e0b3c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2001-10-29 Havoc Pennington <hp@pobox.com>
+
+ * README: note exciting new unminimize feature for the tab popup
+
+ * src/keybindings.c (process_tab_grab): use meta_window_activate()
+ when choosing a window with tab popup, this should deiconify it
+
+ * src/window.c (meta_window_client_message): use
+ meta_window_activate for _NET_ACTIVE_WINDOW message
+ (meta_window_activate): new function to raise/focus/unminimize
+ (meta_window_flush_calc_showing): new function
+ (meta_window_focus): force a calc showing on focus, so that we can
+ focus the window if appropriate (it must be mapped)
+
2001-10-26 Havoc Pennington <hp@pobox.com>
* src/display.c (meta_display_grab_window_buttons): fix for
diff --git a/README b/README
index 0dd9f1d..653f0f9 100644
--- a/README
+++ b/README
@@ -148,11 +148,11 @@ METACITY BUGS, NON-FEATURES, AND CAVEATS
- If you want keybindings which are not the ones mentioned above
as features, you have to edit keybindings.c and recompile.
- - Metacity does not have any way to unminimize a window. So
- clicking the minimize button is sort of a bad idea.
+ - The only way to unminimize at the moment is to use the Alt+Tab
+ move-between-windows feature.
(If you had a WM-spec-compliant tasklist, it would work
- for unminimization.)
- (Update: you can use "test-wnck" from the libwnck CVS module to
+ for unminimization also.)
+ (Or you can use "test-wnck" from the libwnck CVS module to
unminimize, but it's not much of a UI ;-)
- Metacity uses the new window manager spec, but only random bits of
diff --git a/src/keybindings.c b/src/keybindings.c
index 5e4e15a..b1aac40 100644
--- a/src/keybindings.c
+++ b/src/keybindings.c
@@ -707,9 +707,9 @@ process_tab_grab (MetaDisplay *display,
meta_verbose ("Ending grab early so we can focus the target window\n");
meta_display_end_grab_op (display, event->xkey.time);
- meta_verbose ("Focusing target window\n");
- meta_window_raise (target_window);
- meta_window_focus (target_window, event->xkey.time);
+ meta_verbose ("Activating target window\n");
+
+ meta_window_activate (target_window, event->xkey.time);
return TRUE; /* we already ended the grab */
}
diff --git a/src/window.c b/src/window.c
index 2bf6367..42e8c66 100644
--- a/src/window.c
+++ b/src/window.c
@@ -116,6 +116,7 @@ static char* get_utf8_property (MetaDisplay *display,
Atom atom);
void meta_window_unqueue_calc_showing (MetaWindow *window);
+void meta_window_flush_calc_showing (MetaWindow *window);
static void meta_window_apply_session_info (MetaWindow *window,
const MetaWindowSessionInfo *info);
@@ -957,6 +958,16 @@ meta_window_unqueue_calc_showing (MetaWindow *window)
}
void
+meta_window_flush_calc_showing (MetaWindow *window)
+{
+ if (window->calc_showing_queued)
+ {
+ meta_window_unqueue_calc_showing (window);
+ meta_window_calc_showing (window);
+ }
+}
+
+void
meta_window_queue_calc_showing (MetaWindow *window)
{
if (window->unmanaging)
@@ -1196,6 +1207,22 @@ meta_window_unshade (MetaWindow *window)
}
}
+void
+meta_window_activate (MetaWindow *window,
+ guint32 timestamp)
+{
+ /* Get window on current workspace */
+ if (!meta_window_visible_on_workspace (window,
+ window->screen->active_workspace))
+ meta_window_change_workspace (window,
+ window->screen->active_workspace);
+
+ if (window->minimized)
+ meta_window_unminimize (window);
+
+ meta_window_raise (window);
+ meta_window_focus (window, timestamp);
+}
/* returns values suitable for meta_window_move */
static void
@@ -1914,6 +1941,8 @@ meta_window_focus (MetaWindow *window,
window->display->grab_window->desc, window->desc);
return;
}
+
+ meta_window_flush_calc_showing (window);
/* For output-only or shaded windows, focus the frame.
* This seems to result in the client window getting key events
@@ -2486,14 +2515,7 @@ meta_window_client_message (MetaWindow *window,
{
meta_verbose ("_NET_ACTIVE_WINDOW request for window '%s'", window->desc);
- /* Get window on current workspace */
- if (!meta_window_visible_on_workspace (window,
- window->screen->active_workspace))
- meta_window_change_workspace (window,
- window->screen->active_workspace);
-
- meta_window_raise (window);
- meta_window_focus (window, CurrentTime); /* FIXME CurrentTime */
+ meta_window_activate (window, CurrentTime);
return TRUE;
}
diff --git a/src/window.h b/src/window.h
index f3118d8..dd89edd 100644
--- a/src/window.h
+++ b/src/window.h
@@ -242,6 +242,9 @@ void meta_window_change_workspace (MetaWindow *window,
void meta_window_stick (MetaWindow *window);
void meta_window_unstick (MetaWindow *window);
+void meta_window_activate (MetaWindow *window,
+ guint32 current_time);
+
/* args to move are window pos, not frame pos */
void meta_window_move (MetaWindow *window,
gboolean user_op,