[gimp] Make key themes really work this time



commit 1b69070556a0ed4b550c40f1e72fbf95016a9be7
Author: Michael Natterer <mitch gimp org>
Date:   Tue Jun 23 23:25:09 2009 +0200

    Make key themes really work this time
    
    * app/widgets/gimpwindow.c: treat GimpCanvas as a text widget and
      dispatch all key events to it before invoking menu shortcuts.
    
    * app/display/gimpdisplayshell-callbacks.c: treat all events on the
      empty display as unhandled, not handled.
    
    * app/tools/gimptexttool.c: use the right API for invoking the proxy
      text view's bindings. Handle some more cursor navigation request and
      swallow text deletion requests we don't handle instead of always
      doing what the delete key does.

 app/display/gimpdisplayshell-callbacks.c |    4 +-
 app/tools/gimptexttool.c                 |   69 ++++++++++++++++++++++--------
 app/widgets/gimpwindow.c                 |    7 +++-
 3 files changed, 60 insertions(+), 20 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c
index 46de64d..1e30839 100644
--- a/app/display/gimpdisplayshell-callbacks.c
+++ b/app/display/gimpdisplayshell-callbacks.c
@@ -558,6 +558,7 @@ gimp_display_shell_canvas_no_image_events (GtkWidget        *canvas,
                                       "/dummy-menubar/image-popup",
                                       GTK_WIDGET (shell),
                                       NULL, NULL, NULL, NULL);
+            return TRUE;
           }
       }
       break;
@@ -570,6 +571,7 @@ gimp_display_shell_canvas_no_image_events (GtkWidget        *canvas,
             kevent->keyval == GDK_ISO_Left_Tab)
           {
             gimp_dialog_factories_toggle ();
+            return TRUE;
           }
       }
       break;
@@ -578,7 +580,7 @@ gimp_display_shell_canvas_no_image_events (GtkWidget        *canvas,
       break;
     }
 
-  return TRUE;
+  return FALSE;
 }
 
 gboolean
diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c
index 765faee..b25d540 100644
--- a/app/tools/gimptexttool.c
+++ b/app/tools/gimptexttool.c
@@ -803,18 +803,14 @@ gimp_text_tool_key_press (GimpTool    *tool,
                           GdkEventKey *kevent,
                           GimpDisplay *display)
 {
-  GimpTextTool     *text_tool = GIMP_TEXT_TOOL (tool);
-  GtkTextViewClass *tv_class  = g_type_class_ref (GTK_TYPE_TEXT_VIEW);
-  GtkBindingSet    *binding   = gtk_binding_set_by_class (tv_class);
-  GtkTextMark      *cursor_mark;
-  GtkTextMark      *selection_mark;
-  GtkTextIter       cursor;
-  GtkTextIter       selection;
-  GtkTextIter      *sel_start;
-  gint              x_pos  = -1;
-  gboolean          retval = TRUE;
-
-  g_type_class_unref (tv_class);
+  GimpTextTool *text_tool = GIMP_TEXT_TOOL (tool);
+  GtkTextMark  *cursor_mark;
+  GtkTextMark  *selection_mark;
+  GtkTextIter   cursor;
+  GtkTextIter   selection;
+  GtkTextIter  *sel_start;
+  gint          x_pos  = -1;
+  gboolean      retval = TRUE;
 
   if (display != tool->display)
     return FALSE;
@@ -829,10 +825,8 @@ gimp_text_tool_key_press (GimpTool    *tool,
 
   gimp_text_tool_ensure_proxy (text_tool);
 
-  if (gtk_binding_set_activate (binding,
-                                kevent->keyval,
-                                kevent->state,
-                                GTK_OBJECT (text_tool->proxy_text_view)))
+  if (gtk_bindings_activate_event (GTK_OBJECT (text_tool->proxy_text_view),
+                                   kevent))
     {
       g_printerr ("binding handled event!\n");
       return TRUE;
@@ -1578,7 +1572,8 @@ gimp_text_tool_move_cursor (GimpTextTool    *text_tool,
       }
       break;
 
-    case GTK_MOVEMENT_PAGES:
+    case GTK_MOVEMENT_PAGES: /* well... */
+    case GTK_MOVEMENT_BUFFER_ENDS:
       if (count < 0)
         {
           gtk_text_buffer_get_start_iter (text_tool->text_buffer, &cursor);
@@ -1589,6 +1584,18 @@ gimp_text_tool_move_cursor (GimpTextTool    *text_tool,
         }
       break;
 
+    case GTK_MOVEMENT_PARAGRAPH_ENDS:
+      if (count < 0)
+        {
+          gtk_text_iter_set_line_offset (&cursor, 0);
+        }
+      else if (count > 0)
+        {
+          if (! gtk_text_iter_ends_line (&cursor))
+            gtk_text_iter_forward_to_line_end (&cursor);
+        }
+      break;
+
     case GTK_MOVEMENT_DISPLAY_LINE_ENDS:
       if (count < 0)
         {
@@ -1626,7 +1633,33 @@ gimp_text_tool_delete_from_cursor (GimpTextTool  *text_tool,
                                 type)->value_name,
               count);
 
-  gimp_text_tool_delete_text (text_tool, FALSE);
+  switch (type)
+    {
+    case GTK_DELETE_CHARS:
+      gimp_text_tool_delete_text (text_tool, FALSE);
+      break;
+
+    case GTK_DELETE_WORD_ENDS:
+      break;
+
+    case GTK_DELETE_WORDS:
+      break;
+
+    case GTK_DELETE_DISPLAY_LINES:
+      break;
+
+    case GTK_DELETE_DISPLAY_LINE_ENDS:
+      break;
+
+    case GTK_DELETE_PARAGRAPH_ENDS:
+      break;
+
+    case GTK_DELETE_PARAGRAPHS:
+      break;
+
+    case GTK_DELETE_WHITESPACE:
+      break;
+    }
 }
 
 static void
diff --git a/app/widgets/gimpwindow.c b/app/widgets/gimpwindow.c
index 6c3162b..1b14650 100644
--- a/app/widgets/gimpwindow.c
+++ b/app/widgets/gimpwindow.c
@@ -23,6 +23,9 @@
 
 #include "widgets-types.h"
 
+#include "display/display-types.h"
+#include "display/gimpcanvas.h"
+
 #include "gimpwindow.h"
 
 
@@ -59,7 +62,9 @@ gimp_window_key_press_event (GtkWidget   *widget,
    */
 
   /* text widgets get all key events first */
-  if (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus))
+  if (GTK_IS_EDITABLE (focus)  ||
+      GTK_IS_TEXT_VIEW (focus) ||
+      GIMP_IS_CANVAS (focus))
     handled = gtk_window_propagate_key_event (window, event);
 
   /* invoke control/alt accelerators */



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