On Sat, Jan 07, 2017 at 03:47:29PM +0000, Nicholas Marriott wrote:
> If we want the flag to only be 1 if the window is linked across
> sessions, not if it is linked twice into a single session, you will also
> need to clear the flag when a window is joined or moved from session B
> into a session A where it already exists (assuming it is not already
> linked into another session C).
> 
> Wouldn't something like this work and be a lot easier?
> 
>       s = TAILQ_FIRST(&w->winlinks)->session;
>       TAILQ_FOREACH(wl, &w->winlinks, wentry) {
>               if (wl->session != s)
>                       return (1);
>       }
>       return (0);

Possibly.  To me, a flag is easier since it's consistent with the other types
happening on a window.  However, if  you want to go down this route, you'll
need to also consider session groups though.  Perhaps something like the
attached?

Kindly,
Thomas

-- 
You received this message because you are subscribed to the Google Groups 
"tmux-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.
diff --git a/session.c b/session.c
index d89bc6a0..e8bee15d 100644
--- a/session.c
+++ b/session.c
@@ -425,10 +425,23 @@ int
 session_is_linked(struct session *s, struct window *w)
 {
 	struct session_group	*sg;
+	struct session		*s1;
+	struct winlink		*wl;
 
-	if ((sg = session_group_find(s)) != NULL)
-		return (w->references != session_group_count(sg));
-	return (w->references != 1);
+	TAILQ_FOREACH(wl, &w->winlinks, wentry) {
+		if ((sg = session_group_find(s)) != NULL) {
+			TAILQ_FOREACH(s1, &sg->sessions, gentry) {
+				if (s == s1)
+					continue;
+				if (wl->session != s1 && wl->session != s)
+					return (1);
+			}
+		} else {
+			if (wl->session != s)
+				return (1);
+		}
+	}
+	return (0);
 }
 
 static struct winlink *

Reply via email to