X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4322df68b099e5e983acc0a3dad4ad5841b57b5..8ca1a013e4e699724040ff1f514dab3b4a11d3c9:/src/gtk/notebook.cpp diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 172bc4b120..c878f8728f 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -26,7 +26,6 @@ #include "wx/fontutil.h" #include "wx/gtk/private.h" -#include "wx/gtk/win_gtk.h" #include @@ -119,9 +118,6 @@ static void gtk_notebook_page_changed_callback( GtkNotebook *widget, extern "C" { static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win ) { - if (g_isIdle) - wxapp_install_idle_handler(); - if ((win->m_x == alloc->x) && (win->m_y == alloc->y) && (win->m_width == alloc->width) && @@ -131,17 +127,6 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* } win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height ); - - /* GTK 1.2 up to version 1.2.5 is broken so that we have to call allocate - here in order to make repositioning after resizing to take effect. */ - if ((gtk_major_version == 1) && - (gtk_minor_version == 2) && - (gtk_micro_version < 6) && - (win->m_wxwindow) && - (GTK_WIDGET_REALIZED(win->m_wxwindow))) - { - gtk_widget_size_allocate( win->m_wxwindow, alloc ); - } } } @@ -153,91 +138,17 @@ extern "C" { static void gtk_notebook_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win ) { - if (g_isIdle) - wxapp_install_idle_handler(); - /* GTK 1.2 up to version 1.2.5 is broken so that we have to call a queue_resize here in order to make repositioning before showing to take effect. */ gtk_widget_queue_resize( win->m_widget ); } } -//----------------------------------------------------------------------------- -// "key_press_event" -//----------------------------------------------------------------------------- - -extern "C" { -static gboolean -gtk_notebook_key_press_callback( GtkWidget *widget, - GdkEventKey *gdk_event, - wxNotebook *notebook ) -{ - // don't need to install idle handler, its done from "event" signal - - if (!notebook->m_hasVMT) return FALSE; - if (g_blockEventsOnDrag) return FALSE; - - /* win is a control: tab can be propagated up */ - if ((gdk_event->keyval == GDK_Left) || (gdk_event->keyval == GDK_Right)) - { - int page; - int nMax = notebook->GetPageCount(); - if ( nMax-- ) // decrement it to get the last valid index - { - int nSel = notebook->GetSelection(); - - // change selection wrapping if it becomes invalid - page = (gdk_event->keyval != GDK_Left) ? nSel == nMax ? 0 - : nSel + 1 - : nSel == 0 ? nMax - : nSel - 1; - } - else // notebook is empty, no next page - { - return FALSE; - } - - gtk_notebook_set_current_page( GTK_NOTEBOOK(widget), page ); - - return TRUE; - } - - /* win is a control: tab can be propagated up */ - if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) - { - int sel = notebook->GetSelection(); - if (sel == -1) - return TRUE; - wxGtkNotebookPage *nb_page = notebook->GetNotebookPage(sel); - wxCHECK_MSG( nb_page, FALSE, _T("invalid selection in wxNotebook") ); - - wxNavigationKeyEvent event; - event.SetEventObject( notebook ); - /* 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) || - (gdk_event->keyval == GDK_Left) || (gdk_event->keyval == GDK_Right) ); - event.SetCurrentFocus( notebook ); - - wxNotebookPage *client = notebook->GetPage(sel); - if ( !client->GetEventHandler()->ProcessEvent( event ) ) - { - client->SetFocus(); - } - - return TRUE; - } - - return FALSE; -} -} - //----------------------------------------------------------------------------- // InsertChild callback for wxNotebook //----------------------------------------------------------------------------- -static void wxInsertChildInNotebook( wxNotebook* parent, wxWindow* child ) +static void wxInsertChildInNotebook(wxWindow* parent, wxWindow* child) { // Hack Alert! (Part I): This sets the notebook as the parent of the child // widget, and takes care of some details such as updating the state and @@ -295,9 +206,7 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { - m_needParent = true; - m_acceptsFocus = true; - m_insertCallback = (wxInsertChildFunction)wxInsertChildInNotebook; + m_insertCallback = wxInsertChildInNotebook; if ( (style & wxBK_ALIGN_MASK) == wxBK_DEFAULT ) style |= wxBK_TOP; @@ -329,9 +238,6 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id, if (m_windowStyle & wxBK_BOTTOM) gtk_notebook_set_tab_pos( GTK_NOTEBOOK(m_widget), GTK_POS_BOTTOM ); - g_signal_connect (m_widget, "key_press_event", - G_CALLBACK (gtk_notebook_key_press_callback), this); - PostCreation(size); g_signal_connect (m_widget, "realize", @@ -388,26 +294,22 @@ int wxNotebook::DoSetSelection( size_t page, int flags ) if ( !(flags & SetSelection_SendEvent) ) { - g_signal_handlers_disconnect_by_func (m_widget, - (gpointer) gtk_notebook_page_changing_callback, - this); + g_signal_handlers_block_by_func(m_widget, + (gpointer)gtk_notebook_page_changing_callback, this); - g_signal_handlers_disconnect_by_func (m_widget, - (gpointer) gtk_notebook_page_changed_callback, - this); + g_signal_handlers_block_by_func(m_widget, + (gpointer)gtk_notebook_page_changed_callback, this); } gtk_notebook_set_current_page( GTK_NOTEBOOK(m_widget), page ); if ( !(flags & SetSelection_SendEvent) ) { - // reconnect to signals + g_signal_handlers_unblock_by_func(m_widget, + (gpointer)gtk_notebook_page_changing_callback, this); - g_signal_connect (m_widget, "switch_page", - G_CALLBACK (gtk_notebook_page_changing_callback), this); - - g_signal_connect_after (m_widget, "switch_page", - G_CALLBACK (gtk_notebook_page_changed_callback), this); + g_signal_handlers_unblock_by_func(m_widget, + (gpointer)gtk_notebook_page_changed_callback, this); } wxNotebookPage *client = GetPage(page);