diff options
author | Sean Davis <smd.seandavis@gmail.com> | 2014-12-10 21:35:34 -0500 |
---|---|---|
committer | Sean Davis <smd.seandavis@gmail.com> | 2014-12-10 21:35:34 -0500 |
commit | efb82388b512aa17a6b8e334e916c873168ba151 (patch) | |
tree | 2f1d8d9078cf8e5a35b4d37bc0d500bd41837cb8 | |
parent | a084bcca5a7f858f9e2a3f1493a875792f0ac871 (diff) | |
parent | a3b2410d16eebacbca70750d747236888d04c51a (diff) | |
download | lightdm-gtk-greeter-git-efb82388b512aa17a6b8e334e916c873168ba151.tar.gz |
Merge allow-debugging-option branch
-rw-r--r-- | src/lightdm-gtk-greeter.c | 65 |
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); |