commit ca140f96f4be1fc8145b5725eb6c53cc9ebfd0a9
parent eeea6a1e2de504cd628a14bcc25844a9a788b8c4
Author: ukai <ukai>
Date:   Wed, 30 Oct 2002 15:46:27 +0000
[w3m-dev 03363] refresh download
* file.c (HTMLtagproc1): alarm is implicit once
* fm.h (AL_IMPLICIT_ONCE): added
* main.c (searchKeyData): reset CurrentKeyData, CurrentCmdData
	(SigAlarm): CurrentCmdData is saved to data
		message displayed on AL_EXPLICIT
		clear alarm when AL_IMPLICIT_ONCE
	(setAlarmEvent): AL_IMPLICIT_ONCE
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
Diffstat:
4 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,5 +1,16 @@
 2002-10-31  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
 
+	* [w3m-dev 03363] refresh download
+	* file.c (HTMLtagproc1): alarm is implicit once
+	* fm.h (AL_IMPLICIT_ONCE): added
+	* main.c (searchKeyData): reset CurrentKeyData, CurrentCmdData
+		(SigAlarm): CurrentCmdData is saved to data
+			message displayed on AL_EXPLICIT
+			clear alarm when AL_IMPLICIT_ONCE
+		(setAlarmEvent): AL_IMPLICIT_ONCE
+
+2002-10-31  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+
 	* [w3m-dev 03362] Re: support for http://user:pass@www.url.com
 	* etc.c (loadPasswd): accept host, passwd
 
diff --git a/file.c b/file.c
@@ -4602,7 +4602,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
 #ifdef USE_ALARM
 		else if (!is_redisplay && refresh_interval > 0 && MetaRefresh
 			 && !((obuf->flag & RB_NOFRAMES) && RenderFrame)) {
-		    setAlarmEvent(refresh_interval, AL_IMPLICIT,
+		    setAlarmEvent(refresh_interval, AL_IMPLICIT_ONCE,
 				  FUNCNAME_gorURL, s_tmp->ptr);
 		}
 #endif
diff --git a/fm.h b/fm.h
@@ -1016,6 +1016,7 @@ void w3m_exit(int i);
 #define AL_EXPLICIT      1
 #define AL_IMPLICIT      2
 #define AL_IMPLICIT_DONE 3
+#define AL_IMPLICIT_ONCE 4
 #endif
 
 /* 
diff --git a/main.c b/main.c
@@ -4992,6 +4992,8 @@ searchKeyData(void)
 	data = CurrentCmdData;
     else if (CurrentKey >= 0)
 	data = getKeyData(CurrentKey);
+    CurrentKeyData = NULL;
+    CurrentCmdData = NULL;
     if (data == NULL || *data == '\0')
 	return NULL;
     return allocStr(data, -1);
@@ -5084,10 +5086,12 @@ execCmd(void)
 static MySignalHandler
 SigAlarm(SIGNAL_ARG)
 {
+    char *data;
+
     if (alarm_sec > 0) {
 	CurrentKey = -1;
 	CurrentKeyData = NULL;
-	CurrentCmdData = (char *)alarm_event.user_data;
+	CurrentCmdData = data = (char *)alarm_event.user_data;
 #ifdef USE_MOUSE
 	if (use_mouse)
 	    mouse_inactive();
@@ -5099,15 +5103,18 @@ SigAlarm(SIGNAL_ARG)
 #endif
 	CurrentCmdData = NULL;
 	onA();
-	disp_message_nsec(Sprintf("%s %s", w3mFuncList[alarm_event.cmd].id,
-				  CurrentCmdData ? CurrentCmdData : "")->ptr,
-			  FALSE, alarm_sec - 1, FALSE, TRUE);
-	if (alarm_status == AL_IMPLICIT) {
+	if (alarm_status == AL_EXPLICIT) {
+	    disp_message_nsec(Sprintf("%s %s", w3mFuncList[alarm_event.cmd].id,
+				      data ? data : "")->ptr,
+			      FALSE, alarm_sec - 1, FALSE, TRUE);
+	}
+	else if (alarm_status == AL_IMPLICIT) {
 	    alarm_buffer = Currentbuf;
 	    alarm_status = AL_IMPLICIT_DONE;
 	}
-	else if (alarm_status == AL_IMPLICIT_DONE
-		 && alarm_buffer != Currentbuf) {
+	else if ((alarm_status == AL_IMPLICIT_DONE
+		 && alarm_buffer != Currentbuf)
+		 || alarm_status == AL_IMPLICIT_ONCE) {
 	    setAlarmEvent(0, AL_UNSET, FUNCNAME_nulcmd, NULL);
 	}
 	if (alarm_sec > 0) {
@@ -5154,6 +5161,7 @@ void
 setAlarmEvent(int sec, short status, int cmd, void *data)
 {
     if (status == AL_UNSET || status == AL_EXPLICIT
+	|| status == AL_IMPLICIT_ONCE
 	|| (status == AL_IMPLICIT && alarm_status != AL_EXPLICIT)) {
 	alarm_sec = sec;
 	alarm_status = status;