#include "wx/gtk/private.h"
#include "wx/gtk/private/win_gtk.h"
-#include <gdk/gdkkeysyms.h>
+
#include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
+#if GTK_CHECK_VERSION(3,0,0)
+#include <gdk/gdkkeysyms-compat.h>
+#endif
+
#if !GTK_CHECK_VERSION(2,10,0)
// GTK+ can reliably detect Meta key state only since 2.10 when
// GDK_META_MASK was introduced -- there wasn't any way to detect it
}
event.m_rawCode = (wxUint32) gdk_event->keyval;
- event.m_rawFlags = 0;
+ event.m_rawFlags = gdk_event->hardware_keycode;
wxGetMousePosition( &x, &y );
win->ScreenToClient( &x, &y );
SendCharHookAndCharEvents(const wxKeyEvent& event, wxWindow *win)
{
// wxEVT_CHAR_HOOK must be sent to the top level parent window to allow it
- // to handle key events in all of its children.
- wxWindow * const parent = wxGetTopLevelParent(win);
- if ( parent )
- {
- // We need to make a copy of the event object because it is
- // modified while it's handled, notably its WasProcessed() flag
- // is set after it had been processed once.
- wxKeyEvent eventCharHook(event);
- eventCharHook.SetEventType(wxEVT_CHAR_HOOK);
- if ( parent->HandleWindowEvent(eventCharHook) )
- return true;
+ // to handle key events in all of its children unless the mouse is captured
+ // in which case we consider that the keyboard should be "captured" too.
+ if ( !g_captureWindow )
+ {
+ wxWindow * const parent = wxGetTopLevelParent(win);
+ if ( parent )
+ {
+ // We need to make a copy of the event object because it is
+ // modified while it's handled, notably its WasProcessed() flag
+ // is set after it had been processed once.
+ wxKeyEvent eventCharHook(event);
+ eventCharHook.SetEventType(wxEVT_CHAR_HOOK);
+ if ( parent->HandleWindowEvent(eventCharHook) )
+ return true;
+ }
}
// As above, make a copy of the event first.
// method
#ifdef __WXUNIVERSAL__
IMPLEMENT_ABSTRACT_CLASS(wxWindowGTK, wxWindowBase)
-#else // __WXGTK__
- IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
-#endif // __WXUNIVERSAL__/__WXGTK__
+#endif // __WXUNIVERSAL__
void wxWindowGTK::Init()
{
m_needsStyleChange = false;
}
- if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen())
- UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
+ wxWindowBase::OnInternalIdle();
}
void wxWindowGTK::DoGetSize( int *width, int *height ) const
{
GtkWidget *w = GetConnectWidget();
wxToolTip::GTKApply(w, NULL);
-#if GTK_CHECK_VERSION(2, 12, 0)
- // Just applying NULL doesn't work on 2.12.0, so also use
- // gtk_widget_set_has_tooltip. It is part of the new GtkTooltip API
- // but seems also to work with the old GtkTooltips.
- if (gtk_check_version(2, 12, 0) == NULL)
- gtk_widget_set_has_tooltip(w, FALSE);
-#endif
}
}
void wxWindowGTK::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip )
{
GtkWidget *w = GetConnectWidget();
- gtk_tooltips_set_tip(tips, w, tip, NULL);
#if GTK_CHECK_VERSION(2, 12, 0)
- if ( !tip || tip[0] == '\0' )
+ if (!gtk_check_version(2, 12, 0))
{
- // Just applying empty tool tip doesn't work on 2.12.0, so also use
- // gtk_widget_set_has_tooltip.
- if (gtk_check_version(2, 12, 0) == NULL)
- gtk_widget_set_has_tooltip(w, FALSE);
+ gtk_widget_set_tooltip_text (w, tip);
}
+ else
#endif
+ {
+ gtk_tooltips_set_tip(tips, w, tip, NULL);
+ }
}
#endif // wxUSE_TOOLTIPS