Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Bug 621848 - Window loses focus when showing transient windows that do not take focus on map #1

Open
wants to merge 1 commit into from

1 participant

@vingtetun

Hello,

This bug has been initially created because of the Firefox bug (https://bugzilla.mozilla.org/show_bug.cgi?id=526941) which use the type _NET_WM_WINDOW_TYPE_UTILITY when opening a panel window that does not steal the focus (the noautofocus attribute of the panel is set to "true" in xul).

Reading the code of src/core/window.c and the comment http://git.gnome.org/browse/metacity/tree/src/core/window.c?id=b272c4ca7f3a784d011eea5c3fd348011f8558b3#n2136 it looks like this code path is mostly designed for transient window but actually window of type _NET_WM_WINDOW_TYPE_UTILITY or of type _NET_WM_WINDOW_TYPE_TOOLBAR are also taking this path which seems unappropriated.

The patch just tweak the "if" to ignore them

@vingtetun vingtetun Do not unfocus the parent window if the newly opened window is of
type META_WINDOW_UTILITY or META_WINDOW_TOOLBAR. Closes #621848.
12386de
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 29, 2011
  1. @vingtetun

    Do not unfocus the parent window if the newly opened window is of

    vingtetun authored steakdepapillon committed
    type META_WINDOW_UTILITY or META_WINDOW_TOOLBAR. Closes #621848.
This page is out of date. Refresh to see the latest.
Showing with 8 additions and 1 deletion.
  1. +8 −1 src/core/window.c
View
9 src/core/window.c
@@ -2138,7 +2138,14 @@ meta_window_show (MetaWindow *window)
( (!place_on_top_on_map && !takes_focus_on_map) ||
window_would_be_covered (window) )
) {
- if (meta_window_is_ancestor_of_transient (focus_window, window))
+
+ /* META_WINDOW_UTILITY/META_WINDOW_TOOLBAR are usually small persistent
+ * utility window such as toolbar, palette or toolbox and are not
+ * considered transient since it is usual to keep them open while working
+ */
+ if ((window->type != META_WINDOW_UTILITY &&
+ window->type != META_WINDOW_TOOLBAR) &&
+ meta_window_is_ancestor_of_transient (focus_window, window))
{
/* This happens for error dialogs or alerts; these need to remain on
* top, but it would be confusing to have its ancestor remain
Something went wrong with that request. Please try again.