GtkWindow: Elaborate the keybindings

Keep Ctrol-Shift-D as a straight toggle-the-inspector keybinding,
but make Ctrl-Shift-I always bring up the inspector, and point
it at the widget under the pointer.
This commit is contained in:
Matthias Clasen 2014-07-06 16:53:37 -04:00
parent b0390a3349
commit a19bc50f64
2 changed files with 40 additions and 23 deletions

View File

@ -232,7 +232,7 @@ enum {
ACTIVATE_FOCUS, ACTIVATE_FOCUS,
ACTIVATE_DEFAULT, ACTIVATE_DEFAULT,
KEYS_CHANGED, KEYS_CHANGED,
TOGGLE_DEBUGGING, ENABLE_DEBUGGING,
LAST_SIGNAL LAST_SIGNAL
}; };
@ -407,7 +407,8 @@ static void gtk_window_real_set_focus (GtkWindow *window,
static void gtk_window_real_activate_default (GtkWindow *window); static void gtk_window_real_activate_default (GtkWindow *window);
static void gtk_window_real_activate_focus (GtkWindow *window); static void gtk_window_real_activate_focus (GtkWindow *window);
static void gtk_window_keys_changed (GtkWindow *window); static void gtk_window_keys_changed (GtkWindow *window);
static void gtk_window_toggle_debugging (GtkWindow *window); static void gtk_window_enable_debugging (GtkWindow *window,
gboolean toggle);
static gint gtk_window_draw (GtkWidget *widget, static gint gtk_window_draw (GtkWidget *widget,
cairo_t *cr); cairo_t *cr);
static void gtk_window_unset_transient_for (GtkWindow *window); static void gtk_window_unset_transient_for (GtkWindow *window);
@ -678,7 +679,7 @@ gtk_window_class_init (GtkWindowClass *klass)
klass->activate_default = gtk_window_real_activate_default; klass->activate_default = gtk_window_real_activate_default;
klass->activate_focus = gtk_window_real_activate_focus; klass->activate_focus = gtk_window_real_activate_focus;
klass->keys_changed = gtk_window_keys_changed; klass->keys_changed = gtk_window_keys_changed;
klass->toggle_debugging = gtk_window_toggle_debugging; klass->enable_debugging = gtk_window_enable_debugging;
/* Construct */ /* Construct */
g_object_class_install_property (gobject_class, g_object_class_install_property (gobject_class,
@ -1186,25 +1187,28 @@ gtk_window_class_init (GtkWindowClass *klass)
0); 0);
/** /**
* GtkWindow::toggle-debugging: * GtkWindow::enable-debugging:
* @window: the window on which the signal is emitted * @window: the window on which the signal is emitted
* @toggle: toggle the debugger
* *
* The ::toggle-debugging signal is a * The ::enable-debugging signal is a [keybinding signal][GtkBindingSignal]
* [keybinding signal][GtkBindingSignal] * which gets emitted when the user enables or disables interactive
* which gets emitted when the user enables or disables * debugging. When @toggle is %TRUE, interactive debugging is toggled
* interactive debugging. * on or off, when it is %FALSE, the debugger will be pointed at the
* widget under the pointer.
* *
* The default binding for this signal is Ctrl-Shift-I. * The default bindings for this signal are Ctrl-Shift-I
* and Ctrl-Shift-D.
*/ */
window_signals[TOGGLE_DEBUGGING] = window_signals[ENABLE_DEBUGGING] =
g_signal_new (I_("toggle-debugging"), g_signal_new (I_("enable-debugging"),
G_TYPE_FROM_CLASS (gobject_class), G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkWindowClass, toggle_debugging), G_STRUCT_OFFSET (GtkWindowClass, enable_debugging),
NULL, NULL, NULL, NULL,
_gtk_marshal_VOID__VOID, _gtk_marshal_VOID__BOOLEAN,
G_TYPE_NONE, G_TYPE_NONE,
0); 1, G_TYPE_BOOLEAN);
/* /*
* Key bindings * Key bindings
@ -1225,9 +1229,11 @@ gtk_window_class_init (GtkWindowClass *klass)
"activate-default", 0); "activate-default", 0);
gtk_binding_entry_add_signal (binding_set, GDK_KEY_I, GDK_CONTROL_MASK|GDK_SHIFT_MASK, gtk_binding_entry_add_signal (binding_set, GDK_KEY_I, GDK_CONTROL_MASK|GDK_SHIFT_MASK,
"toggle-debugging", 0); "enable-debugging", 1,
G_TYPE_BOOLEAN, FALSE);
gtk_binding_entry_add_signal (binding_set, GDK_KEY_D, GDK_CONTROL_MASK|GDK_SHIFT_MASK, gtk_binding_entry_add_signal (binding_set, GDK_KEY_D, GDK_CONTROL_MASK|GDK_SHIFT_MASK,
"toggle-debugging", 0); "enable-debugging", 1,
G_TYPE_BOOLEAN, TRUE);
add_arrow_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP); add_arrow_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP);
add_arrow_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN); add_arrow_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN);
@ -11482,6 +11488,7 @@ show_dialog (gpointer data)
static void static void
gtk_window_set_debugging (gboolean enable, gtk_window_set_debugging (gboolean enable,
gboolean select,
gboolean warn) gboolean warn)
{ {
GtkWidget *dialog = NULL; GtkWidget *dialog = NULL;
@ -11518,6 +11525,9 @@ gtk_window_set_debugging (gboolean enable,
gtk_window_present (GTK_WINDOW (inspector_window)); gtk_window_present (GTK_WINDOW (inspector_window));
if (dialog) if (dialog)
g_timeout_add (200, show_dialog, dialog); g_timeout_add (200, show_dialog, dialog);
if (select)
gtk_inspector_window_select_widget_under_pointer (GTK_INSPECTOR_WINDOW (inspector_window));
} }
else else
{ {
@ -11540,7 +11550,7 @@ gtk_window_set_debugging (gboolean enable,
void void
gtk_window_set_interactive_debugging (gboolean enable) gtk_window_set_interactive_debugging (gboolean enable)
{ {
gtk_window_set_debugging (enable, FALSE); gtk_window_set_debugging (enable, FALSE, FALSE);
} }
static gboolean static gboolean
@ -11569,16 +11579,22 @@ inspector_keybinding_enabled (gboolean *warn)
} }
static void static void
gtk_window_toggle_debugging (GtkWindow *window) gtk_window_enable_debugging (GtkWindow *window,
gboolean toggle)
{ {
gboolean warn; gboolean warn;
if (!inspector_keybinding_enabled (&warn)) if (!inspector_keybinding_enabled (&warn))
return; return;
if (toggle)
{
if (GTK_IS_WIDGET (inspector_window) && if (GTK_IS_WIDGET (inspector_window) &&
gtk_widget_is_visible (inspector_window)) gtk_widget_is_visible (inspector_window))
gtk_window_set_debugging (FALSE, FALSE); gtk_window_set_debugging (FALSE, FALSE, FALSE);
else else
gtk_window_set_debugging (TRUE, warn); gtk_window_set_debugging (TRUE, FALSE, warn);
}
else
gtk_window_set_debugging (TRUE, TRUE, warn);
} }

View File

@ -80,7 +80,8 @@ struct _GtkWindowClass
void (* activate_focus) (GtkWindow *window); void (* activate_focus) (GtkWindow *window);
void (* activate_default) (GtkWindow *window); void (* activate_default) (GtkWindow *window);
void (* keys_changed) (GtkWindow *window); void (* keys_changed) (GtkWindow *window);
void (* toggle_debugging) (GtkWindow *window); void (* enable_debugging) (GtkWindow *window,
gboolean toggle);
/*< private >*/ /*< private >*/