X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03eaa52a6e6db066404a5c9498228820bce419d6..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index ed7fff7451..5313dd72a0 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -914,7 +914,7 @@ gtk_window_key_press_callback( GtkWidget *widget, if( wxTranslateGTKKeyEventToWx(event, win, gdk_event) ) { // Emit KEY_DOWN event - ret = win->GetEventHandler()->ProcessEvent( event ); + ret = win->HandleWindowEvent( event ); } else { @@ -950,7 +950,7 @@ gtk_window_key_press_callback( GtkWidget *widget, if (command != -1) { wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command ); - ret = ancestor->GetEventHandler()->ProcessEvent( command_event ); + ret = ancestor->HandleWindowEvent( command_event ); break; } if (ancestor->IsTopLevel()) @@ -1009,13 +1009,13 @@ gtk_window_key_press_callback( GtkWidget *widget, if (parent) { event.SetEventType( wxEVT_CHAR_HOOK ); - ret = parent->GetEventHandler()->ProcessEvent( event ); + ret = parent->HandleWindowEvent( event ); } if (!ret) { event.SetEventType(wxEVT_CHAR); - ret = win->GetEventHandler()->ProcessEvent( event ); + ret = win->HandleWindowEvent( event ); } } } @@ -1085,13 +1085,13 @@ gtk_wxwindow_commit_cb (GtkIMContext * WXUNUSED(context), if (parent) { event.SetEventType( wxEVT_CHAR_HOOK ); - ret = parent->GetEventHandler()->ProcessEvent( event ); + ret = parent->HandleWindowEvent( event ); } if (!ret) { event.SetEventType(wxEVT_CHAR); - ret = window->GetEventHandler()->ProcessEvent( event ); + ret = window->HandleWindowEvent( event ); } } } @@ -1272,7 +1272,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y) bool wxWindowGTK::GTKProcessEvent(wxEvent& event) const { // nothing special at this level - return GetEventHandler()->ProcessEvent(event); + return HandleWindowEvent(event); } int wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const @@ -1319,12 +1319,12 @@ static bool DoSendFocusEvents(wxWindow *win) // Notify the parent keeping track of focus for the kbd navigation // purposes that we got it. wxChildFocusEvent eventChildFocus(win); - (void)win->GetEventHandler()->ProcessEvent(eventChildFocus); + (void)win->HandleWindowEvent(eventChildFocus); wxFocusEvent eventFocus(wxEVT_SET_FOCUS, win->GetId()); eventFocus.SetEventObject(win); - return win->GetEventHandler()->ProcessEvent(eventFocus); + return win->HandleWindowEvent(eventFocus); } // all event handlers must have C linkage as they're called from GTK+ C code @@ -2019,7 +2019,7 @@ gtk_window_grab_broken( GtkWidget*, { wxMouseCaptureLostEvent evt( win->GetId() ); evt.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( evt ); + win->HandleWindowEvent( evt ); } return false; } @@ -2034,11 +2034,8 @@ void gtk_window_style_set_callback( GtkWidget *WXUNUSED(widget), GtkStyle *previous_style, wxWindow* win ) { - //wxLogDebug(wxT("gtk_window_style_set_callback")); if (win && previous_style) { - wxString name(win->GetName()); - //wxLogDebug(wxT("gtk_window_style_set_callback %s"), name.c_str()); wxSysColourChangedEvent event; event.SetEventObject(win); @@ -2048,40 +2045,28 @@ void gtk_window_style_set_callback( GtkWidget *WXUNUSED(widget), } // extern "C" -// Connect/disconnect style-set - -void wxConnectStyleSet(wxWindow* win) -{ - if (win->m_wxwindow) - g_signal_connect (win->m_wxwindow, "style_set", - G_CALLBACK (gtk_window_style_set_callback), win); -} - -void wxDisconnectStyleSet(wxWindow* win) -{ - if (win->m_wxwindow) - g_signal_handlers_disconnect_by_func (win->m_wxwindow, - (gpointer) gtk_window_style_set_callback, - win); -} - // Helper to suspend colour change event event processing while we change a widget's style class wxSuspendStyleEvents { public: - wxSuspendStyleEvents(wxWindow* win) - { - m_win = win; - if (win->IsTopLevel()) - wxDisconnectStyleSet(win); - } - ~wxSuspendStyleEvents() - { - if (m_win->IsTopLevel()) - wxConnectStyleSet(m_win); - } + wxSuspendStyleEvents(wxWindow* win) + { + m_win = NULL; + if (win->m_wxwindow && win->IsTopLevel()) + { + m_win = win; + g_signal_handlers_block_by_func( + m_win->m_wxwindow, (void*)gtk_window_style_set_callback, m_win); + } + } + ~wxSuspendStyleEvents() + { + if (m_win) + g_signal_handlers_unblock_by_func( + m_win->m_wxwindow, (void*)gtk_window_style_set_callback, m_win); + } - wxWindow* m_win; + wxWindow* m_win; }; // ---------------------------------------------------------------------------- @@ -2241,6 +2226,11 @@ bool wxWindowGTK::Create( wxWindow *parent, long style, const wxString &name ) { + // Get default border + wxBorder border = GetBorder(style); + style &= ~wxBORDER_MASK; + style |= border; + if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) { @@ -2248,13 +2238,13 @@ bool wxWindowGTK::Create( wxWindow *parent, return false; } + m_wxwindow = wxPizza::New(m_windowStyle); if (!HasFlag(wxHSCROLL) && !HasFlag(wxVSCROLL)) m_widget = m_wxwindow; else { m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL ); - gtk_container_set_resize_mode(GTK_CONTAINER(m_widget), GTK_RESIZE_QUEUE); GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget); @@ -2423,7 +2413,7 @@ void wxWindowGTK::PostCreation() // border drawing #ifndef __WXUNIVERSAL__ - if (HasFlag(wxBORDER_SIMPLE | wxBORDER_RAISED | wxBORDER_SUNKEN)) + if (HasFlag(wxPizza::BORDER_STYLES)) { g_signal_connect(m_widget, "expose_event", G_CALLBACK(expose_event_border), this); @@ -2669,7 +2659,7 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags { wxSizeEvent event( wxSize(m_width,m_height), GetId() ); event.SetEventObject( this ); - GetEventHandler()->ProcessEvent( event ); + HandleWindowEvent( event ); } } } @@ -2687,7 +2677,7 @@ bool wxWindowGTK::GtkShowFromOnIdle() gtk_widget_show( m_widget ); wxShowEvent eventShow(GetId(), true); eventShow.SetEventObject(this); - GetEventHandler()->ProcessEvent(eventShow); + HandleWindowEvent(eventShow); m_showOnIdle = false; return true; } @@ -2920,22 +2910,19 @@ bool wxWindowGTK::Show( bool show ) return false; } - if (show) + if (show && m_showOnIdle) { - if (!m_showOnIdle) - { - gtk_widget_show( m_widget ); - wxShowEvent eventShow(GetId(), show); - eventShow.SetEventObject(this); - GetEventHandler()->ProcessEvent(eventShow); - } + // deferred } else { - gtk_widget_hide( m_widget ); + if (show) + gtk_widget_show(m_widget); + else + gtk_widget_hide(m_widget); wxShowEvent eventShow(GetId(), show); eventShow.SetEventObject(this); - GetEventHandler()->ProcessEvent(eventShow); + HandleWindowEvent(eventShow); } return true; @@ -3287,7 +3274,7 @@ wxWindowGTK::AdjustForLayoutDirection(wxCoord x, return x; } -void wxWindowGTK::DoMoveInTabOrder(wxWindow *win, MoveKind move) +void wxWindowGTK::DoMoveInTabOrder(wxWindow *win, WindowOrder move) { wxWindowBase::DoMoveInTabOrder(win, move); m_dirtyTabOrder = true; @@ -3678,16 +3665,16 @@ void wxWindowGTK::GtkSendPaintEvents() wxEraseEvent erase_event( GetId(), &dc ); erase_event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(erase_event); + HandleWindowEvent(erase_event); } wxNcPaintEvent nc_paint_event( GetId() ); nc_paint_event.SetEventObject( this ); - GetEventHandler()->ProcessEvent( nc_paint_event ); + HandleWindowEvent( nc_paint_event ); wxPaintEvent paint_event( GetId() ); paint_event.SetEventObject( this ); - GetEventHandler()->ProcessEvent( paint_event ); + HandleWindowEvent( paint_event ); m_clipPaintRegion = false; @@ -4021,7 +4008,7 @@ void wxWindowGTK::GTKReleaseMouseAndNotify() DoReleaseMouse(); wxMouseCaptureLostEvent evt(GetId()); evt.SetEventObject( this ); - GetEventHandler()->ProcessEvent( evt ); + HandleWindowEvent( evt ); } /* static */ @@ -4280,17 +4267,6 @@ wxPoint wxGetMousePosition() } -// Needed for implementing e.g. combobox on wxGTK within a modal dialog. -void wxAddGrab(wxWindow* window) -{ - gtk_grab_add( (GtkWidget*) window->GetHandle() ); -} - -void wxRemoveGrab(wxWindow* window) -{ - gtk_grab_remove( (GtkWidget*) window->GetHandle() ); -} - GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const { GdkWindow* window = NULL;