// ----------------------------------------------------------------------------
// OS
-#if defined(__HPUX__) || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi ) || defined(__unix__)
+#if defined(__HPUX__) || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi ) || \
+ defined(__unix__) || defined(sun) || defined(__SUN__)
#ifndef __UNIX__
#define __UNIX__
#endif // Unix
typedef unsigned int bool;
#endif
-#elif defined(__SUNCC__)
+#elif defined(__SUNCC__) || defined(__SUNPRO_CC)
#ifdef __SUNPRO_CC
// starting from version 5.0 Sun CC understands 'bool'
#if __SUNPRO_CC <= 0x0420
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
int nStrings = 0,
+#if defined(__SUNCC__)
+ const wxString choices[] = NULL,
+#else
const wxString choices[] = (const wxString *) NULL,
+#endif
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxListBoxNameStr);
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
+ virtual void OnInternalIdle();
bool m_modalShowing;
wxString m_title;
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
- virtual void SetClientSize( int const width, int const height );
+ virtual void SetClientSize( int width, int height );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );
GtkAdjustment *m_adjust;
float m_oldPos;
- DECLARE_EVENT_TABLE();
+ DECLARE_EVENT_TABLE()
};
//-----------------------------------------------------------------------------
virtual void GetSize( int *width, int *height ) const;
wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); }
- virtual void SetClientSize( int const width, int const height );
+ virtual void SetClientSize( int width, int height );
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
int nStrings = 0,
+#if defined(__SUNCC__)
+ const wxString choices[] = NULL,
+#else
const wxString choices[] = (const wxString *) NULL,
+#endif
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxListBoxNameStr);
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
+ virtual void OnInternalIdle();
bool m_modalShowing;
wxString m_title;
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
- virtual void SetClientSize( int const width, int const height );
+ virtual void SetClientSize( int width, int height );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );
GtkAdjustment *m_adjust;
float m_oldPos;
- DECLARE_EVENT_TABLE();
+ DECLARE_EVENT_TABLE()
};
//-----------------------------------------------------------------------------
virtual void GetSize( int *width, int *height ) const;
wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); }
- virtual void SetClientSize( int const width, int const height );
+ virtual void SetClientSize( int width, int height );
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
#include "unistd.h"
// add more here if you run into problems
-#if defined(__SUN__) && !defined(__SunOs_5_6) && !defined(__SunOs_5_7)
+#if defined(__SUN__) && !defined(__SunOs_5_6) && !defined(__SunOs_5_7) && !defined(__SUNPRO_CC)
extern "C"
{
void usleep(unsigned long usec);
printf( ".\n" );
*/
- win->GtkOnSize( alloc->x, alloc->y, alloc->width, alloc->height );
+ if ((win->m_width != alloc->width) || (win->m_height != alloc->height))
+ {
+ win->m_sizeSet = FALSE;
+ win->m_width = alloc->width;
+ win->m_height = alloc->height;
+ }
}
//-----------------------------------------------------------------------------
wxDialog::wxDialog()
{
m_title = "";
+ m_sizeSet = FALSE;
m_modalShowing = FALSE;
}
long style, const wxString &name )
{
m_modalShowing = FALSE;
+ m_sizeSet = FALSE;
Create( parent, id, title, pos, size, style, name );
}
SetTitle( title );
- if ((m_x != -1) || (m_y != -1))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ if (m_parent) m_parent->AddChild( this );
- gtk_widget_set_usize( m_widget, m_width, m_height );
+ PostCreation();
+
+ gtk_widget_realize( m_widget );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_dialog_configure_callback), (gpointer)this );
- if (m_parent) m_parent->AddChild( this );
-
- PostCreation();
-
return TRUE;
}
return TRUE;
}
-void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
-{
- // due to a bug in gtk, x,y are always 0
- // m_x = x;
- // m_y = y;
-
- if ((m_height == height) && (m_width == width) &&
- (m_sizeSet)) return;
- if (!m_wxwindow) return;
-
- m_width = width;
- m_height = height;
-
- if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
- if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
- if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
- if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
-
- gtk_widget_set_usize( m_widget, m_width, m_height );
-
- m_sizeSet = TRUE;
-
- wxSizeEvent event( wxSize(m_width,m_height), GetId() );
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent( event );
-}
-
void wxDialog::OnSize( wxSizeEvent &WXUNUSED(event) )
{
wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
}
else
{
- // no child: go out !
+ /* no child: go out ! */
if (!GetChildren().First()) return;
- // do we have exactly one child?
+ /* do we have exactly one child? */
wxWindow *child = (wxWindow *) NULL;
for(wxNode *node = GetChildren().First(); node; node = node->Next())
{
wxWindow *win = (wxWindow *)node->Data();
if (!wxIS_KIND_OF(win,wxFrame) && !wxIS_KIND_OF(win,wxDialog))
{
- // it's the second one: do nothing
+ /* it's the second one: do nothing */
if (child) return;
child = win;
}
}
- // yes: set it's size to fill all the frame
+ /* yes: set it's size to fill all the frame */
int client_x, client_y;
GetClientSize( &client_x, &client_y );
child->SetSize( 1, 1, client_x-2, client_y);
void wxDialog::SetSize( int x, int y, int width, int height, int sizeFlags )
{
- wxASSERT_MSG( (m_widget != NULL), "invalid window" );
-
- // Don't do anything for children of wxMDIChildFrame
- if (!m_wxwindow) return;
+ wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
+ wxASSERT_MSG( (m_wxwindow != NULL), "invalid dialog" );
- if (m_resizing) return; // I don't like recursions
+ if (m_resizing) return; /* I don't like recursions */
m_resizing = TRUE;
int old_x = m_x;
if ((m_x != -1) || (m_y != -1))
{
if ((m_x != old_x) || (m_y != old_y))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ {
+ /* m_sizeSet = FALSE; */
+ gtk_widget_set_uposition( m_widget, m_x, m_y );
+ }
}
if ((m_width != old_width) || (m_height != old_height))
{
- gtk_widget_set_usize( m_widget, m_width, m_height );
+ m_sizeSet = FALSE;
}
- m_sizeSet = TRUE;
-
- wxSizeEvent event( wxSize(m_width,m_height), GetId() );
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent( event );
-
m_resizing = FALSE;
}
SetSize( -1, -1, width, height, wxSIZE_USE_EXISTING );
}
+void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
+{
+ // due to a bug in gtk, x,y are always 0
+ // m_x = x;
+ // m_y = y;
+
+ if ((m_height == height) && (m_width == width) && (m_sizeSet)) return;
+ if (!m_wxwindow) return;
+
+ m_width = width;
+ m_height = height;
+
+ if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
+ if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
+ if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
+
+ /* we actually set the size of a frame here and no-where else */
+ gtk_widget_set_usize( m_widget, m_width, m_height );
+
+ m_sizeSet = TRUE;
+
+ wxSizeEvent event( wxSize(m_width,m_height), GetId() );
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+}
+
void wxDialog::Centre( int direction )
{
wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
Move( x, y );
}
+void wxDialog::OnInternalIdle()
+{
+ if (!m_sizeSet)
+ GtkOnSize( m_x, m_y, m_width, m_height );
+}
+
bool wxDialog::Show( bool show )
{
if (!show && IsModal())
{
- EndModal( wxID_CANCEL );
+ EndModal( wxID_CANCEL );
}
- wxWindow::Show( show );
+ if (show && !m_sizeSet)
+ {
+ /* by calling GtkOnSize here, we don't have to call
+ either after showing the frame, which would entail
+ much ugly flicker nor from within the size_allocate
+ handler, because GTK 1.1.X forbids that. */
+ GtkOnSize( m_x, m_y, m_width, m_height );
+ }
+
+ wxWindow::Show( show );
+
if (show) InitDialog();
return TRUE;
m_widget = gtk_window_new( win_type );
-#ifdef __WXDEBUG__
- debug_focus_in( m_widget, "wxFrame::m_widget", name );
-#endif
-
- if ((size.x != -1) && (size.y != -1))
- gtk_widget_set_usize( m_widget, m_width, m_height );
- if ((pos.x != -1) && (pos.y != -1))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
-
gtk_window_set_title( GTK_WINDOW(m_widget), title );
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
gtk_widget_show( m_wxwindow );
GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
-#ifdef __WXDEBUG__
- debug_focus_in( m_wxwindow, "wxFrame::m_wxwindow", name );
-#endif
-
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
+ if (m_parent) m_parent->AddChild( this );
+
+ PostCreation();
+
+ gtk_widget_realize( m_widget );
+
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_frame_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_frame_configure_callback), (gpointer)this );
- if (m_parent) m_parent->AddChild( this );
-
- PostCreation();
-
return TRUE;
}
void wxFrame::SetSize( int x, int y, int width, int height, int sizeFlags )
{
- wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+ wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
- /* Don't do anything for children of wxMDIChildFrame */
+ /* don't do anything for children of wxMDIChildFrame */
if (!m_wxwindow) return;
if (m_resizing) return; // I don't like recursions
if ((m_x != -1) || (m_y != -1))
{
if ((m_x != old_x) || (m_y != old_y))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ {
+ /* m_sizeSet = FALSE; */
+ gtk_widget_set_uposition( m_widget, m_x, m_y );
+ }
}
if ((m_width != old_width) || (m_height != old_height))
{
- m_sizeSet = FALSE;
+ /* we set the size in GtkOnSize */
+ m_sizeSet = FALSE;
}
m_resizing = FALSE;
}
}
-void wxFrame::SetClientSize( int const width, int const height )
+void wxFrame::SetClientSize( int width, int height )
{
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
m_width = width;
m_height = height;
+ /* check if size is in legal range */
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
- gtk_widget_set_usize( m_widget, m_width, m_height );
- gdk_window_resize( m_widget->window, m_width, m_height );
-
- // this emulates the new wxMSW behaviour of placing all
- // frame-subwindows (menu, toolbar..) on one native window
- // OK, this hurts in the eye, but I don't want to call SetSize()
- // because I don't want to call any non-native functions here.
+ /* this emulates the new wxMSW behaviour of placing all
+ * frame-subwindows (menu, toolbar..) on one native window
+ * this hurts in the eye, but I don't want to call SetSize()
+ * because I don't want to call any non-native functions here. */
if (m_frameMenuBar)
{
gtk_widget_set_usize( m_frameStatusBar->m_widget, ww, hh );
}
+ /* we actually set the size of a frame here and no-where else */
+ gtk_widget_set_usize( m_widget, m_width, m_height );
+
m_sizeSet = TRUE;
/* send size event to frame */
-
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
event.SetEventObject( this );
GetEventHandler()->ProcessEvent( event );
/* send size event to status bar */
-
if (m_frameStatusBar)
{
wxSizeEvent event2( wxSize(m_frameStatusBar->m_width,m_frameStatusBar->m_height), m_frameStatusBar->GetId() );
}
else
{
- // no child: go out !
+ /* no child: go out ! */
if (!GetChildren().First()) return;
- // do we have exactly one child?
+ /* do we have exactly one child? */
wxWindow *child = (wxWindow *) NULL;
for(wxNode *node = GetChildren().First(); node; node = node->Next())
{
#endif
)
{
- // it's the second one: do nothing
+ /* it's the second one: do nothing */
if (child) return;
child = win;
}
}
- // yes: set it's size to fill all the frame
+ /* yes: set it's size to fill all the frame */
int client_x, client_y;
GetClientSize( &client_x, &client_y );
child->SetSize( 1, 1, client_x-2, client_y-2 );
void wxWindow::PostCreation()
{
+ wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+
if (m_wxwindow)
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
ConnectWidget( GetConnectWidget() );
- if (m_widget && m_parent) gtk_widget_realize( m_widget );
+ /* we force the creation of wxFrame and wxDialog in the respective code */
+ if (m_parent) gtk_widget_realize( m_widget );
if (m_wxwindow) gtk_widget_realize( m_wxwindow );
#include "unistd.h"
// add more here if you run into problems
-#if defined(__SUN__) && !defined(__SunOs_5_6) && !defined(__SunOs_5_7)
+#if defined(__SUN__) && !defined(__SunOs_5_6) && !defined(__SunOs_5_7) && !defined(__SUNPRO_CC)
extern "C"
{
void usleep(unsigned long usec);
printf( ".\n" );
*/
- win->GtkOnSize( alloc->x, alloc->y, alloc->width, alloc->height );
+ if ((win->m_width != alloc->width) || (win->m_height != alloc->height))
+ {
+ win->m_sizeSet = FALSE;
+ win->m_width = alloc->width;
+ win->m_height = alloc->height;
+ }
}
//-----------------------------------------------------------------------------
wxDialog::wxDialog()
{
m_title = "";
+ m_sizeSet = FALSE;
m_modalShowing = FALSE;
}
long style, const wxString &name )
{
m_modalShowing = FALSE;
+ m_sizeSet = FALSE;
Create( parent, id, title, pos, size, style, name );
}
SetTitle( title );
- if ((m_x != -1) || (m_y != -1))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ if (m_parent) m_parent->AddChild( this );
- gtk_widget_set_usize( m_widget, m_width, m_height );
+ PostCreation();
+
+ gtk_widget_realize( m_widget );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_dialog_configure_callback), (gpointer)this );
- if (m_parent) m_parent->AddChild( this );
-
- PostCreation();
-
return TRUE;
}
return TRUE;
}
-void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
-{
- // due to a bug in gtk, x,y are always 0
- // m_x = x;
- // m_y = y;
-
- if ((m_height == height) && (m_width == width) &&
- (m_sizeSet)) return;
- if (!m_wxwindow) return;
-
- m_width = width;
- m_height = height;
-
- if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
- if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
- if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
- if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
-
- gtk_widget_set_usize( m_widget, m_width, m_height );
-
- m_sizeSet = TRUE;
-
- wxSizeEvent event( wxSize(m_width,m_height), GetId() );
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent( event );
-}
-
void wxDialog::OnSize( wxSizeEvent &WXUNUSED(event) )
{
wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
}
else
{
- // no child: go out !
+ /* no child: go out ! */
if (!GetChildren().First()) return;
- // do we have exactly one child?
+ /* do we have exactly one child? */
wxWindow *child = (wxWindow *) NULL;
for(wxNode *node = GetChildren().First(); node; node = node->Next())
{
wxWindow *win = (wxWindow *)node->Data();
if (!wxIS_KIND_OF(win,wxFrame) && !wxIS_KIND_OF(win,wxDialog))
{
- // it's the second one: do nothing
+ /* it's the second one: do nothing */
if (child) return;
child = win;
}
}
- // yes: set it's size to fill all the frame
+ /* yes: set it's size to fill all the frame */
int client_x, client_y;
GetClientSize( &client_x, &client_y );
child->SetSize( 1, 1, client_x-2, client_y);
void wxDialog::SetSize( int x, int y, int width, int height, int sizeFlags )
{
- wxASSERT_MSG( (m_widget != NULL), "invalid window" );
-
- // Don't do anything for children of wxMDIChildFrame
- if (!m_wxwindow) return;
+ wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
+ wxASSERT_MSG( (m_wxwindow != NULL), "invalid dialog" );
- if (m_resizing) return; // I don't like recursions
+ if (m_resizing) return; /* I don't like recursions */
m_resizing = TRUE;
int old_x = m_x;
if ((m_x != -1) || (m_y != -1))
{
if ((m_x != old_x) || (m_y != old_y))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ {
+ /* m_sizeSet = FALSE; */
+ gtk_widget_set_uposition( m_widget, m_x, m_y );
+ }
}
if ((m_width != old_width) || (m_height != old_height))
{
- gtk_widget_set_usize( m_widget, m_width, m_height );
+ m_sizeSet = FALSE;
}
- m_sizeSet = TRUE;
-
- wxSizeEvent event( wxSize(m_width,m_height), GetId() );
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent( event );
-
m_resizing = FALSE;
}
SetSize( -1, -1, width, height, wxSIZE_USE_EXISTING );
}
+void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
+{
+ // due to a bug in gtk, x,y are always 0
+ // m_x = x;
+ // m_y = y;
+
+ if ((m_height == height) && (m_width == width) && (m_sizeSet)) return;
+ if (!m_wxwindow) return;
+
+ m_width = width;
+ m_height = height;
+
+ if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
+ if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
+ if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
+
+ /* we actually set the size of a frame here and no-where else */
+ gtk_widget_set_usize( m_widget, m_width, m_height );
+
+ m_sizeSet = TRUE;
+
+ wxSizeEvent event( wxSize(m_width,m_height), GetId() );
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+}
+
void wxDialog::Centre( int direction )
{
wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
Move( x, y );
}
+void wxDialog::OnInternalIdle()
+{
+ if (!m_sizeSet)
+ GtkOnSize( m_x, m_y, m_width, m_height );
+}
+
bool wxDialog::Show( bool show )
{
if (!show && IsModal())
{
- EndModal( wxID_CANCEL );
+ EndModal( wxID_CANCEL );
}
- wxWindow::Show( show );
+ if (show && !m_sizeSet)
+ {
+ /* by calling GtkOnSize here, we don't have to call
+ either after showing the frame, which would entail
+ much ugly flicker nor from within the size_allocate
+ handler, because GTK 1.1.X forbids that. */
+ GtkOnSize( m_x, m_y, m_width, m_height );
+ }
+
+ wxWindow::Show( show );
+
if (show) InitDialog();
return TRUE;
m_widget = gtk_window_new( win_type );
-#ifdef __WXDEBUG__
- debug_focus_in( m_widget, "wxFrame::m_widget", name );
-#endif
-
- if ((size.x != -1) && (size.y != -1))
- gtk_widget_set_usize( m_widget, m_width, m_height );
- if ((pos.x != -1) && (pos.y != -1))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
-
gtk_window_set_title( GTK_WINDOW(m_widget), title );
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
gtk_widget_show( m_wxwindow );
GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
-#ifdef __WXDEBUG__
- debug_focus_in( m_wxwindow, "wxFrame::m_wxwindow", name );
-#endif
-
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
+ if (m_parent) m_parent->AddChild( this );
+
+ PostCreation();
+
+ gtk_widget_realize( m_widget );
+
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_frame_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_frame_configure_callback), (gpointer)this );
- if (m_parent) m_parent->AddChild( this );
-
- PostCreation();
-
return TRUE;
}
void wxFrame::SetSize( int x, int y, int width, int height, int sizeFlags )
{
- wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+ wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
- /* Don't do anything for children of wxMDIChildFrame */
+ /* don't do anything for children of wxMDIChildFrame */
if (!m_wxwindow) return;
if (m_resizing) return; // I don't like recursions
if ((m_x != -1) || (m_y != -1))
{
if ((m_x != old_x) || (m_y != old_y))
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ {
+ /* m_sizeSet = FALSE; */
+ gtk_widget_set_uposition( m_widget, m_x, m_y );
+ }
}
if ((m_width != old_width) || (m_height != old_height))
{
- m_sizeSet = FALSE;
+ /* we set the size in GtkOnSize */
+ m_sizeSet = FALSE;
}
m_resizing = FALSE;
}
}
-void wxFrame::SetClientSize( int const width, int const height )
+void wxFrame::SetClientSize( int width, int height )
{
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
m_width = width;
m_height = height;
+ /* check if size is in legal range */
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
- gtk_widget_set_usize( m_widget, m_width, m_height );
- gdk_window_resize( m_widget->window, m_width, m_height );
-
- // this emulates the new wxMSW behaviour of placing all
- // frame-subwindows (menu, toolbar..) on one native window
- // OK, this hurts in the eye, but I don't want to call SetSize()
- // because I don't want to call any non-native functions here.
+ /* this emulates the new wxMSW behaviour of placing all
+ * frame-subwindows (menu, toolbar..) on one native window
+ * this hurts in the eye, but I don't want to call SetSize()
+ * because I don't want to call any non-native functions here. */
if (m_frameMenuBar)
{
gtk_widget_set_usize( m_frameStatusBar->m_widget, ww, hh );
}
+ /* we actually set the size of a frame here and no-where else */
+ gtk_widget_set_usize( m_widget, m_width, m_height );
+
m_sizeSet = TRUE;
/* send size event to frame */
-
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
event.SetEventObject( this );
GetEventHandler()->ProcessEvent( event );
/* send size event to status bar */
-
if (m_frameStatusBar)
{
wxSizeEvent event2( wxSize(m_frameStatusBar->m_width,m_frameStatusBar->m_height), m_frameStatusBar->GetId() );
}
else
{
- // no child: go out !
+ /* no child: go out ! */
if (!GetChildren().First()) return;
- // do we have exactly one child?
+ /* do we have exactly one child? */
wxWindow *child = (wxWindow *) NULL;
for(wxNode *node = GetChildren().First(); node; node = node->Next())
{
#endif
)
{
- // it's the second one: do nothing
+ /* it's the second one: do nothing */
if (child) return;
child = win;
}
}
- // yes: set it's size to fill all the frame
+ /* yes: set it's size to fill all the frame */
int client_x, client_y;
GetClientSize( &client_x, &client_y );
child->SetSize( 1, 1, client_x-2, client_y-2 );
void wxWindow::PostCreation()
{
+ wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+
if (m_wxwindow)
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
ConnectWidget( GetConnectWidget() );
- if (m_widget && m_parent) gtk_widget_realize( m_widget );
+ /* we force the creation of wxFrame and wxDialog in the respective code */
+ if (m_parent) gtk_widget_realize( m_widget );
if (m_wxwindow) gtk_widget_realize( m_wxwindow );