diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2023-10-02 04:15:59 +0200 | 
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2023-10-02 04:16:23 +0200 | 
| commit | c73aab039e232e7b57ad7d8518c052ad5654d8bd (patch) | |
| tree | 462d6692030471c643d578f9f2ad93ab43cb2c0f /src/main.c | |
| parent | 4d40380ebe111182341a0ac4214f962429e9c158 (diff) | |
move signal-unsafe functions out of signal handlers
A signal interrupts the blocking function calls in the main iteration, so
there is really no need to do (unsafe) heavy lifting in the signal handler.
Closes #705
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 34 | 
1 files changed, 34 insertions, 0 deletions
@@ -107,6 +107,28 @@ int main(int argc, char **argv)  	return(sig_exit);  } +static void feh_process_signal(void) +{ +	winwidget winwid = winwidget_get_first_window_of_type(WIN_TYPE_SLIDESHOW); +	int i; +	int signo = sig_received; +	sig_received = 0; + +	if (winwid) { +		if (filelist_len > 1) { +			if (signo == SIGUSR1) +				slideshow_change_image(winwid, SLIDE_NEXT, 1); +			else if (signo == SIGUSR2) +				slideshow_change_image(winwid, SLIDE_PREV, 1); +		} else { +			feh_reload_image(winwid, 0, 0); +		} +	} else if (opt.multiwindow) { +		for (i = window_num - 1; i >= 0; i--) +			feh_reload_image(windows[i], 0, 0); +	} +} +  /* Return 0 to stop iterating, 1 if ok to continue. */  int feh_main_iteration(int block)  { @@ -124,6 +146,10 @@ int feh_main_iteration(int block)  	if (window_num == 0 || sig_exit != 0)  		return(0); +	if (sig_received) { +		feh_process_signal(); +	} +  	if (first) {  		/* Only need to set these up the first time */  		xfd = ConnectionNumber(disp); @@ -156,6 +182,10 @@ int feh_main_iteration(int block)  		if (window_num == 0 || sig_exit != 0)  			return(0); + +		if (sig_received) { +			feh_process_signal(); +		}  	}  	XFlush(disp); @@ -249,6 +279,10 @@ int feh_main_iteration(int block)  	if (window_num == 0 || sig_exit != 0)  		return(0); +	if (sig_received) { +		feh_process_signal(); +	} +  	return(1);  }  | 
