gapplication: Stop handle-local-options emission on errors
authorChristophe Fergeau <cfergeau@redhat.com>
Sun, 21 Jun 2015 08:51:50 +0000 (10:51 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 27 Jul 2015 01:41:08 +0000 (21:41 -0400)
commit243d740c0430a2fa123c2428bf25ae80768ed633
tree24213e72935e0557faa5b50463232a31e27b25fe
parent2551685cf629b7f34030f146d71d2400825d36f7
gapplication: Stop handle-local-options emission on errors

A signal accumulator can return TRUE to continue signal emission, and
FALSE to stop signal emission. handle-local-options callbacks can return
« return a non-negative option if you have handled your options and
want to exit the process ».

Currently, g_application_handle_local_options_accumulator (the
accumulator for the handle-local-options signal) returns TRUE on
non-negative return value (ie continue signal emission), and returns
FALSE on negative return values (ie when the default option processing
should continue).
This return value seems backward as on >= 0 values, subsequent
handle-local-options callbacks could overwrite the 'exit request' from
the handler, while on < 0 values, the handle-local-options processing
could end up early if several callbacks are listening for this signal.
In particular, the default handler for this signal
(g_application_real_handle_local_options) always returns -1 and will
overwrite >= 0 return values from other handlers.

This commit inverts the check so that signal emission stops early when
one of the handle-local-options callbacks indicates it wants processing
to stop and the process to exit.

https://bugzilla.gnome.org/show_bug.cgi?id=751598
gio/gapplication.c