=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server.c,v retrieving revision 1.125 retrieving revision 1.126 diff -c -r1.125 -r1.126 *** src/usr.bin/tmux/server.c 2015/06/01 09:20:19 1.125 --- src/usr.bin/tmux/server.c 2015/06/04 11:43:51 1.126 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.125 2015/06/01 09:20:19 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.126 2015/06/04 11:43:51 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 50,68 **** 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); /* Create server socket. */ int --- 50,134 ---- struct event server_ev_accept; struct event server_ev_second; ! 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