mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										143
									
								
								cmd-find.c
									
									
									
									
									
								
							
							
						
						
									
										143
									
								
								cmd-find.c
									
									
									
									
									
								
							| @@ -248,7 +248,11 @@ cmd_find_current_session_with_client(struct cmd_find_state *fs) | |||||||
| { | { | ||||||
| 	struct window_pane	*wp; | 	struct window_pane	*wp; | ||||||
|  |  | ||||||
| 	/* If this is running in a pane, that's great. */ | 	/* | ||||||
|  | 	 * If this is running in a pane, we can use that to limit the list of | ||||||
|  | 	 * sessions to those containing that pane (we still use the current | ||||||
|  | 	 * window in the best session). | ||||||
|  | 	 */ | ||||||
| 	if (fs->cmdq->client->tty.path != NULL) { | 	if (fs->cmdq->client->tty.path != NULL) { | ||||||
| 		RB_FOREACH(wp, window_pane_tree, &all_window_panes) { | 		RB_FOREACH(wp, window_pane_tree, &all_window_panes) { | ||||||
| 			if (strcmp(wp->tty, fs->cmdq->client->tty.path) == 0) | 			if (strcmp(wp->tty, fs->cmdq->client->tty.path) == 0) | ||||||
| @@ -261,11 +265,8 @@ cmd_find_current_session_with_client(struct cmd_find_state *fs) | |||||||
| 	if (wp == NULL) | 	if (wp == NULL) | ||||||
| 		goto unknown_pane; | 		goto unknown_pane; | ||||||
|  |  | ||||||
| 	/* We now know the window and pane. */ | 	/* Find the best session and winlink containing this pane. */ | ||||||
| 	fs->w = wp->window; | 	fs->w = wp->window; | ||||||
| 	fs->wp = wp; |  | ||||||
|  |  | ||||||
| 	/* Find the best session and winlink. */ |  | ||||||
| 	if (cmd_find_best_session_with_window(fs) != 0) { | 	if (cmd_find_best_session_with_window(fs) != 0) { | ||||||
| 		if (wp != NULL) { | 		if (wp != NULL) { | ||||||
| 			/* | 			/* | ||||||
| @@ -277,6 +278,13 @@ cmd_find_current_session_with_client(struct cmd_find_state *fs) | |||||||
| 		} | 		} | ||||||
| 		return (-1); | 		return (-1); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	/* Use the current window and pane from this session. */ | ||||||
|  | 	fs->wl = fs->s->curw; | ||||||
|  | 	fs->idx = fs->wl->idx; | ||||||
|  | 	fs->w = fs->wl->window; | ||||||
|  | 	fs->wp = fs->w->active; | ||||||
|  |  | ||||||
| 	return (0); | 	return (0); | ||||||
|  |  | ||||||
| unknown_pane: | unknown_pane: | ||||||
| @@ -289,6 +297,7 @@ unknown_pane: | |||||||
| 	fs->idx = fs->wl->idx; | 	fs->idx = fs->wl->idx; | ||||||
| 	fs->w = fs->wl->window; | 	fs->w = fs->wl->window; | ||||||
| 	fs->wp = fs->w->active; | 	fs->wp = fs->w->active; | ||||||
|  |  | ||||||
| 	return (0); | 	return (0); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -791,6 +800,67 @@ cmd_find_clear_state(struct cmd_find_state *fs, struct cmd_q *cmdq, int flags) | |||||||
| 	fs->idx = -1; | 	fs->idx = -1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* Check if a state if valid. */ | ||||||
|  | int | ||||||
|  | cmd_find_valid_state(struct cmd_find_state *fs) | ||||||
|  | { | ||||||
|  | 	struct winlink	*wl; | ||||||
|  |  | ||||||
|  | 	if (fs->s == NULL || fs->wl == NULL || fs->w == NULL || fs->wp == NULL) | ||||||
|  | 		return (0); | ||||||
|  |  | ||||||
|  | 	if (!session_alive(fs->s)) | ||||||
|  | 		return (0); | ||||||
|  |  | ||||||
|  | 	RB_FOREACH(wl, winlinks, &fs->s->windows) { | ||||||
|  | 		if (wl->window == fs->w && wl == fs->wl) | ||||||
|  | 			break; | ||||||
|  | 	} | ||||||
|  | 	if (wl == NULL) | ||||||
|  | 		return (0); | ||||||
|  |  | ||||||
|  | 	if (fs->w != fs->wl->window) | ||||||
|  | 		return (0); | ||||||
|  |  | ||||||
|  | 	if (!window_has_pane(fs->w, fs->wp)) | ||||||
|  | 		return (0); | ||||||
|  | 	return (window_pane_visible(fs->wp)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Copy a state. */ | ||||||
|  | void | ||||||
|  | cmd_find_copy_state(struct cmd_find_state *dst, struct cmd_find_state *src) | ||||||
|  | { | ||||||
|  | 	dst->s = src->s; | ||||||
|  | 	dst->wl = src->wl; | ||||||
|  | 	dst->idx = dst->wl->idx; | ||||||
|  | 	dst->w = dst->wl->window; | ||||||
|  | 	dst->wp = src->wp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Log the result. */ | ||||||
|  | void | ||||||
|  | cmd_find_log_state(const char *prefix, struct cmd_find_state *fs) | ||||||
|  | { | ||||||
|  | 	if (fs->s != NULL) | ||||||
|  | 		log_debug("%s: s=$%u", prefix, fs->s->id); | ||||||
|  | 	else | ||||||
|  | 		log_debug("%s: s=none", prefix); | ||||||
|  | 	if (fs->wl != NULL) { | ||||||
|  | 		log_debug("%s: wl=%u %d w=@%u %s", prefix, fs->wl->idx, | ||||||
|  | 		    fs->wl->window == fs->w, fs->w->id, fs->w->name); | ||||||
|  | 	} else | ||||||
|  | 		log_debug("%s: wl=none", prefix); | ||||||
|  | 	if (fs->wp != NULL) | ||||||
|  | 		log_debug("%s: wp=%%%u", prefix, fs->wp->id); | ||||||
|  | 	else | ||||||
|  | 		log_debug("%s: wp=none", prefix); | ||||||
|  | 	if (fs->idx != -1) | ||||||
|  | 		log_debug("%s: idx=%d", prefix, fs->idx); | ||||||
|  | 	else | ||||||
|  | 		log_debug("%s: idx=none", prefix); | ||||||
|  | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Split target into pieces and resolve for the given type. Fills in the given |  * Split target into pieces and resolve for the given type. Fills in the given | ||||||
|  * state. Returns 0 on success or -1 on error. |  * state. Returns 0 on success or -1 on error. | ||||||
| @@ -811,24 +881,22 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_q *cmdq, | |||||||
| 		log_debug("%s: target %s, type %d", __func__, target, type); | 		log_debug("%s: target %s, type %d", __func__, target, type); | ||||||
| 	log_debug("%s: cmdq %p, flags %#x", __func__, cmdq, flags); | 	log_debug("%s: cmdq %p, flags %#x", __func__, cmdq, flags); | ||||||
|  |  | ||||||
| 	/* Find current state. */ |  | ||||||
| 	cmd_find_clear_state(¤t, cmdq, flags); |  | ||||||
| 	if (server_check_marked() && (flags & CMD_FIND_DEFAULT_MARKED)) { |  | ||||||
| 		current.s = marked_session; |  | ||||||
| 		current.wl = marked_winlink; |  | ||||||
| 		current.idx = current.wl->idx; |  | ||||||
| 		current.w = current.wl->window; |  | ||||||
| 		current.wp = marked_window_pane; |  | ||||||
| 	} |  | ||||||
| 	if (current.s == NULL && cmd_find_current_session(¤t) != 0) { |  | ||||||
| 		if (~flags & CMD_FIND_QUIET) |  | ||||||
| 			cmdq_error(cmdq, "no current session"); |  | ||||||
| 		goto error; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* Clear new state. */ | 	/* Clear new state. */ | ||||||
| 	cmd_find_clear_state(fs, cmdq, flags); | 	cmd_find_clear_state(fs, cmdq, flags); | ||||||
| 	fs->current = ¤t; |  | ||||||
|  | 	/* Find current state. */ | ||||||
|  | 	fs->current = NULL; | ||||||
|  | 	if (server_check_marked() && (flags & CMD_FIND_DEFAULT_MARKED)) | ||||||
|  | 		fs->current = &marked_pane; | ||||||
|  | 	if (fs->current == NULL) { | ||||||
|  | 		cmd_find_clear_state(¤t, cmdq, flags); | ||||||
|  | 		if (cmd_find_current_session(¤t) != 0) { | ||||||
|  | 			if (~flags & CMD_FIND_QUIET) | ||||||
|  | 				cmdq_error(cmdq, "no current session"); | ||||||
|  | 			goto error; | ||||||
|  | 		} | ||||||
|  | 		fs->current = ¤t; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	/* An empty or NULL target is the current. */ | 	/* An empty or NULL target is the current. */ | ||||||
| 	if (target == NULL || *target == '\0') | 	if (target == NULL || *target == '\0') | ||||||
| @@ -867,11 +935,7 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_q *cmdq, | |||||||
| 				cmdq_error(cmdq, "no marked target"); | 				cmdq_error(cmdq, "no marked target"); | ||||||
| 			goto error; | 			goto error; | ||||||
| 		} | 		} | ||||||
| 		fs->s = marked_session; | 		cmd_find_copy_state(fs, &marked_pane); | ||||||
| 		fs->wl = marked_winlink; |  | ||||||
| 		fs->idx = fs->wl->idx; |  | ||||||
| 		fs->w = fs->wl->window; |  | ||||||
| 		fs->wp = marked_window_pane; |  | ||||||
| 		goto found; | 		goto found; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1032,9 +1096,9 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_q *cmdq, | |||||||
|  |  | ||||||
| current: | current: | ||||||
| 	/* Use the current session. */ | 	/* Use the current session. */ | ||||||
|  | 	cmd_find_copy_state(fs, fs->current); | ||||||
| 	if (flags & CMD_FIND_WINDOW_INDEX) | 	if (flags & CMD_FIND_WINDOW_INDEX) | ||||||
| 		current.idx = -1; | 		fs->idx = -1; | ||||||
| 	memcpy(fs, ¤t, sizeof *fs); |  | ||||||
| 	goto found; | 	goto found; | ||||||
|  |  | ||||||
| error: | error: | ||||||
| @@ -1067,29 +1131,6 @@ no_pane: | |||||||
| 	goto error; | 	goto error; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Log the result. */ |  | ||||||
| void |  | ||||||
| cmd_find_log_state(const char *prefix, struct cmd_find_state *fs) |  | ||||||
| { |  | ||||||
| 	if (fs->s != NULL) |  | ||||||
| 		log_debug("%s: s=$%u", prefix, fs->s->id); |  | ||||||
| 	else |  | ||||||
| 		log_debug("%s: s=none", prefix); |  | ||||||
| 	if (fs->wl != NULL) { |  | ||||||
| 		log_debug("%s: wl=%u %d w=@%u %s", prefix, fs->wl->idx, |  | ||||||
| 		    fs->wl->window == fs->w, fs->w->id, fs->w->name); |  | ||||||
| 	} else |  | ||||||
| 		log_debug("%s: wl=none", prefix); |  | ||||||
| 	if (fs->wp != NULL) |  | ||||||
| 		log_debug("%s: wp=%%%u", prefix, fs->wp->id); |  | ||||||
| 	else |  | ||||||
| 		log_debug("%s: wp=none", prefix); |  | ||||||
| 	if (fs->idx != -1) |  | ||||||
| 		log_debug("%s: idx=%d", prefix, fs->idx); |  | ||||||
| 	else |  | ||||||
| 		log_debug("%s: idx=none", prefix); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Find the target client or report an error and return NULL. */ | /* Find the target client or report an error and return NULL. */ | ||||||
| struct client * | struct client * | ||||||
| cmd_find_client(struct cmd_q *cmdq, const char *target, int quiet) | cmd_find_client(struct cmd_q *cmdq, const char *target, int quiet) | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ const struct cmd_entry cmd_list_keys_entry = { | |||||||
| 	.args = { "t:T:", 0, 0 }, | 	.args = { "t:T:", 0, 0 }, | ||||||
| 	.usage = "[-t mode-table] [-T key-table]", | 	.usage = "[-t mode-table] [-T key-table]", | ||||||
|  |  | ||||||
| 	.flags = 0, | 	.flags = CMD_STARTSERVER, | ||||||
| 	.exec = cmd_list_keys_exec | 	.exec = cmd_list_keys_exec | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -50,7 +50,7 @@ const struct cmd_entry cmd_list_commands_entry = { | |||||||
| 	.args = { "", 0, 0 }, | 	.args = { "", 0, 0 }, | ||||||
| 	.usage = "", | 	.usage = "", | ||||||
|  |  | ||||||
| 	.flags = 0, | 	.flags = CMD_STARTSERVER, | ||||||
| 	.exec = cmd_list_keys_exec | 	.exec = cmd_list_keys_exec | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -94,13 +94,13 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq) | |||||||
| 	if (args_has(args, 'm') || args_has(args, 'M')) { | 	if (args_has(args, 'm') || args_has(args, 'M')) { | ||||||
| 		if (args_has(args, 'm') && !window_pane_visible(wp)) | 		if (args_has(args, 'm') && !window_pane_visible(wp)) | ||||||
| 			return (CMD_RETURN_NORMAL); | 			return (CMD_RETURN_NORMAL); | ||||||
| 		lastwp = marked_window_pane; | 		lastwp = marked_pane.wp; | ||||||
|  |  | ||||||
| 		if (args_has(args, 'M') || server_is_marked(s, wl, wp)) | 		if (args_has(args, 'M') || server_is_marked(s, wl, wp)) | ||||||
| 			server_clear_marked(); | 			server_clear_marked(); | ||||||
| 		else | 		else | ||||||
| 			server_set_marked(s, wl, wp); | 			server_set_marked(s, wl, wp); | ||||||
| 		markedwp = marked_window_pane; | 		markedwp = marked_pane.wp; | ||||||
|  |  | ||||||
| 		if (lastwp != NULL) { | 		if (lastwp != NULL) { | ||||||
| 			server_redraw_window_borders(lastwp->window); | 			server_redraw_window_borders(lastwp->window); | ||||||
|   | |||||||
| @@ -331,9 +331,9 @@ screen_redraw_draw_borders(struct client *c, int status, u_int top) | |||||||
| 				continue; | 				continue; | ||||||
| 			active = screen_redraw_check_is(i, j, type, w, | 			active = screen_redraw_check_is(i, j, type, w, | ||||||
| 			    w->active, wp); | 			    w->active, wp); | ||||||
| 			if (server_is_marked(s, s->curw, marked_window_pane) && | 			if (server_is_marked(s, s->curw, marked_pane.wp) && | ||||||
| 			    screen_redraw_check_is(i, j, type, w, | 			    screen_redraw_check_is(i, j, type, w, | ||||||
| 			    marked_window_pane, wp)) { | 			    marked_pane.wp, wp)) { | ||||||
| 				if (active) | 				if (active) | ||||||
| 					tty_attributes(tty, &m_active_gc, NULL); | 					tty_attributes(tty, &m_active_gc, NULL); | ||||||
| 				else | 				else | ||||||
|   | |||||||
							
								
								
									
										56
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								server.c
									
									
									
									
									
								
							| @@ -40,18 +40,14 @@ | |||||||
|  * 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); | ||||||
| @@ -67,22 +63,18 @@ void	server_child_stopped(pid_t, int); | |||||||
| 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? */ | ||||||
| @@ -91,9 +83,9 @@ server_is_marked(struct session *s, struct winlink *wl, struct window_pane *wp) | |||||||
| { | { | ||||||
| 	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()); | ||||||
| } | } | ||||||
| @@ -102,25 +94,7 @@ server_is_marked(struct session *s, struct winlink *wl, struct window_pane *wp) | |||||||
| 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. */ | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -1768,6 +1768,9 @@ int		 cmd_find_target(struct cmd_find_state *, struct cmd_q *, | |||||||
| struct client	*cmd_find_client(struct cmd_q *, const char *, int); | struct client	*cmd_find_client(struct cmd_q *, const char *, int); | ||||||
| void		 cmd_find_clear_state(struct cmd_find_state *, struct cmd_q *, | void		 cmd_find_clear_state(struct cmd_find_state *, struct cmd_q *, | ||||||
| 		     int); | 		     int); | ||||||
|  | int		 cmd_find_valid_state(struct cmd_find_state *); | ||||||
|  | void		 cmd_find_copy_state(struct cmd_find_state *, | ||||||
|  | 		     struct cmd_find_state *); | ||||||
| void		 cmd_find_log_state(const char *, struct cmd_find_state *); | void		 cmd_find_log_state(const char *, struct cmd_find_state *); | ||||||
|  |  | ||||||
| /* cmd.c */ | /* cmd.c */ | ||||||
| @@ -1846,9 +1849,7 @@ void	alerts_check_session(struct session *); | |||||||
| /* server.c */ | /* server.c */ | ||||||
| extern struct tmuxproc *server_proc; | extern struct tmuxproc *server_proc; | ||||||
| extern struct clients clients; | extern struct clients clients; | ||||||
| extern struct session *marked_session; | extern struct cmd_find_state marked_pane; | ||||||
| extern struct winlink *marked_winlink; |  | ||||||
| extern struct window_pane *marked_window_pane; |  | ||||||
| void	 server_set_marked(struct session *, struct winlink *, | void	 server_set_marked(struct session *, struct winlink *, | ||||||
| 	     struct window_pane *); | 	     struct window_pane *); | ||||||
| void	 server_clear_marked(void); | void	 server_clear_marked(void); | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								window.c
									
									
									
									
									
								
							| @@ -567,7 +567,7 @@ window_add_pane(struct window *w, u_int hlimit) | |||||||
| void | void | ||||||
| window_lost_pane(struct window *w, struct window_pane *wp) | window_lost_pane(struct window *w, struct window_pane *wp) | ||||||
| { | { | ||||||
| 	if (wp == marked_window_pane) | 	if (wp == marked_pane.wp) | ||||||
| 		server_clear_marked(); | 		server_clear_marked(); | ||||||
|  |  | ||||||
| 	if (wp == w->active) { | 	if (wp == w->active) { | ||||||
| @@ -690,7 +690,7 @@ window_printable_flags(struct session *s, struct winlink *wl) | |||||||
| 		flags[pos++] = '*'; | 		flags[pos++] = '*'; | ||||||
| 	if (wl == TAILQ_FIRST(&s->lastw)) | 	if (wl == TAILQ_FIRST(&s->lastw)) | ||||||
| 		flags[pos++] = '-'; | 		flags[pos++] = '-'; | ||||||
| 	if (server_check_marked() && wl == marked_winlink) | 	if (server_check_marked() && wl == marked_pane.wl) | ||||||
| 		flags[pos++] = 'M'; | 		flags[pos++] = 'M'; | ||||||
| 	if (wl->window->flags & WINDOW_ZOOMED) | 	if (wl->window->flags & WINDOW_ZOOMED) | ||||||
| 		flags[pos++] = 'Z'; | 		flags[pos++] = 'Z'; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Thomas Adam
					Thomas Adam