How to build your GTK+ application on Windows

For the last few years I have been working on getting gedit builds for Windows and it has never been as easy as now. In this post I will explain the steps you have to do to easily build your application on Windows.

  • Install the latest version of msys2. You can get it from http://msys2.github.io/. Ensure to install it on a short directory path, i.e the default c:\msys64 should be fine. Highlight that this is msys2, which compared with the previous msys system this one is fast and well maintained.
  • Open the msys2_shell.bat that you can find in c:\msys64.
  • Update it by running: pacman -Syu. This will probably update msys2 so you will have to relaunch again the shell.
  • Install the toolchain, in my case I installed the x86_64 but you can install i686 or both. To do so: pacman -S mingw-w64-x86_64-toolchain
  • Create a PKGBUILD file as you would do for Arch Linux for the package you would like to build for windows. You can find the gedit one here. Or you can find more information on how to create this file on the Arch Linux wiki.
  • Once you have the PKGBUILD file ready build it by running “makepkg-mingw -sL”. This will build your project and generate a package.
  • Install this package with pacman -U file
  • If that package your are trying to build is not already shipped by msys2 or if it is too old and you want to update it you can fork the MINGW-packages repository and add it to it and make a pull request.
  • If the package reach upstream you will not need to build it anymore in order to use it but you can simply install it by doing: pacman -S mingw-w64-x86_64-package-name
  • As an example installing gedit on Windows it is just a matter of installing msys2, update it and run “pacman -S mingw-w64-x86_64-gedit”

As you see installing and or building an application is not that difficult anymore, but as like for the case of gedit you might want to create an installer which will make easy to distribute your application. Since pacman allows you to create new roots, what I did is to create an installer based on pacman. The files can be found here. To explain a bit better how this works, here is what each file from that link mean:

  • make-gedit-installer: is a bash script which installs the base msys2 system in a specific root, in this case /tmp/gedit, and then it installs gedit and all its dependencies. Since some of them are not needed as they are optional, it also takes care of removing them.
  • make-gedit-installer.bat: it runs make-gedit-installer in 2 stages. The first one installs the basic system and the second stage installs gedit and its dependencies.
  • qt-ifw: it is used the QT sdk installer. I know it is QT but it is actually quite easy to use and anyway it is just an installer. This folder defines the packages and the installation procedure. It just a few xml files that you have to edit to set the information of your package and it also contains some Javascripts to define the installation.

I hope this helps to get your application ported to Windows and if you have any questions you can contact the msys2 team on the #msys2 channel of the OFTC IRC. Of course if you have any doubt and you prefer to contact the gedit team we are like usual in the #gedit channel on the Gimpnet IRC.

 

Posted in Uncategorized | 7 Comments

gedit 3 for Windows

gedit-windows

It has been a while since the last release of gedit for windows. After some work I am proud to announce that a new version of gedit is available. This version can be downloaded from here.

This new version features the latest unstable version of gedit 3.13.4 with all the unstable versions of the libraries we depend on (GTK+, Glib, atk, gtksourceview… etc). If the word “unstable” does not take you out the idea of trying it, please give it a try and report any issues that you may find. Right now it is known that the Start menu link is not working properly and that some of the python plugins crash the application.

On the next post I will explain how you can create the installer for gedit by yourself, how you can build gedit easily on windows and how you can actually do to build for windows your GTK application or library in a few steps.

 

Posted in Uncategorized | 12 Comments

GTK Builder for Windows

At NICE we make use of GTK+ on Windows, Linux and OSX on our product Desktop Cloud Visualization. Till now we managed to do everything with the released versions of GTK we were getting from gtk.org but we are in a point where we need the new features from GLib and there are no new versions for Windows. The point, we were checking all the possibilities out there, sbuild, hexchat’s, using fedora’s mingw binaries, using suse’s mingw binaries… Either they did not provide all the packages or they just provided the packages for win32 and not for win64 but we did not manage to have a bundle of the gtk’s libraries.

As you may know Tarnyko was the previous person in charge of making the GTK bundles, he did a really good job and he also provided a build system to setup the build system and build all the required libraries. The problem is that it was not setup in a git repository, it was providing all the tarballs and it was not easy to update them, since you would have to download the tarball, replace the old one and update the scripts to build it. What we did was to take this build system and improve it so things are a bit more automated, so at the end you just have to update the version number to get the new version of the library built, we’ve also set it up so it builds glib 2.40 and gtk2 2.24 and gtk3 3.12.

We have released this new build system under the GNOME repository: https://git.gnome.org/browse/gtk-builder-win

If you have any doubts, you want to contribute to it (please do it!) feel free to send us a mail, contact either me or pbor on the gtk+ channel of the IRC.

Posted in Uncategorized | 11 Comments

gedit has a new face

gedit1

We just landed to git master the changes that implement a refresh of the main user interface.

While small changes and iterations in the UI happened in every cycle, this is the most radical change in the UI in years so it is a very important and significative change.

gedit2

The goal of this work is to create a modern, slicker interface which wastes less screen estate and lets you focus on the text or code you are writing. No features were harmed in the making of this new UI.

gedit4

These changes bring gedit in line with the latest GNOME conventions and take advantages of the new design patterns and GTK widgets.

gedit3

However some of the concepts there have been brewing for a long time and saw many iterations in test branches and mockups.

Some words about what you see in the pictures above

  • not everything is set in stone, we would very much welcome feedback
  • the tabs look and feel is part of the latest Adwaita gtk theme and not something custom in gedit and could be still subject to changes
  • while what you see is the new default look of gedit, the changes to the code base should allow us to have far better integration with the environment we are running on and allow us to easily have different UI on OSX, Windows, Unity, etc. (help from people running gedit out of gnome-shell is very much welcome)

What about plugins

plugins that interacted with the menu will need to be adapted to the new API. We are a bit sorry we had to (partially) break the plugin API again, but this cannot be helped since with the current manpower we can focus on a specific set of changes during each cycle.

We hope you enjoy this new face of gedit and you are very welcome to enter in the #gedit channel of the Gimpnet IRC in case you want to contact with us and discuss any issues about the new design or if you want to help to better support gedit in your favourite desktop environment.

Posted in Uncategorized | 60 Comments

Initial git integration in gedit

gedit-git

These days is having place the DX Hackfest so I thought it would be nice to show a new feature I was working on for gedit.

If you are interested in this plugin you can get it from my github.

Posted in Uncategorized | 8 Comments

My new laptop Dell M4700

At the beginning of this year my old Dell XPS M1530 ended the warranty. After a few months trying to decide between a Lenovo and a Dell, I decided that for my work and also because of the great support they provide no matter in which part of Europe you are, I bought a Dell M4700. This was more or less right after I was at GUADEC and to be honest, since then it was quite a nightmare to make it work correctly in Linux.

The first distribution I tried in that moment was Fedora 17. I was working mostly. I needed the nvidia proprietary driver, ’cause nouveau didn’t work for my graphic card. Maybe too new at that time? This was ok, I installed the driver and it worked quite ok. What really pissed me off was that the touchpad didn’t work at all like a touchpad but like a normal mouse. The first thing that I did was to check if Ubuntu supported this laptop. In their web page it was saying that they did. (It was a lie) How you can support a laptop if it is not correctly working? Anyway after some more research I’ve found out that the touchpad in this laptop uses a new ALPS protocol not supported by the kernel.

In this post I could tell you all the insane things that I had to do to manage to finally get it working. But I will just put you here the steps that you have to follow in case that you are with a Fedora 17 or 18 and you have the same problem.

If the problems with the NVIDIA driver and the touchpad weren’t enough, a couple of weeks ago after some update in Fedora 18, I started to get hangs in my wireless connection. My first thought was, how is that possible? I am running Fedora 18 but with my custom Fedora 17 which has the touchpad working. Just this week after a post from Alberto Ruiz pointing me to the proprietary driver of Broadcom, I decided to install the broadcom-iwl package and now it is working as it never worked before.  Thanks again Alberto for opening my eyes.

And that’s it. Is this how Linux will conquer the world? Dunno, every time that I want to install Linux into a computer I always end up getting a lot of troubles. Unless we get something done at the respect we will really not reach all the normal people out there who just want to install an Operative System and work with it. To be honest I really encourage people to use the proprietary drivers if you are having these problems too.

Finally I want to thank Ben Gamari for the help provided on this touchpad topic and for reverse engineer the new Alps protocol.

Posted in Uncategorized | 9 Comments

gedit ported to python 3

It’s been quite a long time without blogging about anything so I will take finally some time and write about the latest and greatest things that I’ve been doing in this last few months.

That’s it, some of you may have heard that GNOME is moving to Python 3 and since last week we are already using it in the gedit master branch. The plugins in the gedit module are already ported and working, although they need some testing so if you are brave enough and you want to try, some feedback is appreciated. About the other python plugins that we maintain in the gedit-plugins module we are just missing a couple of plugins. One of them, the dashboard is waiting for Seif and the syntex plugin is waiting for Jose. Hopefully they will be soon ported and we will be able to merge the wip/python3 branch into master.

 

Posted in Uncategorized | 1 Comment

gtranslator needs new blood

I have been considering this for quite a while already. I just want to say that it has been quite a while developing gtranslator and it was very nice while I was developing it and also translating to Galician. But right now I really don’t do anything else that keeping it up to date with latest gtk+ deprecations. If somebody wants to take the maintainership feel free. I can teach whoever it wants to start contributing to it, if not I will continue making small fixes to keep it building with latest GTK+ but forget about getting any bug fixed from my part.

Posted in Uncategorized | Comments Off

NICE is hiring

As you may know I’ve been working already for a few months in NICE and It has been a great experience so far. Working in the product DCV (Desktop Cloud Visualization) which allows you to run OpenGL applications remotely using VNC with a really good quality it has been something new and challenging for me but also an incredible experience where I am learning a lot and enjoying with my new Colleagues, some of them you may already know them, Paolo Borelli and Paolo Maggi, the ones in charge of gedit too for so many years.

Apart from making an update in my life I would like to point out that NICE is hiring again and there are a few open positions that somebody might be interested in. Go to our webpage for open positions and have a look at it and if you are interested, send us your Resume.

Posted in Uncategorized | 5 Comments

Problems with current GtkFileChooserDialog usability

Dear GTK devs I’ve been encountering some problems in the current behavior of the latest versions of GtkFileChooserDialog, so just in case It is me that I don’t understand the current behavior I’ll put them here:

  • Right now when we want to open a file a in gedit the Recently Used item is selected. This is a really really bad behavior in my opinion for applications like gedit or gitg where we already provide a way to go to the recently used documents and what we really want is to show the directory where the user is working as it is highly probable that will want a file or directory from the directory it is working on or from one near to that one. Please recommend us a way to get back the previous behavior so we will not have to do crazy things like listening to map and unmap signals to place the right directory to show in our specific applications.
  • Another problem that I have been encountering and I don’t know if it is a new feature or a bug, is that if I click on the list view of directories and I press enter in a directory, the new directory is opened but the focus changes to the Location entry instead of keeping it in the list view. Please let me know if there is some API or a way I can use to get the previous behavior back. If it is a bug I can even provide some patches.
Posted in Uncategorized | 11 Comments