X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/739730cae79b17ae0e254535dee9de18ace226e1..089e55d6e83909598ff8b3f9296002af084ee715:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 4abdea598a..fa72030a8c 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -145,16 +145,15 @@ static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), const wxChar *name ) { - // to enable logging of the focus events replace 0 with 1 -#if 0 +/* static bool s_done = FALSE; if ( !s_done ) { wxLog::AddTraceMask("focus"); s_done = TRUE; } -#endif wxLogTrace(_T("FOCUS NOW AT: %s"), name); +*/ return FALSE; } @@ -339,15 +338,27 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e if (g_blockEventsOnDrag) return FALSE; /* - printf( "OnKeyPress from " ); - if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) - printf( win->GetClassInfo()->GetClassName() ); - printf( ".\n" ); + printf( "KeyDown-ScanCode is: %d.\n", gdk_event->keyval ); + if (gdk_event->state & GDK_SHIFT_MASK) + printf( "ShiftDown.\n" ); + else + printf( "ShiftUp.\n" ); + if (gdk_event->state & GDK_CONTROL_MASK) + printf( "ControlDown.\n" ); + else + printf( "ControlUp.\n" ); + printf( "\n" ); */ long key_code = 0; switch (gdk_event->keyval) { + case GDK_Shift_L: + case GDK_Shift_R: key_code = WXK_SHIFT; break; + case GDK_Control_L: + case GDK_Control_R: key_code = WXK_CONTROL; break; + case GDK_Menu: key_code = WXK_MENU; break; + case GDK_Help: key_code = WXK_HELP; break; case GDK_BackSpace: key_code = WXK_BACK; break; case GDK_ISO_Left_Tab: case GDK_KP_Tab: @@ -424,16 +435,21 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e } } - if (!key_code) return FALSE; + int x = 0; + int y = 0; + GdkModifierType state; + if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state); wxKeyEvent event( wxEVT_KEY_DOWN ); + event.SetTimestamp( gdk_event->time ); event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK); event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK); event.m_altDown = (gdk_event->state & GDK_MOD1_MASK); event.m_metaDown = (gdk_event->state & GDK_MOD2_MASK); event.m_keyCode = key_code; - event.m_x = 0; - event.m_y = 0; + event.m_scanCode = gdk_event->keyval; + event.m_x = x; + event.m_y = y; event.SetEventObject( win ); bool ret = win->GetEventHandler()->ProcessEvent( event ); @@ -521,15 +537,27 @@ static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk if (g_blockEventsOnDrag) return FALSE; /* - printf( "OnKeyRelease from " ); - if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) - printf( win->GetClassInfo()->GetClassName() ); - printf( ".\n" ); + printf( "KeyUp-ScanCode is: %d.\n", gdk_event->keyval ); + if (gdk_event->state & GDK_SHIFT_MASK) + printf( "ShiftDown.\n" ); + else + printf( "ShiftUp.\n" ); + if (gdk_event->state & GDK_CONTROL_MASK) + printf( "ControlDown.\n" ); + else + printf( "ControlUp.\n" ); + printf( "\n" ); */ long key_code = 0; switch (gdk_event->keyval) { + case GDK_Shift_L: + case GDK_Shift_R: key_code = WXK_SHIFT; break; + case GDK_Control_L: + case GDK_Control_R: key_code = WXK_CONTROL; break; + case GDK_Menu: key_code = WXK_MENU; break; + case GDK_Help: key_code = WXK_HELP; break; case GDK_BackSpace: key_code = WXK_BACK; break; case GDK_ISO_Left_Tab: case GDK_KP_Tab: @@ -606,16 +634,21 @@ static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk } } - if (!key_code) return FALSE; + int x = 0; + int y = 0; + GdkModifierType state; + if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state); wxKeyEvent event( wxEVT_KEY_UP ); + event.SetTimestamp( gdk_event->time ); event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK); event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK); event.m_altDown = (gdk_event->state & GDK_MOD1_MASK); event.m_metaDown = (gdk_event->state & GDK_MOD2_MASK); event.m_keyCode = key_code; - event.m_x = 0; - event.m_y = 0; + event.m_scanCode = gdk_event->keyval; + event.m_x = x; + event.m_y = y; event.SetEventObject( win ); if (win->GetEventHandler()->ProcessEvent( event )) @@ -642,7 +675,6 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton wxPrintf( win->GetClassInfo()->GetClassName() ); wxPrintf( _T(".\n") ); */ - if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; @@ -703,6 +735,7 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton } wxMouseEvent event( event_type ); + event.SetTimestamp( gdk_event->time ); event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK); event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK); event.m_altDown = (gdk_event->state & GDK_MOD1_MASK); @@ -813,6 +846,7 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto } wxMouseEvent event( event_type ); + event.SetTimestamp( gdk_event->time ); event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK); event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK); event.m_altDown = (gdk_event->state & GDK_MOD1_MASK); @@ -922,6 +956,7 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion */ wxMouseEvent event( wxEVT_MOTION ); + event.SetTimestamp( gdk_event->time ); event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK); event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK); event.m_altDown = (gdk_event->state & GDK_MOD1_MASK); @@ -1103,6 +1138,7 @@ static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_ gdk_window_set_cursor( widget->window, win->GetCursor().GetCursor() ); wxMouseEvent event( wxEVT_ENTER_WINDOW ); + event.SetTimestamp( gdk_event->time ); event.SetEventObject( win ); int x = 0; @@ -1149,6 +1185,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_ gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() ); wxMouseEvent event( wxEVT_LEAVE_WINDOW ); + event.SetTimestamp( gdk_event->time ); event.SetEventObject( win ); int x = 0; @@ -1369,7 +1406,7 @@ wxWindow *wxWindowBase::FindFocus() been realized, so we do this directly after realization */ static gint -gtk_window_realized_callback( GtkWidget *widget, wxWindow *win ) +gtk_window_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -1453,6 +1490,7 @@ void wxWindow::Init() m_sizeSet = FALSE; m_hasVMT = FALSE; m_needParent = TRUE; + m_isBeingDeleted = FALSE; m_hasScrolling = FALSE; m_isScrolling = FALSE; @@ -1633,6 +1671,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, wxWindow::~wxWindow() { + m_isBeingDeleted = TRUE; m_hasVMT = FALSE; if (m_widget) @@ -2472,7 +2511,9 @@ static void SetInvokingWindow( wxMenu *menu, wxWindow *win ) static gint gs_pop_x = 0; static gint gs_pop_y = 0; -static void pop_pos_callback( GtkMenu *menu, gint *x, gint *y, wxWindow *win ) +static void pop_pos_callback( GtkMenu * WXUNUSED(menu), + gint *x, gint *y, + wxWindow *win ) { win->ClientToScreen( &gs_pop_x, &gs_pop_y ); *x = gs_pop_x; @@ -2672,15 +2713,10 @@ void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible, m_vAdjust->page_size = fthumb; } - if (m_wxwindow->window) - { - if (orient == wxHORIZONTAL) - gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "changed" ); - else - gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); - - gtk_widget_set_usize( m_widget, m_width, m_height ); - } + if (orient == wxHORIZONTAL) + gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "changed" ); + else + gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); } void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) ) @@ -2710,7 +2746,7 @@ void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) ) m_vAdjust->value = fpos; } - if (!m_isScrolling) + if (!m_isScrolling) /* prevent recursion */ { if (m_wxwindow->window) {