From fed46e722a84470b223af674ccf3d4a7f57d17ab Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 24 Nov 1998 13:29:09 +0000 Subject: [PATCH] GTK's dnd is broken, not mine Added notebook::removepage (not tested) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/dnd.h | 10 ++++++++++ include/wx/gtk/notebook.h | 2 ++ include/wx/gtk1/dnd.h | 10 ++++++++++ include/wx/gtk1/notebook.h | 2 ++ samples/dnd/dnd.cpp | 19 +++++++++++++++++-- src/gtk/dnd.cpp | 7 ------- src/gtk/listbox.cpp | 21 ++++++++++++++++++++- src/gtk/notebook.cpp | 26 +++++++++++++++++++++++--- src/gtk1/dnd.cpp | 7 ------- src/gtk1/listbox.cpp | 21 ++++++++++++++++++++- src/gtk1/notebook.cpp | 26 +++++++++++++++++++++++--- 11 files changed, 127 insertions(+), 24 deletions(-) diff --git a/include/wx/gtk/dnd.h b/include/wx/gtk/dnd.h index e10c9e7c76..937fe1aa89 100644 --- a/include/wx/gtk/dnd.h +++ b/include/wx/gtk/dnd.h @@ -20,6 +20,16 @@ #include "wx/string.h" #include "wx/cursor.h" +//------------------------------------------------------------------------- +// conditional compilation +//------------------------------------------------------------------------- + +#if (GTK_MINOR_VERSION == 1) +#if (GTK_MICRO_VERSION >= 3) +#define NEW_GTK_DND_CODE +#endif +#endif + //------------------------------------------------------------------------- // classes //------------------------------------------------------------------------- diff --git a/include/wx/gtk/notebook.h b/include/wx/gtk/notebook.h index 46ae493e57..b188e6083f 100644 --- a/include/wx/gtk/notebook.h +++ b/include/wx/gtk/notebook.h @@ -122,6 +122,8 @@ public: // operations // ---------- + // remove one page from the notebook but do not destroy it + bool RemovePage(int nPage); // remove one page from the notebook bool DeletePage(int nPage); // remove all pages diff --git a/include/wx/gtk1/dnd.h b/include/wx/gtk1/dnd.h index e10c9e7c76..937fe1aa89 100644 --- a/include/wx/gtk1/dnd.h +++ b/include/wx/gtk1/dnd.h @@ -20,6 +20,16 @@ #include "wx/string.h" #include "wx/cursor.h" +//------------------------------------------------------------------------- +// conditional compilation +//------------------------------------------------------------------------- + +#if (GTK_MINOR_VERSION == 1) +#if (GTK_MICRO_VERSION >= 3) +#define NEW_GTK_DND_CODE +#endif +#endif + //------------------------------------------------------------------------- // classes //------------------------------------------------------------------------- diff --git a/include/wx/gtk1/notebook.h b/include/wx/gtk1/notebook.h index 46ae493e57..b188e6083f 100644 --- a/include/wx/gtk1/notebook.h +++ b/include/wx/gtk1/notebook.h @@ -122,6 +122,8 @@ public: // operations // ---------- + // remove one page from the notebook but do not destroy it + bool RemovePage(int nPage); // remove one page from the notebook bool DeletePage(int nPage); // remove all pages diff --git a/samples/dnd/dnd.cpp b/samples/dnd/dnd.cpp index 2d596e27cb..03d8ce9388 100644 --- a/samples/dnd/dnd.cpp +++ b/samples/dnd/dnd.cpp @@ -182,6 +182,7 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h) m_ctrlFile = new wxListBox(this, -1, pos, size, 1, &strFile, wxLB_HSCROLL); m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL); +/* m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size, wxTE_MULTILINE | wxTE_READONLY | wxSUNKEN_BORDER| wxHSCROLL); @@ -189,6 +190,10 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h) // redirect log messages to the text window (don't forget to delete it!) m_pLog = new wxLogTextCtrl(m_ctrlLog); m_pLogPrev = wxLog::SetActiveTarget(m_pLog); +*/ + + wxStaticText *m_testLabel = new wxStaticText( this, -1, "Hallo", pos, size ); + m_testLabel->SetDropTarget( new wxTextDropTarget() ); // associate drop targets with 2 text controls m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile)); @@ -212,15 +217,25 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h) c->height.PercentOf(this, wxHeight, 40); m_ctrlText->SetConstraints(c); +/* // Lower text control c = new wxLayoutConstraints; c->left.SameAs (this, wxLeft); c->right.SameAs (this, wxRight); c->height.PercentOf(this, wxHeight, 40); c->top.SameAs(m_ctrlText, wxBottom); - m_ctrlLog->SetConstraints(c); +*/ + // Lower label control + c = new wxLayoutConstraints; + c->left.SameAs (this, wxLeft); + c->right.SameAs (this, wxRight); + c->height.PercentOf(this, wxHeight, 40); + c->top.SameAs(m_ctrlText, wxBottom); + m_testLabel->SetConstraints(c); + + SetAutoLayout(TRUE); } @@ -284,7 +299,7 @@ void DnDFrame::OnHelp(wxCommandEvent& /* event */) void DnDFrame::OnLogClear(wxCommandEvent& /* event */ ) { - m_ctrlLog->Clear(); +// m_ctrlLog->Clear(); } bool DnDFrame::OnClose() diff --git a/src/gtk/dnd.cpp b/src/gtk/dnd.cpp index 6cdb19747f..388df88d25 100644 --- a/src/gtk/dnd.cpp +++ b/src/gtk/dnd.cpp @@ -27,13 +27,6 @@ extern bool g_blockEventsOnDrag; - -#if (GTK_MINOR_VERSION == 1) -#if (GTK_MICRO_VERSION >= 3) -#define NEW_GTK_DND_CODE -#endif -#endif - #ifdef NEW_GTK_DND_CODE #include "gtk/gtkdnd.h" diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 2734acb622..198a207afa 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -486,19 +486,38 @@ void wxListBox::SetDropTarget( wxDropTarget *dropTarget ) GList *child = m_list->children; while (child) { +#ifdef NEW_GTK_DND_CODE + GtkBin *item = GTK_BIN( child->data ); + m_dropTarget->UnregisterWidget( item->child ); +#else m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) ); +#endif child = child->next; } } - wxWindow::SetDropTarget( dropTarget ); +#ifndef NEW_GTK_DND_CODE + if (m_dropTarget) m_dropTarget->UnregisterWidget( m_list ); +#endif + + if (m_dropTarget) delete m_dropTarget; + m_dropTarget = dropTarget; + +#ifndef NEW_GTK_DND_CODE + if (m_dropTarget) m_dropTarget->RegisterWidget( dnd_widget ); +#endif if (m_dropTarget) { GList *child = m_list->children; while (child) { +#ifdef NEW_GTK_DND_CODE + GtkBin *item = GTK_BIN( child->data ); + m_dropTarget->RegisterWidget( item->child ); +#else m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) ); +#endif child = child->next; } } diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index feb8c042c5..b1ece83c05 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -370,12 +370,32 @@ bool wxNotebook::DeletePage( int page ) child = child->next; } - wxASSERT( child ); + wxCHECK_MSG( child != NULL, FALSE, "illegal notebook index" ); delete nb_page->m_client; -// Amazingly, this is not necessary -// gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page_num ); + m_pages.DeleteObject( nb_page ); + + return TRUE; +} + +bool wxNotebook::RemovePage( int page ) +{ + wxNotebookPage* nb_page = GetNotebookPage(page); + if (!nb_page) return FALSE; + + int page_num = 0; + GList *child = GTK_NOTEBOOK(m_widget)->children; + while (child) + { + if (nb_page->m_page == (GtkNotebookPage*)child->data) break; + page_num++; + child = child->next; + } + + wxCHECK_MSG( child != NULL, FALSE, "illegal notebook index" ); + + gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page_num ); m_pages.DeleteObject( nb_page ); diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index 6cdb19747f..388df88d25 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -27,13 +27,6 @@ extern bool g_blockEventsOnDrag; - -#if (GTK_MINOR_VERSION == 1) -#if (GTK_MICRO_VERSION >= 3) -#define NEW_GTK_DND_CODE -#endif -#endif - #ifdef NEW_GTK_DND_CODE #include "gtk/gtkdnd.h" diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 2734acb622..198a207afa 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -486,19 +486,38 @@ void wxListBox::SetDropTarget( wxDropTarget *dropTarget ) GList *child = m_list->children; while (child) { +#ifdef NEW_GTK_DND_CODE + GtkBin *item = GTK_BIN( child->data ); + m_dropTarget->UnregisterWidget( item->child ); +#else m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) ); +#endif child = child->next; } } - wxWindow::SetDropTarget( dropTarget ); +#ifndef NEW_GTK_DND_CODE + if (m_dropTarget) m_dropTarget->UnregisterWidget( m_list ); +#endif + + if (m_dropTarget) delete m_dropTarget; + m_dropTarget = dropTarget; + +#ifndef NEW_GTK_DND_CODE + if (m_dropTarget) m_dropTarget->RegisterWidget( dnd_widget ); +#endif if (m_dropTarget) { GList *child = m_list->children; while (child) { +#ifdef NEW_GTK_DND_CODE + GtkBin *item = GTK_BIN( child->data ); + m_dropTarget->RegisterWidget( item->child ); +#else m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) ); +#endif child = child->next; } } diff --git a/src/gtk1/notebook.cpp b/src/gtk1/notebook.cpp index feb8c042c5..b1ece83c05 100644 --- a/src/gtk1/notebook.cpp +++ b/src/gtk1/notebook.cpp @@ -370,12 +370,32 @@ bool wxNotebook::DeletePage( int page ) child = child->next; } - wxASSERT( child ); + wxCHECK_MSG( child != NULL, FALSE, "illegal notebook index" ); delete nb_page->m_client; -// Amazingly, this is not necessary -// gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page_num ); + m_pages.DeleteObject( nb_page ); + + return TRUE; +} + +bool wxNotebook::RemovePage( int page ) +{ + wxNotebookPage* nb_page = GetNotebookPage(page); + if (!nb_page) return FALSE; + + int page_num = 0; + GList *child = GTK_NOTEBOOK(m_widget)->children; + while (child) + { + if (nb_page->m_page == (GtkNotebookPage*)child->data) break; + page_num++; + child = child->next; + } + + wxCHECK_MSG( child != NULL, FALSE, "illegal notebook index" ); + + gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page_num ); m_pages.DeleteObject( nb_page ); -- 2.47.2