mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-13 23:38:52 +02:00
Merge branch 'obsd-master'
This commit is contained in:
92
server.c
92
server.c
@ -49,19 +49,85 @@ int server_shutdown;
|
||||
struct event server_ev_accept;
|
||||
struct event server_ev_second;
|
||||
|
||||
int server_create_socket(void);
|
||||
void server_loop(void);
|
||||
int server_should_shutdown(void);
|
||||
void server_send_shutdown(void);
|
||||
void server_clean_dead(void);
|
||||
void server_accept_callback(int, short, void *);
|
||||
void server_signal_callback(int, short, void *);
|
||||
void server_child_signal(void);
|
||||
void server_child_exited(pid_t, int);
|
||||
void server_child_stopped(pid_t, int);
|
||||
void server_second_callback(int, short, void *);
|
||||
void server_lock_server(void);
|
||||
void server_lock_sessions(void);
|
||||
struct session *marked_session;
|
||||
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);
|
||||
void server_loop(void);
|
||||
int server_should_shutdown(void);
|
||||
void server_send_shutdown(void);
|
||||
void server_clean_dead(void);
|
||||
void server_accept_callback(int, short, void *);
|
||||
void server_signal_callback(int, short, void *);
|
||||
void server_child_signal(void);
|
||||
void server_child_exited(pid_t, int);
|
||||
void server_child_stopped(pid_t, int);
|
||||
void server_second_callback(int, short, void *);
|
||||
void server_lock_server(void);
|
||||
void server_lock_sessions(void);
|
||||
|
||||
/* Set marked pane. */
|
||||
void
|
||||
server_set_marked(struct session *s, struct winlink *wl, struct window_pane *wp)
|
||||
{
|
||||
marked_session = s;
|
||||
marked_winlink = wl;
|
||||
marked_window = wl->window;
|
||||
marked_window_pane = wp;
|
||||
marked_layout_cell = wp->layout_cell;
|
||||
}
|
||||
|
||||
/* Clear marked pane. */
|
||||
void
|
||||
server_clear_marked(void)
|
||||
{
|
||||
marked_session = NULL;
|
||||
marked_winlink = NULL;
|
||||
marked_window = NULL;
|
||||
marked_window_pane = NULL;
|
||||
marked_layout_cell = NULL;
|
||||
}
|
||||
|
||||
/* Is this the marked pane? */
|
||||
int
|
||||
server_is_marked(struct session *s, struct winlink *wl, struct window_pane *wp)
|
||||
{
|
||||
if (s == NULL || wl == NULL || wp == NULL)
|
||||
return (0);
|
||||
if (marked_session != s || marked_winlink != wl)
|
||||
return (0);
|
||||
if (marked_window_pane != wp)
|
||||
return (0);
|
||||
return (server_check_marked());
|
||||
}
|
||||
|
||||
/* Check if the marked pane is still valid. */
|
||||
int
|
||||
server_check_marked(void)
|
||||
{
|
||||
struct winlink *wl;
|
||||
|
||||
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. */
|
||||
int
|
||||
|
Reference in New Issue
Block a user