New version of Oxygen (colored) Plasma system tray icons
Posted by Kevin Kofler in Fedora on 2011-12-10
If you’re fed up of staring at a boring, low-contrast all-gray system tray with icons inconsistent with the rest of your system, it’s time to bring some color into your life, or at least your system tray.
In other words, my Oxygen Plasma (≥ 4.5) system tray icons are for you. Please note that credit for the actual artwork goes to the Oxygen icon theme team, I only did the required format conversions. (On the other hand, if things look ugly, it’s probably my fault.
)
Today, I have updated the package to include a colored version of kpackagekit.svgz, which contains 3 icons (plus a currently unused fourth one) used by Apper. The icons are again converted from the Oxygen icon theme. So if you were using revision 1 of my theme on Fedora 16 and the gray Apper icon was sticking out like a sore thumb, the updated revision 2 is for you!
Plasma PackageKit integration approved as a Fedora 17 feature
Posted by Kevin Kofler in Fedora, GSoC on 2011-12-10
I am proud to announce that my Plasma PackageKit Integration GSoC 2011 project has been approved as an official Fedora 17 feature.
In other news, I have recently laid the first stone for a port of my work to KDE Frameworks 5, by getting support for a plasma5 namespace into PackageKit.
GSoC is over, but my code lives
Posted by Kevin Kofler in Fedora, GSoC on 2011-09-28
The GSoC deadline is now over. I passed the final evaluation and got my payment, still waiting for the t-shirt and certificate though. But the fact that the deadline has passed doesn’t mean I stopped maintaining the code. This week, the telepathy-kde-presence-applet has landed in Rawhide, which made me find and fix a few issues in my GSoC work:
- The RPM auto-Provides script got confused by
plasma-scriptengine-applet-declarative.desktopinkde-runtime, which has aX-KDE-PluginInfo-Namedifferent from theX-Plasma-API(the name is qmlscript, the API is declarativeappletscript). The dependency extractor was preferring theX-KDE-PluginInfo-Name, but that name is not used for script engines, only the API is relevant. This is fixed by this kde-settings commit, inkde-settings-4.7-8.fc17. - The data engine dependency extraction did not support
declarativeappletscriptQML code. I updated the patch to add support for that feature. - The
plasma-dataengine-depextractorwas passing a relative path toKDesktopFile, which misinterpreted it as relative toapplnkrather than to the current directory. I fixed the patch to useQDir::absoluteFilePathinstead ofQDir::filePath. - The
plasma-dataengine-depextractorwas requiring the user or script calling it to explicitly pass the scripting API/language used through an--apiargument. That information is already provided by the.desktopfile, which is required anyway, so I dropped the useless parameter and changed the code to detect the scripting API automatically. (If anybody is already using theplasma-dataengine-depextractor: please just remove any-a languageor--api languageargument you’re passing, it is now all detected automatically.)
Unfortunately, I haven’t been able to build the updated data engine dependency extraction patch into Rawhide yet because the kdelibs build fails due to an unrelated issue with isnan.
UPDATE: glibc has been fixed in Rawhide, and kdelibs-4.7.1-4.fc17 was built successfully.
Plasma/RPM/PackageKit GSoC work now in Rawhide
Posted by Kevin Kofler in Fedora, GSoC on 2011-08-20
My GSoC 2011 work has now fully entered Rawhide, i.e. what will eventually become Fedora 17 and later.
The PackageKit portions of the work have already been in Rawhide for a while:
- PackageKit-0.6.16-1.fc16 (patch included upstream) was built on July 4.
- gnome-packagekit-3.1.3-2.fc16 (patch included upstream) was built on July 4 as well.
- kpackagekit-0.6.3.3-3.fc17 (patch backported) was built (by me) on August 1.
I have just imported the remaining portions of the work into Rawhide:
- kde-settings-4.7-4.fc17 includes the RPM dependency generators.
- I have rebuilt
kdelibs,kdebase-runtime,kdebase-workspaceandkdeplasma-addonsto pick up the new Provides. Other packages will automatically pick up Provides and script engine Requires the next time they are rebuilt. (For data engine Requires, you will want to run the newplasma-dataengine-depextractorinkdelibs-develduring the build process, unless/until the upstreammetadata.desktopincludes anX-Plasma-RequiredDataEnginesentry.) - kdelibs-4.7.0-3.fc17 includes all the libplasma portions of my GSoC project (as backported patches).
The new features should now be fully testable in Rawhide.
Update: I built kde-settings-4.7-5.fc17, which fixes showstopper bug #732271. (I also fixed a related issue in libplasma in kdelibs-4.7.0-4.fc17, but that fix should not be strictly required because the only thing I use Plasma::PackageMetadata::serviceType() for is to figure out the precise type of script engine to verify the presence of, and if I don’t have a service type, I just conservatively look for any script engine for the language, which should be fine as they tend to be packaged together anyway.)
Plasma + PackageKit: The last piece of the puzzle
Posted by Kevin Kofler in Fedora, GSoC on 2011-08-17
I have just submitted a patch which implement automatic scanning of the source code of Plasma-related packages (e.g. widgets) for required data engines.
For packages in scripting languages and distributed through Open Collaboration Services (OCS), this is fully automatic and triggered from Package::installPackage. If an X-Plasma-RequiredDataEngines entry is present in the .desktop file (even if empty), the dependency extraction is not run and the explicitly provided information is trusted instead.
For native distribution packages, my patch adds a tool called plasma-dataengine-depextractor which can be run at any time during the build process and which adds the dependency information (the X-Plasma-RequiredDataEngines entry) to the relevant .desktop file.
Authors of plasmoids are encouraged to run plasma-dataengine-depextractor and/or fill in X-Plasma-RequiredDataEngines manually. (Please note that the list is expected to be comma-separated.)
Of course, the automatic scanning is not perfect; in particular, it will not detect convoluted ways to load data engines (e.g. if the name is a variable), and it may have false positives in some corner cases (commented-out use of a data engine, some other function called dataEngine and taking a string literal). However, I expect it to work well in practice, and if it doesn’t work, there’s always the possibility to explicitly add the X-Plasma-RequiredDataEngines entry.
This is the final portion of my GSoC 2011 project, so the project can now be considered 100% complete.
It works: Plasma now looks up missing components through PackageKit!
Posted by Kevin Kofler in Fedora, GSoC on 2011-08-10
Sorry, I haven’t blogged for a while, but rest assured that I’m still alive and coding.
I passed the midterm evaluation, and the final evaluation is approaching. So what do we have in the store?
- My patches to PackageKit, Apper and gnome-packagekit got pushed upstream. The changes to the PackageKit core even trickled down all the way to Fedora 15 (and of course Fedora 16 and Rawhide). I have backported the Apper changes to the Rawhide
kpackagekitpackage. - I added support for Plasma to automatically prompt for the installation of missing script and data engines the first time something attempts to use them. This patch got pushed upstream.
- I submitted another patch for review, which makes Plasma request the installation of required script engines (always, as this is covered by existing metadata) and data engines (if specified in the metadata through a new
X-Plasma-RequiredDataEnginesentry) as soon as a package (usually a widget) is installed through Open Collaboration Services (OCS), rather than only when the user attempts to add the widget to some containment (desktop, panel etc.). This patch is pending upstream feedback. - I also wrote an RPM auto-Requires script based on the same metadata as the above patch. This ensures script and data engine dependencies will be automatically detected in future Fedora packages.
Now the only remaining work item on my project plan is automatic scanning for required data engines. (Script engines are already completely handled by the above patches.)
Small API change to the PackageKit support for Plasma service lookup
Posted by Kevin Kofler in Fedora, GSoC on 2011-06-26
Richard Hughes requested a small change to the PackageKit session API used to look up Plasma services before accepting the added function upstream: instead of a dedicated InstallPlasmaResources method, the org.freedesktop.PackageKit.Modify D-Bus interface got a generic InstallResources method, which allows installing all the existing resource types as well as Plasma services, and any other resource types added in the future. It takes a type parameter, which must be set to "plasma-service" in our case.
With those tweaks, the PackageKit change and the gnome-packagekit change are now committed to upstream git. For Apper (KPackageKit), which is our main target, there is a patch for Apper master on Review Board and a backport for KPackageKit 0.6.x on the packagekit mailing list. Hopefully, Daniel Nicoletti will have some time to review the patch soon. If not, he suggested on IRC that I can just commit the patch as is and he’ll refactor it later if needed, so that’s my fallback plan.
PackageKit support for Plasma service lookup
Posted by Kevin Kofler in Fedora, GSoC on 2011-06-20
I just submitted patches to the packagekit mailing list which implement a new InstallPlasmaResources method in the org.freedesktop.PackageKit.Modify D-Bus interface. There are patches for PackageKit itself, as well as for Apper (both master and KPackageKit 0.6.x) and gnome-packagekit. See my post to the packagekit mailing list for more details.
This completes the next step in my GSoC 2011 project. Now I can start working on using the new interface in Plasma.
Automatic Plasma RPM Provides
Posted by Kevin Kofler in Fedora, GSoC on 2011-06-05
This week, I worked on my first task in my GSoC project: automatically generating RPM Provides for Plasma services from Plasma’s metadata (in .desktop file format). This turned out to be much easier than I had initially expected, also because my mentor Rex Dieter already had a working proof of concept I was able to start from. I adapted the code to use RPM 4.9′s new plug&play dependency generation functionality and, after discussing this with my mentor, changed the format of the Provides to plasma4(servicetype-name).
My work on Provides and (later on) Requires can be found in the gsoc-2011-plasma-rpm branch of kde-settings on Fedora Hosted. It can be installed separately, but it might be merged into upstream RPM or Plasma once finished.
Today, I tested the script on the kdeplasma-addons package. The resulting Provides look like this:
[kevin@laptop64 x86_64]$ rpm -qp --provides kdeplasma-addons-4.6.3-1.fc15.x86_64.rpm kcm_krunner_audioplayercontrol.so()(64bit) kcm_krunner_charrunner.so()(64bit) kcm_krunner_spellcheck.so()(64bit) kcm_plasma_runner_events.so()(64bit) krunner_audioplayercontrol.so()(64bit) krunner_browserhistory.so()(64bit) krunner_charrunner.so()(64bit) krunner_contacts.so()(64bit) krunner_converter.so()(64bit) krunner_katesessions.so()(64bit) krunner_konquerorsessions.so()(64bit) krunner_konsolesessions.so()(64bit) krunner_kopete.so()(64bit) krunner_mediawiki.so()(64bit) krunner_spellcheckrunner.so()(64bit) plasma-applet_systemloadviewer.so()(64bit) plasma-dataengine-comic = 4.6.3-1.fc15 plasma-dataengine-microblog = 4.6.3-1.fc15 plasma-dataengine-ocs = 4.6.3-1.fc15 plasma-dataengine-potd = 4.6.3-1.fc15 plasma-runner-events = 0.3.0-100 plasma4(applet-comic) = 1.0 plasma4(applet-dict) = 1.0 plasma4(applet-fileWatcher) = 1.0 plasma4(applet-frame) = 1.0 plasma4(applet-incomingmsg) = 1.0 plasma4(applet-kdeobservatory) = 0.2 plasma4(applet-knowledgebase) = 0.1 plasma4(applet-konqprofiles) = 1.0 plasma4(applet-konsoleprofiles) = 1.0 plasma4(applet-lancelot_launcher) = 1.9.5 plasma4(applet-lancelot_part) = 1.5 plasma4(applet-leavenote) = 1.0 plasma4(applet-life) = 0.8 plasma4(applet-magnifique) = 0.1 plasma4(applet-mediaplayer) = 0.1 plasma4(applet-nowplaying) = 1.0 plasma4(applet-opendesktop) = 0.1 plasma4(applet-opendesktop_activities) = 0.1 plasma4(applet-pastebin) = 1.0 plasma4(applet-plasma_applet_notes) = 1.0 plasma4(applet-plasma_applet_rtm) = 0.1 plasma4(applet-previewer) = 1.0 plasma4(applet-qalculate) = 0.7.2 plasma4(containment-org.kde.griddesktop) = 0.1 plasma4(containment-org.kde.groupingdesktop) = 0.1 plasma4(containment-org.kde.groupingpanel) = 0.1 plasma4(dataengine-comic) plasma4(dataengine-kdeobservatory) = 0.1 plasma4(dataengine-microblog) plasma4(dataengine-potd) plasma4(dataengine-rtm) = 0.1 plasma4(packagestructure-comic) = pre0.1 plasma4(runner-CharacterRunner) = 1 plasma4(runner-audioplayercontrol) = 0.1 plasma4(runner-browserhistory) = 1.0 plasma4(runner-katesessions) = 1.0 plasma4(runner-konquerorsessions) = 1.0 plasma4(runner-konsolesessions) = 1.0 plasma4(runner-kopete_runner) = 0.1 plasma4(runner-krunner_spellcheck) = 1.0 plasma4(runner-org.kde.datetime) = 1.0 plasma4(runner-org.kde.events_runner) = 0.3.0 plasma4(runner-techbase) = 1.0 plasma4(runner-unitconverter) = 1.0 plasma4(runner-wikipedia) = 1.0 plasma4(runner-wikitravel) = 1.0 plasma_applet_bball.so()(64bit) plasma_applet_binaryclock.so()(64bit) plasma_applet_blackboard.so()(64bit) plasma_applet_bookmarks.so()(64bit) plasma_applet_bubblemon.so()(64bit) plasma_applet_calculator.so()(64bit) plasma_applet_charselect.so()(64bit) plasma_applet_comic.so()(64bit) plasma_applet_dict.so()(64bit) plasma_applet_eyes.so()(64bit) plasma_applet_fifteenPuzzle.so()(64bit) plasma_applet_fileWatcher.so()(64bit) plasma_applet_frame.so()(64bit) plasma_applet_fuzzy_clock.so()(64bit) plasma_applet_incomingmsg.so()(64bit) plasma_applet_kdeobservatory.so()(64bit) plasma_applet_knowledgebase.so()(64bit) plasma_applet_kolourpicker.so()(64bit) plasma_applet_konqprofiles.so()(64bit) plasma_applet_konsoleprofiles.so()(64bit) plasma_applet_lancelot_launcher.so()(64bit) plasma_applet_lancelot_part.so()(64bit) plasma_applet_leavenote.so()(64bit) plasma_applet_life.so()(64bit) plasma_applet_luna.so()(64bit) plasma_applet_magnifique.so()(64bit) plasma_applet_mediaplayer.so()(64bit) plasma_applet_microblog.so()(64bit) plasma_applet_news.so()(64bit) plasma_applet_notes.so()(64bit) plasma_applet_nowplaying.so()(64bit) plasma_applet_opendesktop.so()(64bit) plasma_applet_opendesktop_activities.so()(64bit) plasma_applet_paste.so()(64bit) plasma_applet_pastebin.so()(64bit) plasma_applet_plasmaboard.so()(64bit) plasma_applet_previewer.so()(64bit) plasma_applet_qalculate.so()(64bit) plasma_applet_rssnow.so()(64bit) plasma_applet_rtm.so()(64bit) plasma_applet_showdashboard.so()(64bit) plasma_applet_showdesktop.so()(64bit) plasma_applet_spellcheck.so()(64bit) plasma_applet_timer.so()(64bit) plasma_applet_unitconverter.so()(64bit) plasma_applet_weather.so()(64bit) plasma_applet_weatherstation.so()(64bit) plasma_applet_webslice.so()(64bit) plasma_comic_krossprovider.so()(64bit) plasma_containment_griddesktop.so()(64bit) plasma_containment_groupingdesktop.so()(64bit) plasma_containment_groupingpanel.so()(64bit) plasma_engine_comic.so()(64bit) plasma_engine_kdeobservatory.so()(64bit) plasma_engine_microblog.so()(64bit) plasma_engine_ocs.so()(64bit) plasma_engine_potd.so()(64bit) plasma_engine_rtm.so()(64bit) plasma_packagestructure_comic.so()(64bit) plasma_potd_apodprovider.so()(64bit) plasma_potd_epodprovider.so()(64bit) plasma_potd_flickrprovider.so()(64bit) plasma_potd_oseiprovider.so()(64bit) plasma_potd_wcpotdprovider.so()(64bit) plasma_runner_datetime.so()(64bit) plasma_runner_events.so()(64bit) plasma_wallpaper_mandelbrot.so()(64bit) plasma_wallpaper_pattern.so()(64bit) plasma_wallpaper_virus.so()(64bit) plasma_wallpaper_weather.so()(64bit) kdeplasma-addons = 4.6.3-1.fc15 kdeplasma-addons(x86-64) = 4.6.3-1.fc15
(The Provides starting with “plasma4(” are the new, automatically detected ones.)
The next task is going to be asking upstream Plasma for feedback on this work and on how to proceed, because my next tasks will require closer interaction with Plasma upstream.
Hint: How to force autohinting on Fedora 15
Posted by Kevin Kofler in Fedora on 2011-05-19
In Fedora 15, Freetype was updated to enable the TrueType bytecode interpreter (BCI) by default. The BCI is used by default for all fonts which include hinting information, unhinted fonts will automatically use the autohinter. (That fallback magic was the last remaining blocker for enabling the BCI by default in Fedora, because the patents on the BCI expired recently.)
In most cases, the BCI is what you want. However, if, for whatever reason, you don’t like the resulting rendering, it is possible to force autohinting instead of BCI-hinting:
- globally, using the
99-autohinter-only.confbelow:<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="autohint" mode="assign"> <bool>true</bool> </edit> </match> </fontconfig> - per font, using something like
99-DejaVu-autohinter-only.conf. (That file disables the BCI for the DejaVu family, which is the default font in Fedora, except for GNOME 3 which uses Cantarell. It used to be shipped in old builds of freetype-freeworld. The font names can be changed to whatever font you want to disable the BCI for.)
These config files must be placed into the /etc/fonts/conf.d/ directory for Freetype to recognize them.