message_scroll: Hide scroll to bottom button when using keypress.

We added  `is_keypress_scrolling` flag in `message_scroll.js` to keep
track of if keypress is used for scrolling.

Fixes #21844.
This commit is contained in:
Riken Shah
2022-07-05 06:38:13 +00:00
committed by Tim Abbott
parent 3ba89e7779
commit 5fdd93cf32
2 changed files with 22 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ import * as list_util from "./list_util";
import * as message_edit from "./message_edit"; import * as message_edit from "./message_edit";
import * as message_flags from "./message_flags"; import * as message_flags from "./message_flags";
import * as message_lists from "./message_lists"; import * as message_lists from "./message_lists";
import * as message_scroll from "./message_scroll";
import * as message_view_header from "./message_view_header"; import * as message_view_header from "./message_view_header";
import * as muted_topics_ui from "./muted_topics_ui"; import * as muted_topics_ui from "./muted_topics_ui";
import * as narrow from "./narrow"; import * as narrow from "./narrow";
@@ -840,27 +841,33 @@ export function process_hotkey(e, hotkey) {
switch (event_name) { switch (event_name) {
case "down_arrow": case "down_arrow":
case "vim_down": case "vim_down":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.down(true); // with_centering navigate.down(true); // with_centering
return true; return true;
case "up_arrow": case "up_arrow":
case "vim_up": case "vim_up":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.up(); navigate.up();
return true; return true;
case "home": case "home":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.to_home(); navigate.to_home();
return true; return true;
case "end": case "end":
case "G_end": case "G_end":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.to_end(); navigate.to_end();
return true; return true;
case "page_up": case "page_up":
case "vim_page_up": case "vim_page_up":
case "shift_spacebar": case "shift_spacebar":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.page_up(); navigate.page_up();
return true; return true;
case "page_down": case "page_down":
case "vim_page_down": case "vim_page_down":
case "spacebar": case "spacebar":
message_scroll.mark_keyboard_triggered_current_scroll();
navigate.page_down(); navigate.page_down();
return true; return true;
case "copy_with_c": case "copy_with_c":

View File

@@ -25,6 +25,13 @@ export function suppress_selection_update_on_next_scroll() {
update_selection_on_next_scroll = false; update_selection_on_next_scroll = false;
} }
// Whether a keyboard shortcut is triggering a message feed scroll event.
let keyboard_triggered_current_scroll = false;
export function mark_keyboard_triggered_current_scroll() {
keyboard_triggered_current_scroll = true;
}
let loading_older_messages_indicator_showing = false; let loading_older_messages_indicator_showing = false;
let loading_newer_messages_indicator_showing = false; let loading_newer_messages_indicator_showing = false;
@@ -217,7 +224,14 @@ export function scroll_finished() {
let scroll_timer; let scroll_timer;
function scroll_finish() { function scroll_finish() {
actively_scrolling = true; actively_scrolling = true;
// Don't present the "scroll to bottom" widget if the current
// scroll was triggered by the keyboard.
if (!keyboard_triggered_current_scroll) {
show_scroll_to_bottom_button(); show_scroll_to_bottom_button();
}
keyboard_triggered_current_scroll = false;
clearTimeout(scroll_timer); clearTimeout(scroll_timer);
scroll_timer = setTimeout(scroll_finished, 100); scroll_timer = setTimeout(scroll_finished, 100);
} }