X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39258ad7965f272f0f0ace2c516669df0b50145f..7d5b794ce4c4b835dff3192b361fd3cd3f9f16a8:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index ea7570bf2f..4178eddb57 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -42,6 +42,7 @@ using namespace wxGTKImpl; #ifdef GDK_WINDOWING_X11 #include +#include "wx/x11/private/wrapxkb.h" #else typedef guint KeySym; #endif @@ -220,28 +221,6 @@ int g_lastButtonNumber = 0; // the trace mask used for the focus debugging messages #define TRACE_FOCUS wxT("focus") -//----------------------------------------------------------------------------- -// "size_request" of m_widget -//----------------------------------------------------------------------------- - -extern "C" { -static void -wxgtk_window_size_request_callback(GtkWidget * WXUNUSED(widget), - GtkRequisition *requisition, - wxWindow * win) -{ - int w, h; - win->GetSize( &w, &h ); - if (w < 2) - w = 2; - if (h < 2) - h = 2; - - requisition->height = h; - requisition->width = w; -} -} - //----------------------------------------------------------------------------- // "expose_event" of m_wxwindow //----------------------------------------------------------------------------- @@ -745,7 +724,11 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, wxLogTrace(TRACE_KEYS, wxT("\t-> keycode %d"), keycode); +#ifdef HAVE_X11_XKBLIB_H + KeySym keysymNormalized = XkbKeycodeToKeysym(dpy, keycode, 0, 0); +#else KeySym keysymNormalized = XKeycodeToKeysym(dpy, keycode, 0); +#endif // use the normalized, i.e. lower register, keysym if we've // got one @@ -940,7 +923,8 @@ gtk_window_key_press_callback( GtkWidget *WXUNUSED(widget), // We should let GTK+ IM filter key event first. According to GTK+ 2.0 API // docs, if IM filter returns true, no further processing should be done. // we should send the key_down event anyway. - bool intercepted_by_IM = gtk_im_context_filter_keypress(win->m_imData->context, gdk_event); + bool intercepted_by_IM = + gtk_im_context_filter_keypress(win->m_imData->context, gdk_event) != 0; win->m_imData->lastKeyEvent = NULL; if (intercepted_by_IM) { @@ -2083,9 +2067,8 @@ void wxWindowGTK::AddChildGTK(wxWindowGTK* child) child->m_x += pizza->m_scroll_x; child->m_y += pizza->m_scroll_y; - gtk_widget_set_size_request( - child->m_widget, child->m_width, child->m_height); - pizza->put(child->m_widget, child->m_x, child->m_y); + pizza->put(child->m_widget, + child->m_x, child->m_y, child->m_width, child->m_height); } //----------------------------------------------------------------------------- @@ -2500,16 +2483,8 @@ void wxWindowGTK::PostCreation() } #endif // GTK+ >= 2.8 - if ( GTKShouldConnectSizeRequest() ) - { - // This is needed if we want to add our windows into native - // GTK controls, such as the toolbar. With this callback, the - // toolbar gets to know the correct size (the one set by the - // programmer). Sadly, it misbehaves for wxComboBox. - g_signal_connect (m_widget, "size_request", - G_CALLBACK (wxgtk_window_size_request_callback), - this); - } + if (!WX_IS_PIZZA(gtk_widget_get_parent(m_widget)) && !GTK_IS_WINDOW(m_widget)) + gtk_widget_set_size_request(m_widget, m_width, m_height); InheritAttributes(); @@ -2593,12 +2568,10 @@ static gboolean queue_resize(void*) void wxWindowGTK::DoMoveWindow(int x, int y, int width, int height) { + gtk_widget_set_size_request(m_widget, width, height); GtkWidget* parent = gtk_widget_get_parent(m_widget); if (WX_IS_PIZZA(parent)) - { - WX_PIZZA(parent)->move(m_widget, x, y); - gtk_widget_set_size_request(m_widget, width, height); - } + WX_PIZZA(parent)->move(m_widget, x, y, width, height); // With GTK3, gtk_widget_queue_resize() is ignored while a size-allocate // is in progress. This situation is common in wxWidgets, since @@ -3445,7 +3418,7 @@ bool wxWindowGTK::DoNavigateIn(int flags) gboolean rc; g_signal_emit_by_name(parent->m_widget, "focus", dir, &rc); - return rc == TRUE; + return rc != 0; } } @@ -3911,7 +3884,7 @@ void wxWindowGTK::SetDoubleBuffered( bool on ) bool wxWindowGTK::IsDoubleBuffered() const { - return gtk_widget_get_double_buffered( m_wxwindow ); + return gtk_widget_get_double_buffered( m_wxwindow ) != 0; } void wxWindowGTK::ClearBackground() @@ -4179,9 +4152,9 @@ bool wxWindowGTK::IsTransparentBackgroundSupported(wxString* reason) const *reason = _("This program was compiled with a too old version of GTK+, " "please rebuild with GTK+ 2.12 or newer."); } -#endif // wxGTK_HAS_COMPOSITING_SUPPORT/!wxGTK_HAS_COMPOSITING_SUPPORT return false; +#endif // wxGTK_HAS_COMPOSITING_SUPPORT/!wxGTK_HAS_COMPOSITING_SUPPORT } // ----------------------------------------------------------------------------