diff options
author | Alberto Garcia <agarcia@igalia.com> | 2009-06-18 18:29:05 +0200 |
---|---|---|
committer | Alberto Garcia <agarcia@igalia.com> | 2009-06-18 18:37:52 +0200 |
commit | 962327d30b4b90d3304382dfa457da2d280a734e (patch) | |
tree | 6786486317462bdf12769333f44590b2d6916b8c /hildon/hildon-window-stack.c | |
parent | f42d1936f89fd6f058634acdb1db9fc264bc29e3 (diff) |
Prevent windows from having the same stack index
* hildon/hildon-window-stack.c
(hildon_window_stack_pop_and_push_list):
Prevent windows from having the same stack index
Diffstat (limited to 'hildon/hildon-window-stack.c')
-rw-r--r-- | hildon/hildon-window-stack.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/hildon/hildon-window-stack.c b/hildon/hildon-window-stack.c index a7a6182..681265d 100644 --- a/hildon/hildon-window-stack.c +++ b/hildon/hildon-window-stack.c @@ -511,15 +511,20 @@ hildon_window_stack_pop_and_push_list (HildonWindowStack *stack, GList **popped_windows, GList *list) { - gint i; + gint i, topmost_index; GList *l; GList *popped = NULL; GList *pushed = NULL; + HildonStackableWindowPrivate *priv; g_return_if_fail (HILDON_IS_WINDOW_STACK (stack)); g_return_if_fail (nwindows > 0); g_return_if_fail (g_list_length (stack->priv->list) >= nwindows); + /* Store the index of the topmost window */ + priv = HILDON_STACKABLE_WINDOW_GET_PRIVATE (hildon_window_stack_peek (stack)); + topmost_index = priv->stack_position; + /* Pop windows */ for (i = 0; i < nwindows; i++) { GtkWidget *win = _hildon_window_stack_do_pop (stack); @@ -537,6 +542,15 @@ hildon_window_stack_pop_and_push_list (HildonWindowStack *stack, } } + if (pushed != NULL) { + /* The WM will be confused if the old topmost window and the new + * one have the same index, so make sure that they're different */ + priv = HILDON_STACKABLE_WINDOW_GET_PRIVATE (hildon_window_stack_peek (stack)); + if (priv->stack_position == topmost_index) { + priv->stack_position++; + } + } + /* Show windows in reverse order (topmost first) */ g_list_foreach (pushed, (GFunc) gtk_widget_show, NULL); |