aboutsummaryrefslogtreecommitdiff
path: root/hildon/hildon-window-stack.c
diff options
context:
space:
mode:
authorAlberto Garcia <agarcia@igalia.com>2009-06-18 18:29:05 +0200
committerAlberto Garcia <agarcia@igalia.com>2009-06-18 18:37:52 +0200
commit962327d30b4b90d3304382dfa457da2d280a734e (patch)
tree6786486317462bdf12769333f44590b2d6916b8c /hildon/hildon-window-stack.c
parentf42d1936f89fd6f058634acdb1db9fc264bc29e3 (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.c16
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);