GSoC 2020 · Part 1

Jun 1, 2020 min read

I was selected for Google Summer Of Code 2020 by Open Printing under The Linux Foundation. My project is to integrate the Common Print Dialog Backends in Qt. This project will enable Qt developers to leverage the features of CPDB in their applications.

Open Printing

OpenPrinting is a free software organization under The Linux Foundation. It works on the development of new printing technologies for Linux and UNIX-like operating systems. Foomatic, cups-filters and Common Print Dialog Backends are some of the major projects maintained by this organization.

Common Print Dialog Backends

My GSoC project is a part of the Common Print Dialog Backends project of Open Printing. The CPDB aims to separate the development of print dialogs of different GUI toolkits and applications (like GTK, Qt, LibreOffice etc.) and the different print technologies (CUPS, IPP, Google Cloud Print, etc.). This will enable the printing technologies to be developed independently so that the changes in these get implemented in all the applications (that use the CPDB) quickly.

For this, a print dialog depends on the backends installed on the computer, and uses their DBus API to communicate with them. If the support for a new print technology is desired, only the backend for it needs to be installed, and all the print dialogs that use the CPDB would be updated automatically.

My project

Qt is a popular cross-platform application development framework. Applications built using Qt currently use its Qt Print Support framework to provide printing features, which does not use the CPDB. My project aims to integrate the CPDB in Qt.

The project needs the CPD backends to be installed on the computer that the application is being run. So we’ll first check if the backends are installed. If they are, we’ll use the backends to provide print support to the application, otherwise we’ll use the existing Qt Print Support.

Community Bonding Period

The first phase of GSoC is the Community Bonding Period in which we get to know our community and get familiar with their code base and work style. For 2020, this period started on May 4, and lasted till May 31.

I am actually working for Open Printing, but the code that I would write has to be included in Qt’s repositories. Hence, I read about the Qt Coding Style, the Qt API Design Principles and the Qt Commit Policy. I also created my accounts on Qt and Gerrit.

We had initally decided to provide the CPDB support as a Qt Add-On. The docs state that for this we need to send out a mail to the Qt development list. So I send out this mail to the list. About a week later, we received a reply from Lars Knoll, who is Qt’s Chief Maintainer. He suggested me to integrate the CPDB support directly in Qt Print Support. My mentor (and org-admin) Till was also in favour of an in-built solution. So now I’ll be working to integrate CPDB support in Qt Print Support itself, instead of as an Add-On.

cpdb-libs on Arch Linux

Till had asked me to build and try out a demo frontend that used the cpdb-libs backend. I realized that this required the corresponding backends to be installed on my computer. The backends are available as the packages cpdb-backend-cups, cpdb-backend-gcp and cpdb-backend-file in Ubuntu’s repositories. However, I could not find them in Arch’s repositories. I couldn’t even find them in the AUR.

So I decided to submit these packages myself to the AUR. I haven’t yet gone through the submission guidelines, but I’ll hopefully do that by the end of June.

Coding Period begins!

The coding phase starts today, and I’m very excited to work on my project!

I have a friend who once needed to use ParaView Immersive for a project, so she had to build it from source. Paraview is built using Qt, so she had to install Qt too. I can’t wait to get my code merged into Qt’s official repositories, and then tell her that I contributed to Qt!

comments powered by Disqus