[KDE/Mac] Review Request 126369: [OS X] adaptation(s) to platform limitations (WIP)
René J.V. Bertin
rjvbertin at gmail.com
Sat Dec 19 01:20:02 UTC 2015
> On Dec. 18, 2015, 11:27 p.m., Martin Klapetek wrote:
> > src/kstatusnotifieritem.cpp, lines 279-281
> > <https://git.reviewboard.kde.org/r/126369/diff/2/?file=424258#file424258line279>
> >
> > This has a strange indentation
> >
> > Also I think those bools are not entirely useful,
> > it just makes the code harder to read by using
> > shortened names while you could just plug those
> > title.isEmpty()/subTitle.isEmpty() directly in
> > those ifs. Each is going to be called exactly
> > once anyway.
Ah, yes indeed (the indentation). Not sure who did it, but I missed it. And you're right about the bools.
> On Dec. 18, 2015, 11:27 p.m., Martin Klapetek wrote:
> > src/kstatusnotifieritem.cpp, line 908
> > <https://git.reviewboard.kde.org/r/126369/diff/2/?file=424258#file424258line908>
> >
> > This is missing an ifdef
Will be fixed in the next upload, tomorrow morning if life doesn't get too much in the way.
> On Dec. 18, 2015, 11:27 p.m., Martin Klapetek wrote:
> > src/kstatusnotifieritem.cpp, line 909
> > <https://git.reviewboard.kde.org/r/126369/diff/2/?file=424258#file424258line909>
> >
> > I really think this should be handled/mapped
> > by the OS X native systray thing. But I guess
> > there is no API that can be used/mapped to the
> > NeedsAttention state?
I agree, but no, I haven't seen anything in the APIs that can be used to request attention via the systray icon. I'll have another look, but for now the only native attention mechanism that I can think of is letting the Dock icon bounce. That'll work only for applications that have a Dock icon of course, and it tends to work only when the application is in the background. So badging the systray icon is probably still going to be a good idea, and I doubt that it's going to take less code to do that with native APIs.
It also requires using ObjC. What do you think of the idea of moving `KStatusNotifierItemPrivate` to its own file, and subclassing it on OS X to override the `init` and `syncLegacySystemTrayIcon` methods? I can put that into an ObjC++ file which means I can do native API calls. I think a few of the other modifications I made to the main class could also be moved into `KStatusNotifierItemPrivate` (and overriden in `KStatusNotifierItemPrivateMac`) to reduce the number of ifdefs.
- René J.V.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/126369/#review89725
-----------------------------------------------------------
On Dec. 17, 2015, 5:26 p.m., René J.V. Bertin wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/126369/
> -----------------------------------------------------------
>
> (Updated Dec. 17, 2015, 5:26 p.m.)
>
>
> Review request for KDE Software on Mac OS X and KDE Frameworks.
>
>
> Repository: knotifications
>
>
> Description
> -------
>
> OS X has a number of limitations in features used by KNotifications, notably concerning the status notifier item (aka system tray icon).
>
> This RR will likely evolve to address multiple limitations (at least also the NeedsAttention state); at the moment it only proposes an emulation of `QMenu::addSection`.
>
> `QMenu::addSection` works by adding a QAction with a "texted separator" at the insertion location. Texted separators do not exist in menu items in the OS X "global" menubar (they become regular separators), and Qt will not provide a platform-specific implementation. Loss of the section title text is maybe not always an issue, but I think it is in the system tray menu. I therefore propose to emulate `QMenu::addSection` by replacing the texted separator with an inactive (disabled) menu item that shows the text, followed by a standard separator. Menus in the notification area are much less subject to interface guidelines, so the presence of an item icon is acceptable and IMO useful for the `titleAction`.
>
> Testing the NeedsAttention state with the tests/kstatusnotifieritemtest application leads to disappearance of the menubar icon, i.e. the access to the notifier menu becomes invisible rather than blinking (which is what I get on Linux using the same packaging). Adding a few qDebug statements shows that the `attentionIcon` is empty.
> I'd appreciate a crash course how this feature is supposed to work, so I can see if an OS X implementation might be feasible.
>
>
> Diffs
> -----
>
> CMakeLists.txt 6d09051
> src/CMakeLists.txt 7eb3125
> src/kstatusnotifieritem.cpp f9bf460
> tests/kstatusnotifieritemtest.cpp 973fc85
>
> Diff: https://git.reviewboard.kde.org/r/126369/diff/
>
>
> Testing
> -------
>
> On OS X 10.9.5 with Qt 5.5.1 and frameworks 5.17.0 .
>
>
> File Attachments
> ----------------
>
> the systray icon & menu created by kstatusnotifieritemtest . This application has no icon to show.
> https://git.reviewboard.kde.org/media/uploaded/files/2015/12/16/286037ae-07b3-454a-a226-1748854493a1__kstatusnotifieritemtest-systray.png
> The systray icon and menu created by the KDE4 kwalletmanager (code has an equivalent patch)
> https://git.reviewboard.kde.org/media/uploaded/files/2015/12/16/4fc9d4e4-1537-478c-9196-94cbc17b6b7c__kwalletmanager-systray.png
> An Apple systray icon+menu that shows icons (which cannot be hidden)
> https://git.reviewboard.kde.org/media/uploaded/files/2015/12/16/fc48a963-2e18-4396-bd38-062d41688118__Apple-systray-menu-with-icons.png
> kstatusnotifieritemtest with added appIcon
> https://git.reviewboard.kde.org/media/uploaded/files/2015/12/17/e896e90d-f0a8-43f7-9199-847572832df7__kstatusnotifieritemtest-with-appIcon.png
> kstatusnotifieritemtest-with-appIcon+attention.png
> https://git.reviewboard.kde.org/media/uploaded/files/2015/12/17/f41081db-8e09-4ea2-95c1-f507c62109d4__kstatusnotifieritemtest-with-appIconattention.png
>
>
> Thanks,
>
> René J.V. Bertin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-mac/attachments/20151219/ceccf8f6/attachment.html>
More information about the kde-mac
mailing list