Browse Source

room-history: When scrolling to an item, focus it as well

fractal-7
Lukáš Tyrychtr 2 years ago committed by Kévin Commaille
parent
commit
0e6486054a
  1. 2
      Cargo.toml
  2. 6
      meson.build
  3. 2
      src/contrib/qr_code_scanner/qr_code_detector.rs
  4. 4
      src/session/model/room/mod.rs
  5. 2
      src/session/model/sidebar_data/item_list.rs
  6. 2
      src/session/view/account_settings/user_sessions_page/user_session_row.rs
  7. 26
      src/session/view/content/room_history/mod.rs
  8. 1
      src/session_list/session_list_settings.rs

2
Cargo.toml

@ -59,7 +59,7 @@ gst_gtk = { version = "0.12", package = "gst-plugin-gtk4" }
gst_pbutils = { version = "0.22", package = "gstreamer-pbutils" }
gst_play = { version = "0.22", package = "gstreamer-play" }
gst_video = { version = "0.22", package = "gstreamer-video" }
gtk = { package = "gtk4", version = "0.8", features = ["gnome_44"] }
gtk = { package = "gtk4", version = "0.8", features = ["gnome_45"] }
shumate = { package = "libshumate", version = "0.5" }
sourceview = { package = "sourceview5", version = "0.8" }

6
meson.build

@ -19,9 +19,9 @@ if pre_release_version != ''
endif
full_version = version
dependency('glib-2.0', version: '>= 2.72') # update when changing gtk version
dependency('gio-2.0', version: '>= 2.72') # always same version as glib
dependency('gtk4', version: '>= 4.10.0')
dependency('glib-2.0', version: '>= 2.76') # update when changing gtk version
dependency('gio-2.0', version: '>= 2.76') # always same version as glib
dependency('gtk4', version: '>= 4.12.0')
dependency(
'libadwaita-1', version: '>= 1.5.beta',
fallback: ['libadwaita', 'libadwaita_dep'],

2
src/contrib/qr_code_scanner/qr_code_detector.rs

@ -1,5 +1,3 @@
use std::convert::AsRef;
use futures_channel::mpsc;
use gst_video::{prelude::*, video_frame::VideoFrameRef, VideoInfo};
use image::{GenericImage, GenericImageView, Luma};

4
src/session/model/room/mod.rs

@ -880,9 +880,9 @@ impl Room {
let mut category = RoomType::Normal;
if let Ok(Some(tags)) = tags.await.unwrap() {
if tags.get(&TagName::Favorite).is_some() {
if tags.contains_key(&TagName::Favorite) {
category = RoomType::Favorite;
} else if tags.get(&TagName::LowPriority).is_some() {
} else if tags.contains_key(&TagName::LowPriority) {
category = RoomType::LowPriority;
}
}

2
src/session/model/sidebar_data/item_list.rs

@ -43,7 +43,7 @@ impl SidebarItem {
}
mod imp {
use std::cell::{Cell, OnceCell};
use std::cell::OnceCell;
use super::*;

2
src/session/view/account_settings/user_sessions_page/user_session_row.rs

@ -1,4 +1,4 @@
use adw::{self, prelude::*};
use adw::prelude::*;
use gettextrs::gettext;
use gtk::{glib, glib::clone, subclass::prelude::*, CompositeTemplate};

26
src/session/view/content/room_history/mod.rs

@ -13,7 +13,7 @@ use std::time::Duration;
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{gdk, gio, glib, glib::clone, CompositeTemplate};
use gtk::{gdk, gio, glib, glib::clone, graphene::Point, CompositeTemplate};
use matrix_sdk::ruma::EventId;
use ruma::{
api::client::receipt::create_receipt::v3::ReceiptType, events::receipt::ReceiptThread,
@ -722,8 +722,9 @@ impl RoomHistory {
imp.is_auto_scrolling.set(true);
imp.scrolled_window
.emit_scroll_child(gtk::ScrollType::End, false);
let num_events = self.selection_model().n_items();
imp.listview
.scroll_to(num_events - 1, gtk::ListScrollFlags::FOCUS, None);
}
/// Set `RoomHistory` to stick to the bottom based on scrollbar position
@ -783,10 +784,9 @@ impl RoomHistory {
if let Some(pos) = room.timeline().find_event_position(key) {
let pos = pos as u32;
let _ = self
.imp()
self.imp()
.listview
.activate_action("list.scroll-to-item", Some(&pos.to_variant()));
.scroll_to(pos, gtk::ListScrollFlags::FOCUS, None);
}
}
@ -862,15 +862,19 @@ impl RoomHistory {
let listview = &*self.imp().listview;
let mut child = listview.last_child();
// The visible part of the listview spans between 0 and max.
let max = listview.height() as f64;
let max = listview.height() as f32;
while let Some(item) = child {
// Vertical position of the top of the item.
let (_, top_pos) = item.translate_coordinates(listview, 0.0, 0.0).unwrap();
let top_pos = item
.compute_point(listview, &Point::new(0.0, 0.0))
.unwrap()
.y();
// Vertical position of the bottom of the item.
let (_, bottom_pos) = item
.translate_coordinates(listview, 0.0, item.height() as f64)
.unwrap();
let bottom_pos = item
.compute_point(listview, &Point::new(0.0, item.height() as f32))
.unwrap()
.y();
let top_in_view = top_pos > 0.0 && top_pos <= max;
let bottom_in_view = bottom_pos > 0.0 && bottom_pos <= max;

1
src/session_list/session_list_settings.rs

@ -11,7 +11,6 @@ mod imp {
use std::cell::RefCell;
use super::*;
use crate::session::model::SessionSettings;
#[derive(Debug, Default)]
pub struct SessionListSettings {

Loading…
Cancel
Save