As Midori may call external tools to open URIs it cannot handle,
and at the same time Midori is commonly the default browser,
this can end in recursion when the external tool also calls Midori.
See the description of sokoke_recursive_fork_protection().
Some distributions only install versioned libraries by default
while the generic files reside in development packages. This is
because later versions may break ABI, so we explicitly use
the supported version.
Listen to accelerometer movement.
Hide tool items in portrait mode.
Omit Homepage and View Source from app menu.
Include Compact Add, View Source and Fullscreen in context menu.
Hide buttons in portrait mode in preferences.
With a mature history setting up a browser window can be slow, but
if it's setup at creation time it is extremely fast.
The signal prototype of MidoriBrowser::new-window had to change,
all call sites were adjusted.
Currently any GtkAction in MidoriBrowser is recognized as a command,
no arguments are supported. Commands affect either a newly run
instance or a currently running one.
This socket code makes single instance a mandatory feature assuming
if libunique is not available we can use sockets.
A bit of refactoring of MidoriApp is involved to make the command
logic independant of the nature of the instance handling.
If Midori is built with support for multiple instances and a
config folder is specified a new instance bound to that
folder is created.
The new "name" property in MidoriApp implements this.
There is hardly a practical need for the application
to be a singleton, it's cleaner and it prevents
extensions from reaching out for it before activation.
We want to be able to keep extensions in a state where
they don't actually do anything but merely provide
context information. Therefore don't pass the MidoriApp.
As soon as we want to use extensions, we activate them.
Extensions are now saved in an array in MidoriApp.
Property name localization is only useful if the
strings are meant to be used in a user interface,
such as is the case with WebSettings, or for
graphical interface builders, which are not of
our concern, since we don't use Glade and friends
and nobody else is going to use our widgets.
In short, make translation work much easier.
Something in the stack seems to magically turn
empty strings into about:blank, which is a problem
if we want to be able to start typing right away
when opening blank tabs.
We simply enforce the desired behaviour now.
The implementation relies on KatzeArray for the
most part and only does the storage with sqlite
behind the scenes. The change includes a working
History panel. Changes to the database are
committed in realtime.