[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.1' - desktop/qa desktop/source

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sun Nov 27 16:46:23 UTC 2016


 desktop/qa/desktop_lib/test_desktop_lib.cxx |    7 ++++++-
 desktop/source/lib/init.cxx                 |   18 ++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

New commits:
commit b63915253e460e0168bbe68e457c273228c7134e
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sat Nov 26 21:55:41 2016 -0500

    Lok: compress duplicate state-changed events
    
    STATE_CHANGED callback events that have the form
    of name=value are only removed when newer ones
    are identical. This is not very helpful since
    often the same name (i.e. state type) changes
    its value and we need to superseed older ones
    with new values.
    
    This patch makes sure that a STATE_CHANGED with
    a given name has its latest value and doesn't
    change multiple times while in the queue.
    
    Change-Id: Ibfa18359464d7137411e5846b1c6d415a0aad43d
    Reviewed-on: https://gerrit.libreoffice.org/31258
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    (cherry picked from commit f80140bf3a4fa2d809167825ee04ffd0a0c19c6c)
    Reviewed-on: https://gerrit.libreoffice.org/31265
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index d38a6a0..6bf0452 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -1088,13 +1088,15 @@ void DesktopLOKTest::testNotificationCompression()
     handler->queue(LOK_CALLBACK_CELL_CURSOR, "15 25 15 10"); // Should be dropped.
     handler->queue(LOK_CALLBACK_CELL_FORMULA, "blah"); // 12
     handler->queue(LOK_CALLBACK_SET_PART, "1"); // 13
+    handler->queue(LOK_CALLBACK_STATE_CHANGED, ".uno:AssignLayout=20"); // Superseeded
     handler->queue(LOK_CALLBACK_CURSOR_VISIBLE, ""); // Should be dropped.
     handler->queue(LOK_CALLBACK_CELL_FORMULA, "blah"); // Should be dropped.
     handler->queue(LOK_CALLBACK_SET_PART, "1"); // Should be dropped.
+    handler->queue(LOK_CALLBACK_STATE_CHANGED, ".uno:AssignLayout=1"); // 14
 
     Scheduler::ProcessEventsToIdle();
 
-    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(13), notifs.size());
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(14), notifs.size());
 
     size_t i = 0;
     CPPUNIT_ASSERT_EQUAL((int)LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, (int)std::get<0>(notifs[i]));
@@ -1135,6 +1137,9 @@ void DesktopLOKTest::testNotificationCompression()
 
     CPPUNIT_ASSERT_EQUAL((int)LOK_CALLBACK_SET_PART, (int)std::get<0>(notifs[i]));
     CPPUNIT_ASSERT_EQUAL(std::string("1"), std::get<1>(notifs[i++]));
+
+    CPPUNIT_ASSERT_EQUAL((int)LOK_CALLBACK_STATE_CHANGED, (int)std::get<0>(notifs[i]));
+    CPPUNIT_ASSERT_EQUAL(std::string(".uno:AssignLayout=1"), std::get<1>(notifs[i++]));
 }
 
 void DesktopLOKTest::testPartInInvalidation()
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index bc724a6..2ea1165 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -815,6 +815,24 @@ void CallbackFlushHandler::queue(const int type, const char* data)
                 }
             }
             break;
+
+            // State changes with same name override previous ones with a different value.
+            // Ex. ".uno:PageStatus=Slide 20 of 83" overwrites any previous PageStatus.
+            case LOK_CALLBACK_STATE_CHANGED:
+            {
+                // Compare the state name=value and overwrite earlier entries with same name.
+                const auto pos = payload.find('=');
+                if (pos != std::string::npos)
+                {
+                    const std::string name = payload.substr(0, pos + 1);
+                    removeAll(
+                        [type, &payload, &name] (const queue_type::value_type& elem) {
+                            return (elem.first == type) && (elem.second.compare(0, name.size(), name) == 0);
+                        }
+                    );
+                }
+            }
+            break;
         }
     }
 


More information about the Libreoffice-commits mailing list