Am Sonntag, den 18.01.2009, 11:34 -0800 schrieb Ian Zimmerman:

> Ian> Now I know why it behaves this way.  In events.c, map_request(),
> Ian> add_window() is called first.  That will aplly the matchers, but
> Ian> _then_ the check is made is initial_state == IconicState and if
> Ian> this is true the window is iconified.
> 
> Ian> The right fix would seem to be to use the raw X ID and
> Ian> XIconifyWindow() instead of rep's Qiconify_window, and do it
> Ian> _before_ the add_window() call.
> 
> Here's the patch.  Sorry, I don't know how to post it in the wiki;
> can someone else please take care of that?  Thanks.


See Janek's reply, it's pretty easy.


> 
> diff -u --recur sawfish-1.3.5.1.old/src/events.c sawfish-1.3.5.1/src/events.c
> --- sawfish-1.3.5.1.old/src/events.c  2008-11-19 12:45:08.000000000 -0800
> +++ sawfish-1.3.5.1/src/events.c      2009-01-18 11:28:07.000000000 -0800
> @@ -747,6 +747,19 @@
>      Lisp_Window *w = find_window_by_id (id);
>      if (w == 0)
>      {
> +        /* The reason for doing this before the add is to give matchers
> +         * a chance to do their thing and reverse the iconification,
> +         * if the user desires.  There's a minor downside: rep doesn't
> +         * know about this, so any hooks that might be operative for
> +         * iconification don't get run, and there's no iconify sound.
> +         * But it can be argued that this is the Right Thing anyway,
> +         * since the hint was set outside of rep's watch too. */
> +        XWMHints* wmhints = XGetWMHints(dpy, id);
> +        if (wmhints && (wmhints->flags & StateHint)
> +            && wmhints->initial_state == IconicState)
> +            XIconifyWindow(dpy, id, screen_num);
> +        if (wmhints)
> +            XFree(wmhints);
>          /* Also adds the frame. */
>       w = add_window (id);
>       if (w == 0)
> @@ -754,12 +767,6 @@
>           fprintf (stderr, "warning: failed to allocate a window\n");
>           return;
>       }
> -     if (w->wmhints && w->wmhints->flags & StateHint
> -         && w->wmhints->initial_state == IconicState)
> -     {
> -         rep_call_lisp1 (module_symbol_value (rep_VAL (&iconify_mod),
> -                                              Qiconify_window), rep_VAL(w));
> -     }
>      }
>      else
>      {
> 
> 


Commited right now (rev4373). Good Work. :)

Chris

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to