Browse Source

LibVideo/VideoPlayer: Dispatch state change events and update play icon

The PlaybackStateChangeEvent wasn't connected up anymore, so the player
wouldn't change icons when stopping playback due to reaching the end of
the stream or encountering an error.
Zaggy1024 2 năm trước cách đây
mục cha
commit
a6b938b407

+ 0 - 2
Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp

@@ -129,7 +129,6 @@ void VideoPlayerWidget::resume_playback()
     if (!m_playback_manager || m_seek_slider->knob_dragging())
     if (!m_playback_manager || m_seek_slider->knob_dragging())
         return;
         return;
     m_playback_manager->resume_playback();
     m_playback_manager->resume_playback();
-    update_play_pause_icon();
 }
 }
 
 
 void VideoPlayerWidget::pause_playback()
 void VideoPlayerWidget::pause_playback()
@@ -137,7 +136,6 @@ void VideoPlayerWidget::pause_playback()
     if (!m_playback_manager || m_seek_slider->knob_dragging())
     if (!m_playback_manager || m_seek_slider->knob_dragging())
         return;
         return;
     m_playback_manager->pause_playback();
     m_playback_manager->pause_playback();
-    update_play_pause_icon();
 }
 }
 
 
 void VideoPlayerWidget::toggle_pause()
 void VideoPlayerWidget::toggle_pause()

+ 6 - 0
Userland/Libraries/LibVideo/PlaybackManager.cpp

@@ -121,6 +121,11 @@ bool PlaybackManager::dispatch_frame_queue_item(FrameQueueItem&& item)
     return false;
     return false;
 }
 }
 
 
+void PlaybackManager::dispatch_state_change()
+{
+    m_main_loop.post_event(m_event_handler, TRY_OR_FATAL_ERROR(try_make<PlaybackStateChangeEvent>()));
+}
+
 void PlaybackManager::timer_callback()
 void PlaybackManager::timer_callback()
 {
 {
     TRY_OR_FATAL_ERROR(m_playback_handler->on_timer_callback());
     TRY_OR_FATAL_ERROR(m_playback_handler->on_timer_callback());
@@ -265,6 +270,7 @@ ErrorOr<void> PlaybackManager::PlaybackStateHandler::replace_handler_and_delete_
     m_has_exited = true;
     m_has_exited = true;
     dbgln("Changing state from {} to {}", temp_handler->name(), m_manager.m_playback_handler->name());
     dbgln("Changing state from {} to {}", temp_handler->name(), m_manager.m_playback_handler->name());
 #endif
 #endif
+    m_manager.dispatch_state_change();
     TRY(m_manager.m_playback_handler->on_enter());
     TRY(m_manager.m_playback_handler->on_enter());
     return {};
     return {};
 }
 }

+ 1 - 0
Userland/Libraries/LibVideo/PlaybackManager.h

@@ -132,6 +132,7 @@ private:
     void dispatch_new_frame(RefPtr<Gfx::Bitmap> frame);
     void dispatch_new_frame(RefPtr<Gfx::Bitmap> frame);
     // Returns whether we changed playback states. If so, any PlaybackStateHandler processing must cease.
     // Returns whether we changed playback states. If so, any PlaybackStateHandler processing must cease.
     [[nodiscard]] bool dispatch_frame_queue_item(FrameQueueItem&&);
     [[nodiscard]] bool dispatch_frame_queue_item(FrameQueueItem&&);
+    void dispatch_state_change();
     void dispatch_fatal_error(Error);
     void dispatch_fatal_error(Error);
 
 
     Core::Object& m_event_handler;
     Core::Object& m_event_handler;