summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Davis <smd.seandavis@gmail.com>2014-12-10 21:35:34 -0500
committerSean Davis <smd.seandavis@gmail.com>2014-12-10 21:35:34 -0500
commitefb82388b512aa17a6b8e334e916c873168ba151 (patch)
tree2f1d8d9078cf8e5a35b4d37bc0d500bd41837cb8
parenta084bcca5a7f858f9e2a3f1493a875792f0ac871 (diff)
parenta3b2410d16eebacbca70750d747236888d04c51a (diff)
downloadlightdm-gtk-greeter-git-efb82388b512aa17a6b8e334e916c873168ba151.tar.gz
Merge allow-debugging-option branch
-rw-r--r--src/lightdm-gtk-greeter.c65
1 files changed, 59 insertions, 6 deletions
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index 0b4187c..f50cc61 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -2444,6 +2444,22 @@ focus_upon_map (GdkXEvent *gxevent, GdkEvent *event, gpointer data)
return GDK_FILTER_CONTINUE;
}
+static void
+debug_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
+{
+ gchar *new_domain = NULL;
+ if (log_level == G_LOG_LEVEL_DEBUG)
+ {
+ log_level = G_LOG_LEVEL_MESSAGE;
+ if (log_domain)
+ log_domain = new_domain = g_strdup_printf ("DEBUG/%s", log_domain);
+ else
+ log_domain = "DEBUG";
+ }
+ g_log_default_handler (log_domain, log_level, message, user_data);
+ g_free (new_domain);
+}
+
int
main (int argc, char **argv)
{
@@ -2478,19 +2494,56 @@ main (int argc, char **argv)
g_unix_signal_add (SIGTERM, (GSourceFunc)gtk_main_quit, NULL);
+ config = g_key_file_new ();
+ g_key_file_load_from_file (config, CONFIG_FILE, G_KEY_FILE_NONE, &error);
+ if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_warning ("Failed to load configuration from %s: %s\n", CONFIG_FILE, error->message);
+ g_clear_error (&error);
+
+ if (g_key_file_get_boolean (config, "greeter", "allow-debugging", NULL))
+ g_log_set_default_handler (debug_log_handler, NULL);
+
/* init gtk */
gtk_init (&argc, &argv);
+ /* Disabling GtkInspector shortcuts.
+ It is still possible to run GtkInspector with GTK_DEBUG=interactive.
+ Assume that user knows what he's doing. */
+ if (!g_key_file_get_boolean (config, "greeter", "allow-debugging", NULL))
+ {
+ GtkWidget *fake_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ GtkBindingSet *set = gtk_binding_set_by_class (G_OBJECT_GET_CLASS (fake_window));
+ GtkBindingEntry *entry = NULL;
+ GtkBindingSignal *signals = NULL;
+ GSList *bindings = NULL;
+ GSList *iter;
+
+ for (entry = set->entries; entry; entry = entry->set_next)
+ {
+ for (signals = entry->signals; signals; signals = signals->next)
+ {
+ if (g_strcmp0 (signals->signal_name, "enable-debugging") == 0)
+ {
+ bindings = g_slist_prepend (bindings, entry);
+ break;
+ }
+ }
+ }
+
+ for (iter = bindings; iter; iter = g_slist_next (iter))
+ {
+ entry = iter->data;
+ gtk_binding_entry_remove (set, entry->keyval, entry->modifiers);
+ }
+
+ g_slist_free (bindings);
+ gtk_widget_destroy (fake_window);
+ }
+
#ifdef HAVE_LIBIDO
ido_init ();
#endif
- config = g_key_file_new ();
- g_key_file_load_from_file (config, CONFIG_FILE, G_KEY_FILE_NONE, &error);
- if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
- g_warning ("Failed to load configuration from %s: %s\n", CONFIG_FILE, error->message);
- g_clear_error (&error);
-
state_dir = g_build_filename (g_get_user_cache_dir (), "lightdm-gtk-greeter", NULL);
g_mkdir_with_parents (state_dir, 0775);
state_filename = g_build_filename (state_dir, "state", NULL);