Add workaround for top panel button highlighting 49/25049/1 10.91.0 9.99.2 9.99.3 9.99.4 jellyfish/9.99.2 jellyfish/9.99.3 jellyfish/9.99.4 jellyfish_9.99.2 jellyfish_9.99.3 jellyfish_9.99.4 koi/10.91.0 koi_10.91.0
authorScott Murray <scott.murray@konsulko.com>
Thu, 23 Jul 2020 02:27:21 +0000 (22:27 -0400)
committerScott Murray <scott.murray@konsulko.com>
Thu, 23 Jul 2020 02:39:25 +0000 (22:39 -0400)
The switch to the new compositor removed the callback to update the
top panel button highlight since it was being driven by the
Event_ScreenUpdated event from the old windowmanager.  For now, work
around this by driving the ApplicationLauncher's setCurrent method
from the appropriate place in the HomescreenHandler object's
tapShortcut method.  If a generic mechanism for notifications on
application expose becomes available via agl-shell-desktop, that
should be used instead.

Additionally, add an explicit call to setCurrent on initialization to
highlight the top panel Launcher button, matching the actual initial
UI state.

Bug-AGL: SPEC-3510

Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Ied5dd8e78195d061585510e60a758559ca4f69b3

homescreen/src/homescreenhandler.cpp
homescreen/src/homescreenhandler.h
homescreen/src/main.cpp

index bf98a53..e31f122 100644 (file)
 
 void* HomescreenHandler::myThis = 0;
 
-HomescreenHandler::HomescreenHandler(Shell *_aglShell, QObject *parent) :
+HomescreenHandler::HomescreenHandler(Shell *_aglShell, ApplicationLauncher *launcher, QObject *parent) :
     QObject(parent),
     aglShell(_aglShell)
 {
-
+    mp_launcher = launcher;
 }
 
 HomescreenHandler::~HomescreenHandler()
@@ -113,6 +113,10 @@ void HomescreenHandler::tapShortcut(QString application_id)
        // the first time. Later calls to HomescreenHandler::tapShortcut will
        // require calling 'agl_shell_activate_app'
        agl_shell_activate_app(agl_shell, application_id.toStdString().c_str(), output);
+
+       if (mp_launcher) {
+               mp_launcher->setCurrent(application_id);
+       }
 }
 
 void HomescreenHandler::onRep_static(struct json_object* reply_contents)
index 3d939ce..790c4fd 100644 (file)
@@ -20,6 +20,7 @@
 #include <QObject>
 
 #include <libhomescreen.hpp>
+#include "applicationlauncher.h"
 
 #include "shell.h"
 #include <string>
@@ -30,7 +31,7 @@ class HomescreenHandler : public QObject
 {
     Q_OBJECT
 public:
-    explicit HomescreenHandler(Shell *aglShell, QObject *parent = 0);
+    explicit HomescreenHandler(Shell *aglShell, ApplicationLauncher *launcher = 0, QObject *parent = 0);
     ~HomescreenHandler();
 
     void init(int port, const char* token);
@@ -49,6 +50,7 @@ signals:
     void showInformation(QString info);
 private:
     LibHomeScreen *mp_hs;
+    ApplicationLauncher *mp_launcher;
     Shell *aglShell;
 };
 
index 742daa6..8c7bb22 100644 (file)
@@ -234,15 +234,14 @@ int main(int argc, char *argv[])
     Shell *aglShell = new Shell(shell, &a);
 
     // import C++ class to QML
-    // qmlRegisterType<ApplicationLauncher>("HomeScreen", 1, 0, "ApplicationLauncher");
     qmlRegisterType<StatusBarModel>("HomeScreen", 1, 0, "StatusBarModel");
     qmlRegisterType<MasterVolume>("MasterVolume", 1, 0, "MasterVolume");
     qmlRegisterUncreatableType<ChromeController>("SpeechChrome", 1, 0, "SpeechChromeController",
                                                  QLatin1String("SpeechChromeController is uncreatable."));
 
     ApplicationLauncher *launcher = new ApplicationLauncher();
-
-    HomescreenHandler* homescreenHandler = new HomescreenHandler(aglShell);
+    launcher->setCurrent(QStringLiteral("launcher"));
+    HomescreenHandler* homescreenHandler = new HomescreenHandler(aglShell, launcher);
     homescreenHandler->init(port, token.toStdString().c_str());
 
     QUrl bindingAddress;