Re: patch: push window to frame

Jeff Abrahamson <[email protected]> Sun, 7 Sep 2014 21:21:40 +0200
Newsgroups gmane.comp.window-managers.ratpoison.devel
Message-ID <CAM4Y7zzVLBXbi1j5GPy0xjWSyvoXXLPS6EgK3KBBBRKs0fLszA@mail.gmail.com>
Hi, Johannes.

Thanks much for the feedback and kind words, and thanks even more for
noticing the bug. It occurs to me that I also forgot to test with transient
windows. I'll send another patch. I'm just writing pullwindow tonight, and
so there's a quick refactor involved, since I think the two use almost the
same code.


Jeff Abrahamson
+33 6 24 40 01 57
+44 7920 594 255    <-- only if I'm in the UK

http://jeff.purple.com/
http://blog.purple.com/jeff/


On 7 September 2014 21:10, Johannes Altmanninger <[email protected]>
wrote:

>
> Now that I have played around with this a bit, it seems like a really
> great idea. Combined with pullwindow it would make working with many
> frames much easier.
>
> > I've bound the command to "h", which is the last letter of "push". I'd
> > like
> > to implement "pullwindow" the same way, and I'd like to bind it to "l"
> > (lower case "L"). This is currently bound, along with C-L, to
> > redisplay, so
> > maybe that's a bad idea (changing the binding). I think the bindings
> > for
> > push and pull should be thought through together.
> The names pushwindow and pullwindow seem good to me. Rebinding "l"
> shouldn't be a
> problem, in my experience it is rarely necessary but I don't know what's
> the
> policy for such things.
>
> I have modified the pushwindow function to not crash when there
> is either no window to reveal or I try to push an empty frame.
> When there is no window to reveal, I think the most obvious solution is
> to just swap the window, hence window_to_reveal = window_to_cover.
>
> diff --git a/src/actions.c b/src/actions.c
> index 7ce76c1..e7e261d 100644
> --- a/src/actions.c
> +++ b/src/actions.c
> @@ -3693,8 +3693,12 @@ cmd_pushwindow (int interactive UNUSED, struct
> cmdarg **args)
>    rp_frame *dest_frame = ARG(0, frame);
>
>    rp_window *window_to_move =
>    find_window_number(src_frame->win_number);
> +  if (window_to_move == NULL)
> +    return cmdret_new (RET_FAILURE, "pushwindow: no window to push");
>    rp_window *window_to_reveal = find_window_for_frame (src_frame);
>    rp_window *window_to_cover = set_frames_window(dest_frame,
>    window_to_move);
> +  if (window_to_reveal == NULL)
> +    window_to_reveal = window_to_cover;
>    maximize (window_to_move);
>    unhide_window (window_to_move);
>    XRaiseWindow (dpy, window_to_move->w);
> @@ -3704,7 +3708,8 @@ cmd_pushwindow (int interactive UNUSED, struct
>    cmdarg **args)
>    set_frames_window(src_frame, window_to_reveal);
>    maximize (window_to_reveal);
>    unhide_window (window_to_reveal);
> -  XRaiseWindow (dpy, window_to_reveal->w);
> +  if (window_to_reveal != NULL)
> +    XRaiseWindow (dpy, window_to_reveal->w);
>
>    set_active_frame(src_frame, 0);
>

_______________________________________________
Ratpoison-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/ratpoison-devel