gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog gui/gtk.cpp gui/gtksup.h


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog gui/gtk.cpp gui/gtksup.h
Date: Mon, 18 Sep 2006 09:32:40 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/09/18 09:32:39

Modified files:
        .              : ChangeLog 
        gui            : gtk.cpp gtksup.h 

Log message:
                * gui/gtk.cpp, gui/gtksup.h: Forward GTK keyboard events
                  (Patch #5393)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.852&r2=1.853
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gtk.cpp?cvsroot=gnash&r1=1.20&r2=1.21
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gtksup.h?cvsroot=gnash&r1=1.15&r2=1.16

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.852
retrieving revision 1.853
diff -u -b -r1.852 -r1.853
--- ChangeLog   18 Sep 2006 08:58:59 -0000      1.852
+++ ChangeLog   18 Sep 2006 09:32:39 -0000      1.853
@@ -1,3 +1,8 @@
+2006-09-18 Samuel Lidén Borell <address@hidden>
+
+       * gui/gtk.cpp, gui/gtksup.h: Forward GTK keyboard events
+         (Patch #5393)
+
 2006-09-18 Markus Gothe <address@hidden>
 
        * libbase/container.h: #ifdef HAVE_STRCASECMP-bug-fix.

Index: gui/gtk.cpp
===================================================================
RCS file: /sources/gnash/gnash/gui/gtk.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- gui/gtk.cpp 31 Aug 2006 18:58:44 -0000      1.20
+++ gui/gtk.cpp 18 Sep 2006 09:32:39 -0000      1.21
@@ -306,6 +306,8 @@
                    G_CALLBACK(delete_event), this);
   g_signal_connect(G_OBJECT(_window), "key_press_event",
                    G_CALLBACK(key_press_event), this);
+  g_signal_connect(G_OBJECT(_window), "key_release_event",
+                   G_CALLBACK(key_release_event), this);
 
    gtk_widget_add_events(_drawing_area, GDK_EXPOSURE_MASK
                         | GDK_BUTTON_PRESS_MASK
@@ -514,6 +516,77 @@
 }
 
 
+gnash::key::code
+GtkGui::gdk_to_gnash_key(guint key)
+{
+    gnash::key::code  c(gnash::key::INVALID);
+    
+    if (key >= GDK_0 && key <= GDK_9)  {
+        c = (gnash::key::code) ((key - GDK_0) + gnash::key::_0);
+       } else if (key >= GDK_a && key <= GDK_z) {
+        c = (gnash::key::code) ((key - GDK_a) + gnash::key::A);
+    } else if (key >= GDK_F1 && key <= GDK_F15)        {
+        c = (gnash::key::code) ((key - GDK_F1) + gnash::key::F1);
+    } else if (key >= GDK_KP_0 && key <= GDK_KP_9) {
+        c = (gnash::key::code) ((key - GDK_KP_0) + gnash::key::KP_0);
+    } else {
+        // many keys don't correlate, so just use a look-up table.
+        struct {
+            guint             gdk;
+            gnash::key::code  gs;
+        } table[] = {
+            { GDK_BackSpace, gnash::key::BACKSPACE },
+            { GDK_Tab, gnash::key::TAB },
+            { GDK_Clear, gnash::key::CLEAR },
+            { GDK_Return, gnash::key::ENTER },
+            
+            { GDK_Shift_L, gnash::key::SHIFT },
+            { GDK_Shift_R, gnash::key::SHIFT },
+            { GDK_Control_L, gnash::key::CONTROL },
+            { GDK_Control_R, gnash::key::CONTROL },
+            { GDK_Alt_L, gnash::key::ALT },
+            { GDK_Alt_R, gnash::key::ALT },
+            { GDK_Caps_Lock, gnash::key::CAPSLOCK },
+            
+            { GDK_Escape, gnash::key::ESCAPE },
+            { GDK_space, gnash::key::SPACE },
+            
+            { GDK_Page_Down, gnash::key::PGDN },
+            { GDK_Page_Up, gnash::key::PGUP },
+            { GDK_Home, gnash::key::HOME },
+            { GDK_End, gnash::key::END },
+            { GDK_Left, gnash::key::LEFT },
+            { GDK_Up, gnash::key::UP },
+            { GDK_Right, gnash::key::RIGHT },
+            { GDK_Down, gnash::key::DOWN },
+            { GDK_Insert, gnash::key::INSERT },
+            { GDK_Delete, gnash::key::DELETEKEY },
+            
+            { GDK_Help, gnash::key::HELP },
+            { GDK_Num_Lock, gnash::key::NUM_LOCK },
+            { GDK_semicolon, gnash::key::SEMICOLON },
+            { GDK_equal, gnash::key::EQUALS },
+            { GDK_minus, gnash::key::MINUS },
+            { GDK_slash, gnash::key::SLASH },
+            /* Backtick */
+            { GDK_bracketleft, gnash::key::LEFT_BRACKET },
+            { GDK_backslash, gnash::key::BACKSLASH },
+            { GDK_bracketright, gnash::key::RIGHT_BRACKET },
+            { GDK_quotedbl, gnash::key::QUOTE },
+            { GDK_VoidSymbol, gnash::key::INVALID }
+        };
+        
+        for (int i = 0; table[i].gdk != GDK_VoidSymbol; i++) {
+            if (key == table[i].gdk) {
+                c = table[i].gs;
+                break;
+            }
+        }
+    }
+    
+    return c;
+}
+
 gboolean
 GtkGui::key_press_event(GtkWidget *const /*widget*/,
                 GdkEventKey *const event,
@@ -521,29 +594,14 @@
 {
     GNASH_REPORT_FUNCTION;
 
-    switch (event->keyval) {
-    case GDK_Home:
-//        info.what = viewer::key_home;
-        break;
-    case GDK_Left:
-//        info.what = viewer::key_left;
-        break;
-    case GDK_Up:
-//        info.what = viewer::key_up;
-        break;
-    case GDK_Right:
-//        info.what = viewer::key_right;
-        break;
-    case GDK_Down:
-//        info.what = viewer::key_down;
-        break;
-    case GDK_Page_Up:
-//        info.what = viewer::key_page_up;
-        break;
-    case GDK_Page_Down:
-//        info.what = viewer::key_page_down;
-        break;
-    default:
+    /* Forward key event to gnash */
+    gnash::key::code   c = gdk_to_gnash_key(event->keyval);
+    
+    if (c != gnash::key::INVALID) {
+        gnash::notify_key_event(c, true);
+    }
+
+    /* Handle GUI shortcuts */
         if (event->length <= 0) {
             return true;
         }
@@ -574,11 +632,6 @@
            dbglogfile << "Got key: '" << (char) key << "' its name is: " << 
gdk_keyval_name(key) << " hwkeycode: " << event->hardware_keycode << endl;
         }
         
-        gnash::key::code       c(gnash::key::INVALID);
-        
-        if (key >= 'a' && key <= 'z') {
-            c = (gnash::key::code) ((key - 'a') + gnash::key::A);
-        }
         switch (key) {
           case '[':
               menuitem_step_forward_callback(NULL, NULL);
@@ -590,13 +643,28 @@
               break;
         }
         
+    return true;
+}
+
+
+gboolean
+GtkGui::key_release_event(GtkWidget *const /*widget*/,
+                GdkEventKey *const event,
+                const gpointer /*data*/)
+{
+    GNASH_REPORT_FUNCTION;
+
+    /* Forward key event to gnash */
+    gnash::key::code   c = gdk_to_gnash_key(event->keyval);
+    
         if (c != gnash::key::INVALID) {
-//            gnash::notify_key_event(c, true);
-        }
+        gnash::notify_key_event(c, false);
     }
+    
     return true;
 }
 
+
 gboolean
 GtkGui::button_press_event(GtkWidget *const /*widget*/,
                            GdkEventButton *const event,

Index: gui/gtksup.h
===================================================================
RCS file: /sources/gnash/gnash/gui/gtksup.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- gui/gtksup.h        14 Sep 2006 23:54:22 -0000      1.15
+++ gui/gtksup.h        18 Sep 2006 09:32:39 -0000      1.16
@@ -114,6 +114,8 @@
                                     gpointer data);
     static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event,
                                     gpointer data);
+    static gboolean key_release_event(GtkWidget *widget, GdkEventKey *event,
+                                    gpointer data);
     static gboolean button_press_event(GtkWidget *widget, GdkEventButton 
*event,
                                        gpointer data);
     static gboolean button_release_event(GtkWidget *widget, GdkEventButton 
*event,
@@ -139,6 +141,8 @@
     GdkGLConfig *_glconfig;
     GtkGlExtGlue glue;
 #endif
+
+    static gnash::key::code GtkGui::gdk_to_gnash_key(guint key);
 };
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]