X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1d4dd7add411ebff1ce4a8d1d992e0e43ee26b1..139c5871c91e087972789526ac7e85a5f4e94ece:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 196aaf5dfc..538dda645d 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1835,6 +1835,10 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, { // synthetize a mouse enter or leave event if needed GdkWindow *winUnderMouse = gdk_window_at_pointer(NULL, NULL); + // This seems to be necessary and actually been added to + // GDK itself in version 2.0.X + gdk_flush(); + bool hasMouse = winUnderMouse == gdk_event->window; if ( hasMouse != g_captureWindowHasMouse ) { @@ -1912,7 +1916,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, wxLogTrace(TRACE_FOCUS, _T("%s: focus in"), win->GetName().c_str()); - + #ifdef HAVE_XIM if (win->m_ic) gdk_im_begin(win->m_ic, win->m_wxwindow->window); @@ -2058,6 +2062,9 @@ gint gtk_window_enter_callback( GtkWidget *widget, if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return FALSE; + // Event was emitted after a grab + if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; + if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE; int x = 0; @@ -2095,6 +2102,9 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_ if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return FALSE; + // Event was emitted after an ungrab + if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; + if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE; wxMouseEvent event( wxEVT_LEAVE_WINDOW ); @@ -2275,21 +2285,6 @@ wxWindow *wxWindowBase::FindFocus() return (wxWindow *)g_focusWindow; } -//----------------------------------------------------------------------------- -// "destroy" event -//----------------------------------------------------------------------------- - -// VZ: Robert commented the code using out so it generates warnings: should -// be either fixed or removed completely -#if 0 - -static void gtk_window_destroy_callback( GtkWidget* widget, wxWindow *win ) -{ - wxWindowDestroyEvent event(win); - win->GetEventHandler()->ProcessEvent(event); -} - -#endif // 0 //----------------------------------------------------------------------------- // "realize" from m_widget @@ -2735,6 +2730,8 @@ bool wxWindowGTK::Create( wxWindow *parent, wxWindowGTK::~wxWindowGTK() { + SendDestroyEvent(); + if (g_focusWindow == this) g_focusWindow = NULL; @@ -2940,11 +2937,6 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget ) gtk_signal_connect( GTK_OBJECT(widget), "leave_notify_event", GTK_SIGNAL_FUNC(gtk_window_leave_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() @@ -3438,7 +3430,7 @@ int wxWindowGTK::GetCharHeight() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.height / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); @@ -3471,7 +3463,7 @@ int wxWindowGTK::GetCharWidth() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.width / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); @@ -4147,7 +4139,13 @@ void wxWindowGTK::SetWidgetStyle() if (m_font != wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT )) { - SET_STYLE_FONT(style, m_font.GetInternalFont( 1.0 )); +#ifdef __WXGTK20__ + pango_font_description_free( style->font_desc ); + pango_font_description_copy( m_font.GetNativeFontInfo()->description ); +#else + gdk_font_unref( style->font ); + style->font = gdk_font_ref( m_font.GetInternalFont( 1.0 ) ); +#endif } if (m_foregroundColour.Ok())