X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80a58c9968cc740b50fb92cd95d6a014a1c6e9bf..461697c2ae572caeaa26539aa5a504368e8b350e:/src/gtk/notebook.cpp diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 2d4ed460a5..78f0ebc9d6 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -26,6 +26,13 @@ #include "wx/gtk/win_gtk.h" #include +// ---------------------------------------------------------------------------- +// events +// ---------------------------------------------------------------------------- + +DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING) + //----------------------------------------------------------------------------- // idle system //----------------------------------------------------------------------------- @@ -178,6 +185,7 @@ static gint gtk_notebook_key_press_callback( GtkWidget *widget, GdkEventKey *gdk /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */ event.SetDirection( (gdk_event->keyval == GDK_Tab) ); /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */ + event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) ); event.SetCurrentFocus( win ); if (!page->m_client->GetEventHandler()->ProcessEvent( event )) { @@ -213,8 +221,10 @@ END_EVENT_TABLE() void wxNotebook::Init() { m_imageList = (wxImageList *) NULL; + m_ownsImageList = FALSE; m_pages.DeleteContents( TRUE ); m_lastSelection = -1; + m_themeEnabled = TRUE; } wxNotebook::wxNotebook() @@ -237,6 +247,7 @@ wxNotebook::~wxNotebook() GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer) this ); DeleteAllPages(); + if (m_ownsImageList) delete m_imageList; } bool wxNotebook::Create(wxWindow *parent, wxWindowID id, @@ -357,6 +368,10 @@ int wxNotebook::SetSelection( int page ) int selOld = GetSelection(); gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), page ); + + wxGtkNotebookPage* g_page = GetNotebookPage( page ); + if (g_page->m_client) + g_page->m_client->SetFocus(); return selOld; } @@ -382,7 +397,15 @@ void wxNotebook::AdvanceSelection( bool forward ) void wxNotebook::SetImageList( wxImageList* imageList ) { + if (m_ownsImageList) delete m_imageList; m_imageList = imageList; + m_ownsImageList = FALSE; +} + +void wxNotebook::AssignImageList( wxImageList* imageList ) +{ + SetImageList(imageList); + m_ownsImageList = TRUE; } bool wxNotebook::SetPageText( int page, const wxString &text ) @@ -516,7 +539,7 @@ bool wxNotebook::DeletePage( int page ) if (!nb_page) return FALSE; /* GTK sets GtkNotebook.cur_page to NULL before sending - the switvh page event */ + the switch page event */ m_lastSelection = GetSelection(); nb_page->m_client->Destroy(); @@ -531,8 +554,12 @@ bool wxNotebook::RemovePage( int page ) { wxGtkNotebookPage* nb_page = GetNotebookPage(page); - if (!nb_page) return FALSE; + wxCHECK_MSG( nb_page, FALSE, _T("wxNotebook::RemovePage: invalid page") ); + gtk_widget_ref( nb_page->m_client->m_widget ); + gtk_widget_unrealize( nb_page->m_client->m_widget ); + gtk_widget_unparent( nb_page->m_client->m_widget ); + gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page ); m_pages.DeleteObject( nb_page ); @@ -552,6 +579,9 @@ bool wxNotebook::InsertPage( int position, wxNotebookPage* win, const wxString& gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget), GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer) this ); + if (m_themeEnabled) + win->SetThemeEnabled(TRUE); + GtkNotebook *notebook = GTK_NOTEBOOK(m_widget); wxGtkNotebookPage *page = new wxGtkNotebookPage(); @@ -647,6 +677,8 @@ wxNotebookPage *wxNotebook::GetPage( int page ) const return nb_page->m_client; } +#if wxUSE_CONSTRAINTS + // override these 2 functions to do nothing: everything is done in OnSize void wxNotebook::SetConstraintSizes( bool WXUNUSED(recurse) ) { @@ -659,6 +691,8 @@ bool wxNotebook::DoPhase( int WXUNUSED(nPhase) ) return TRUE; } +#endif + void wxNotebook::ApplyWidgetStyle() { // TODO, font for labels etc