[gtk+] inspector: Add a first-time warning
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] inspector: Add a first-time warning
- Date: Sat, 17 May 2014 01:56:26 +0000 (UTC)
commit b4a57a0f0cabf671f90b255351b10c5165d6acd7
Author: Matthias Clasen <mclasen redhat com>
Date: Fri May 16 21:51:42 2014 -0400
inspector: Add a first-time warning
With the keybinding, it is possible that users may trigger the
inspector unintentionally. Show a dialog that informs them about
whats going on and gives them a chance to back out.
The warning dialog can be bypassed with the
org.gtk.Settings.Debug inspector-warning setting.
gtk/gtkwindow.c | 82 +++++++++++++++++++++++++------
gtk/org.gtk.Settings.Debug.gschema.xml | 8 +++
2 files changed, 74 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index bc3d884..e610d81 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -12432,6 +12432,63 @@ _gtk_window_get_popover_position (GtkWindow *window,
static GtkWidget *inspector_window = NULL;
+static void
+warn_response (GtkDialog *dialog,
+ gint response)
+{
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ if (response == GTK_RESPONSE_NO)
+ gtk_widget_hide (inspector_window);
+}
+
+static gboolean
+show_dialog (gpointer data)
+{
+ gtk_widget_show (GTK_WIDGET (data));
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gtk_window_set_debugging (gboolean enable,
+ gboolean warn)
+{
+ GtkWidget *dialog = NULL;
+
+ if (inspector_window == NULL)
+ {
+ gtk_inspector_init ();
+ inspector_window = gtk_inspector_window_new ();
+ g_signal_connect (inspector_window, "delete-event",
+ G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+ if (warn)
+ {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (inspector_window),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("Do you want to use GTK+ Inspector ?"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("GTK+ Inspector is an interactive debugger that lets you explore and "
+ "modify the internals of any GTK+ application. Using it may cause the "
+ "application to break or crash."));
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_NO);
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_OK"), GTK_RESPONSE_YES);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (warn_response), inspector_window);
+ }
+ }
+
+ if (enable)
+ {
+ gtk_window_present (GTK_WINDOW (inspector_window));
+ if (dialog)
+ g_timeout_add (200, show_dialog, dialog);
+ }
+ else
+ gtk_widget_hide (inspector_window);
+}
+
/**
* gtk_window_set_interactive_debugging:
* @enable: %TRUE to enable interactive debugging
@@ -12445,28 +12502,18 @@ static GtkWidget *inspector_window = NULL;
void
gtk_window_set_interactive_debugging (gboolean enable)
{
- if (inspector_window == NULL)
- {
- gtk_inspector_init ();
- inspector_window = gtk_inspector_window_new ();
- g_signal_connect (inspector_window, "delete-event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
- }
-
- if (enable)
- gtk_window_present (GTK_WINDOW (inspector_window));
- else
- gtk_widget_hide (inspector_window);
+ gtk_window_set_debugging (enable, FALSE);
}
static gboolean
-inspector_keybinding_enabled (void)
+inspector_keybinding_enabled (gboolean *warn)
{
GSettingsSchema *schema;
GSettings *settings;
gboolean enabled;
enabled = FALSE;
+ *warn = FALSE;
schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (),
"org.gtk.Settings.Debug",
@@ -12475,6 +12522,7 @@ inspector_keybinding_enabled (void)
{
settings = g_settings_new_full (schema, NULL, NULL);
enabled = g_settings_get_boolean (settings, "enable-inspector-keybinding");
+ *warn = g_settings_get_boolean (settings, "inspector-warning");
g_object_unref (settings);
g_settings_schema_unref (schema);
}
@@ -12485,12 +12533,14 @@ inspector_keybinding_enabled (void)
static void
gtk_window_toggle_debugging (GtkWindow *window)
{
- if (!inspector_keybinding_enabled ())
+ gboolean warn;
+
+ if (!inspector_keybinding_enabled (&warn))
return;
if (GTK_IS_WIDGET (inspector_window) &&
gtk_widget_is_visible (inspector_window))
- gtk_window_set_interactive_debugging (FALSE);
+ gtk_window_set_debugging (FALSE, FALSE);
else
- gtk_window_set_interactive_debugging (TRUE);
+ gtk_window_set_debugging (TRUE, warn);
}
diff --git a/gtk/org.gtk.Settings.Debug.gschema.xml b/gtk/org.gtk.Settings.Debug.gschema.xml
index db3ff64..4ef67da 100644
--- a/gtk/org.gtk.Settings.Debug.gschema.xml
+++ b/gtk/org.gtk.Settings.Debug.gschema.xml
@@ -11,6 +11,14 @@
the keybinding are Control-Shift-I and Control-Shift-D.
</description>
</key>
+ <key name='inspector-warning' type='b'>
+ <default>true</default>
+ <summary>Inspector warning</summary>
+ <description>
+ If this setting is true, GTK+ shows a warning before letting
+ the user use the interactive debugger.
+ </description>
+ </key>
</schema>
</schemalist>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]