Nearly two weeks have passed since I announced that I would explore development on elementary OS. I received more positive feedback than I expected, so thanks, everybody, for your awesome support! Since the announcement, I’ve been getting my feet wet with a few different elementary-related projects, and I think I’m starting to get the hang of things.
Wingpanel Ayatana Indicator
I’ve long been a fan of indicators, the modern replacement for Systray icons. Fewer apps use Systray these days, which has been deprecated across several desktops and toolkits. Replacing the Systray are AppIndicators (of the Ubuntu and Ayatana variety) and StatusNotifierItems. These have pretty wide support and are commonly used by messaging apps (Discord, Slack, Telegram) and cloud-syncing apps (Dropbox, pCloud, SyncThing).
Adding support for elementary 6 “Odin”
With a few development library updates, the existing version of the indicator did not support the upcoming Odin release. After a bit of hacking and experimentation, I got the package working fully. Check out this pull request in case you need to get your indicator fix. In a less useful update, I also refreshed the packaging for elementary 5 “Hera.”
Files: Tabular numbers in the file transfer dialog
I found this issue while browsing the Bitesize Issues in the Desktop Development section of elementary’s Get Involved page. Tabular numbers would prevent the file transfer dialog from jumping around, which seemed a nice improvement. With the referenced code example, I quickly identified the needed changes and got my hands dirty with a bit of Vala. My pull request was merged after a code review and a small tweak!
Wingpanel Sound Indicator
After browsing the various projects and open issues, I became interested in hacking on the Wingpanel Sound Indicator. On the Xfce side, I’ve maintained the Xfce PulseAudio Plugin and Parole Media Player for quite some time and have some relevant experience to apply with MPRIS and DBus.
Fixing Spotify’s missing artwork
On my computer, Spotify is always playing in the background. Having the album artwork in the sound indicator is a nice touch, so I wanted to dig in and see if I could land a fix. Using DFeet, I got the URL Spotify was sending, found it was returning a 404 response, and ultimately came across this post on the Spotify Community about the invalid URL.
I submitted a simple pull request to replace the invalid URL with a currently known working one (Vala makes this super simple) and sent it along. Some elementary developers quickly responded with valid feedback, including that Spotify needs to fix its own app. If any Spotify developers are reading… please? 🙂
Bluetooth audio devices listed as music players
The Wingpanel Sound Indicator conveniently shows available media players, phones, and other devices that can be controlled via MPRIS. I didn’t expect to see my Bluetooth headphones on the list, and unsurprisingly, the media controls didn’t affect them.
I did some more digging in DFeet, but the most useful property I could find was that this player uses the audio-card icon. I tracked down the icon-related code in Bluez and used that as the basis for a new issue.
Here’s hoping that one can get fixed upstream! If not, I’ll continue exploring options for hiding this device in the Sound Indicator.
What’s next?
I’m having fun exploring the elementary code and issue trackers, and I think I’ll be able to make some meaningful contributions to be project. I may spend more time on the Wingpanel Sound Indicator before getting out of my comfort zone with larger projects. I’ve also got some updates coming for Xubuntu in the next couple of days, so watch my blog and Twitter for updates.
If you’d like to join in, I recommend checking out the Get Involved page for ways to contribute. Additionally, elementary announced yesterday that they did not get accepted into the Google Summer of Code this year but shared a list of potential projects to work on. There are some pretty substantial projects listed here, so if you’re looking for something to do, this seems like a good opportunity.