]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
Played a little with sockets.
[wxWidgets.git] / src / gtk1 / window.cpp
index 1d6581c0bd3a50969e5600b42de7e7c654299ce7..7821833663a09a7d9e4c0f590bedd489b95beada 100644 (file)
@@ -42,7 +42,6 @@
 #include "gtk/gtk.h"
 #include "gdk/gdkprivate.h"
 #include "gdk/gdkkeysyms.h"
-#include "gdk/gdkx.h"
 #include "wx/gtk/win_gtk.h"
 
 //-----------------------------------------------------------------------------
@@ -249,7 +248,7 @@ static long map_to_unmodified_wx_keysym( KeySym keysym )
         case GDK_KP_Down:      key_code = WXK_NUMPAD_DOWN;  break;
         case GDK_KP_Prior:     key_code = WXK_NUMPAD_PRIOR; break;
 //      case GDK_KP_Page_Up:   key_code = WXK_NUMPAD_PAGEUP;   break;
-        case GDK_KP_Next:      key_code = WXK_NUMPAD_PRIOR; break;
+        case GDK_KP_Next:      key_code = WXK_NUMPAD_NEXT;  break;
 //      case GDK_KP_Page_Down: key_code = WXK_NUMPAD_PAGEDOWN; break;
         case GDK_KP_End:       key_code = WXK_NUMPAD_END;   break;
         case GDK_KP_Begin:     key_code = WXK_NUMPAD_BEGIN; break;
@@ -348,7 +347,7 @@ static long map_to_wx_keysym( KeySym keysym )
         case GDK_KP_Down:      key_code = WXK_DOWN;  break;
         case GDK_KP_Prior:     key_code = WXK_PRIOR; break;
 //      case GDK_KP_Page_Up:   key_code = WXK_PAGEUP; break;
-        case GDK_KP_Next:      key_code = WXK_PRIOR;  break;
+        case GDK_KP_Next:      key_code = WXK_NEXT;  break;
 //      case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break;
         case GDK_KP_End:       key_code = WXK_END;    break;
         case GDK_KP_Begin:     key_code = WXK_HOME;   break;
@@ -386,14 +385,6 @@ static long map_to_wx_keysym( KeySym keysym )
     return (key_code);
 }
 
-static long get_unmodified_wx_keysym( GdkEventKey *event )
-{
-    KeyCode keycode = XKeysymToKeycode( GDK_DISPLAY(), event->keyval );
-    KeySym keysym = XKeycodeToKeysym( GDK_DISPLAY(), keycode, 0 );
-
-    return (map_to_unmodified_wx_keysym( keysym ));
-}
-
 //-----------------------------------------------------------------------------
 // local code (see below)
 //-----------------------------------------------------------------------------
@@ -429,7 +420,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
         if (scroll_window->hscrollbar_visible)
         {
             dh += 15;   /* dh += hscrollbar->allocation.height; */
-            dw += scroll_class->scrollbar_spacing;
+            dh += scroll_class->scrollbar_spacing;
         }
     }
 
@@ -562,13 +553,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
       printf( "ControlUp.\n" );
     printf( "\n" );
 */
-
     int x = 0;
     int y = 0;
     GdkModifierType state;
     if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
 
-    long key_code = get_unmodified_wx_keysym( gdk_event );
+    long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
     
     /* sending unknown key events doesn't really make sense */
     if (key_code == 0) return FALSE;
@@ -639,6 +629,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         ret = win->GetEventHandler()->ProcessEvent( new_event );
     }
 
+    /* generate wxID_CANCEL if <esc> has been pressed (typically in dialogs) */
     if ( (!ret) &&
          (gdk_event->keyval == GDK_Escape) )
     {
@@ -646,6 +637,34 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         new_event.SetEventObject( win );
         ret = win->GetEventHandler()->ProcessEvent( new_event );
     }
+    
+    /* pressing F10 will activate the menu bar of the top frame */
+    if ( (!ret) &&
+         (gdk_event->keyval == GDK_F10) )
+    {
+        wxWindow *ancestor = win;
+        while (ancestor)
+        {
+            if (wxIsKindOf(ancestor,wxFrame))
+           {
+               wxFrame *frame = (wxFrame*) ancestor;
+                wxMenuBar *menubar = frame->GetMenuBar();
+               if (menubar)
+               {
+                    wxNode *node = menubar->GetMenus().First();
+                   if (node)
+                   {
+                        wxMenu *firstMenu = (wxMenu*) node->Data();
+                       // doesn't work correctly
+                       // gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
+                       // ret = TRUE;
+                       break;
+                   }
+               }
+           }
+            ancestor = ancestor->GetParent();
+        }
+    }
 
 /*
     Damn, I forgot why this didn't work, but it didn't work.
@@ -704,7 +723,7 @@ static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk
     printf( "\n" );
 */
 
-    long key_code = get_unmodified_wx_keysym( gdk_event );
+    long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
     
     /* sending unknown key events doesn't really make sense */
     if (key_code == 0) return FALSE;
@@ -2049,7 +2068,7 @@ void wxWindow::DoSetClientSize( int width, int height )
             if (scroll_window->hscrollbar_visible)
             {
                 dh += 15;   /* dh += hscrollbar->allocation.height; */
-                dw += scroll_class->scrollbar_spacing;
+                dh += scroll_class->scrollbar_spacing;
             }
        }
 
@@ -2866,6 +2885,14 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
         m_scrollGC = gdk_gc_new( m_wxwindow->window );
         gdk_gc_set_exposures( m_scrollGC, TRUE );
     }
+    
+    wxNode *node = m_children.First();
+    while (node)
+    {
+        wxWindow *child = (wxWindow*) node->Data();
+       child->Move( child->m_x + dx, child->m_y + dy );
+       node = node->Next();
+    }
 
     int cw = 0;
     int ch = 0;
@@ -2899,14 +2926,6 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
 
         Refresh( TRUE, &rect );
     }
-    
-    wxNode *node = m_children.First();
-    while (node)
-    {
-        wxWindow *child = (wxWindow*) node->Data();
-       child->Move( child->m_x + dx, child->m_y + dy );
-       node = node->Next();
-    }
 }
 
 void wxWindow::SetScrolling(bool scroll)