diff --git a/Cargo.lock b/Cargo.lock index ab112d7..4e9026f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -182,7 +182,7 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "comicviewer" -version = "0.2.10" +version = "0.2.11" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 9c16b80..962f340 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "comicviewer" -version = "0.2.10" +version = "0.2.11" edition = "2024" description = "A comic archive viewer for local and remote locations" license = "GPL-3.0-or-later" diff --git a/data/io.github.comicviewer.Comicviewer.metainfo.xml b/data/io.github.comicviewer.Comicviewer.metainfo.xml index 72ca04c..4d02a91 100644 --- a/data/io.github.comicviewer.Comicviewer.metainfo.xml +++ b/data/io.github.comicviewer.Comicviewer.metainfo.xml @@ -26,6 +26,7 @@ + diff --git a/docs/RELEASING.ko.md b/docs/RELEASING.ko.md index 4a16848..905fc7a 100644 --- a/docs/RELEASING.ko.md +++ b/docs/RELEASING.ko.md @@ -55,7 +55,7 @@ AppImage 빌드가 끝나면 다음 스크립트로 체크섬과 통합 `tar.gz` 스크립트는 `Cargo.toml`에서 버전을 읽고 다음 파일을 생성합니다. -- `dist/Comicviewer-0.2.10-x86_64.AppImage.sha256` +- `dist/Comicviewer-0.2.11-x86_64.AppImage.sha256` - `dist/Comicviewer-latest-x86_64.tar.gz` - `dist/Comicviewer-latest-x86_64.tar.gz.sha256` @@ -78,10 +78,10 @@ sha256sum -c Comicviewer-latest-x86_64.tar.gz.sha256 ```sh git add Cargo.toml Cargo.lock data packaging README.md docs -git commit -m "Release v0.2.10" -git tag -a v0.2.10 -m "Comicviewer v0.2.10" +git commit -m "Release v0.2.11" +git tag -a v0.2.11 -m "Comicviewer v0.2.11" git push origin main -git push origin v0.2.10 +git push origin v0.2.11 ``` 이미 원격에 공개한 태그는 이동하거나 덮어쓰지 않습니다. 수정이 필요하면 새 diff --git a/src/viewer.rs b/src/viewer.rs index 52ad233..b4b6a94 100644 --- a/src/viewer.rs +++ b/src/viewer.rs @@ -640,7 +640,7 @@ struct ViewerController { key_controller: RefCell>, motion_controller: RefCell>, fullscreen_key_controller: RefCell>, - fullscreen_click_controller: RefCell>, + fullscreen_click_controller: RefCell>, fullscreen_ui_hide_timer: RefCell>, fullscreen_ui_visible: Cell, fullscreen_notify_handler: RefCell>, @@ -786,29 +786,24 @@ impl ViewerController { controller.seek_page(index); } }); - let seek_click = gtk::GestureClick::builder() - .button(gdk::BUTTON_PRIMARY) - .propagation_phase(gtk::PropagationPhase::Capture) - .build(); + let seek_events = gtk::EventControllerLegacy::new(); + seek_events.set_propagation_phase(gtk::PropagationPhase::Capture); let controller = Rc::downgrade(self); - seek_click.connect_pressed(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { - controller.begin_seek_interaction(); + seek_events.connect_event(move |_, event| { + if event + .downcast_ref::() + .is_some_and(|event| event.button() == gdk::BUTTON_PRIMARY) + && let Some(controller) = controller.upgrade() + { + match event.event_type() { + gdk::EventType::ButtonPress => controller.begin_seek_interaction(), + gdk::EventType::ButtonRelease => controller.end_seek_interaction(), + _ => {} + } } + glib::Propagation::Proceed }); - let controller = Rc::downgrade(self); - seek_click.connect_released(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { - controller.end_seek_interaction(); - } - }); - let controller = Rc::downgrade(self); - seek_click.connect_cancel(move |_, _| { - if let Some(controller) = controller.upgrade() { - controller.end_seek_interaction(); - } - }); - self.page_seek.add_controller(seek_click); + self.page_seek.add_controller(seek_events); let adjustment = self.continuous_scrolled.vadjustment(); let controller = Rc::downgrade(self); @@ -895,15 +890,17 @@ impl ViewerController { }); self.stack.add_controller(scroll_controller); - let fullscreen_click = gtk::GestureClick::builder() - .button(0) - .propagation_phase(gtk::PropagationPhase::Capture) - .build(); + let fullscreen_click = gtk::EventControllerLegacy::new(); + fullscreen_click.set_propagation_phase(gtk::PropagationPhase::Capture); let controller = Rc::downgrade(self); - fullscreen_click.connect_pressed(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { + fullscreen_click.connect_event(move |_, event| { + if event.downcast_ref::().is_some() + && event.event_type() == gdk::EventType::ButtonPress + && let Some(controller) = controller.upgrade() + { controller.controls_clicked(); } + glib::Propagation::Proceed }); self.window.add_controller(fullscreen_click.clone()); self.fullscreen_click_controller @@ -2440,7 +2437,7 @@ struct MediaViewerController { key_controller: RefCell>, motion_controller: RefCell>, fullscreen_key_controller: RefCell>, - fullscreen_click_controller: RefCell>, + fullscreen_click_controller: RefCell>, fullscreen_ui_hide_timer: RefCell>, fullscreen_ui_visible: Cell, fullscreen_notify_handler: RefCell>, @@ -2451,15 +2448,17 @@ struct MediaViewerController { impl MediaViewerController { fn connect_signals(self: &Rc) { - let fullscreen_click = gtk::GestureClick::builder() - .button(0) - .propagation_phase(gtk::PropagationPhase::Capture) - .build(); + let fullscreen_click = gtk::EventControllerLegacy::new(); + fullscreen_click.set_propagation_phase(gtk::PropagationPhase::Capture); let controller = Rc::downgrade(self); - fullscreen_click.connect_pressed(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { + fullscreen_click.connect_event(move |_, event| { + if event.downcast_ref::().is_some() + && event.event_type() == gdk::EventType::ButtonPress + && let Some(controller) = controller.upgrade() + { controller.controls_clicked(); } + glib::Propagation::Proceed }); self.window.add_controller(fullscreen_click.clone()); self.fullscreen_click_controller @@ -2740,29 +2739,24 @@ impl MediaViewerController { controller.schedule_seek(index); } }); - let seek_click = gtk::GestureClick::builder() - .button(gdk::BUTTON_PRIMARY) - .propagation_phase(gtk::PropagationPhase::Capture) - .build(); + let seek_events = gtk::EventControllerLegacy::new(); + seek_events.set_propagation_phase(gtk::PropagationPhase::Capture); let controller = Rc::downgrade(self); - seek_click.connect_pressed(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { - controller.begin_seek_interaction(); + seek_events.connect_event(move |_, event| { + if event + .downcast_ref::() + .is_some_and(|event| event.button() == gdk::BUTTON_PRIMARY) + && let Some(controller) = controller.upgrade() + { + match event.event_type() { + gdk::EventType::ButtonPress => controller.begin_seek_interaction(), + gdk::EventType::ButtonRelease => controller.end_seek_interaction(), + _ => {} + } } + glib::Propagation::Proceed }); - let controller = Rc::downgrade(self); - seek_click.connect_released(move |_, _, _, _| { - if let Some(controller) = controller.upgrade() { - controller.end_seek_interaction(); - } - }); - let controller = Rc::downgrade(self); - seek_click.connect_cancel(move |_, _| { - if let Some(controller) = controller.upgrade() { - controller.cancel_seek_interaction(); - } - }); - self.media_seek.add_controller(seek_click); + self.media_seek.add_controller(seek_events); } fn refresh_file_list(&self) { @@ -3064,17 +3058,6 @@ impl MediaViewerController { } } - fn cancel_seek_interaction(self: &Rc) { - self.pending_seek_index.set(None); - if self.seek_interacting.replace(false) { - if self.window.is_fullscreen() { - self.show_fullscreen_ui_temporarily(); - } else { - self.show_seek_temporarily(); - } - } - } - fn pointer_moved(self: &Rc, x: f64, y: f64) { if self.last_pointer_position.get() == Some((x, y)) { return;