#include "wx/bitmap.h"
#include "wx/fontutil.h"
+// FIXME: Use GtkImage instead of GtkPixmap. Don't use gtk_container_border_width
+#include <gtk/gtkversion.h>
+#ifdef GTK_DISABLE_DEPRECATED
+#undef GTK_DISABLE_DEPRECATED
+#endif
+
#include "wx/gtk/private.h"
#include "wx/gtk/win_gtk.h"
DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
-//-----------------------------------------------------------------------------
-// idle system
-//-----------------------------------------------------------------------------
-
-extern void wxapp_install_idle_handler();
-extern bool g_isIdle;
-
//-----------------------------------------------------------------------------
// data
//-----------------------------------------------------------------------------
extern "C" {
static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *WXUNUSED(page),
- gint page,
+ guint page,
wxNotebook *notebook )
{
// are you trying to call SetSelection() from a notebook event handler?
!eventChanging.IsAllowed() )
{
/* program doesn't allow the page change */
- gtk_signal_emit_stop_by_name( GTK_OBJECT(notebook->m_widget),
- "switch_page" );
+ g_signal_stop_emission_by_name (notebook->m_widget,
+ "switch_page");
}
else // change allowed
{
//-----------------------------------------------------------------------------
extern "C" {
-static gint
+static void
gtk_notebook_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
/* 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 );
-
- return FALSE;
}
}
//-----------------------------------------------------------------------------
extern "C" {
-static gint gtk_notebook_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxNotebook *notebook )
+static gboolean
+gtk_notebook_key_press_callback( GtkWidget *widget,
+ GdkEventKey *gdk_event,
+ wxNotebook *notebook )
{
if (g_isIdle)
wxapp_install_idle_handler();
}
// m_selection = page;
- gtk_notebook_set_page( GTK_NOTEBOOK(widget), page );
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(widget), page );
- gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
+ g_signal_stop_emission_by_name (widget, "key_press_event");
return TRUE;
}
client->SetFocus();
}
- gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
+ g_signal_stop_emission_by_name (widget, "key_press_event");
return TRUE;
}
gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 );
- gtk_signal_connect( GTK_OBJECT(m_widget), "switch_page",
- GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer)this );
+ g_signal_connect (m_widget, "switch_page",
+ G_CALLBACK (gtk_notebook_page_change_callback), this);
m_parent->DoAddChild( this );
- if (m_windowStyle & wxNB_RIGHT)
+ if (m_windowStyle & wxBK_RIGHT)
gtk_notebook_set_tab_pos( GTK_NOTEBOOK(m_widget), GTK_POS_RIGHT );
- if (m_windowStyle & wxNB_LEFT)
+ if (m_windowStyle & wxBK_LEFT)
gtk_notebook_set_tab_pos( GTK_NOTEBOOK(m_widget), GTK_POS_LEFT );
- if (m_windowStyle & wxNB_BOTTOM)
+ if (m_windowStyle & wxBK_BOTTOM)
gtk_notebook_set_tab_pos( GTK_NOTEBOOK(m_widget), GTK_POS_BOTTOM );
- gtk_signal_connect( GTK_OBJECT(m_widget), "key_press_event",
- GTK_SIGNAL_FUNC(gtk_notebook_key_press_callback), (gpointer)this );
+ g_signal_connect (m_widget, "key_press_event",
+ G_CALLBACK (gtk_notebook_key_press_callback), this);
PostCreation(size);
- gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
- GTK_SIGNAL_FUNC(gtk_notebook_realized_callback), (gpointer) this );
+ g_signal_connect (m_widget, "realize",
+ G_CALLBACK (gtk_notebook_realized_callback), this);
return TRUE;
}
// cache the selection
m_selection = page;
- gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), page );
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(m_widget), page );
wxNotebookPage *client = GetPage(page);
if ( client )
nb_page->m_text = text;
- gtk_label_set( nb_page->m_label, wxGTK_CONV( nb_page->m_text ) );
+ gtk_label_set_text( nb_page->m_label, wxGTK_CONV( nb_page->m_text ) );
return TRUE;
}
{
/* Case 2) or 4). There is already an image in the gtkhbox. Let's find it */
- GList *child = gtk_container_children(GTK_CONTAINER(nb_page->m_box));
+ GList *child = gtk_container_get_children(GTK_CONTAINER(nb_page->m_box));
while (child)
{
if (GTK_IS_PIXMAP(child->data))
// gtk_notebook_remove_page() sends "switch_page" signal with some strange
// new page index (when deleting selected page 0, new page is 1 although,
// clearly, the selection should stay 0), so suppress this
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
- GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer) this );
+ g_signal_handlers_disconnect_by_func (m_widget,
+ (gpointer) gtk_notebook_page_change_callback,
+ this);
gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page );
- gtk_signal_connect( GTK_OBJECT(m_widget), "switch_page",
- GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer)this );
+ g_signal_connect (m_widget, "switch_page",
+ G_CALLBACK (gtk_notebook_page_change_callback), this);
wxGtkNotebookPage* p = GetNotebookPage(page);
m_pagesData.DeleteObject(p);
win->m_widget->parent = NULL;
// don't receive switch page during addition
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
- GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer) this );
+ g_signal_handlers_disconnect_by_func (m_widget,
+ (gpointer) gtk_notebook_page_change_callback,
+ this);
if (m_themeEnabled)
win->SetThemeEnabled(TRUE);
nb_page->m_box = gtk_hbox_new( FALSE, 1 );
gtk_container_border_width( GTK_CONTAINER(nb_page->m_box), 2 );
- gtk_signal_connect( GTK_OBJECT(win->m_widget), "size_allocate",
- GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)win );
+ g_signal_connect (win->m_widget, "size_allocate",
+ G_CALLBACK (gtk_page_size_callback), win);
gtk_notebook_insert_page( notebook, win->m_widget, nb_page->m_box, position );
SetSelection( position );
}
- gtk_signal_connect( GTK_OBJECT(m_widget), "switch_page",
- GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer)this );
+ g_signal_connect (m_widget, "switch_page",
+ G_CALLBACK (gtk_notebook_page_change_callback), this);
InvalidateBestSize();
return TRUE;
const gint y = m_widget->allocation.y;
const size_t count = GetPageCount();
- for ( size_t i = 0; i < count; i++ )
+ size_t i = 0;
+
+ GtkNotebook * notebook = GTK_NOTEBOOK(m_widget);
+ if (gtk_notebook_get_scrollable(notebook))
+ i = g_list_position( notebook->children, notebook->first_tab );
+
+ for ( ; i < count; i++ )
{
wxGtkNotebookPage* nb_page = GetNotebookPage(i);
GtkWidget *box = nb_page->m_box;
- // VZ: don't know how to find the border width in GTK+ 1.2
-#ifdef __WXGTK20__
const gint border = gtk_container_get_border_width(GTK_CONTAINER(box));
-#else // !GTK+ 2.x
- const gint border = 0;
-#endif
+
if ( IsPointInsideWidget(pt, box, x, y, border) )
{
// ok, we're inside this tab -- now find out where, if needed
{
GtkWidget *pixmap = NULL;
- GList *children = gtk_container_children(GTK_CONTAINER(box));
+ GList *children = gtk_container_get_children(GTK_CONTAINER(box));
for ( GList *child = children; child; child = child->next )
{
if ( GTK_IS_PIXMAP(child->data) )
bool wxNotebook::IsOwnGtkWindow( GdkWindow *window )
{
return ((m_widget->window == window) ||
- (NOTEBOOK_PANEL(m_widget) == window));
+ GTK_NOTEBOOK(m_widget)->event_window == window);
}
// static