avmedia/inc/mediacontrol.hxx                  |    1 +
 avmedia/source/framework/MediaControlBase.cxx |    2 +-
 avmedia/source/framework/mediacontrol.cxx     |   22 +++++++++++++++++-----
 3 files changed, 19 insertions(+), 6 deletions(-)

New commits:
commit b787fb79ecc03713ac87e954def681d144295e2b
Author:     Katarina Behrens <katarina.behr...@cib.de>
AuthorDate: Tue Apr 30 22:03:37 2019 +0200
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Fri May 3 09:53:25 2019 +0200

    tdf#101524: seeking position shouldn't pause video playback
    
    Change-Id: I846043815cdd41620f96c31843a77bea3d2db82f
    Reviewed-on: https://gerrit.libreoffice.org/71596
    Tested-by: Jenkins
    Reviewed-by: Katarina Behrens <katarina.behr...@cib.de>
    (cherry picked from commit 1eac5fa2fd661f9572fb9f9b30e2785c0d5b513a)
    Reviewed-on: https://gerrit.libreoffice.org/71699
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>
    Tested-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/avmedia/source/framework/MediaControlBase.cxx 
b/avmedia/source/framework/MediaControlBase.cxx
index 22d2b8896d3b..e7e51da44387 100644
--- a/avmedia/source/framework/MediaControlBase.cxx
+++ b/avmedia/source/framework/MediaControlBase.cxx
@@ -162,7 +162,7 @@ void MediaControlBase::UpdateToolBoxes(MediaItem aMediaItem)
             mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false );
             mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false );
         }
-        else if( aMediaItem.getTime() > 0.0 && ( aMediaItem.getTime() < 
aMediaItem.getDuration() ) )
+        else if( aMediaItem.getState() == MediaState::Pause )
         {
             mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false );
             mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE );
diff --git a/avmedia/source/framework/mediacontrol.cxx 
b/avmedia/source/framework/mediacontrol.cxx
index 1b7f7045862b..896184deea50 100644
--- a/avmedia/source/framework/mediacontrol.cxx
+++ b/avmedia/source/framework/mediacontrol.cxx
@@ -274,6 +274,8 @@ IMPL_LINK( MediaControl, implTimeEndHdl, Slider*, p, void )
     MediaItem aExecItem;
 
     aExecItem.setTime( p->GetThumbPos() * maItem.getDuration() / 
AVMEDIA_TIME_RANGE );
+    // keep state (if the media was playing, keep it playing)
+    aExecItem.setState(maItem.getState());
     execute( aExecItem );
     update();
     maIdle.Start();
commit 2a00e1cf3773bd2264fca11fc1c116bf22dc86d6
Author:     Katarina Behrens <katarina.behr...@cib.de>
AuthorDate: Mon Apr 1 14:45:42 2019 +0200
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Fri May 3 09:53:13 2019 +0200

    tdf#100007: slider and time field update during video playback
    
    To make this happen, restart idle in timeout handler (also start it
    when user bonks Play button and stop it when they bonk Pause or Stop
    button).
    The idle also needs a lower prio than TaskPriority::Repaint,
    otherwise the higher-prio events from our idle are going to starve UI
    repaints in the scheduler queue
    
    Change-Id: I4c767c3533e0e2ee9015c48b17075db5e0dc7ade
    Reviewed-on: https://gerrit.libreoffice.org/70068
    Tested-by: Jenkins
    Reviewed-by: Katarina Behrens <katarina.behr...@cib.de>
    (cherry picked from commit b2ccf5efae5261886a5aadf3f72ff095cb3b3d5b)
    Reviewed-on: https://gerrit.libreoffice.org/71698
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>
    Tested-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/avmedia/inc/mediacontrol.hxx b/avmedia/inc/mediacontrol.hxx
index 99ad5ef91a01..bdf0ce300005 100644
--- a/avmedia/inc/mediacontrol.hxx
+++ b/avmedia/inc/mediacontrol.hxx
@@ -77,6 +77,7 @@ private:
     Size                maMinSize;
     bool                mbLocked;
     MediaControlStyle   meControlStyle;
+    double mfTime;
 };
 
 }
diff --git a/avmedia/source/framework/mediacontrol.cxx 
b/avmedia/source/framework/mediacontrol.cxx
index dd9a02cb5c89..1b7f7045862b 100644
--- a/avmedia/source/framework/mediacontrol.cxx
+++ b/avmedia/source/framework/mediacontrol.cxx
@@ -44,7 +44,8 @@ MediaControl::MediaControl( vcl::Window* pParent, 
MediaControlStyle eControlStyl
     maIdle( "avmedia MediaControl Idle" ),
     maItem( 0, AVMediaSetMask::ALL ),
     mbLocked( false ),
-    meControlStyle( eControlStyle )
+    meControlStyle( eControlStyle ),
+    mfTime(0.0)
 {
     mpPlayToolBox =  VclPtr<ToolBox>::Create(this, WB_3DLOOK) ;
     mpTimeSlider = VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_3DLOOK) 
;
@@ -116,10 +117,10 @@ MediaControl::MediaControl( vcl::Window* pParent, 
MediaControlStyle eControlStyl
         mpZoomToolBox->SetBackground();
         mpZoomToolBox->SetPaintTransparent( true );
     }
-
-    maIdle.SetPriority( TaskPriority::HIGH_IDLE );
+    // we want time field + progress slider to update as the media plays
+    // give this task a lower prio than REPAINT so that UI updates are not 
starved
+    maIdle.SetPriority( TaskPriority::POST_PAINT );
     maIdle.SetInvokeHandler( LINK( this, MediaControl, implTimeoutHdl ) );
-    maIdle.Start();
 }
 
 void MediaControl::InitializeWidgets()
@@ -245,8 +246,10 @@ void MediaControl::Resize()
 
 void MediaControl::setState( const MediaItem& rItem )
 {
-    if( !mbLocked )
+    double fTime = rItem.getTime();
+    if( !mbLocked && fTime != mfTime)
     {
+        mfTime = fTime;
         maItem.merge( rItem );
         if( rItem.getURL().isEmpty() && meControlStyle == 
MEDIACONTROLSTYLE_SINGLELINE )
             mpPlayToolBox->Disable();
@@ -311,6 +314,12 @@ IMPL_LINK( MediaControl, implSelectHdl, ToolBox*, p, void )
         else
             SelectPlayToolBoxItem( aExecItem, maItem, p->GetCurItemId() );
 
+        if (aExecItem.getState() == MediaState::Play)
+            maIdle.Start();
+        else if (aExecItem.getState() == MediaState::Pause ||
+                 aExecItem.getState() == MediaState::Stop)
+            maIdle.Stop();
+
         if( aExecItem.getMaskSet() != AVMediaSetMask::NONE )
             execute( aExecItem );
     }
@@ -348,6 +357,7 @@ IMPL_LINK( MediaControl, implZoomSelectHdl, ListBox&, p, 
void )
 IMPL_LINK_NOARG(MediaControl, implTimeoutHdl, Timer *, void)
 {
     update();
+    maIdle.Start();
 }
 
 } // namespace avmedia
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to