tdf#146225 Revert "Use g_get_real_time instead of g_get_current_time"
This reverts commit 489d7298d2e609ee5900f05ba0064845a7a551ce and
4812c8df39cb03b59d8c033005e8e9dc45a260dd.
Change-Id: Ic537a605eedc39c6cbafab4c28a77d81edfa1e20
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126998
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
diff --git a/vcl/inc/unx/gtk/gtkdata.hxx b/vcl/inc/unx/gtk/gtkdata.hxx
index 5a5f003..0c6b73ca 100644
--- a/vcl/inc/unx/gtk/gtkdata.hxx
+++ b/vcl/inc/unx/gtk/gtkdata.hxx
@@ -214,7 +214,7 @@ public:
virtual void Stop() override;
bool Expired();
sal_uInt64 m_nTimeoutMS;
sal_uLong m_nTimeoutMS;
};
class DocumentFocusListener final :
diff --git a/vcl/unx/gtk3/gtkdata.cxx b/vcl/unx/gtk3/gtkdata.cxx
index 7c64db0..861ae6e 100644
--- a/vcl/unx/gtk3/gtkdata.cxx
+++ b/vcl/unx/gtk3/gtkdata.cxx
@@ -641,22 +641,21 @@ extern "C" {
struct SalGtkTimeoutSource {
GSource aParent;
gint64 aFireTime;
GTimeVal aFireTime;
GtkSalTimer *pInstance;
};
static void sal_gtk_timeout_defer( SalGtkTimeoutSource *pTSource )
{
pTSource->aFireTime = g_get_real_time() + pTSource->pInstance->m_nTimeoutMS * 1000;
g_get_current_time( &pTSource->aFireTime );
g_time_val_add( &pTSource->aFireTime, pTSource->pInstance->m_nTimeoutMS * 1000 );
}
static gboolean sal_gtk_timeout_expired( SalGtkTimeoutSource *pTSource,
gint *nTimeoutMS, gint64 const pTimeNow )
gint *nTimeoutMS, GTimeVal const *pTimeNow )
{
glong tv_sec = pTimeNow / 1000000;
glong tv_usec = pTimeNow - tv_sec * 1000000;
glong nDeltaSec = pTSource->aFireTime / 1000000 - tv_sec;
glong nDeltaUSec = pTSource->aFireTime - (nDeltaSec * 1000000) - tv_usec;
glong nDeltaSec = pTSource->aFireTime.tv_sec - pTimeNow->tv_sec;
glong nDeltaUSec = pTSource->aFireTime.tv_usec - pTimeNow->tv_usec;
if( nDeltaSec < 0 || ( nDeltaSec == 0 && nDeltaUSec < 0) )
{
*nTimeoutMS = 0;
@@ -683,20 +682,22 @@ extern "C" {
{
SalGtkTimeoutSource *pTSource = reinterpret_cast<SalGtkTimeoutSource *>(pSource);
gint64 aTimeNow;
aTimeNow = g_get_real_time();
GTimeVal aTimeNow;
g_get_current_time( &aTimeNow );
return sal_gtk_timeout_expired( pTSource, nTimeoutMS, aTimeNow );
return sal_gtk_timeout_expired( pTSource, nTimeoutMS, &aTimeNow );
}
static gboolean sal_gtk_timeout_check( GSource *pSource )
{
SalGtkTimeoutSource *pTSource = reinterpret_cast<SalGtkTimeoutSource *>(pSource);
gint64 aTimeNow;
aTimeNow = g_get_real_time();
GTimeVal aTimeNow;
g_get_current_time( &aTimeNow );
return ( pTSource->aFireTime < aTimeNow );
return ( pTSource->aFireTime.tv_sec < aTimeNow.tv_sec ||
( pTSource->aFireTime.tv_sec == aTimeNow.tv_sec &&
pTSource->aFireTime.tv_usec < aTimeNow.tv_usec ) );
}
static gboolean sal_gtk_timeout_dispatch( GSource *pSource, GSourceFunc, gpointer )
@@ -769,13 +770,17 @@ bool GtkSalTimer::Expired()
return false;
gint nDummy = 0;
gint64 aTimeNow;
aTimeNow = g_get_real_time();
return !!sal_gtk_timeout_expired( m_pTimeout, &nDummy, aTimeNow);
GTimeVal aTimeNow;
g_get_current_time( &aTimeNow );
return !!sal_gtk_timeout_expired( m_pTimeout, &nDummy, &aTimeNow);
}
void GtkSalTimer::Start( sal_uInt64 nMS )
{
// glib is not 64bit safe in this regard.
assert( nMS <= G_MAXINT );
if ( nMS > G_MAXINT )
nMS = G_MAXINT;
m_nTimeoutMS = nMS; // for restarting
Stop(); // FIXME: ideally re-use an existing m_pTimeout
m_pTimeout = create_sal_gtk_timeout( this );