]> git.saurik.com Git - wxWidgets.git/commitdiff
Moved wxCharhookEvent so that it sends the same
authorRobert Roebling <robert@roebling.de>
Sun, 9 Jun 2002 23:02:58 +0000 (23:02 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 9 Jun 2002 23:02:58 +0000 (23:02 +0000)
   keycode as wxCharEvent.
  Removed wxDestroyWindowEvent as it crashes all
   the time.
  Corrcted wxTreeCtrl's interception of wxCharEvents
   as it misinterpreted "F5" for "Z" e.g.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/treectlg.cpp
src/gtk/window.cpp
src/gtk1/window.cpp

index 104b899c6d4ba7ac78e40e65579475fe6e5dcf23..6d56dc596d4a7b890567776445d9d86f49c78deb 100644 (file)
@@ -2616,11 +2616,14 @@ void wxGenericTreeCtrl::OnChar( wxKeyEvent &event )
 
         default:
             // do not use wxIsalnum() here
-            if ( !event.HasModifiers() && isalnum(keyCode) )
+            if ( !event.HasModifiers() && 
+                 ((keyCode >= '0' && keyCode <= '9') ||
+                  (keyCode >= 'a' && keyCode <= 'z') ||
+                  (keyCode >= 'A' && keyCode <= 'Z' )))
             {
                 // find the next item starting with the given prefix
                 char ch = (char)keyCode;
-
+                
                 wxTreeItemId id = FindItem(m_current, m_findPrefix + (wxChar)ch);
                 if ( !id.IsOk() )
                 {
index 61eef683dc393ad88699a83c97571ffe62019737..5835152aa8bbdf6d085154908c42c129d82dedf5 100644 (file)
@@ -1066,28 +1066,16 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     if (g_blockEventsOnDrag)
         return FALSE;
 
-    bool ret = FALSE;
-    
-    wxKeyEvent event( wxEVT_CHAR_HOOK );    
+
+    wxKeyEvent event( wxEVT_KEY_DOWN );
     if ( !wxTranslateGTKKeyEventToWx(event, win, gdk_event) )
     {
         // unknown key pressed, ignore (the event would be useless anyhow)
         return FALSE;
     }
 
-    // Implement wxFrame::OnCharHook by checking ancestor.
-    wxWindow *parent = win;
-    while (parent && !parent->IsTopLevel())
-        parent = parent->GetParent();
-    
-    if (parent)
-        ret = parent->GetEventHandler()->ProcessEvent( event );
-
-    if (!ret)
-    {    
-        event.SetEventType(wxEVT_KEY_DOWN);
-        ret = win->GetEventHandler()->ProcessEvent( event );
-    }
+    // Emit KEY_DOWN event
+    bool ret = win->GetEventHandler()->ProcessEvent( event );
 
 #if wxUSE_ACCEL
     if (!ret)
@@ -1109,10 +1097,11 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     }
 #endif // wxUSE_ACCEL
 
-    /* Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
-       will only be sent if it is not in an accelerator table. */
+    // Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
+    // will only be sent if it is not in an accelerator table.
     if (!ret)
     {
+        // Find key code for EVT_CHAR and EVT_CHAR_HOOK events
         KeySym keysym = gdk_event->keyval;
         long key_code = wxTranslateKeySymToWXKey(keysym, TRUE /* isChar */);
         if ( !key_code )
@@ -1132,16 +1121,27 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         {
             wxLogTrace(TRACE_KEYS, _T("Char event: %ld"), key_code);
 
-            // reuse the same event object, just change its type and use the
-            // translated keycode instead of the raw one
-            event.SetEventType(wxEVT_CHAR);
             event.m_keyCode = key_code;
+            
+            // Implement OnCharHook by checking ancesteror top level windows
+            wxWindow *parent = win;
+            while (parent && !parent->IsTopLevel())
+            parent = parent->GetParent();
+            if (parent)
+            {
+                event.SetEventType( wxEVT_CHAR_HOOK );
+                ret = parent->GetEventHandler()->ProcessEvent( event );
+            }
 
-            ret = win->GetEventHandler()->ProcessEvent( event );
+            if (!ret)
+            {
+                event.SetEventType(wxEVT_CHAR);
+                ret = win->GetEventHandler()->ProcessEvent( event );
+            }
         }
     }
 
-    /* win is a control: tab can be propagated up */
+    // win is a control: tab can be propagated up
     if ( !ret &&
          ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) &&
 // VZ: testing for wxTE_PROCESS_TAB shouldn't be done here the control may
@@ -1154,15 +1154,15 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     {
         wxNavigationKeyEvent new_event;
         new_event.SetEventObject( win->GetParent() );
-        /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */
+        // GDK reports GDK_ISO_Left_Tab for SHIFT-TAB
         new_event.SetDirection( (gdk_event->keyval == GDK_Tab) );
-        /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
+        // CTRL-TAB changes the (parent) window, i.e. switch notebook page
         new_event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) );
         new_event.SetCurrentFocus( win );
         ret = win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
     }
 
-    /* generate wxID_CANCEL if <esc> has been pressed (typically in dialogs) */
+    // generate wxID_CANCEL if <esc> has been pressed (typically in dialogs)
     if ( !ret &&
          (gdk_event->keyval == GDK_Escape) )
     {
@@ -1171,9 +1171,9 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         ret = win->GetEventHandler()->ProcessEvent( new_event );
     }
 
-    /* Doesn't work. */
-#if 0 // (GTK_MINOR_VERSION > 0)
-    /* Pressing F10 will activate the menu bar of the top frame. */
+    // Doesn't work.
+#if 0 
+    // Pressing F10 will activate the menu bar of the top frame
     if ( (!ret) &&
          (gdk_event->keyval == GDK_F10) )
     {
@@ -1206,7 +1206,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
         return TRUE;
     }
-
+    
     return FALSE;
 }
 
@@ -2635,8 +2635,10 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget )
     gtk_signal_connect( GTK_OBJECT(widget), "leave_notify_event",
       GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this );
       
-    gtk_signal_connect( GTK_OBJECT(widget), "destroy",
-      GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
+    // This keeps crashing on me. RR.
+    //
+    // gtk_signal_connect( GTK_OBJECT(widget), "destroy",
+    //  GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
 }
 
 bool wxWindowGTK::Destroy()
index 61eef683dc393ad88699a83c97571ffe62019737..5835152aa8bbdf6d085154908c42c129d82dedf5 100644 (file)
@@ -1066,28 +1066,16 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     if (g_blockEventsOnDrag)
         return FALSE;
 
-    bool ret = FALSE;
-    
-    wxKeyEvent event( wxEVT_CHAR_HOOK );    
+
+    wxKeyEvent event( wxEVT_KEY_DOWN );
     if ( !wxTranslateGTKKeyEventToWx(event, win, gdk_event) )
     {
         // unknown key pressed, ignore (the event would be useless anyhow)
         return FALSE;
     }
 
-    // Implement wxFrame::OnCharHook by checking ancestor.
-    wxWindow *parent = win;
-    while (parent && !parent->IsTopLevel())
-        parent = parent->GetParent();
-    
-    if (parent)
-        ret = parent->GetEventHandler()->ProcessEvent( event );
-
-    if (!ret)
-    {    
-        event.SetEventType(wxEVT_KEY_DOWN);
-        ret = win->GetEventHandler()->ProcessEvent( event );
-    }
+    // Emit KEY_DOWN event
+    bool ret = win->GetEventHandler()->ProcessEvent( event );
 
 #if wxUSE_ACCEL
     if (!ret)
@@ -1109,10 +1097,11 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     }
 #endif // wxUSE_ACCEL
 
-    /* Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
-       will only be sent if it is not in an accelerator table. */
+    // Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
+    // will only be sent if it is not in an accelerator table.
     if (!ret)
     {
+        // Find key code for EVT_CHAR and EVT_CHAR_HOOK events
         KeySym keysym = gdk_event->keyval;
         long key_code = wxTranslateKeySymToWXKey(keysym, TRUE /* isChar */);
         if ( !key_code )
@@ -1132,16 +1121,27 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         {
             wxLogTrace(TRACE_KEYS, _T("Char event: %ld"), key_code);
 
-            // reuse the same event object, just change its type and use the
-            // translated keycode instead of the raw one
-            event.SetEventType(wxEVT_CHAR);
             event.m_keyCode = key_code;
+            
+            // Implement OnCharHook by checking ancesteror top level windows
+            wxWindow *parent = win;
+            while (parent && !parent->IsTopLevel())
+            parent = parent->GetParent();
+            if (parent)
+            {
+                event.SetEventType( wxEVT_CHAR_HOOK );
+                ret = parent->GetEventHandler()->ProcessEvent( event );
+            }
 
-            ret = win->GetEventHandler()->ProcessEvent( event );
+            if (!ret)
+            {
+                event.SetEventType(wxEVT_CHAR);
+                ret = win->GetEventHandler()->ProcessEvent( event );
+            }
         }
     }
 
-    /* win is a control: tab can be propagated up */
+    // win is a control: tab can be propagated up
     if ( !ret &&
          ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) &&
 // VZ: testing for wxTE_PROCESS_TAB shouldn't be done here the control may
@@ -1154,15 +1154,15 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     {
         wxNavigationKeyEvent new_event;
         new_event.SetEventObject( win->GetParent() );
-        /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */
+        // GDK reports GDK_ISO_Left_Tab for SHIFT-TAB
         new_event.SetDirection( (gdk_event->keyval == GDK_Tab) );
-        /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
+        // CTRL-TAB changes the (parent) window, i.e. switch notebook page
         new_event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) );
         new_event.SetCurrentFocus( win );
         ret = win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
     }
 
-    /* generate wxID_CANCEL if <esc> has been pressed (typically in dialogs) */
+    // generate wxID_CANCEL if <esc> has been pressed (typically in dialogs)
     if ( !ret &&
          (gdk_event->keyval == GDK_Escape) )
     {
@@ -1171,9 +1171,9 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         ret = win->GetEventHandler()->ProcessEvent( new_event );
     }
 
-    /* Doesn't work. */
-#if 0 // (GTK_MINOR_VERSION > 0)
-    /* Pressing F10 will activate the menu bar of the top frame. */
+    // Doesn't work.
+#if 0 
+    // Pressing F10 will activate the menu bar of the top frame
     if ( (!ret) &&
          (gdk_event->keyval == GDK_F10) )
     {
@@ -1206,7 +1206,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
         return TRUE;
     }
-
+    
     return FALSE;
 }
 
@@ -2635,8 +2635,10 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget )
     gtk_signal_connect( GTK_OBJECT(widget), "leave_notify_event",
       GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this );
       
-    gtk_signal_connect( GTK_OBJECT(widget), "destroy",
-      GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
+    // This keeps crashing on me. RR.
+    //
+    // gtk_signal_connect( GTK_OBJECT(widget), "destroy",
+    //  GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
 }
 
 bool wxWindowGTK::Destroy()