X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3017f78d673acd86b210bd8d3747d45bb46d5fcd..4c460b340f3f32621e83e6efd2f25c43005d60b0:/src/gtk1/tbargtk.cpp diff --git a/src/gtk1/tbargtk.cpp b/src/gtk1/tbargtk.cpp index 499cae0d70..970873c7e2 100644 --- a/src/gtk1/tbargtk.cpp +++ b/src/gtk1/tbargtk.cpp @@ -41,7 +41,14 @@ extern wxCursor g_globalCursor; static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool ) { - if (g_isIdle) wxapp_install_idle_handler(); + if (g_isIdle) + wxapp_install_idle_handler(); + + if (tool->m_owner->m_blockNextEvent) + { + tool->m_owner->m_blockNextEvent = FALSE; + return; + } if (g_blockEventsOnDrag) return; if (!tool->m_enabled) return; @@ -115,6 +122,15 @@ static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget), return FALSE; } +//----------------------------------------------------------------------------- +// InsertChild callback for wxToolBar +//----------------------------------------------------------------------------- + +static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent), wxWindow* WXUNUSED(child) ) +{ + /* we don't do anything here but pray */ +} + //----------------------------------------------------------------------------- // wxToolBar //----------------------------------------------------------------------------- @@ -147,6 +163,8 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, long style, const wxString& name ) { m_needParent = TRUE; + m_blockNextEvent = FALSE; + m_insertCallback = (wxInsertChildFunction)wxInsertChildInToolBar; if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) @@ -160,6 +178,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS ) ); +// gtk_toolbar_set_space_style( m_toolbar, GTK_TOOLBAR_SPACE_LINE ); m_separation = 5; gtk_toolbar_set_space_size( m_toolbar, m_separation ); m_hasToolAlready = FALSE; @@ -257,7 +276,7 @@ void wxToolBar::OnMouseEnter( int toolIndex ) wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap, bool toggle, - float WXUNUSED(xPos), float WXUNUSED(yPos), wxObject *clientData, + wxCoord WXUNUSED(xPos), wxCoord WXUNUSED(yPos), wxObject *clientData, const wxString& helpString1, const wxString& helpString2 ) { m_hasToolAlready = TRUE; @@ -296,7 +315,7 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, GtkWidget *item = gtk_toolbar_append_element ( - GTK_TOOLBAR(m_toolbar), + m_toolbar, ctype, (GtkWidget *)NULL, (const char *)NULL, @@ -324,11 +343,56 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, return tool; } +bool wxToolBar::AddControl(wxControl *control) +{ + wxCHECK_MSG( control, FALSE, wxT("toolbar: can't insert NULL control") ); + + wxCHECK_MSG( control->GetParent() == this, FALSE, + wxT("control must have toolbar as parent") ); + + m_hasToolAlready = TRUE; + + wxToolBarTool *tool = new wxToolBarTool(control); + + gtk_toolbar_append_widget( m_toolbar, control->m_widget, (const char *) NULL, (const char *) NULL ); + + GtkRequisition req; + (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req ); + m_width = req.width; + m_height = req.height; + + m_tools.Append( tool ); + + return TRUE; +} + void wxToolBar::AddSeparator() { gtk_toolbar_append_space( m_toolbar ); } +bool wxToolBar::DeleteTool(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + if (tool->m_control) + tool->m_control->Destroy(); + else + gtk_widget_destroy( tool->m_item ); + m_tools.DeleteNode( node ); + + return TRUE; + } + node = node->Next(); + } + + return FALSE; +} + void wxToolBar::ClearTools() { wxFAIL_MSG( wxT("wxToolBar::ClearTools not implemented") ); @@ -409,13 +473,9 @@ void wxToolBar::ToggleTool( int toolIndex, bool toggle ) gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask ); } - gtk_signal_disconnect_by_func( GTK_OBJECT(tool->m_item), - GTK_SIGNAL_FUNC(gtk_toolbar_callback), (gpointer*)tool ); + m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(tool->m_item), toggle ); - - gtk_signal_connect( GTK_OBJECT(tool->m_item), "clicked", - GTK_SIGNAL_FUNC(gtk_toolbar_callback), (gpointer*)tool ); } return; @@ -631,12 +691,12 @@ void wxToolBar::OnInternalIdle() while (node) { wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (!tool->m_item->window) - break; + node = node->Next(); + + if (!tool->m_item || !tool->m_item->window) + continue; else gdk_window_set_cursor( tool->m_item->window, cursor.GetCursor() ); - - node = node->Next(); } }