SESSION_UNATTACHED flag is no longer necessary now we have an attached

count instead.
pull/1443/head
nicm 2018-08-18 20:08:52 +00:00
parent 3bc08b0dc0
commit bd2896b65e
7 changed files with 13 additions and 21 deletions

View File

@ -136,7 +136,7 @@ cmd_find_best_client(struct session *s)
{
struct client *c_loop, *c;
if (s->flags & SESSION_UNATTACHED)
if (s->attached == 0)
s = NULL;
c = NULL;
@ -160,10 +160,10 @@ cmd_find_session_better(struct session *s, struct session *than, int flags)
if (than == NULL)
return (1);
if (flags & CMD_FIND_PREFER_UNATTACHED) {
attached = (~than->flags & SESSION_UNATTACHED);
if (attached && (s->flags & SESSION_UNATTACHED))
attached = (than->attached != 0);
if (attached && s->attached == 0)
return (1);
else if (!attached && (~s->flags & SESSION_UNATTACHED))
else if (!attached && s->attached != 0)
return (0);
}
return (timercmp(&s->activity_time, &than->activity_time, >));

View File

@ -36,10 +36,6 @@
*
* This is quite inefficient - better/additional data structures are needed
* to make it better.
*
* As a side effect, this function updates the SESSION_UNATTACHED flag. This
* flag is necessary to make sure unattached sessions do not limit the size of
* windows that are attached both to them and to other (attached) sessions.
*/
void
@ -79,11 +75,8 @@ recalculate_sizes(void)
s->attached++;
}
}
if (ssx == UINT_MAX || ssy == UINT_MAX) {
s->flags |= SESSION_UNATTACHED;
if (ssx == UINT_MAX || ssy == UINT_MAX)
continue;
}
s->flags &= ~SESSION_UNATTACHED;
if (lines != 0 && ssy == 0)
ssy = lines;
@ -107,7 +100,7 @@ recalculate_sizes(void)
ssx = ssy = UINT_MAX;
RB_FOREACH(s, sessions, &sessions) {
if (s->flags & SESSION_UNATTACHED)
if (s->attached == 0)
continue;
if (flag)
has = s->curw->window == w;

View File

@ -1173,7 +1173,7 @@ server_client_check_focus(struct window_pane *wp)
TAILQ_FOREACH(c, &clients, entry) {
if (c->session == NULL || !(c->flags & CLIENT_FOCUSED))
continue;
if (c->session->flags & SESSION_UNATTACHED)
if (c->session->attached == 0)
continue;
if (c->session->curw->window == wp->window)

View File

@ -430,7 +430,7 @@ server_check_unattached(void)
* set, collect them.
*/
RB_FOREACH(s, sessions, &sessions) {
if (!(s->flags & SESSION_UNATTACHED))
if (s->attached != 0)
continue;
if (options_get_number (s->options, "destroy-unattached"))
session_destroy(s, __func__);

View File

@ -319,7 +319,7 @@ server_update_socket(void)
n = 0;
RB_FOREACH(s, sessions, &sessions) {
if (!(s->flags & SESSION_UNATTACHED)) {
if (s->attached != 0) {
n++;
break;
}

View File

@ -266,7 +266,7 @@ session_lock_timer(__unused int fd, __unused short events, void *arg)
{
struct session *s = arg;
if (s->flags & SESSION_UNATTACHED)
if (s->attached == 0)
return;
log_debug("session %s locked, activity time %lld", s->name,
@ -299,7 +299,7 @@ session_update_activity(struct session *s, struct timeval *from)
else
evtimer_set(&s->lock_timer, session_lock_timer, s);
if (~s->flags & SESSION_UNATTACHED) {
if (s->attached != 0) {
timerclear(&tv);
tv.tv_sec = options_get_number(s->options, "lock-after-time");
if (tv.tv_sec != 0)

5
tmux.h
View File

@ -938,9 +938,8 @@ struct session {
struct hooks *hooks;
struct options *options;
#define SESSION_UNATTACHED 0x1 /* not attached to any clients */
#define SESSION_PASTING 0x2
#define SESSION_ALERTED 0x4
#define SESSION_PASTING 0x1
#define SESSION_ALERTED 0x2
int flags;
u_int attached;