version 1.154, 2015/11/24 23:01:51 |
version 1.155, 2015/12/15 00:00:01 |
|
|
* Main server functions. |
* Main server functions. |
*/ |
*/ |
|
|
struct clients clients; |
struct clients clients; |
|
|
struct tmuxproc *server_proc; |
struct tmuxproc *server_proc; |
int server_fd; |
int server_fd; |
int server_exit; |
int server_exit; |
struct event server_ev_accept; |
struct event server_ev_accept; |
|
|
struct session *marked_session; |
struct cmd_find_state marked_pane; |
struct winlink *marked_winlink; |
|
struct window *marked_window; |
|
struct window_pane *marked_window_pane; |
|
struct layout_cell *marked_layout_cell; |
|
|
|
int server_create_socket(void); |
int server_create_socket(void); |
int server_loop(void); |
int server_loop(void); |
|
|
void |
void |
server_set_marked(struct session *s, struct winlink *wl, struct window_pane *wp) |
server_set_marked(struct session *s, struct winlink *wl, struct window_pane *wp) |
{ |
{ |
marked_session = s; |
cmd_find_clear_state(&marked_pane, NULL, 0); |
marked_winlink = wl; |
marked_pane.s = s; |
marked_window = wl->window; |
marked_pane.wl = wl; |
marked_window_pane = wp; |
marked_pane.w = wl->window; |
marked_layout_cell = wp->layout_cell; |
marked_pane.wp = wp; |
} |
} |
|
|
/* Clear marked pane. */ |
/* Clear marked pane. */ |
void |
void |
server_clear_marked(void) |
server_clear_marked(void) |
{ |
{ |
marked_session = NULL; |
cmd_find_clear_state(&marked_pane, NULL, 0); |
marked_winlink = NULL; |
|
marked_window = NULL; |
|
marked_window_pane = NULL; |
|
marked_layout_cell = NULL; |
|
} |
} |
|
|
/* Is this the marked pane? */ |
/* Is this the marked pane? */ |
|
|
{ |
{ |
if (s == NULL || wl == NULL || wp == NULL) |
if (s == NULL || wl == NULL || wp == NULL) |
return (0); |
return (0); |
if (marked_session != s || marked_winlink != wl) |
if (marked_pane.s != s || marked_pane.wl != wl) |
return (0); |
return (0); |
if (marked_window_pane != wp) |
if (marked_pane.wp != wp) |
return (0); |
return (0); |
return (server_check_marked()); |
return (server_check_marked()); |
} |
} |
|
|
int |
int |
server_check_marked(void) |
server_check_marked(void) |
{ |
{ |
struct winlink *wl; |
return (cmd_find_valid_state(&marked_pane)); |
|
|
if (marked_window_pane == NULL) |
|
return (0); |
|
if (marked_layout_cell != marked_window_pane->layout_cell) |
|
return (0); |
|
|
|
if (!session_alive(marked_session)) |
|
return (0); |
|
RB_FOREACH(wl, winlinks, &marked_session->windows) { |
|
if (wl->window == marked_window && wl == marked_winlink) |
|
break; |
|
} |
|
if (wl == NULL) |
|
return (0); |
|
|
|
if (!window_has_pane(marked_window, marked_window_pane)) |
|
return (0); |
|
return (window_pane_visible(marked_window_pane)); |
|
} |
} |
|
|
/* Create server socket. */ |
/* Create server socket. */ |