int m_miniEdge,
m_miniTitle;
GtkWidget *m_mainWidget;
- bool m_insertInClientArea; /* not from within OnCreateXXX */
bool m_fsIsShowing; /* full screen */
long m_fsSaveGdkFunc, m_fsSaveGdkDecor;
WX_DEFINE_EXPORTED_ARRAY_PTR(GdkWindow *, wxArrayGdkWindows);
-//-----------------------------------------------------------------------------
-// callback definition for inserting a window (internal)
-//-----------------------------------------------------------------------------
-
-class WXDLLIMPEXP_CORE wxWindowGTK;
-typedef void (*wxInsertChildFunction)( wxWindowGTK*, wxWindowGTK* );
-
//-----------------------------------------------------------------------------
// wxWindowGTK
//-----------------------------------------------------------------------------
virtual void Lower();
virtual bool Show( bool show = true );
- virtual void DoEnable( bool enable );
virtual void SetWindowStyleFlag( long style );
bool m_showOnIdle:1; // postpone showing the window until idle
+protected:
// C++ has no virtual methods in the constrcutor of any class but we need
// different methods of inserting a child window into a wxFrame,
// wxMDIFrame, wxNotebook etc. this is the callback that will get used.
- wxInsertChildFunction m_insertCallback;
+ typedef void (*InsertChildFunction)(wxWindowGTK*, wxWindowGTK*);
+ InsertChildFunction m_insertCallback;
-protected:
// implement the base class pure virtuals
virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const;
int sizeFlags = wxSIZE_AUTO);
virtual void DoSetClientSize(int width, int height);
virtual void DoMoveWindow(int x, int y, int width, int height);
+ virtual void DoEnable(bool enable);
#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
* virtual function here as wxWidgets requires different ways to insert
* a child in container classes. */
-static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child )
+static void wxInsertChildInFrame(wxWindow* parent, wxWindow* child)
{
wxASSERT( GTK_IS_WIDGET(child->m_widget) );
- if (!parent->m_insertInClientArea)
- {
- // These are outside the client area
- wxFrame* frame = (wxFrame*) parent;
- gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
+ // These are outside the client area
+ wxFrame* frame = wx_static_cast(wxFrame*, parent);
+ gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget),
+ child->m_widget,
+ child->m_x,
+ child->m_y,
+ child->m_width,
+ child->m_height );
#if wxUSE_TOOLBAR_NATIVE
- // We connect to these events for recalculating the client area
- // space when the toolbar is floating
- if (wxIS_KIND_OF(child,wxToolBar))
+ // We connect to these events for recalculating the client area
+ // space when the toolbar is floating
+ if (wxIS_KIND_OF(child,wxToolBar))
+ {
+ if (child->HasFlag(wxTB_DOCKABLE))
{
- wxToolBar *toolBar = (wxToolBar*) child;
- if (toolBar->GetWindowStyle() & wxTB_DOCKABLE)
- {
- g_signal_connect (toolBar->m_widget, "child_attached",
- G_CALLBACK (gtk_toolbar_attached_callback),
- parent);
- g_signal_connect (toolBar->m_widget, "child_detached",
- G_CALLBACK (gtk_toolbar_detached_callback),
- parent);
- }
+ g_signal_connect (child->m_widget, "child_attached",
+ G_CALLBACK (gtk_toolbar_attached_callback),
+ parent);
+ g_signal_connect (child->m_widget, "child_detached",
+ G_CALLBACK (gtk_toolbar_detached_callback),
+ parent);
}
-#endif // wxUSE_TOOLBAR
- }
- else
- {
- // These are inside the client area
- gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
}
+#endif // wxUSE_TOOLBAR
}
// ----------------------------------------------------------------------------
long style,
const wxString &name )
{
- bool rt = wxTopLevelWindow::Create(parent, id, title, pos, sizeOrig,
- style, name);
- m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame;
-
- return rt;
+ return wxFrameBase::Create(parent, id, title, pos, sizeOrig, style, name);
}
wxFrame::~wxFrame()
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
- m_insertInClientArea = false;
-
+ InsertChildFunction save = m_insertCallback;
+ m_insertCallback = wxInsertChildInFrame;
m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name );
-
- m_insertInClientArea = true;
+ m_insertCallback = save;
GtkUpdateSize();
// InsertChild callback for wxMDIClientWindow
//-----------------------------------------------------------------------------
-static void wxInsertChildInMDI( wxMDIClientWindow* parent, wxMDIChildFrame* child )
+static void wxInsertChildInMDI(wxWindow* parent, wxWindow* child)
{
- wxString s = child->GetTitle();
+ wxMDIChildFrame* child_frame = wx_static_cast(wxMDIChildFrame*, child);
+ wxString s = child_frame->GetTitle();
if (s.IsNull()) s = _("MDI child");
GtkWidget *label_widget = gtk_label_new( s.mbc_str() );
gtk_notebook_append_page( notebook, child->m_widget, label_widget );
- child->m_page = (GtkNotebookPage*) (g_list_last(notebook->children)->data);
+ child_frame->m_page = (GtkNotebookPage*) (g_list_last(notebook->children)->data);
- wxMDIParentFrame *parent_frame = (wxMDIParentFrame*) parent->GetParent();
+ wxMDIParentFrame *parent_frame = wx_static_cast(wxMDIParentFrame*, parent->GetParent());
parent_frame->m_justInserted = true;
}
bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style )
{
- m_insertCallback = (wxInsertChildFunction)wxInsertChildInMDI;
+ m_insertCallback = wxInsertChildInMDI;
if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) ||
!CreateBase( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") ))
// 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
const wxPoint& pos, const wxSize& size,
long style, const wxString& name )
{
- m_insertCallback = (wxInsertChildFunction)wxInsertChildInNotebook;
+ m_insertCallback = wxInsertChildInNotebook;
if ( (style & wxBK_ALIGN_MASK) == wxBK_DEFAULT )
style |= wxBK_TOP;
* virtual function here as wxWidgets requires different ways to insert
* a child in container classes. */
-static void wxInsertChildInDialog( wxPopupWindow* parent, wxWindow* child )
+static void wxInsertChildInPopupWin(wxWindow* parent, wxWindow* child)
{
gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
child->m_widget,
// All dialogs should really have this style
m_windowStyle |= wxTAB_TRAVERSAL;
- m_insertCallback = (wxInsertChildFunction) wxInsertChildInDialog;
+ m_insertCallback = wxInsertChildInPopupWin;
m_widget = gtk_window_new( GTK_WINDOW_POPUP );
// InsertChild callback for wxToolBar
//-----------------------------------------------------------------------------
-static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent),
+static void wxInsertChildInToolBar( wxWindow* WXUNUSED(parent),
wxWindow* WXUNUSED(child) )
{
// we don't do anything here
long style,
const wxString& name )
{
- m_insertCallback = (wxInsertChildFunction)wxInsertChildInToolBar;
+ m_insertCallback = wxInsertChildInToolBar;
if ( !PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
}
}
-// ----------------------------------------------------------------------------
-// wxTopLevelWindowGTK itself
-// ----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// InsertChild for wxTopLevelWindowGTK
-//-----------------------------------------------------------------------------
-
-/* Callback for wxTopLevelWindowGTK. This very strange beast has to be used because
- * C++ has no virtual methods in a constructor. We have to emulate a
- * virtual function here as wxWidgets requires different ways to insert
- * a child in container classes. */
-
-static void wxInsertChildInTopLevelWindow( wxTopLevelWindowGTK* parent, wxWindow* child )
-{
- wxASSERT( GTK_IS_WIDGET(child->m_widget) );
-
- if (!parent->m_insertInClientArea)
- {
- // these are outside the client area
- wxTopLevelWindowGTK* frame = (wxTopLevelWindowGTK*) parent;
- gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
- }
- else
- {
- // these are inside the client area
- gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
- }
-}
-
// ----------------------------------------------------------------------------
// wxTopLevelWindowGTK creation
// ----------------------------------------------------------------------------
m_miniEdge = 0;
m_miniTitle = 0;
m_mainWidget = (GtkWidget*) NULL;
- m_insertInClientArea = true;
m_isIconized = false;
m_fsIsShowing = false;
m_fsSaveFlag = 0;
m_title = title;
- m_insertCallback = (wxInsertChildFunction) wxInsertChildInTopLevelWindow;
-
// NB: m_widget may be !=NULL if it was created by derived class' Create,
// e.g. in wxTaskBarIconAreaGTK
if (m_widget == NULL)
m_resizing = false;
- m_insertCallback = (wxInsertChildFunction) NULL;
+ m_insertCallback = wxInsertChildInWindow;
m_hasFocus = false;
return false;
}
- m_insertCallback = wxInsertChildInWindow;
-
-
if (!HasFlag(wxHSCROLL) && !HasFlag(wxVSCROLL))
{
m_wxwindow = gtk_pizza_new_no_scroll();
void wxWindowGTK::DoAddChild(wxWindowGTK *child)
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
-
wxASSERT_MSG( (child != NULL), wxT("invalid child window") );
- wxASSERT_MSG( (m_insertCallback != NULL), wxT("invalid child insertion function") );
-
/* add to list */
AddChild( child );