[gtk+] GtkWindow: Elaborate the keybindings



commit a19bc50f646a30b5b47d3d479652d42cac759826
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jul 6 16:53:37 2014 -0400

    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.

 gtk/gtkwindow.c |   60 ++++++++++++++++++++++++++++++++++--------------------
 gtk/gtkwindow.h |    3 +-
 2 files changed, 40 insertions(+), 23 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 7153baa..9451aeb 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -232,7 +232,7 @@ enum {
   ACTIVATE_FOCUS,
   ACTIVATE_DEFAULT,
   KEYS_CHANGED,
-  TOGGLE_DEBUGGING,
+  ENABLE_DEBUGGING,
   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_focus   (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,
                                              cairo_t           *cr);
 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_focus = gtk_window_real_activate_focus;
   klass->keys_changed = gtk_window_keys_changed;
-  klass->toggle_debugging = gtk_window_toggle_debugging;
+  klass->enable_debugging = gtk_window_enable_debugging;
 
   /* Construct */
   g_object_class_install_property (gobject_class,
@@ -1186,25 +1187,28 @@ gtk_window_class_init (GtkWindowClass *klass)
                   0);
 
   /**
-   * GtkWindow::toggle-debugging:
+   * GtkWindow::enable-debugging:
    * @window: the window on which the signal is emitted
+   * @toggle: toggle the debugger
    *
-   * The ::toggle-debugging signal is a
-   * [keybinding signal][GtkBindingSignal]
-   * which gets emitted when the user enables or disables
-   * interactive debugging.
+   * The ::enable-debugging signal is a [keybinding signal][GtkBindingSignal]
+   * which gets emitted when the user enables or disables interactive
+   * debugging. When @toggle is %TRUE, interactive debugging is toggled
+   * 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] =
-    g_signal_new (I_("toggle-debugging"),
+  window_signals[ENABLE_DEBUGGING] =
+    g_signal_new (I_("enable-debugging"),
                   G_TYPE_FROM_CLASS (gobject_class),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                  G_STRUCT_OFFSET (GtkWindowClass, toggle_debugging),
+                  G_STRUCT_OFFSET (GtkWindowClass, enable_debugging),
                   NULL, NULL,
-                  _gtk_marshal_VOID__VOID,
+                  _gtk_marshal_VOID__BOOLEAN,
                   G_TYPE_NONE,
-                  0);
+                  1, G_TYPE_BOOLEAN);
 
   /*
    * Key bindings
@@ -1225,9 +1229,11 @@ gtk_window_class_init (GtkWindowClass *klass)
                                 "activate-default", 0);
 
   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,
-                                "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_Down, GTK_DIR_DOWN);
@@ -11482,6 +11488,7 @@ show_dialog (gpointer data)
 
 static void
 gtk_window_set_debugging (gboolean enable,
+                          gboolean select,
                           gboolean warn)
 {
   GtkWidget *dialog = NULL;
@@ -11518,6 +11525,9 @@ gtk_window_set_debugging (gboolean enable,
       gtk_window_present (GTK_WINDOW (inspector_window));
       if (dialog)
         g_timeout_add (200, show_dialog, dialog);
+
+      if (select)
+        gtk_inspector_window_select_widget_under_pointer (GTK_INSPECTOR_WINDOW (inspector_window));
     }
   else
     {
@@ -11540,7 +11550,7 @@ gtk_window_set_debugging (gboolean enable,
 void
 gtk_window_set_interactive_debugging (gboolean enable)
 {
-  gtk_window_set_debugging (enable, FALSE);
+  gtk_window_set_debugging (enable, FALSE, FALSE);
 }
 
 static gboolean
@@ -11569,16 +11579,22 @@ inspector_keybinding_enabled (gboolean *warn)
 }
 
 static void
-gtk_window_toggle_debugging (GtkWindow *window)
+gtk_window_enable_debugging (GtkWindow *window,
+                             gboolean   toggle)
 {
   gboolean warn;
 
   if (!inspector_keybinding_enabled (&warn))
     return;
 
-  if (GTK_IS_WIDGET (inspector_window) &&
-      gtk_widget_is_visible (inspector_window))
-    gtk_window_set_debugging (FALSE, FALSE);
+  if (toggle)
+    {
+      if (GTK_IS_WIDGET (inspector_window) &&
+          gtk_widget_is_visible (inspector_window))
+        gtk_window_set_debugging (FALSE, FALSE, FALSE);
+      else
+        gtk_window_set_debugging (TRUE, FALSE, warn);
+    }
   else
-    gtk_window_set_debugging (TRUE, warn);
+    gtk_window_set_debugging (TRUE, TRUE, warn);
 }
diff --git a/gtk/gtkwindow.h b/gtk/gtkwindow.h
index 5c375dc..9716091 100644
--- a/gtk/gtkwindow.h
+++ b/gtk/gtkwindow.h
@@ -80,7 +80,8 @@ struct _GtkWindowClass
   void     (* activate_focus)   (GtkWindow *window);
   void     (* activate_default) (GtkWindow *window);
   void    (* keys_changed)     (GtkWindow *window);
-  void    (* toggle_debugging) (GtkWindow *window);
+  void    (* enable_debugging) (GtkWindow *window,
+                                 gboolean   toggle);
 
   /*< private >*/
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]