X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8375af8ff97a3649361b988a40b991a8cdaab09..129b8b1a215fc1fcc1b9f06daa0aeaf22bbce614:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index bb6ec9e921..0cb6276a0d 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -190,8 +190,10 @@ // data //----------------------------------------------------------------------------- -extern bool g_blockEventsOnDrag; -extern bool g_blockEventsOnScroll; +// Don't allow event propagation during drag +bool g_blockEventsOnDrag; +// Don't allow mouse event propagation during scroll +bool g_blockEventsOnScroll; extern wxCursor g_globalCursor; // mouse capture state: the window which has it and if the mouse is currently @@ -1579,6 +1581,12 @@ gtk_window_button_press_callback( GtkWidget *widget, if ( ret ) return TRUE; + if ((event_type == wxEVT_LEFT_DOWN) && !win->IsOfStandardClass() && + (g_focusWindow != win) && win->CanAcceptFocus()) + { + gtk_widget_grab_focus( win->m_wxwindow ); + } + if (event_type == wxEVT_RIGHT_DOWN) { // generate a "context menu" event: this is similar to right mouse @@ -2076,9 +2084,6 @@ gtk_scrollbar_button_release_event(GtkRange* range, GdkEventButton*, wxWindow* w // "realize" from m_widget //----------------------------------------------------------------------------- -/* We cannot set colours and fonts before the widget has - been realized, so we do this directly after realization. */ - static void gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win ) { @@ -2091,6 +2096,16 @@ gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win ) pizza->bin_window ); } + // We cannot set colours and fonts before the widget + // been realized, so we do this directly after realization + // or otherwise in idle time + + if (win->m_needsStyleChange) + { + win->SetBackgroundStyle(win->GetBackgroundStyle()); + win->m_needsStyleChange = false; + } + wxWindowCreateEvent event( win ); event.SetEventObject( win ); win->GTKProcessEvent( event ); @@ -2625,6 +2640,23 @@ void wxWindowGTK::DoMoveWindow(int x, int y, int width, int height) } +void wxWindowGTK::ConstrainSize() +{ +#ifdef __WXGPE__ + // GPE's window manager doesn't like size hints at all, esp. when the user + // has to use the virtual keyboard, so don't constrain size there + if (!IsTopLevel()) +#endif + { + const wxSize minSize = GetMinSize(); + const wxSize maxSize = GetMaxSize(); + if (minSize.x > 0 && m_width < minSize.x) m_width = minSize.x; + if (minSize.y > 0 && m_height < minSize.y) m_height = minSize.y; + if (maxSize.x > 0 && m_width > maxSize.x) m_width = maxSize.x; + if (maxSize.y > 0 && m_height > maxSize.y) m_height = maxSize.y; + } +} + void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") ); @@ -2657,15 +2689,7 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags if (height != -1) m_height = height; - int minWidth = GetMinWidth(), - minHeight = GetMinHeight(), - maxWidth = GetMaxWidth(), - maxHeight = GetMaxHeight(); - - if ((minWidth != -1) && (m_width < minWidth )) m_width = minWidth; - if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight; - if ((maxWidth != -1) && (m_width > maxWidth )) m_width = maxWidth; - if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight; + ConstrainSize(); #if wxUSE_TOOLBAR_NATIVE if (wxDynamicCast(GetParent(), wxToolBar))