[Webkit-unassigned] [Bug 28257] [Gtk] Doesn't support gtk-key-themes

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Dec 21 15:13:01 PST 2009


https://bugs.webkit.org/show_bug.cgi?id=28257





--- Comment #4 from Randal Barlow <email.tehk at gmail.com>  2009-12-21 15:13:01 PST ---
(From update of attachment 45343)
>diff -rupN original/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp new/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
>--- original/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp	2009-11-12 16:40:58.000000000 -0500
>+++ new/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp	2009-12-21 15:00:49.818888011 -0500
>@@ -31,6 +31,7 @@
> #include "FocusController.h"
> #include "Frame.h"
> #include <glib.h>
>+#include <gtk/gtk.h>
> #include "KeyboardCodes.h"
> #include "KeyboardEvent.h"
> #include "NotImplemented.h"
>@@ -371,7 +372,10 @@ struct KeyPressEntry {
>     const char* name;
> };
> 
>-static const KeyDownEntry keyDownEntries[] = {
>+/*
>+Standard gtk-key-theme
>+*/
>+static const KeyDownEntry stdkeyDownEntries[] = {
>     { VK_LEFT,   0,                  "MoveLeft"                                    },
>     { VK_LEFT,   ShiftKey,           "MoveLeftAndModifySelection"                  },
>     { VK_LEFT,   CtrlKey,            "MoveWordLeft"                                },
>@@ -417,6 +421,64 @@ static const KeyDownEntry keyDownEntries
>     { VK_RETURN, AltKey | ShiftKey,  "InsertNewline"                               },
> };
> 
>+/*
>+Emacs gtk-key-theme
>+*/
>+static const KeyDownEntry emacskeyDownEntries[] = {
>+    { VK_LEFT,   0,                  "MoveLeft"                                    },
>+    { VK_LEFT,   ShiftKey,           "MoveLeftAndModifySelection"                  },
>+    { VK_LEFT,   CtrlKey,            "MoveWordLeft"                                },
>+    { VK_LEFT,   CtrlKey | ShiftKey, "MoveWordLeftAndModifySelection"              },
>+    { VK_RIGHT,  0,                  "MoveRight"                                   },
>+    { VK_RIGHT,  ShiftKey,           "MoveRightAndModifySelection"                 },
>+    { VK_RIGHT,  CtrlKey,            "MoveWordRight"                               },
>+    { VK_RIGHT,  CtrlKey | ShiftKey, "MoveWordRightAndModifySelection"             },
>+    { VK_UP,     0,                  "MoveUp"                                      },
>+    { VK_UP,     ShiftKey,           "MoveUpAndModifySelection"                    },
>+    { VK_PRIOR,  ShiftKey,           "MovePageUpAndModifySelection"                },
>+    { VK_DOWN,   0,                  "MoveDown"                                    },
>+    { VK_DOWN,   ShiftKey,           "MoveDownAndModifySelection"                  },
>+    { VK_NEXT,   ShiftKey,           "MovePageDownAndModifySelection"              },
>+    { VK_PRIOR,  0,                  "MovePageUp"                                  },
>+    { VK_NEXT,   0,                  "MovePageDown"                                },
>+    { VK_HOME,   0,                  "MoveToBeginningOfLine"                       },
>+    { VK_HOME,   ShiftKey,           "MoveToBeginningOfLineAndModifySelection"     },
>+    { VK_HOME,   CtrlKey,            "MoveToBeginningOfDocument"                   },
>+    { VK_HOME,   CtrlKey | ShiftKey, "MoveToBeginningOfDocumentAndModifySelection" },
>+
>+    { VK_END,    0,                  "MoveToEndOfLine"                             },
>+    { VK_END,    ShiftKey,           "MoveToEndOfLineAndModifySelection"           },
>+    { VK_END,    CtrlKey,            "MoveToEndOfDocument"                         },
>+    { VK_END,    CtrlKey | ShiftKey, "MoveToEndOfDocumentAndModifySelection"       },
>+
>+    { VK_BACK,   0,                  "DeleteBackward"                              },
>+    { VK_BACK,   ShiftKey,           "DeleteBackward"                              },
>+    { VK_DELETE, 0,                  "DeleteForward"                               },
>+    { VK_BACK,   CtrlKey,            "DeleteWordBackward"                          },
>+    { VK_DELETE, CtrlKey,            "DeleteWordForward"                           },
>+
>+    { 'B',       CtrlKey,            "ToggleBold"                                  },
>+    { 'I',       CtrlKey,            "ToggleItalic"                                },
>+
>+    { VK_ESCAPE, 0,                  "Cancel"                                      },
>+    { VK_OEM_PERIOD, CtrlKey,        "Cancel"                                      },
>+    { VK_TAB,    0,                  "InsertTab"                                   },
>+    { VK_TAB,    ShiftKey,           "InsertBacktab"                               },
>+    { VK_RETURN, 0,                  "InsertNewline"                               },
>+    { VK_RETURN, CtrlKey,            "InsertNewline"                               },
>+    { VK_RETURN, AltKey,             "InsertNewline"                               },
>+    { VK_RETURN, AltKey | ShiftKey,  "InsertNewline"                               },
>+    // Emacs key theme text control
>+    { VK_K,      CtrlKey,            "DeleteToEndOfLine"                           },
>+    { VK_F,      CtrlKey,            "MoveForward"                                 },
>+    { VK_B,      CtrlKey,            "MoveBackward"                                },
>+    { VK_W,      CtrlKey,            "DeleteWordBackward"                          },
>+    { VK_D,      CtrlKey,            "DeleteForward"                               },
>+    { VK_A,      CtrlKey,            "MoveToBeginningOfLine"                       },
>+    { VK_E,      CtrlKey,            "MoveToEndOfLine"                             },
>+};
>+
>+
> static const KeyPressEntry keyPressEntries[] = {
>     { '\t',   0,                  "InsertTab"                                   },
>     { '\t',   ShiftKey,           "InsertBacktab"                               },
>@@ -436,9 +498,22 @@ static const char* interpretEditorComman
>     if (!keyDownCommandsMap) {
>         keyDownCommandsMap = new HashMap<int, const char*>;
>         keyPressCommandsMap = new HashMap<int, const char*>;
>-
>-        for (unsigned i = 0; i < G_N_ELEMENTS(keyDownEntries); i++)
>-            keyDownCommandsMap->set(keyDownEntries[i].modifiers << 16 | keyDownEntries[i].virtualKey, keyDownEntries[i].name);
>+        
>+        // get the gtk key theme
>+        GtkSettings* settings = gtk_settings_get_default();
>+        gchar* key_theme_name;
>+        g_object_get(settings, "gtk-key-theme-name", &key_theme_name, NULL);
>+
>+        if (strcmp(key_theme_name, "Emacs") == 0)
>+        {
>+            for (unsigned i = 0; i < G_N_ELEMENTS(emacskeyDownEntries); i++)
>+                keyDownCommandsMap->set(emacskeyDownEntries[i].modifiers << 16 | emacskeyDownEntries[i].virtualKey, emacskeyDownEntries[i].name);
>+        }
>+        else
>+        {
>+            for (unsigned i = 0; i < G_N_ELEMENTS(stdkeyDownEntries); i++)
>+                keyDownCommandsMap->set(stdkeyDownEntries[i].modifiers << 16 | stdkeyDownEntries[i].virtualKey, stdkeyDownEntries[i].name);
>+        }
> 
>         for (unsigned i = 0; i < G_N_ELEMENTS(keyPressEntries); i++)
>             keyPressCommandsMap->set(keyPressEntries[i].modifiers << 16 | keyPressEntries[i].charCode, keyPressEntries[i].name);

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list