December 06, 2019

Plasma Pass, a Plasma applet for the Pass password manager version 1.1.0 is out.

There’s only one bugfix, but an important one - the applet now no longer freezes during filtering, so searching for your passwords is faster and more comfortable. The new release also contains new and updated translations.



SHA-256: a9789142c1b487f41e245bde9179d7857972c521df906e58176e0b0c0c3cdc39
SHA-1:   427e6bae205c29bd26db6e3590c3e9d75accc537


0ABDFA55A4E6BEA99A83EA974D69557AECB13683 Daniel Vrátil <>

Feel free to report any issues or feature requests to KDE Bugzilla.

December 05, 2019

We had a release last week and boy, I would just skip talking about bugs for this one. But we currently have 429 open bugs, 14 more from what I reported last week.

No todos son eventos para compartir conocimientos en el mundo linuxero, en ocasiones está muy bien simplemente pasar un buen rato entre compañeros y compañeras. De esta forma os animo a asistir a la Cena de Navidad 2019 GNU/Linux Valencia que se va a a celebrar el próximo Sábado 14 de Diciembre a las 21:00h. Si pudiera no me la perdería.

Cena de Navidad 2019 GNU/Linux Valencia

Ponencias, talleres y charlas están muy bien pero en algunos momentos está incluso mejor el poder compartir vivencias de forma más distendida. Al menos esto es lo que han pensado los chicos y chicas de GNU/Linux Valencia que han organizado una «Cena de Navidad».

En palabras de los mismos organizadores:

«Un evento donde nos podremos desvirtualizar de forma relajada, comer, beber y charlar mucho, mucho, sobre Software Libre, GNU/Linux y demás conversaciones que estamos seguros que saldrán sobre la temática más habitual de esta comunidad local. Pero no se queda ahí la cosa, porque será un momento idóneo para poder hablar también de otras cosas y poder conocernos y estrechar más nuestros lazos como comunidad. Seguro que nos vamos a divertir mucho vista la situación especial de un encuentro así.«


Cena de Navidad 2019 GNU/Linux Valencia

De esta forma os animo a asistir el próximo sábado 14 de Diciembre a las 21:00 en el bar Vegano Seitán House (C/ Periodista Llorente, 4 – 46009 Valencia). El coste será de 18€ y para asistir debes inscribirte, antes del jueves 12 de diciembre, a través del siguiente formulario:

Además, os comento cómo llegar a la Cena de Navidad de GNU/Linux Valencia:
-Metro: Línea 4 (Estación Reus)
-Más opciones:
-Autobús: Línea 98 (Parada 1810 Reus – Periodista Llorente)
-Más opciones:

Si tenéis cualquier duda puedes contactar con GNU/Linux Valencia por cualquier método de los que hay en:

Más información: GNU/Linux Valencia

December 04, 2019

At the Linux App Summit I gave an unconference talk titles Hey guys, this conference is for everyone. The “hey guys” part refers to excluding people from a talk or making them feel uncomfortable – you can do this unintentionally, and the take-away of the talk was that you, (yes, you) can be better.

I illustrated this mostly with conversational distance, a favorite topic of mine that I can demonstrate easily on stage. There’s a lot of diversity in how far people stand away from strangers, while explaining something they care about.

The talk wasn’t recorded, but I’ve put the slides up.

Another side of diversity can be dealt with by statistics. Since I’m a mathematician, I have a big jar of peanuts and raisins in the kitchen. Late at night I head down to the kitchen and grab ten items from the jar. Darn, all of them are raisins. What are the odds!?

Well, a lot depends on whether there are any peanuts in the jar at all; what percentage is peanuts; whether I’m actually picking things randomly or not.

There’s a convenient tool that Katarina Behrens pointed me to, which can help figure this out. Even if there’s only a tiny fraction of peanuts in the jar, there’s an appreciable chance of getting one (e.g. change the percentage on that page to 5% and you’ll see).

While that site can be used to illustrate topics around small percentages of peanuts, if you look at the text it has more application to conference speakers. Hold up almost any conference speaker list against a reasonable estimate of a quality that speaker list might have, and you can sort-of-tell if the pipeline leading to that speaker list is selecting fairly.

Check out the speakers at QtWS 2019, where 22 of the 72 speakers are shown wearing glasses. Igor is wearing sunglasses. About half of all people wear glasses (er .. the statistics I can easily find are for the United States of America, other sources suggest around 40%), so plug that in to the diversity calculator and see what you get.

.. very unlikely that the speaker selection pipeline is unbiased about glasses.

I urge you to read the accompanying text on the conference diversity page; I have intentionally picked “innocuous” characteristics here, but that’s not what it’s really about.

We can be better.

I’m voting for Owen Thompson and the SNP at the UK election on December 12th.  Normally for an election I would look through the manifestos and compare them along with consideration of the candidates and the party leaders to decide.  But this election is a single issue election.  It was called because the flawed 2016 referendum on EU membership did not ask what people wanted, it asked what they didn’t want (EU citizenship) but because there was no question asking what people did want instead it led to three years of parliament being stuck.  The SNP policy is for a double proposal to have a referendum on the UK’s EU membership against the Withdrawal Deal as currently negotiated, and then to have a referendum on Scottish independence.  This offers me the best chance to keep my EU citizenship and the freedoms it brings, while offering a good chance to get rid of a corrupt and pointless layer of government.

As I’ve said before all the political parties let us down in 2016 by not effectively campaigning for EU membership and letting the racists and populists win over. They continue to let us down here on those measures.  Not one party proposes to ban political advertising online as done with TV despite the well documented populism that gives.  Not one seems to have a commitment to reform the rules of election and referendum campaigns to stop the illegal behaviour that Johnson’s Vote Leave campaign used in 2016.  And I’ve never heard anyone point out that asking a referendum question which only says what you don’t want and not what you do want instead is a pointless question.

But here’s a quick look at the manifestos anyway.

SNP Good stuff about refendums, no nuclear bombs and critique of why Westminster if broken.   The usual  vague stuff about ending austerity without defining it and promises for the NHS with no explanation of why that public service deserves them more than every other public service.  Various good ideas for things to be devolved like broadcasting or employment law.  They do want to fix the voting franchise for UK elections to include non-UK EU citizens and people from age 16.  They seem to think the UK government will allow an independence referendum while also de-legitimising the idea that there is no need for anyone to allow Scotland to have a referendum, this is a dangerous stance to take as well as incorrect, no other country considers that it has to ask its neighbour for permission for independence. Climate emergency comes in a bit later in the manifesto than I’d like to see but I suppose there’s not much the SNP can do at the UK level since the right layer of government for this is the EU and Scottish layers.  Complying with international law to allow the return of residents of Diego Garcia is pleasingly in there but not on Catalonia.  I’ve done door knocking with their candidate Owen Thompson this election who is an experienced politican from local and UK layers and I’m happy to support him.

Labour doesn’t get round to the Brexit question until page 80.  The central issue of the election which defines if I will have freedoms and a functional economy in a year’s time and they can’t be arsed to highlight their policy on it.  When they do they say they’ll negotiate a hard Brexit (outside the customs union; outside the single market) and then have a referendum on it.  This sounds faffy and dislikeable.  The leaflet from their candidate said she would campaign to remain and reform but with no suggestion of what they reform would be and there’s nothing about it in this manifesto so I think she’s lying on that point.  They support weapons of mass destruction despite the party membership in Scotland voting against them and UK and Scottish leaders campaigning against them, which shows what a mess this organisation is.  Lots of interesting stuff about renationalising public services which I think is a strong part of the cause for the party leadership wanting to leave the EU, EU law will mean having to pay full rate for renationalising these industries while outwith the EU they can pay below market rate, but on the whole I’m against cheating the rules of a functional economy, after all this is my pension scheme they’d be cheating.  No mention of complying with international law about Diego Garcia or Catalonia.  Fixing the voting franchise is in there.  Climate emergency is pleasingly put as a headline item.

The Lib Dems have clear constitutional positions which is fine but being against referendum on them is hypocritical.  They compare Scottish independence to Brexit, which is nonsense. Climate emergency doesn’t come until half way through.  No mention of Diego Garcia or Catalonia.   No mention of nuclear bombs.  Nothing devolved to Scotland.  Pleasingly they do want to fix the undemocratic where we get a prime minister without a vote of parliament or people and they do want to fix the shutting down of parliament.  Otherwise largely underwhelming.

The Conservative party is now a radicalised dangerous nationalistic vehicle which support shutting down parliament, corruption of referendums, limiting the voting franchise, blocking the release of reports on foreign interference in voting and ignoring international law.  Everyone should vote to stop them from getting power.  They will start the Brexit process with the Withdrawal Agreement but still with only a minimal plan for how to implement Brexit, but their lie that this will “get Brexit done” rather than the truth that it is only the start of the process seems to be ignored by the media.  Their hard Brexit will put up new borders, shut off supply chains, limit the economy and take away my freedoms.    The headline item of course is to stop a referendum on independence which is as hypocritical as it comes.      Climate emergency doesn’t seem to feature.  There is scary protectionist British nationalism like “When we leave the EU, we will be able to encourage the public sector to ‘Buy British’” which goes against basic economics and shows how far they have fallen from their Margaret Thatcher free-market politices, which as simplitic and damaging as they were, at least were consistent.  This party is run by people who ran illegal campaigns in 2016, take power without a vote, ignore international and national law and shut down parliament, they are not democratically accountable, they need to be stopped.

The Greens aren’t standing in my constituency and don’t have a manifesto and because of the voting system won’t get any result except maybe help the SNP lose where they should win so despite being a party member I can’t advocate voting for them.  They make the point that the climate emergency is more important than Brexit, but alas the EU is the right layer of government to take the lead on it so EU membership is vital to helping prevent or limit it and the votes this election need to be directed towards that.

So hopefully an SNP win in Scotland (like they have in every election for the last decade) will help them support a Labour government in England to have a referendum (with rules fixed to make it a valid and fair one) on EU membership vs Johnson’s hard brexit proposal and then a referendum on Scottish independence.  But it probably won’t be that simple.

Ya tenemos entre nosotros una nueva versión de GCompris Qt, la 0.97 con una actualización basada en corrección de errores y mejoras en las traducciones. Hay que destacar que esta suite educativa que ya es parte de KDE y que sigue ofreciendo verdaderas maravillas para niñas y niños.

Nueva versión de GCompris Qt, la suite educativa de KDE

Nueva versión de GCompris QtComo nos tiene acostumbrado el equipo de desarrolladores de GCompris, cada nuevo lanzamiento de esta suite de juegos educativos nos ofrece una buena colección de novedades.

En esta ocasión GCompris Qt 0.97 llega con dos nuevas actividades:

  • Un laberinto de programación: para aprender lo básico de la programación con unas pocas instrucciones.
  • Tangram de bebé: para aprender lo básico de tangram (esta actividad corresponde a los niveles más bajos de la actividad anterior de tangram).

Además, llega con un gran número de pequeñas mejoras que van desde nuevas imágenes para algunas actividades, voces actualizadas para otras y nuevos tutoriales, sin olvidar el gran número de errores que han sido resueltos.

Por otra parte, el equipo de GCompris considera que est versión soporta 20 idiomas ya que supera más o menos el 85%, que son: Inglés británico, portugués brasileño, bretón, catalán, catalán (valenciano), chino tradicional, holandés, francés, gallego, griego, húngaro, indonesio, italiano, macedonio, malayalam, polaco, portugués, rumano, sueco y ucraniano.

Quisiera destacar que en mi opinión esta aplicación debería estar presente en todas las comunidades educativas, como lo está en muchos centros logopédicos.

Recordad que GCompris tiene versión también para Android aunque limitada en algunas de sus aplicaciones, además se está preparando un instalador para Raspberry Pi para principios de 2019. Además las versiones actualizadas para MacOS e iOS aún no están disponibles pero se espera poder lanzarlas durante el próximo año.

Más información: GCompris 0.97

¿Qué es GCompris?

GCompris es un colección de aplicaciones educativas que contiene diferentes actividades para niños entre 2 y 10 años de edad. Originalmente GCompris estaba escrito lenguaje C y Python utilizando las herramientas de GTK+ pero a principios de 2014, desde que sus desarrolladores anunciaron que pasaban a ser un proyecto de la Comunidad KDE, se ha reescrito en a C++ y QML utilizando las herramientas Qt.

Más información: GCompris

December 03, 2019

Tal y como estaba previsto en el calendario de lanzamiento de los desarrolladores, hoy martes 3 de diciembre la Comunidad KDE ha comunicado  que ha sido lanzada la cuarta actualización de Plasma 5.17. Una noticia que aunque es esperada y previsible es la demostración palpable del alto grado de implicación de la Comunidad en la mejora continua de este gran entorno de escritorio de Software Libre.

Lanzada la cuarta actualización de Plasma 5.17

No existe Software creado por la humanidad que no contenga errores. Es un hecho incontestable y cuya única solución son las actualizaciones. Es por ello que en el ciclo de desarrollo del software creado por la Comunidad KDE se incluye siempre las fechas de las actualizaciones.

De esta forma, el martes 3 de diciembre se lanzó la cuarta actualización de Plasma 5.17, la cual solo trae (que no es poco) soluciones a los bugs encontrados en esta semana de vida del escritorio y mejoras en las traducciones.Es por tanto, una actualización 100% recomendable.


Más información:

¿Qué nos ofrece Plasma 5.17?

Muchas son las novedades de Plasma 5.17. He aquí un listado de ellas, aunque para mi gusto la más importante es que estas mejoras no afectan al rendimiento e incluso se consigue que Plasma 5.17 sea más rápido que sus antecesores:

Lanzada la cuarta actualización de Plasma 5.17

  • Soporte de hardware de Thunderbolt.
  • Soporte para el control de brillo nocturno en X11.
  • Rediseño de muchas páginas de las Preferencias del Sistema para ayudarte a hacer tu configuración de forma más sencilla.
  • Mejoras en las notificaciones con la inclusión de un nuevo icono y un modo automático de no molestar para las presentaciones.
  • Mejoras en el  tema Breeze GTK para que se integre mejor los navegadores web Chromium/Chrome y poder aplicarles su esquema de color a las aplicaciones GTK y GNOME.
  • Mejoras en HiDPI y multipantalla para el gestor de ventanas KWin.
  • Soporte escalado fraccionado en Wayland (sea lo que sea eso).

Y muchas más pequeñas mejoras que hará las delicias de los usuarios de este entorno de trabajo.

No dudéis en ver el listado completo en el anuncio oficial.


December 02, 2019

From the 21st to 24st of Novemember, a bunch of KDE people gathered in Berlin graciously hosted by the MBition offices to discuss about the next big iteration of the KDE frameworks.

Work on Qt6 started, and it will be a big refactor that makes the api quite better, solve some architectural problems in some Qt5 areas (one of my personal favorites is the new QGuiAction class coming out of the split of QAction in a QWidget-less implementation). In order to have that, it needs to be binary incompatible with Qt5 tough.

As it will be incompatible, we need to adapt our software and our frameworks.. a lot of work ahead, but big opportunities as well, so… It’s time for KF6, where we can do the same thing: polish our API and solve some problems we couldn’t do in KF5 in a binary compatible way.

We worked in groups, assisted remotely by David Faure and looked at the frameworks we were less happy and need more a refactor.. The first obvious candidate are those tier 3.

Our fancy Kanban board

The Tier system in frameworks means that frameworks of tier 1 don’t depend from other things than Qt modules and base system libraries. Tier 2 frameworks can also depend from tier 1 frameworks, and tier 3 from tier 2.

In reality there are some tier 3 frameworks which “real” tier would be 5 or 6 as may depend from multiple other tier 3 frameworks. Those of course are the first that need to be looked at. Ideally we should manage to lower the tier of frameworks as much as possible and at least having tier 3 ones that are actually tier 3, and not 4 or 5.

Some typical examples are KIO, KDeclarative, KXmlGui, and Plasma-framework.

For the KDeclarative case, the reason is that its genesis was quite peculiar. When in late KDE4 – early KF5 was starting to be apparent that the focus of the future in GUI programming in Qt was probably going to shift towards QML, we chosen at first to put the bindings to QML of the frameworks we needed in a single umbrella repository, ending up with a git repo full of many tiny QML plugins that depended from one framework or another… ending up with a framework that depended from just about all the others. It will be split out and every useful QML binding will go into the proper framework: as QML is now a super central part of Qt, frameworks need to play well with it to be an important citizen of the Qt ecosystem.

Plasma framework

Now talking about a part that is really near to my hearth: Plasma-framework. It’s a pretty high tier because it depends from KXmlGui and KDeclarative. As we seen, both of those dependencies will be not too hard to remove (famous last words :).

My plan is to have the main plasma library splitted in 3 smaller frameworks, each one tier2 maximum:

  • libplasma: the part that manages load and save of your desktop layout, all that is related of loading a plasmoid and the api that palsmoids will use to interact with the Plasma workspace
  • theming: Plasma uses svg-based themes with significant optimizations like disk-caching of the rendered bits, which support stylesheets for dynamic colors based on your system ones: this should be a framework in itself, usable by any app: probably tier 2
  • dataengines: that’s a technology not much used anymore and is kinda being phased out. Should exist standalone as a “porting aid”

With this, hopefully Plasma will be even leaner, further improving startup time and memory usage, while on the same time applications gains a framework for doing light weight and feature rich svg based graphics theming.

KDevelop 5.4.5 released

We today provide a bugfix and localization update release with version 5.4.5. This release introduces no new features and as such is a safe and recommended update for everyone currently using a previous version of KDevelop 5.4.

You can find the updated Linux AppImage as well as the source code archives on our download page.



  • Add missing forward declaration (qt5.14). (commit)
  • Fix compilation error with gcc 7.4.1, ambiguous overload. (commit. code review D25639)
  • Remove bad assert. (commit)
  • Remove duplicate fuzzy character "/". (commit)
  • Fix reformat for selected code. (commit)
  • Qthelp: Unbreak support for zipped/tarred QCH files from KNS. (commit)
  • Qthelp: adapt KNewStuff config to move from to (commit. fixes bug #377183)


No user-relevant changes.


  • Update phpfunctions.php to phpdoc revision 348276. (commit)
kossebau Mon, 2019/12/02 - 15:56

We are pleased to announce the relase of Calligra Plan 3.2.1. Tarball can be found here: The following bugs have been fixed: * Bug 414164 - View specific dockers not shown in Settings->Dockers * Bug 414162 - Crash during … Continue reading

Last Thursday I visited Tech Day by Init and had the opportunity to talk about a topic close to my heart. I decided to do a talk about Open Source Anti-Patterns (you can find the slides over at Kuro Studio).

It is always fun visiting TDBI (it is my third year speaking). The audience is very well read up on the topics and the questions are always good. Also, I got a high five from a guy for my speech during the beer event ;-)

Hello yet again! For those who are not acquainted with this series, I am in an endeavor to analyze keyboard shortcuts in most major DEs so that we, the KDE community, can decide on the best defaults for KDE Plasma. Last time I analyzed XFCE and before that, GNOME.

This time we will also check on a non-keyboard-driven environment, MATE. I personally quite like MATE, mostly for two things: MATE Tweak’s ability to change panel layouts, and the Software Boutique, which looks as fashionable as its name.


For testing MATE, I installed full ubuntu-mate-desktop on my work machine and used virtual machines containing Debian, Ubuntu MATE and Manjaro.

This time, one of the candidates for the virtual machine was chosen based on a project currently being held at the public university I graduated in, namely the University of São Paulo, in São Paulo, Brazil. I chose Debian MATE in honor to the plans to migrate the computers at the computer section of FFLCH to Linux, the humanities school. Pragmatically speaking, Debian is also a good choice for usually keeping defaults as is for each desktop environment.

For sources, I simply used MATE’s keyboard shortcuts application and its corresponding manual.

Navigating from home and sailing till the end

One way MATE made my life easier is that no distribution seems to change the defaults significantly, similarly to GNOME. Thus, I was able to refer to MATE keyboard shortcuts instead of each distro tested.

Having been concerned with the MATE implementation of the menu keyboard shortcut considering XFCE had some issues and both are GTK-based desktop environments, this was the first thing I verified. No, the menu is not affected by Meta-related keybindings, which is nice.

However, in what concerns the Meta key, MATE barely uses it. The accessibility keyboard shortcuts use it and follow the simple rule previously seen in XFCE, namely that of first-letter, so Meta+Alt+M, S and K correspond to Magnifier, Screen reader and on-screen Keyboard, so while maybe a concern for the visually impaired, it is at least consistent.

The only other use of Meta lies within snapping keyboard shortcuts, namely Meta+Ctrl+Right/Left/Home/End/PgUp/PgDown. Right and Left naturally refer to Right and Left snapping, but the other choices are more interesting.

Given that Up and Down snapping seem to be disregarded (they do not follow the convention shown with right and left, as they use Ctrl+Alt instead of Ctrl+Meta, in addition to conflicting with other keybindings), the only remaining snapping possibilities are the corners of the screen.

Given that Home assumes the upper left position in the typical 4-key set of traditional keyboard, it snaps the selected window to the upper left corner. The same logic is applied to End, PgUp and PgDown, which are bottom left, upper right and bottom right, respectively. I will name the Home/End/PgUp/PgDown keyset as Home-End for easy reference.

Funnily enough, those were not enabled by default in any system tested. Such keyboard shortcuts come with (keypad) written immediately after the keyboard shortcut description, and this (keypad) disappears when you set the keyboard shortcuts manually.

Similar to snapping capabilities, an interesting feature is the ability to move windows to all typical snapping directions, while also not effectively snapping windows. That is, the window is not resized so as to fit a perfectly-sized chunk of the screen, but it does move to that specific corner. The correspondent keyboard shortcuts are Ctrl+Alt+arrow keys or Home-End.

Note how, as previously mentioned, snapping Up and Down use Ctrl+Alt+Up/Down, which conflicts with Ctrl+Alt+Up/Down for moving Up/Down.

Immediately afterwards in the MATE keyboard shortcuts application, 8 keybindings noticeably have no keybindings assigned: namely moving windows to top, bottom, left and right monitors, and moving windows to the first four workspaces.

This was a curious choice. The first bothers me similarly to XFCE and Plasma since no keyboard shortcut is set by default for switching between left and right monitor, an essential feature when dealing with multi-monitor setups. Moving windows in a vertical axis is something more elaborate which requires extra gear and assembly to do, so it’s rare, thus it makes sense to not have Up and Down by default.

The latter can be thought either as making sense or not. It theoretically would not make sense because the following four keyboard shortcuts move windows between workspaces in a 2D environment, that is, two axes of workspace movement, vertical and horizontal. Thus, moving windows to the first four workspaces seem, at least initially, necessary for consistency.

However, it does make sense after seeing the keys chosen for the keyboard shortcut, that is, the Ctrl+Alt+Shift+arrow keys. This is a 4-keys keycombo, although it could be argued to function as three, since a fourth finger to press Ctrl or Shift is optional. By analogy, MATE would have to use Ctrl+Alt+Shift+numbers or F# in order to be consistent with the remaining keyboard shortcuts.

I’d rather avoid three keystrokes or more for a keyboard shortcut, but my impression so far is that once keybindings are assigned to snapping, screen movement, workspace movement, and moving windows between screens, the last one in the hierarchy, moving windows between workspaces, ultimately end up using a 3- or 4-keys keycombo.

I thought I had sailed afar, but it’s the same sight

Aside from navigation and the fact Meta is barely used, there were several similarities between MATE, XFCE and GNOME.

Similarly to XFCE, MATE uses the XF86 keys extensively. However, unlike XFCE, the only keyboard shortcut it sets for actual application opening is the terminal, Ctrl+Alt+T. The lockscreen is evoked with our typical Ctrl+Alt+L, and Ctrl+Alt+Delete serves to shutdown.

Also similarly to XFCE, as well as Plasma, Alt+F1 opens the menu, Alt+F2 opens the Run Application dialog box. Alt+F3 is not set up, however.

Alt+F5 is Restore, Alt+Esc switches between windows immediately and Alt+F6 switches between windows of a same application, clearly a GNOME influence. As previously stated in my GNOME analysis, ‘ and F6 have no semantics associated with them, and so MATE inherits this specific GNOME issue here.

Alt+’ for moving between windows of a same application also seems to be a GNOME influence.

Alt+F7, F8, F9 and F10 are Move, Resize, Minimize and Maximize Toggle. All of them are neatly grouped. I really like how Minimize and Maximize have this specific order and are set immediately before F11, the traditional key for Fullscreen. Move and Resize are also actions that fill the gaps nicely. Sadly, F5 restore is too far from the other similar titlebar actions set in F8-F10, but this is compensated by F10’s maximize being a toggle. In theory, this invalidates the usefulness of F5, which could be an issue in terms of keyboard shortcut organization.

It should be noted that F12, while not having anything assigned to it, can be set to open Tilda, a drop-down terminal much similar to Yakuake.

Alt+’ for moving between windows of a same application also seems to be a GNOME influence.


That is it, essentially. MATE is not a keyboard-driven environment, but the devs clearly thought of making it consistent.

It sacrifices several things for this consistency, however: barely any use of Meta, which reduces its keyboard shortcut repertoire, leading to a 4-keys keycombo; barely any application shortcuts, with the exception of the terminal; accessibility keybindings that require reading instead of physical placement or layout of keys in the keyboard; loss in semantics for the choice of modifiers; and all defaults (since several keyboard shortcuts are unset by default).

The last point effectively proves MATE was not striving for a keyboard driven-environment, but they did include relatively sane defaults for those who wish to use it this way. MATE has been, by far, the most consistent out of the three DEs, but also rather limited due to its sacrifices.

Its defaults work well within its context and it comparatively has less issues than GNOME or XFCE, but I do not think it is a keyboard shortcut model Plasma should strive for, despite its fitting 2D environment. I do not think such sacrifices fit the vision I have for Plasma.

MATE however is a great example of minimalism applied to a 2D environment, which itself is rather complex to implement. Some things could be improved, such as reconsidering the semantics of the modifier keys, removing unset (keypad) from certain particularly sane keyboard shortcuts that the devs think are the most sensible for an out-of-the-box keyboard-driven experience, and including a more friendly multi-monitor set of keybindings by default.

December 01, 2019

We are pleased to announce the release of GCompris version 0.97.

This new version contains 2 new activities:

  • A programming maze: to learn the basics of programming with a few instructions
  • Baby tangram: to learn the basics of tangram (this activity corresponds to the lowest levels of previous tangram activity)

And a lot of new features:

  • new sub-categories to organize activities
  • new background music feature and audio tracks
  • new volume settings for audio effects
  • new speed setting in several activities (gletters, algebra, readingh, note_names)
  • new feature in chess activities to display captured pieces
  • new option to go to next level manually in drawletters and drawnumbers
  • new voices for en_US
  • new images for colors activity
  • new images for advanced_colors activity
  • new images for target activity
  • improve settings layout
  • improve share activity layout
  • improve categorisation activity layout
  • resource files are now stored in KDE server (
  • add a tutorial to even/odd numbers
  • add intro to piano_composition
  • add malayalam dataset to gletters
  • add breton dataset to wordsgame
  • fix voices not playing in geography
  • fix sounds not playing in mining
  • fix portrait mode in binary_bulb
  • fix high cpu load in menu
  • fix hint image size in photo_hunter
  • fix layout in color_mix
  • and lots of other small fixes…

You can find packages of this new version for GNU/Linux, Windows and MacOS on the download page. This update will also be available soon in the Android Play store and the Windows store. For Raspberry Pi, we’ll provide an installer soon. The updated version for iOS is still not available. Note that the MacOS package is not yet notarized, we will look at doing this during next year.

On the voices side, we added a new voice “try again” which is used in several activities instead of “check answer”. You can check on this page if this voice is available in your language: (in the “Misc” section). You can help us by providing a nice recording of your voice for all the missing entries in your native language.

On the translation side, we have 20 languages fully supported: Basque, Brazilian Portuguese, Breton, British English, Catalan, Chinese Traditional, Dutch, French, Galician, Greek, Italian, Macedonian, Malayalam, Polish, Portuguese, Romanian, Slovak, Spanish, Swedish, Ukrainian.

We also have 15 languages partially supported: Belarusian (65%), Catalan (Valencian 95%), Chinese Simplified (66%), Estonian (93%), Finnish (86%), German (96%), Hindi (73%), Hungarian (95%), Indonesian (95%), Irish Gaelic (78%), Norwegian Nynorsk (93%), Russian (76%), Scottish Gaelic (67%), Slovenian (54%), Turkish (95%).

Usually we only ship translations that are at least 80% complete. However several translations dropped way below 80% (especially Slovenian, Belarusian and Scottish Gaelic ; but also Hindi, Russian and Irish Gaelic). We decided to keep those exceptionally for this release, and hope to see former or new translators complete those translations. If we get updates or new translations, we will make a release update.

So if your language is in the partially supported list, or is not yet supported at all, and you want to help, please contact us and we will give you instructions to get started translating.

Another way to help is to write some posts in your community about GCompris, and don’t hesitate to give us feedbacks.


  • For the Malayalam language, we noticed some issues with the default font “Andika-R”. We recommend Malayalam users to select the font Noto-Sans-Malayalam or RaghuMalaylamSans from the application menu (if it is not available in the list you need to install this font on your system to be able to select it).

Thank you all,
Timothée & Johnny

The Skrooge Team announces the release 2.21.0 version of its popular Personal Finances Manager based on KDE Frameworks


  • Correction bug 411958: Import CSV fails if account is empty
  • Correction bug 409166: skrooge appdata.xml missing release 2.20.0
  • Correction bug 409703: No guide or tooltip for + icon in Categories form, and inconsistent
  • Correction bug 409165: skrooge appdata.xml gets warnings from validation-strict on flathub
  • Correction bug 412494: Skrooge flatpak silently fails to import anything from Amex QFX
  • Correction bug 412831: Filter for custom properties have to be prefixed with v_operation_display_all
  • Correction bug D22508: Get rid of obsolete methods
  • Correction bug D24327: Build flatpak with latest libofx 0.9.15
  • Correction bug: Import CSV with comma when headers are forced (no automatic detection)
  • Correction bug: blank spaces at units "Internet code" (see:
  • Correction: Import CSV file with footer line
  • Correction: Dashboard readability improvement (see:
  • Feature D22484: Support using category, account, payee  or unit properties in reports
  • Feature: New source of unite: (see:

Get it, Try it, Love it...

Grab Skrooge from your distro's packaging system. If it is not yet included in repositories, go get it from our website, and bug your favorite distro for inclusion.

Now, you can try the appimage or the flatpak too !

Get Involved

To enhance Skrooge, we need you ! There are many ways you can help us:

  • Submit bug reports
  • Discuss on the KDE forum
  • Contact us, give us your ideas, explain us where we can improve...
  • Can you design good interfaces ? Can you code ? Have webmaster skills ? Are you a billionaire looking for a worthy investment ? We will be very pleased in welcoming you in the skrooge team, contact us !

Last weekend, I had the opportunity to join the planning sprint for KDE Frameworks 6 in Berlin. KF6 will be the next major version release of the KDE Frameworks (a set of add-on libraries to make your life much easier when developing libraries on top of Qt), which will be based on Qt6. There are several blogs out in the wild about the goals for this release. Mainly, we aim for the following:

  • Getting a better separation between logic and platform UI + backend, which will help much on non-Linux systems as Android, MacOS, and Windows.
  • Cleaning up dependencies and making it easier to use the existing Tier 3 frameworks. Note that the Framework libraries are organized in Tiers, which define a layer based dependency tree. Tier 1 libraries may only depend on Qt; Tier 2 libraries may depend on Qt and Tier 1 libraries; and Tier 3 libraries may depend on Qt, Tier 1 and Tier 2 libraries — you see the problem with Tier 3 😉

For details about the framework splittings and cleanups I want to point to the excellent blog posts by David, Christoph 1 / 2 / 3, Kevin, Kai Uwe, Volker, and Nico. However, in this post I want to focus on one of my pet projects in the KF6 cleanup:

Software Package Data Exchange (SPDX)

With KF6, I want to see SPDX license identifiers being introduced into KDE frameworks in order to ease the framework re-use in other projects. This follows the same approach e.g. the Linux Kernel took over the last years.

The problem that the SPDX markers address is the following: When publishing source code under an open source license, each source code file shall explicitly state the license it is released with. The usual way this is done is that a developer copies a license header text from the KDE licensing policies wiki, from another source file, or from somewhere else from the internet and puts it at the top of their newly created source code file. Thus the result is that today we have many slightly different license headers all over our frameworks source files (even if they only differ in formatting). Yet, these small differences make it very hard to introduce automatic checks for the source code licenses in terms of static analysis. This problem becomes even more urgent when one wants to check that a library, which consists of several source files with different licenses, does only contain compatible licenses.

The SPDX headers solve this problem by introducing a standardized language that annotates every source code file with license information in the SPDX syntax. This syntax is rich enough to express all of our existing license information and it can also cover more complicated cases like e.g. dual-licensed source files. For example, an “LGPL 2.1 or any later version” license header of a source file looks as:

// SPDX-License-Identifier: LGPL-2.1-or-later

The full list of all existing SPDX markers are available in the SPDX license registry.

The first step now is to define how to handle the GPL and LGPL license headers with specific KDE mentioning, as their is no direct equivalent in the SPDX registry. This is a question we are about to discuss with OSI. After deciding that we have to discuss in the KDE community if SPDX is the way to go (gladly, there was no objection yet to my mail to the community list) and to adapt our KDE licensing policy. And the final big step then will be to get the tooling ready for checking all existing licenses headers and to replace them (after review) with SPDX markers.

PS: Many thanks to MBition for the great planning location for the KF6 sprint in the MBition offices and to the KDE e.V. for the travel support!


I’ve got big news today. Something major landed: full support for the GTK_FRAME_EXTENTS_ protocol, which hugely improves the user experience for running GTK apps that use client-side decoration headerbars! This includes GNOME apps and an increasing number of 3rd-party GTK apps too. In particular, these apps now display window shadows and have proper resize areas without needing to use a thick border. Here’s how Gedit now looks:

It’s almost native-looking! And it fits right in with the rest of your apps.

I’d like to extend a big thanks for Vlad Zahorodnii who has been working hard on this for months! The feature lands in the upcoming Plasma 5.18 LTS.

But wait, there’s more…

More New Features

Bugfixes & Performance Improvements

User Interface Improvements

How You Can Help

Do you love KDE’s apps? Would you like to help develop for them? I knew you would. 🙂 It’s really fun, and you can have a major impact. Many of KDE’s apps are quite beginner-friendly; among them are Dolphin, Elisa, and Spectacle. See the full list here! These apps’ maintainers as well as KDE’s experienced developers are happy to help and mentor newcomers who want to contribute. For more information on how to get help and who to ask, see

More generally, have a look at and find out more ways to help be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

November 30, 2019

Last week I arrived on a rainy Thursday evening in Berlin to attend the KDE Frameworks Kickoff sprint. The next three days were spent with discussions and ideas about the future of the libraries that are the base of most of the software of the KDE Community.

After arriving at MBition GmbH on Friday we started with reviewing the policies that were in place the last few years for KDE Frameworks 5. This includes for example the release model or on which Qt version to depend. After lunch David Edmundson and Eike Hein gave talks about the KDE community in general and about the advantages using KDE Frameworks libraries can bring to the employees at MBition. In the afternoon that the discussion switched from the past to the future and our goals and design principles that we have in mind for KDE Frameworks 6. Later we already outlined problems with specific frameworks and how our goals will impact them.

After a needed dose of sleep Saturday started right where Friday left off. We split in small groups to investigate how our design goals (further simplification of dependencies, seperation of UI and logic and seperation of framework and implementation) would influence each library and what has to be done to achieve those goals. To this end each group discussed a single library at a time and after eight libraries in total the results were presented to the whole group. For this we started with the Tier 3 Frameworks which have the most complicated dependencies (Tier 1 Frameworks only depend on Qt).

On Sunday morning only two Tier 3 libraries were left, KXmlGui and KIO. It took the whole group (including David Faure who attended the sprint remotely via a video call) the entire morning to also sort these out. I had to leave after lunch but others continued to work turning their attention to Tier 2 Frameworks to also clean those up.

The result of these three very productive but exhausting days is this massive workboard. Thanks to everyone who attended this sprint and made it so that we could get this much done. Many tasks can already be done now and don’t have to wait for Qt 6 or KF 6 branching. If you are intrested in helping out, just pick one from the workboard! If you need help or have some comments just ask on IRC/webchat or directly on phabricator. If you want to learn more about the sprint look at Christoph’s blog who wrote a quick recap each day. More summaries can be found at Kevin’s, Kai Uwe’s, Volker’s and and Nicolas’ blogs. Special thanks to MBition who kindly hosted us and KDE e.V. for travel support and accommodation!

Time for another bi-monthy status update around KDE Itinerary! Since the last report plenty of things have happened again, ranging from multi-ticket support to integration with the Plasma Browser Integration plug-in, most of which you’ll find in the upcoming 19.12 release.

New Features

The biggest new feature this time is clearly the integration into the Plasma Browser Integration plug-in for Firefox and Chromium. That has been in the works since the Nürnberg sprint, and required a number of changes throughout the infrastructure and in the browser plug-in.

Plasma Browser Integration pop-up showing details of an event mentioned on the current website. Plasma Browser Integration offering to add an event to KDE Itinerary.

More work is still needed on this so that KDE Itinerary can also consume “timeless” elements properly, such as hotel or restaurant information without an associated booking. For that we need Kirigami date/time controls first though.

Another new feature is support for multi-ticket reservations. That’s for cases where a single traveler has multiple relevant tickets for a single journey section, such as a separate seat reservation or a first class upgrade next to a regular train ticket. Those cannot be merged, and the UI needs to be able to alternatively show both tickets. This is done by leveraging existing infrastructure for multi-traveler reservations. In the course of this, we also added support for decoding RCT2 upgrade tickets.

KDE Itinerary offering to select between the main and upgrade ticket of a train trip. Multi-ticket selector in KDE Itinerary.

The built-in weather forecast in the KDE Itinerary app can now also indicate expected high wind speeds, thanks to the Breeze icon theme gaining support for that in its weather icon set.

KDE Itinerary timeline showing a weather forecast with windy weather. Weather forecast in KDE Itinerary indicating windy weather.

Infrastructure Work

As usual a lot of things happened behind the scenes as well:

  • The custom extractor API as well as the generic extractors became more flexible and powerful, there’s a separate post covering most of this. Since then we also added access to UIC 918.3 vendor blocks for the custom extractor API, and content-based extractor selection.

  • KPublicTransport received API to explicitly control which backend services to query, and the UI for this has been integrated into KDE Itinerary’s settings page. There’s also a dedicated post about this.

KDE Itinerary showing a configuration page to select which public transport services to use. Detailed public transport information service selection in KDE Itinerary.
  • The generic PDF extractor now also considers the creation and modification time in the PDF meta-data as context information, which allows us to get the date right in more cases for PDF boarding passes (which in their barcode annoyingly only contain the day, not the date).

  • The train station database of the extractor engine now also supports Indian Railways station codes, and contains all stations with such a code from Wikidata. Together with the content-based extractor selection this should pave the way for supporting Indian Railways SMS tickets.

Fixes & Improvements

Besides these larger changes, there are of course also plenty of small improvements worth noting:

  • The KMail plug-in got a UI revamp. It now no longer looks like what was initially just supposed to be debug output, and its actions are now regular buttons rather than hidden in the not obvious to spot context menu.
KItinerary KMail plug-in with new UI visuals. New KMail plug-in UI.
  • Timezones on Android so far were usually displayed as GMT offsets only. This is due to QTimeZone being limited to use older Android API for this. We now call newer Android API for this ourselves if available (API level >= 24), to get closer to the human readable timezone names we have on Linux.

  • Custom extractors for IndiGo, Flixbus, Lufthansa, RegioJet and ÖBB were added or improved, and the generic extractor for annotations in Microdata format can now handle nested objects correctly.

  • Calendar entries for restaurant reservations without an end time no longer span the entire day.

  • The trip group naming heuristic was improved to also consider the longest gap between location changes as the possible destination of a trip.

  • The KMail itinerary plug-in can now also show train classes, and can correctly display multiple ticket tokens now.

  • The KDE Itinerary app now shows inline feedback when importing data.

KDE Itinerary showing an inline notification about two successfully imported reservations. KDE Itinerary providing feedback about imported reservations.

KPublicTransport, the framework that provides us with real-time transport data, also got a number of noteworthy improvements:

  • Backend services can now be configured with a static timezone. That’s used for backends that ignore timezones entirely due to being regionally restricted to just one anyway.

  • Backends can now indicate if they are able to query arrival times at a station, so the framework can avoid querying those on such requests.

  • The parser for responses from EFA backends now also supports an alternate compact response format that some services use.

  • The Hafas parser now resolves master location references, which should improve location query result quality a bit. Product selection in journey queries for Hafas-based backends was also fixed, which resulted in missing tram lines in certain locations.

  • A number of new backend services were added, covering Luxembourg as well as various regions in Austria, Germany and the US.


All the development happening is of course of limited use if this isn’t distributed to our users. So I’d also like to highlight a few things supporting that:

  • As the KItinerary extractor engine depends on inofficial Poppler API, we need to regularly adapt that code to new Poppler releases. Besides doing that up to the upcoming 0.83 release of Poppler we hopefully also made the supporting infrastructure for this a bit more scalable and future proof, reducing the future maintenance effort there.

  • For deployment scenarios far away from our usual environments, such as old server systems, we have added the infrastructure to do full static builds of the command line extractor tool. That’s not necessarily a good alternative to proper distribution packages, but those aren’t easily available on say a Debian 9 server.


This work continues to rely on donated data samples, thanks to everyone who has helped with this so far! And a special thank to the donator of the large set of multi-ticket samples that were essential in some of the above, there’s still much more work to be done based on that :)

If you want to help in other ways than donating test samples too, see our Phabricator workboard for what’s on the todo list, for coordinating work and for collecting ideas. For questions and suggestions, please feel free to join us on the KDE PIM mailing list or in the #kontact channel on Matrix or Freenode.

The digiKam Team built the Google Photo, Google Drive or another Webservices uploader as a open source app. This SERVICE is provided by the digiKam Team at no cost and is intended for use as is. This page is used to inform website visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our Service. If you choose to use our Service, then you agree to the collection and use of information in relation with this policy.

November 29, 2019

When using PIMPL, we sometimes want to move implementation of slots into the private class as well. In order for Qt to be able to invoke those slots that formally exist only in the private class (which usually is not a QObject), we use the Q_PRIVATE_SLOT macro in the main class. It allows Qt to invoke the slot method, even though it exists in the private class.

Let’s have a short example:

/// mybutton.h

class MyButtonPrivate;
class MyButton : public QPushButton {
    explicit MyButton(QWidget *parent);
    ~MyButton() noexcept override;

    std::unique_ptr<MyButtonPrivate> const d_ptr;

    Q_PRIVATE_SLOT(d_func(), void onClicked(bool));

/// mybutton.cpp

class MyButtonPrivate
    void onClicked(bool clicked) {
        qDebug() << "Clicked!";

MyButton::MyButton(QWidget *parent)
    : QPushButton(parent)
    , d_ptr(std::make_unique<MyButtonPrivate>())
    // Connecting to slot on "this" (MyButton*), although "onClicked" is defined in MyButtonPrivate
    connect(this, SIGNAL(clicked(bool)),
            this, SLOT(onClicked(bool)));

MyButton::~MyButton() noexcept = default;

Q_PRIVATE_SLOT does not create any new method in the MyButton class. The way Q_PRIVATE_SLOT works is that it just instructs moc to generate a metacall that looks like obj->d_func()->onClicked(val) instead of obj->onClicked(val), like it does for normal slots or invokables.

This approach has one big disadvantage: it means that Q_PRIVATE_SLOTs can only be invoked through the old QObject::connect() syntax.

So far I’ve been using a simple workaround to get all the compile-time checks that I would get with the new connect syntax normally:

connect(this, &MyButton::clicked,
        this, [this](bool clicked) { d_func()->onClicked(clicked); });

Here we use a lambda to forward the call to the actual PIMPL’ed slot. This is somewhat better than the old connect syntax but IMO it has two major drawbacks:

It’s hard to read - it’s difficult to immediatelly decipher what method the call is actually being forwarded to.

It’s tedious to write - it’s a lot of boilerplate code to be written and if there are too many arguments it becomes quite ugly. C++14 generic lambdas improve the situation a bit since we can use auto instead of spelling out the argument types, but I don’t think it makes the code necessarily better to read:

connect(this, &MyObject::mySignal,
        this, [this](const auto &foo, auto bar, auto *baz) {
            d_func()->mySlot(foo, bar, baz);

It got me thinking if there might be some way to auto-generate the forwarding lambda and be able to just use the pointer-to-function here somehow.

In the end I came up with this tiny template function, which takes the d-pointer and the pointer to the PIMPL’ed slot and returns a generic lambda which gets passed into QObject::connect and which forwards arguments to the real slot method.

template<typename DPtr, typename Slot>
auto priv_slot(DPtr &&dptr, Slot &&slot)
    return [&dptr, &slot](auto && ... args)
        (dptr->*slot)(std::forward<decltype(args)>(args) ...);

The result has all the benefits of the new QObject::connect() syntax without the ugliness of the “forwarding lambda”:

connect(this, &MyObject::mySignal,
        this, priv_slot(d_func(), &MyObjectPrivate::onSignal));

Last week I took a train to Berlin for the KDE Frameworks 6 kickoff sprint. A lot has been said about it by my fellow attendees already, so I won’t go into detail much.

Work on Qt 6 has begun and with Qt 6 a version 6 of the KDE Frameworks is due. This will gives us the opportunity to clean up and redesign some of our API.

Main goal for the sprint was to discuss the major design principles for KF6. I personally focussed on two aspects. First, we want to better separate logic from the user interface to allow different UI implementations for desktop and mobile uses. Futhermore, we want to reduce the amount of dependencies our libraries have. While we are doing fine for a lot of frameworks some have very ugly dependency structures. Probably our worst offender here is KIO, the framework that powers Dolphin and many more KDE applications.

This is the current dependency tree of KIO:

With some changes we discussed applied it could look like this:

Please note that all of this is highly tentative and might not always work out the way we imagine. While we can do some of these changes in the Frameworks 5 lifetime already most of it needs breaking API, so it will only be available in KF6.

This work will hopefully make KDE Frameworks more appealing for users outside of KDE. If you are developing Qt-based software and would like to know more about how KDE Frameworks can help you please contact us at #kde-devel on freenode or

By Caio Jordão Carvalho

After a one-year hiatus, KDE Student Programs is very happy to announce Season of KDE 2020!

Focused on offering an opportunity to anyone (not just enrolled students) contributing to the KDE community, this is a program that is comparable to the well-known Google Summer of Code, with some special differences. A key difference is that SoK projects are not limited to code-focused work, but any that benefit our community. For instance, projects can be about documentation, reports, translation, system administration, web and other types of work as well as code. Each contributor will work with a mentor and within a team that will also help the contributor.


This year we have decreased the duration of the projects. Previously, all projects were 80 days long. However, during SoK 2018 we included the option of 40-day projects. This new option was widely adopted by participants during 2018 and, so we decided to keep only this alternative.


  • From the 9th of December 2019 to the 3rd of January 2020: Participant and Mentor Application period
  • 6th of January 2020: Projects announced
  • 8th of January 2020, 00:00 UTC: SoK work period begins
  • 17th of February 2020, 23:59 UTC: End of work
  • 21st of February 2020: Results announced
  • 28th of February 2020: Certificates issued
  • Beginning of Q3 2020: Merchandise and Swag sent out by courier

Getting Started

Prospective participants should get in touch with us before the application period begins to discuss possible projects. You can connect with us on Matrix, in the #kde-soc room on IRC, in KDE-SoC on Telegram, or through our mailing list. Besides talking to the SoK team, contact the application maintainer and team with whom you want to work.

If you’re looking for project ideas, you can find some on our KDE Season of Code 2020 Ideas Page. Mentors please add ideas, so that we have a central repository of project ideas for Season of KDE 2020 and even GSoC 2020. Applicants will work with the teams to develop a proposal, and the SoK admin team will help too.

Help us spread the word! Tell your friends, blog, tweet, and share on Facebook using the #2020SeasonKDE hashtag.

Participants and mentors can apply here once applications open.

LaKademy 2019 Group Photo

Hi, people! Here I am again telling about how I love this community and like to be part of every activity we organize. Almost two weeks ago we had a new edition of LaKademy, the Latin American KDE Summit, which we’ve been organizing in Brazil since 2012. This edition was held in Salvador, Bahia, for the second time (the 2015 edition was there too).

During the four days we worked there, I dedicate my time to improve LaKademy website. I’ve created a page for this event in 2017 but it needed some adjustments, like a more modern and responsive template. Since some projects in KDE community are adopting a unified template that uses Jekyll, I’ve decided to change LaKademy website to this template too. So I spent my time there first trying to make Jekyll run on my computer (we had some issues with the network from the University the event happened, so it took me almost a day to figure out why some things on my computer were not working 🙂 ) and then trying to learn how Jekyll works 😀

This is how the website looks right now:

It is just a static webpage made in HTML/CSS with some information about each edition. We think this page as just a repository to show information about every edition. For news and updates we always use KDE Brasil webpage or

And this is how the new webpage is looking right now. I am still working on it and it still has a lot of work to do to finish it. But now I will have to do this during my free time, since I couldn’t finish it during the event.

This was once again a very nice event to work with things and people that I like, in a city that I love. We had some new contributors attending to it and we could think of some strategies to make this community stronger during our traditional promo meeting. We’ve created a KDE Brazil Promo group at Telegram to coordinate our promo activities here in Brazil and we hope we can get better at it and reach as much people possible 😀

I would like to thank KDE e.V. to support this event every year and Caio and Icaro for having organized it in Salvador. I’m looking forward to attend to LaKademy 2020! 🙂

Editing, moving and customizing widgets in Plasma Desktop improved a lot in 5.17, and then in 5.18 it will get a brand new edit mode, to be really efficient editing your desktop layout (and have less visual noise by default).

This week another new feature landed in the edit mode for 5.18: it’s possible to set some plasmoids without background and a nice drop shadow, for an extra clean and modern look for your desktop.

In addition, a plasmoid can specify this backgroundless shadowed mode as its new default, like the digital clock now does (when is on the deskop)

Applet developers will have to opt in this feature: doesn’t always make sense everywhere and some may still be buggy. Some default plasmoids, especially in kdeplasma-addons have been set to support it.

If you are writing a plasmoid and want to support this background removal, in the main QML item of your plasmoid you can do:

Item {
    id: root   
    Plasmoid.backgroundHints: PlasmaCore.Types.DefaultBackground
                             | PlasmaCore.Types.ConfigurableBackground

Or, if you want to default toi the new background-less, automatic shadow:

Item {
    id: root   
    Plasmoid.backgroundHints: PlasmaCore.Types.ShadowBackground
                             | PlasmaCore.Types.ConfigurableBackground

Of course the NoBackground option is still there if a shadow isn’t what the graphic style of the plasmoid needs.

A notice that needs to be kept in mind, is that for color inversion to work automatically, one should never do:

    color: theme.textColor

But rather

    color: PlasmaCore.ColorScope.textColor

Which is a good way to get ready for Qt6 anyways, as context properties are going to be removed in the next Qt major release.

I’ve finally come to a point where I have a project that is useful, and at a good enough quality (anyone with graphics skills who wants to help?) to be shared with the broader world: Mattemonster. What I’m trying to say is that I just went through the process of publishing a Godot app to the Google Play store.

There is already good documentation for how you export a Godot app for Android, and detailed guides how to publish to Google Play. This blog is not a step by step tutorial, but instead mentioning some of the things I learned or noticed.

First of all, when setting up the Android tooling, you usually have an android-tools package for your distro. This way, you don’t have to install Android Studio provided by Google.

The configuration settings that you use to export your app goes into the export_presets.cfg file. Once you put the details for your release key in, you should avoid storing this file in a public git, as it contains sensitive data. But even before then, it contains paths that are local to your machine, so I would recommend not storing it in a public git anyway, as it makes merging with others painful.

Finally, when building your apk file, a funny detail is that the switch to control if it is a debug or release build is found in the actual Save As… dialog, and not in the export settings. This was initially confusing to me, as I was looking in the wrong place.

The next step is Google Play. Here one creates all the accounts and listings as explained in the article linked to in the beginning of this blog. What is a bit unclear is that some settings are only available once an initial apk has been uploaded (e.g. Content rating).

Another of these dependencies that confused me is that even the closed alpha testing requires the app to have been published at least once. This means that you have to publish version 1.0 first, then you can use the alpha channel to push out updates quickly to your testers. As it takes up to a week (or longer…) to get the initial publishing through the system, this is a bit frustrating, as you really have to wait around for a few days before you can continue.

When you create an update, you need to remember to step the version code of the apk. This has to be done manually when configuring the export in Godot.

It is also worth mentioning that I did not opt-in to let google manage and protect my signing key. This means that I get warnings for not supporting bundles each time I try to publish, but these warnings can be ignored.

Next steps for me is to to publish to f-droid, and to provide some translations to be able to target more markets (right now the app is in Swedish, so I limited distribution to Sweden).

We are happy to announce the release of Qt Creator 4.11 RC!

November 29, 2019. Over 120 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE’s release service.

Today they all get release candidate sources meaning they are feature complete but need testing for final bugfixes.

Distro and app store packagers should update their pre-release channels to check for issues.

Press Contacts

For more information send us an email:

November 28, 2019

In this post, I will relate my experience at Lakademy 2019. For who doesn’t know what it is, it’s the Latin American meeting of KDE community, it happens every year and this year it was hosted on Salvador – Bahia. It exists since 2012 and this year I had my first participation and my first experience in person with KDE community.

I arrived on November 14th, in the middle of the afternoon. I didn’t know what to expect because it was my first experience, but I actually felt welcomed and comfortable. I spent the rest of this day with Caio (my GSoC mentor) trying to prepare the laptop to work, because I don’t have a laptop then they lent me one.

My purpose on Lakademy was to continue my GSoC work, what means: work on Khipu bugs and on what is missing. Then on the next day I actually focused on fix the search bug on Khipu. When I searched on the search bar to find the spaces by their names, it was returning the correct spaces, but if I edit any of these results, the change was happening on the wrong index. I was stuck on this bug for months, because I knew that I needed to use mapToSource to fix it, but I didn’t know how to use it. I spent the day thinking and thinking and in the end of the day I could solve the most of this problem.

On november 16th I continued my work on the search bar, because it was crashing in some situations, bugging in other situations, and I sent many commits because when I fix something, I was creating another bug and I was running around in circles but in the end of the day I could make this search bar work perfectly (as far as I noticed).

In the last day, november 17th, I tried to fix the bug when I edit the plots in the spaces, but I couldn’t fix it yet. I asked for help to Caio but we only noticed that some plots are having their values set as “invalid” when we add it, but I still don’t know how to deal with it. In the end of the day I took the flight back to Rio.

I actually enjoyed it, the people there were actually friendly, we had fun and this trip was really special to me because I’ve never been in an airplane before, it was my first flight and I’d like to say thanks to KDE for having this opportunity. I will continue working on my project and I hope to meet everybody again soon.

Posing with the banner

November 27, 2019

Software developers like tools, and in particular tools that make them more productive. So in this blog post, I am going to share with you some of the experiences some of us here at KDAB have had using Visual Studio Code for Qt development.

Preview of Visual studio code


The first question you want to ask is probably, “Why use another editor or IDE at all if we have Qt Creator, which is a perfectly good and, in particular, Qt-specific IDE, ready at our disposal?” And, of course, that’s a very valid question to ask.

For me, the main reason is that Visual Studio Code simply does some things better than Qt Creator – and other things worse, which I’ll discuss later. Also, I am doing a lot of my development on macOS, and Qt Creator does not always have the same level of stability there as it does on Linux and Windows. I am not advocating to ditch Qt Creator altogether. My current work setup uses both in parallel.

I have configured both to auto-save and auto-reload so that I can switch seamlessly between the two. Some things I do in Qt Creator, while others I do in Visual Studio Code. When I move focus, my changes are already there (or I just need to hit the “Yes to All” button in the reload confirmation dialog) and I am getting the best of both worlds.

Visual Studio… Code?

Before I go into greater detail, I’d like to explain a bit about Visual Studio Code. Many of you are most likely familiar with Microsoft Visual Studio. If not, here’s a quick summary.

Microsoft Visual Studio is Microsoft’s big and comprehensive IDE/compiler/debugger package for C# and C++ development that has been around for many years and is available for Windows and macOS (but not for Linux). And, here’s the confusing bit: Visual Studio Code has very little to do with Microsoft Visual Studio. (Though, I would guess that they use a lot of common code under the hood.)

Visual Studio Code is an offering of its own, open source, not commercialized (for the time being at least), and based on Electron. It doesn’t use the Atom editor component though, like many other development tools built with Electron. Instead, it uses a separate editor component that is also used in Microsoft’s Azure DevOps product. This is not something you need to worry about, or even know, when working with Code, of course.

Visual Studio Code (or Code, for short) can be downloaded free of charge from here.


One of the things you’ll quickly discover with Code is the staggering amount of extensions available. Many times, when you ask yourself, “Can Code do X?”, the answer will be: “Out-of-the-box, no, with an extension, yes, just fine.

The sheer amount of available extensions (all of them free as in beer, though some of their developers ask for a small and usually well-deserved contribution) can sometimes be confusing, especially when there are several that seem to serve the same purpose. There’s a rating system though.  Whenever I was uncertain, I quickly tried several. Many of these serve very small and well-defined purposes so you can quickly find out whether a specific extension is what you need.  All extensions can be installed without leaving Code.

In fact, for my particular purpose, Qt/C++ development using Code is not supported out of the box. Code’s heritage is ‘webby’, JavaScript-related languages such as TypeScript. Installing the C/C++ extension (developed by Microsoft themselves) gives you most of what you want, though, at least in the C++ department.

VS Code or Qt Creator?

So, this being said, what are the pros and cons of using Code over Qt Creator?

First of all, at this time, Code has no knowledge of Qt itself. It doesn’t know about signals and slots, .ui or .ts files, or QML or Qt Designer. And that alone is, of course, reason enough not to switch to Code entirely. Anything that is very Qt-specific is better done in Qt Creator. It is entirely conceivable that somebody at some point in the future will write a Qt extension for Code (who knows, maybe even a KDABian?), but at this point, to the best of my knowledge, such an extension doesn’t exist.

So, if Code doesn’t know about Qt or QML, why even use it for Qt-based development? Well, even in Qt-based projects, not every task in a programmer’s life is Qt-specific. As an example, Code’s global search-and-replace functionality is vastly superior to Qt Creator’s.

Here at KDAB, we often work with very large customer code bases, often old, often without access to the original developers, so finding our way around these is key to our work. Code lets you search for symbols in a very fine-tuned way, and also lets you replace with a lot of control (by folder, by file, by individual change, with full syntax-colored diff for every potential change etc). I often find myself switching from Creator to Code just to do a search (and sometimes a replace), and then switching back.

Managing projects

A bit of a difference in how the two work is that Qt Creator, like most IDEs, is project-based. You open one (or more) projects, and it’ll load information about all files in the project, as defined in the build file (QMake .pro file or CMake CMakeLists.txt). The advantage of this is, of course, that you can’t miss anything since everything that is built is also opened and read by Qt Creator.

Visual Studio Code, on the other hand, works folder-based. You open one folder at a time (and can combine several folders into so-called “workspaces” that are opened together), so you have a finer-grained control.  However, it is easy to miss files that are in a separate folder. As previously mentioned, the code bases we often deal with at KDAB are very large (several million LOCs are not unusual), and sometimes it’s just more convenient to only open a subset of them, since opening several hundred files can slow down the best of IDEs.

Code Completion

What about code completion? Intelligent code completion has made the lives of developers so much easier, so it’s one of the most important features in any IDE. In fact, I would say it’s a tie here. Microsoft has “donated” the reputable Intellisense code completion from the big Visual Studio product to Code, but Qt Creator’s code completion is also rather nice and convenient, and they both work similarly enough to each other that it’s not too confusing to switch between the two frequently. Setting up Intellisense can be a bit of a hassle sometimes, especially when using CLang, but there is good documentation to help with that.

VCS Integration

Another advantage of Code is its very extensive support for version control systems (which these days, let’s face it, essentially means git). Qt Creator does have comprehensive git support, but I don’t find it very accessible. In particular, it is not very integrated with the actual act of writing code.

With Code, I can get small annotations about who changed a line of code and when, in a subdued color. These are easy to ignore when you don’t need them, but available right away when you do; this is much more efficient that running git log or git blame separately (this particular feature comes by way of the GitLens extension). Even other developer tools are nicely integrated; for example, if your organization is using Atlassian’s Jira issue tracking system, as we do here at KDAB, there is a convenient and comprehensive extension for that.


Finally, a few words about CMake. With the recent decision to make CMake the default build tool for Qt-based projects, this will likely change, but at this time, CMake is not really a first-class citizen in Qt Creator, which was built very much around QMake.

You certainly can use Qt Creator’s nice scaffolding for new projects and tell it to use CMake, but if you add new files or classes, you’ll need to add them manually to your CMakeLists.txt Code by way of the CMake extension, which gives you a lot more support here, at least for the time being. It remains to be seen how much CMake support there’ll be in Qt Creator once Qt 6 is released.


In summary, we would advise Qt developers who care about their productivity to give Visual Studio Code a try. I won’t replace Qt Creator in the foreseeable future (maybe never), but it certainly is yet another tool in the shed that helps you write more and better code in less time.

Editorial note (28 Nov 2019)

A previous version of this post had some incorrect information regarding the support for multiple programming languages in VS Code and Qt Creator. We have removed such incorrect information to avoid spreading it further. We apologize for the mistake.

The post Using Visual Studio Code for Writing Qt Applications appeared first on KDAB.

((Dumping here the info collected as reminder to self, but also everyone who might wonder and search the internet. If you know a proper place to put it, please copy it there.))

When working on adding macros to control warnings by & visibility to the compiler for deprecated API in the KDE Frameworks modules, a certain C++ preprocessor macro has been found in some places in the code: QT_MOC_COMPAT. This macro is found as annotation to signals or slots which are otherwise tagged as deprecated.

Yet, searching in the Qt documentation (both website & local docs) has not yield any hits. More, grepping the headers of Qt libraries itself does not yield any hits, besides a blank definition of the macro in qglobal.h:

/* moc compats (signals/slots) */
#  define QT_MOC_COMPAT
#  undef QT_MOC_COMPAT
#  define QT_MOC_COMPAT

So, what has it been there for?

Looking at the code generated by moc, one can see that QT_MOC_COMPAT gets reflected in some flags being set on the metadata about the signals and slots methods. See by the example of KActionCollection (as found in the build directory src/KF5XmlGui_autogen/include/moc_kactioncollection.cpp, note the MethodCompatibility comments):

// ...
static const uint qt_meta_data_KActionCollection[] = {

 // content:
       8,       // revision
       0,       // classname
       0,    0, // classinfo
      12,   14, // methods
       2,  108, // properties
       0,    0, // enums/sets
       0,    0, // constructors
       0,       // flags
       5,       // signalCount

 // signals: name, argc, parameters, tag, flags
       1,    1,   74,    2, 0x06 /* Public */,
       5,    1,   77,    2, 0x16 /* Public | MethodCompatibility */,
       6,    1,   80,    2, 0x16 /* Public | MethodCompatibility */,
       7,    1,   83,    2, 0x06 /* Public */,
       8,    1,   86,    2, 0x06 /* Public */,

 // slots: name, argc, parameters, tag, flags
       9,    0,   89,    2, 0x09 /* Protected */,
      10,    0,   90,    2, 0x19 /* Protected | MethodCompatibility */,
// ...

Those flags reflect enums defined in qmetaobject_p.h:

enum MethodFlags  {
    // ...
    MethodCompatibility = 0x10,
    MethodCloned = 0x20,
    MethodScriptable = 0x40,
    MethodRevisioned = 0x80

So, what makes use of this flag?

At first it seems nothing does. Looking some more, one can though discover that the flag is being brought back into the game via some bitshifting and being mapped onto another of set of flags (qmetaobject.h & qmetaobject.cpp):

class Q_CORE_EXPORT QMetaMethod
    // ...
    enum Attributes { Compatibility = 0x1, Cloned = 0x2, Scriptable = 0x4 };
    int attributes() const;
    // ...

int QMetaMethod::attributes() const
    if (!mobj)
        return false;
    return ((mobj->[handle + 4])>>4);

The very flag QMetaMethod::Compatibility is then checked for in debug builds of Qt during QObject::connect(...) calls, which invokes in such builds the following code to generate runtime warnings in the log:

#ifndef QT_NO_DEBUG
static inline void check_and_warn_compat(const QMetaObject *sender, const QMetaMethod &signal,
                                         const QMetaObject *receiver, const QMetaMethod &method)
    if (signal.attributes() & QMetaMethod::Compatibility) {
        if (!(method.attributes() & QMetaMethod::Compatibility))
            qWarning("QObject::connect: Connecting from COMPAT signal (%s::%s)",
                     sender->className(), signal.methodSignature().constData());
    } else if ((method.attributes() & QMetaMethod::Compatibility) &&
               method.methodType() == QMetaMethod::Signal) {
        qWarning("QObject::connect: Connecting from %s::%s to COMPAT slot (%s::%s)",
                 sender->className(), signal.methodSignature().constData(),
                 receiver->className(), method.methodSignature().constData());

Chance is that QT_MOC_COMPAT is a left-over from string-based signal/slot connection times. Where now using the method-function-pointer-based signal/slot connects catches connections with deprecated signals or slots at build time, as opposed to the runtime-only approach of the earlier, which also comes at runtime costs and thus is only available in debug builds of Qt.

Perhaps some Qt contributor reading this can shed more light on this and about its future, presence & past 🙂

Older blog entries