** Description changed:

- in qppmenu-qt5 in ubuntu 16.4, the  AppMenuPlatformSystemTrayIcon
- assumes there is only one instance of a QPlatformSystemTrayIcon: it
- register the same sbus name for all the instances.  In fact, there is
- one instance of QPlatformSystemTrayIcon per instance of QSystemTrayIcon,
- and one temporary is created for QSystemTrayIcon::isSystemTrayAvailable.
+ # Impact
+ This affects all Qt applications that use 
QSystemTrayIcon::​isSystemTrayAvailable, in Unity environment. Confirmed 
examples are owncloud-client and keepassxc, but there may be more applications.
  
+ # Test Case
+ See the original description below for the test case in C++.
  
- This breaks the owncloud client  [issue 
https://github.com/owncloud/client/issues/4693 ]
+ # Proposed Fix
+ The proposed fix is identical to what was uploaded to Yakkety as version 
0.3.0+16.10.20160628.1-0ubuntu1. The fix is using unique connections for all 
AppMenuPlatformSystemTrayIcon instances.
  
+ # Regression Potential
+ The fix is in Yakkety since June and in Zesty, and nobody complained so far. 
So it should not cause any regressions.
+ 
+ -----------------------------------------------------------------------------
+ in appmenu-qt5 in ubuntu 16.04, the  AppMenuPlatformSystemTrayIcon assumes 
there is only one instance of a QPlatformSystemTrayIcon: it register the same 
dbus name for all the instances.  In fact, there is one instance of 
QPlatformSystemTrayIcon per instance of QSystemTrayIcon,  and one temporary is 
created for QSystemTrayIcon::isSystemTrayAvailable.
+ 
+ This breaks the owncloud client  [issue
+ https://github.com/owncloud/client/issues/4693 ]
  
  This example reproduces the problem:
  
  ```
  #include <QtWidgets>
  
  int main(int argc, char *argv[])
  {
-     QApplication a(argc, argv);
-     QImage img(64,64, QImage::Format_ARGB32);
-     img.fill(Qt::red);
-     QSystemTrayIcon sti(QIcon(QPixmap::fromImage(img)));
-     sti.show();
+     QApplication a(argc, argv);
+     QImage img(64,64, QImage::Format_ARGB32);
+     img.fill(Qt::red);
+     QSystemTrayIcon sti(QIcon(QPixmap::fromImage(img)));
+     sti.show();
  
-      QSystemTrayIcon::isSystemTrayAvailable(); // with this line, the 
QSystemTrayIcon does not appear
-      // comment the previous line to see that the QSystemTrayIcon works and 
that there is a bug in that line
+      QSystemTrayIcon::isSystemTrayAvailable(); // with this line, the 
QSystemTrayIcon does not appear
+      // comment the previous line to see that the QSystemTrayIcon works and 
that there is a bug in that line
  
-     return a.exec();
+     return a.exec();
  }
  ```
  
  This testcase shows that the
  AppMenuPlatformSystemTrayIcon::~AppMenuPlatformSystemTrayIcon  called by
  the temporary object created inside
  QSystemTrayIcon::isSystemTrayAvailable unregisters the icon.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1574699

Title:
  All QSystemTrayIcon have the same icon, and
  QSystemTrayIcon::isSystemTrayAvailable remove all QSystemTrayIcon

To manage notifications about this bug go to:
https://bugs.launchpad.net/appmenu-qt5/+bug/1574699/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to