Trying to Extend Xournal
I use Xournal a lot for my work. There are two features which I think are missing. Now that on Pentecost break 2016, I finally added both features. This is a fork of Xournal in the hope that these features make it to the upstream eventually.
Toolbar to the side
On my laptop screen, I only have 1366×768 pixel. The worst part is probably the 16:9 where I use a paper in portrait mode on. This means that a lot of space on the left and right are just not used. Then there are two toolbars at the top which steal screen estate. So it looks like this by default:
From the screen economy, that is not idea. What I wanted is something like this:
This way I could use the full height of the screen and still have the toolbars.
First I needed to change the interface a bit. It is generated with glade-2
which is not the current version (GTK is at version 3 now). Fedora luckily
ships with the older version as well. Clicking in the GUI there lead me to the
changes that I would have to make in src/xo-interface.c
.
In order to preserve the original mode, I added a gboolean vertical
to this
setup function. Depending on the desired mode, the program is then started with
either of the interface choices:
if (vertical) vboxMain = gtk_hbox_new(FALSE, 0); else vboxMain = gtk_vbox_new(FALSE, 0); gtk_widget_show (vboxMain); gtk_container_add (GTK_CONTAINER (winMain), vboxMain); menubar = gtk_menu_bar_new (); gtk_widget_show (menubar); gtk_box_pack_start (GTK_BOX (vboxMain), menubar, FALSE, FALSE, 0); if (vertical) gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar), GTK_PACK_DIRECTION_TTB);
When you now start my fork with --vertical
, it will look like this:
I have yet to test that in real life but I am confident that this will be rather neat.
Export PDF command line option
Then I also want to export Xournal files to PDF files from the command line. I
have my legacy-file-formats
which does that
automatically. Currently I have a Java program which simulates the key presses
to get the files exported.
On the project homepage, there is a patch which is so outdated that one cannot even apply it to the latest Git version any more. But the gist of it can certainly be used still.
First I needed to find the function that does the printing. In the UI one can find the menu entry:
<child> <widget class="GtkMenuItem" id="filePrintPDF"> <property name="visible">True</property> <property name="label" translatable="yes">_Export to PDF</property> <property name="use_underline">True</property> <signal name="activate" handler="on_filePrintPDF_activate" last_modification_time="Wed, 30 Nov 2005 18:44:18 GMT"/> <accelerator key="E" modifiers="GDK_CONTROL_MASK" signal="activate"/> </widget> </child>
From there the signal:
g_signal_connect ((gpointer) filePrintPDF, "activate", G_CALLBACK (on_filePrintPDF_activate), NULL);
And that is defined here:
void on_filePrintPDF_activate (GtkMenuItem *menuitem, gpointer user_data);
And then finally there is the one line that I was looking for:
print_to_pdf_cairo(filename)
Looking at the commandline option
parser
from the glib, I was able to build in an --export
function.
One now has the following help screen by glib:
$ src/xournal --help Aufruf: xournal [OPTION …] Hilfeoptionen: -h, --help Hilfeoptionen anzeigen --help-all Alle Hilfeoptionen anzeigen --help-gtk GTK+-Optionen anzeigen Anwendungsoptionen: -v, --verbose Be verbose --vertical Vertical layout -e, --export Export the file as PDF, exit --display=ANZEIGE X-Anzeige, die verwendet werden soll
And then you can call xournal foo.xoj --export bar.pdf
and get it exported
right away. That is very handy for my work!
You can find my fork here:
https://github.com/martin-ueding/xournal