aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-03 13:08:49 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-03 13:08:49 +0000
commit3448ab0ca216d12f51476a28df2286e3f7d83d40 (patch)
treedae1414625ba205b43cf27f75ad1d8db349ee17a /main.c
parentd731b8cb8ec01b73e7c6179b095174910af64ff5 (diff)
downloaddzen-3448ab0ca216d12f51476a28df2286e3f7d83d40.tar.gz
dzen-3448ab0ca216d12f51476a28df2286e3f7d83d40.zip
fixed read with timeout
git-svn-id: http://dzen.googlecode.com/svn/trunk@51 f2baff5b-bf2c-0410-a398-912abdc3d8b2
Diffstat (limited to 'main.c')
-rw-r--r--main.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/main.c b/main.c
index c048c05..05ca055 100644
--- a/main.c
+++ b/main.c
@@ -394,9 +394,12 @@ handle_newl(void) {
if(dzen.slave_win.max_lines && (dzen.slave_win.tcnt > last_cnt)) {
if (XGetWindowAttributes(dzen.dpy, dzen.slave_win.win, &wa),
- wa.map_state != IsUnmapped &&
+ wa.map_state != IsUnmapped
/* scroll only if we're viewing the last line of input */
- (dzen.slave_win.last_line_vis == last_cnt)) {
+ && (dzen.slave_win.last_line_vis == last_cnt)) {
+ dzen.slave_win.first_line_vis = 0;
+ dzen.slave_win.last_line_vis = 0;
+ } else if(wa.map_state == IsUnmapped || !dzen.slave_win.last_line_vis) {
dzen.slave_win.first_line_vis = 0;
dzen.slave_win.last_line_vis = 0;
}
@@ -425,12 +428,12 @@ event_loop(void *ptr) {
ret = select(xfd+1, &rmask, NULL, NULL, NULL);
if(ret) {
- if(dr != -2
- && FD_ISSET(STDIN_FILENO, &rmask)
- && dzen.timeout > 0) {
+ if(dr != -2 && FD_ISSET(STDIN_FILENO, &rmask)) {
if((dr = read_stdin(NULL)) == -1)
return;
handle_newl();
+ }
+ else if(dr == -2 && dzen.timeout > 0) {
// Set an alarm to kill us after the timeout
struct itimerval value;
memset(&value, 0, sizeof(value));
@@ -438,9 +441,9 @@ event_loop(void *ptr) {
value.it_value.tv_usec = 1000 * (dzen.timeout % 1000);
setitimer(ITIMER_REAL, &value, NULL);
}
+ if(FD_ISSET(xfd, &rmask))
+ handle_xev();
}
- if(FD_ISSET(xfd, &rmask))
- handle_xev();
}
return;
}