On Fri, May 25, 2012 at 11:23:42PM -0400, Kristian Høgsberg wrote:
> On Fri, May 25, 2012 at 05:50:06PM +0300, Tiago Vignatti wrote:
> > Signed-off-by: Tiago Vignatti <[email protected]>
> 
> Committed with the few changes below.
> Kristian
> 
> > ---
> >  src/xwayland/window-manager.c |    9 +++++++++
> >  1 file changed, 9 insertions(+)
> > 
> > diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
> > index 3cc0a50..62f5f07 100644
> > --- a/src/xwayland/window-manager.c
> > +++ b/src/xwayland/window-manager.c
> > @@ -306,6 +306,8 @@ weston_wm_window_read_properties(struct 
> > weston_wm_window *window)
> >                     break;
> >             case XCB_ATOM_ATOM:
> >                     atom = xcb_get_property_value(reply);
> > +                   if (*atom & wm->atom.net_wm_window_type)
> > +                           window->type = *atom;
> 
> We don't need this...
> 
> >                     *(xcb_atom_t *) p = *atom;
> 
> because this will do exactly that.  When we're reading
> net_wm_window_type, p will point to window->type.
> 
> >                     break;
> >             case TYPE_WM_PROTOCOLS:
> > @@ -438,6 +440,12 @@ weston_wm_window_activate(struct wl_listener 
> > *listener, void *data)
> >     xcb_client_message_event_t client_message;
> >  
> >     if (window) {
> > +           /* send the focus only for top-level windows. We might want to
> > +            * improve the logic better here to satisfy this:
> > +            * http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.7 */
> > +           if (window->type != wm->atom.net_wm_window_type_normal)
> > +                   return;
> > +

And this doesn't work.  It's not this simple, we have legacy
applications like xterm that doesn't set _NET_WM_WINDOW_TYPE and there
a dialog boxes and other types of windows that aren't
_NET_WM_WINDOW_TYPE_NORMAL, but still need keyboard focus.

Kristian

> >             client_message.response_type = XCB_CLIENT_MESSAGE;
> >             client_message.format = 32;
> >             client_message.window = window->id;
> > @@ -714,6 +722,7 @@ weston_wm_handle_create_notify(struct weston_wm *wm, 
> > xcb_generic_event_t *event)
> >     window->id = create_notify->window;
> >     window->properties_dirty = 1;
> >     window->decorate = 1;
> > +   window->type = 0;
> 
> Let's set this to XCB_ATOM_NONE instead.
> 
> >     window->width = create_notify->width;
> >     window->height = create_notify->height;
> > -- 
> > 1.7.9.5
> > 
> > _______________________________________________
> > wayland-devel mailing list
> > [email protected]
> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to