virtual void GetClientSize( int *width, int *height ) const;
virtual void SetClientSize( int const width, int const height );
- // set minimal/maxmimal size for the frame
- virtual void SetSizeHints(int minW, int minH,
- int maxW = -1, int maxH = -1,
- int incW = -1, int incH = -1 );
-
virtual wxStatusBar* CreateStatusBar(int number=1, long style = wxST_SIZEGRIP, wxWindowID id = 0,
const wxString& name = "statusBar");
virtual wxStatusBar *OnCreateStatusBar( int number, long style, wxWindowID id,
GtkToolbar *m_toolbar;
wxList m_tools;
-
- DECLARE_EVENT_TABLE()
};
#endif
virtual void Centre( int direction = wxHORIZONTAL );
inline void Center(int direction = wxHORIZONTAL) { Centre(direction); }
virtual void Fit();
- // set minimal/maxmimal size for the frame
- virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH), int WXUNUSED(maxW),
- int WXUNUSED(maxH), int WXUNUSED(incW), int WXUNUSED(incH) ) { }
+
+ virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 );
void OnSize( wxSizeEvent &event );
void OnIdle( wxIdleEvent& event );
wxList m_children;
int m_x,m_y;
int m_width,m_height;
+ int m_minWidth,m_minHeight;
+ int m_maxWidth,m_maxHeight;
int m_retCode;
wxEvtHandler *m_eventHandler;
wxValidator *m_windowValidator;
virtual void GetClientSize( int *width, int *height ) const;
virtual void SetClientSize( int const width, int const height );
- // set minimal/maxmimal size for the frame
- virtual void SetSizeHints(int minW, int minH,
- int maxW = -1, int maxH = -1,
- int incW = -1, int incH = -1 );
-
virtual wxStatusBar* CreateStatusBar(int number=1, long style = wxST_SIZEGRIP, wxWindowID id = 0,
const wxString& name = "statusBar");
virtual wxStatusBar *OnCreateStatusBar( int number, long style, wxWindowID id,
GtkToolbar *m_toolbar;
wxList m_tools;
-
- DECLARE_EVENT_TABLE()
};
#endif
virtual void Centre( int direction = wxHORIZONTAL );
inline void Center(int direction = wxHORIZONTAL) { Centre(direction); }
virtual void Fit();
- // set minimal/maxmimal size for the frame
- virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH), int WXUNUSED(maxW),
- int WXUNUSED(maxH), int WXUNUSED(incW), int WXUNUSED(incH) ) { }
+
+ virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 );
void OnSize( wxSizeEvent &event );
void OnIdle( wxIdleEvent& event );
wxList m_children;
int m_x,m_y;
int m_width,m_height;
+ int m_minWidth,m_minHeight;
+ int m_maxWidth,m_maxHeight;
int m_retCode;
wxEvtHandler *m_eventHandler;
wxValidator *m_windowValidator;
if (!wxTheApp)
{
- printf( _("wxWindows error: wxTheApp == NULL\n") );
+ printf( "wxWindows error: wxTheApp == NULL\n" );
return 0;
}
#include "wx/dcclient.h"
#include "wx/gtk/win_gtk.h"
+//-----------------------------------------------------------------------------
+// constants
+//-----------------------------------------------------------------------------
+
const int wxMENU_HEIGHT = 28;
const int wxSTATUS_HEIGHT = 25;
+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
extern wxList wxTopLevelWindows;
extern wxList wxPendingDelete;
//-----------------------------------------------------------------------------
-// wxFrame
-//-----------------------------------------------------------------------------
-
+// "size_allocate"
//-----------------------------------------------------------------------------
-// set size
-void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxFrame *win )
+static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxFrame *win )
{
if (!win->HasVMT()) return;
}
//-----------------------------------------------------------------------------
-// delete
+// "delete_event"
+//-----------------------------------------------------------------------------
-bool gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxFrame *win )
+static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxFrame *win )
{
/*
printf( "OnDelete from " );
}
//-----------------------------------------------------------------------------
-// configure
+// "configure_event"
+//-----------------------------------------------------------------------------
-gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win )
+static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win )
{
if (!win->HasVMT()) return FALSE;
return FALSE;
}
+//-----------------------------------------------------------------------------
+// wxFrame
//-----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxFrame, wxWindow)
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_minWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
- // VZ: why??
- //gtk_widget_set_usize( m_widget, width, height );
+ gtk_widget_set_usize( m_widget, width, height );
int main_x = 0;
int main_y = 0;
{
// wxFrame and wxDialog as children aren't placed into the parents
- if (IS_KIND_OF(child,wxMDIChildFrame)) printf( "wxFrame::AddChild error.\n" );
+ if (IS_KIND_OF(child,wxMDIChildFrame)) wxFAIL_MSG( "wxFrame::AddChild error.\n" );
if ( IS_KIND_OF(child,wxFrame) || IS_KIND_OF(child,wxDialog))
{
gtk_window_set_title( GTK_WINDOW(m_widget), title );
}
-void wxFrame::SetSizeHints(int minW, int minH,
- int WXUNUSED(maxW), int WXUNUSED(maxH),
- int WXUNUSED(incW), int WXUNUSED(incH) )
-{
- // gdk_window_set_hints alone doesn't really prevent the user from shrinking
- // the window to the size smaller than (minW, minH)
- gtk_widget_set_usize( GTK_WIDGET(m_widget), minW, minH );
-
- /*
- gdk_window_set_hints( m_widget->window, -1, -1,
- minW, minH, maxW, maxH,
- GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE );
- */
-}
-
void wxFrame::SetIcon( const wxIcon &icon )
{
m_icon = icon;
}
//-----------------------------------------------------------------------------
-// wxToolBar
+// "clicked" (internal from gtk_toolbar)
//-----------------------------------------------------------------------------
static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool )
tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState );
}
+//-----------------------------------------------------------------------------
+// "enter_notify_event"
+//-----------------------------------------------------------------------------
+
static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool )
{
return TRUE;
}
+//-----------------------------------------------------------------------------
+// wxToolBar
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxToolBar,wxControl)
-BEGIN_EVENT_TABLE(wxToolBar, wxControl)
-END_EVENT_TABLE()
-
wxToolBar::wxToolBar()
{
}
#include <wx/intl.h>
//-----------------------------------------------------------------------------
-// wxTextCtrl
+// "changed"
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
-
static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
win->SetModified();
win->GetEventHandler()->ProcessEvent( event );
}
+//-----------------------------------------------------------------------------
+// wxTextCtrl
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
+
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_CHAR(wxTextCtrl::OnChar)
END_EVENT_TABLE()
extern bool g_blockEventsOnDrag;
//-----------------------------------------------------------------------------
-// GTK callbacks for wxWindows event system
+// "expose_event" (of m_wxwindow, not of m_widget)
//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-// expose (of m_wxwindow, not of m_widget)
-
-void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
+static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
{
if (!win->HasVMT()) return;
if (g_blockEventsOnDrag) return;
-/*
- if (IS_KIND_OF(win,wxStatusBar))
- {
- printf( "OnExpose from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
-
- printf( "x: %d \n", gdk_event->area.x );
- printf( "y: %d \n", gdk_event->area.y );
- printf( "w: %d \n", gdk_event->area.width );
- printf( "h: %d \n", gdk_event->area.height );
-}
-*/
-
win->m_updateRegion.Union( gdk_event->area.x,
gdk_event->area.y,
- gdk_event->area.width,
- gdk_event->area.height );
+ gdk_event->area.width,
+ gdk_event->area.height );
if (gdk_event->count > 0) return;
wxPaintEvent event( win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
win->m_updateRegion.Clear();
}
//-----------------------------------------------------------------------------
-// draw (of m_wxwindow, not of m_widget)
+// "draw" (of m_wxwindow, not of m_widget)
+//-----------------------------------------------------------------------------
-void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
+static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
{
if (!win->HasVMT()) return;
if (g_blockEventsOnDrag) return;
-/*
- if (IS_KIND_OF(win,wxStatusBar))
- {
- printf( "OnDraw from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
-
- printf( "x: %d \n", rect->x );
- printf( "y: %d \n", rect->y );
- printf( "w: %d \n", rect->width );
- printf( "h: %d \n", rect->height );
-}
-*/
-
win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height );
wxPaintEvent event( win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
win->m_updateRegion.Clear();
}
//-----------------------------------------------------------------------------
-// size
-// I don't any longer intercept GTK's internal resize events, except
-// for frames and from within MDI and tabbed windows (client area
-// size determined internally by GTK, not wxWin).
-
-/*
-void gtk_window_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
-{
- if (!win->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
-
- return;
-
- if ((win->m_x == alloc->x) &&
- (win->m_y == alloc->y) &&
- (win->m_width == alloc->width) &&
- (win->m_height == alloc->height))
- {
- return;
- }
-
- printf( "OnResize from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( " .\n" );
-
- printf( " Old: X: %d Y: %d ", win->m_x, win->m_y );
- printf( " W: %d H: %d ", win->m_width, win->m_height );
- printf( " .\n" );
-
- printf( " New: X: %d Y: %d ", alloc->x, alloc->y );
- printf( " W: %d H: %d ", alloc->width, alloc->height );
- printf( " .\n" );
-
- wxSizeEvent event( wxSize( alloc->width, alloc->height), win->GetId() );
- event.SetEventObject( win );
- win->ProcessEvent( event );
-}
-*/
-
+// "key_press_event"
//-----------------------------------------------------------------------------
-// key_press
-gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
+static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
{
if (!win->HasVMT()) return FALSE;
if (g_blockEventsOnDrag) return FALSE;
long key_code = 0;
switch (gdk_event->keyval)
{
- case GDK_BackSpace: key_code = WXK_BACK; break;
- case GDK_Tab: key_code = WXK_TAB; break;
- case GDK_Linefeed: key_code = WXK_RETURN; break;
- case GDK_Clear: key_code = WXK_CLEAR; break;
- case GDK_Return: key_code = WXK_RETURN; break;
- case GDK_Pause: key_code = WXK_PAUSE; break;
- case GDK_Scroll_Lock: key_code = WXK_SCROLL; break;
- case GDK_Escape: key_code = WXK_ESCAPE; break;
- case GDK_Delete: key_code = WXK_DELETE; break;
- case GDK_Home: key_code = WXK_HOME; break;
- case GDK_Left: key_code = WXK_LEFT; break;
- case GDK_Up: key_code = WXK_UP; break;
- case GDK_Right: key_code = WXK_RIGHT; break;
- case GDK_Down: key_code = WXK_DOWN; break;
- case GDK_Prior: key_code = WXK_PRIOR; break;
-// case GDK_Page_Up: key_code = WXK_PAGEUP; break;
- case GDK_Next: key_code = WXK_NEXT; break;
-// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break;
- case GDK_End: key_code = WXK_END; break;
- case GDK_Begin: key_code = WXK_HOME; break;
- case GDK_Select: key_code = WXK_SELECT; break;
- case GDK_Print: key_code = WXK_PRINT; break;
- case GDK_Execute: key_code = WXK_EXECUTE; break;
- case GDK_Insert: key_code = WXK_INSERT; break;
- case GDK_Num_Lock: key_code = WXK_NUMLOCK; break;
- case GDK_KP_Tab: key_code = WXK_TAB; break;
- case GDK_KP_Enter: key_code = WXK_RETURN; break;
- case GDK_KP_Home: key_code = WXK_HOME; break;
- case GDK_KP_Left: key_code = WXK_LEFT; break;
- case GDK_KP_Up: key_code = WXK_UP; break;
- case GDK_KP_Right: key_code = WXK_RIGHT; break;
- case GDK_KP_Down: key_code = WXK_DOWN; break;
- case GDK_KP_Prior: key_code = WXK_PRIOR; break;
-// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break;
- case GDK_KP_Next: key_code = WXK_NEXT; break;
-// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break;
- case GDK_KP_End: key_code = WXK_END; break;
- case GDK_KP_Begin: key_code = WXK_HOME; break;
- case GDK_KP_Insert: key_code = WXK_INSERT; break;
- case GDK_KP_Delete: key_code = WXK_DELETE; break;
- case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break;
- case GDK_KP_Add: key_code = WXK_ADD; break;
- case GDK_KP_Separator: key_code = WXK_SEPARATOR; break;
- case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break;
- case GDK_KP_Decimal: key_code = WXK_DECIMAL; break;
- case GDK_KP_Divide: key_code = WXK_DIVIDE; break;
- case GDK_KP_0: key_code = WXK_NUMPAD0; break;
- case GDK_KP_1: key_code = WXK_NUMPAD1; break;
- case GDK_KP_2: key_code = WXK_NUMPAD2; break;
- case GDK_KP_3: key_code = WXK_NUMPAD3; break;
- case GDK_KP_4: key_code = WXK_NUMPAD4; break;
- case GDK_KP_5: key_code = WXK_NUMPAD5; break;
- case GDK_KP_6: key_code = WXK_NUMPAD6; break;
- case GDK_KP_7: key_code = WXK_NUMPAD7; break;
- case GDK_KP_8: key_code = WXK_NUMPAD7; break;
- case GDK_KP_9: key_code = WXK_NUMPAD9; break;
- case GDK_F1: key_code = WXK_F1; break;
- case GDK_F2: key_code = WXK_F2; break;
- case GDK_F3: key_code = WXK_F3; break;
- case GDK_F4: key_code = WXK_F4; break;
- case GDK_F5: key_code = WXK_F5; break;
- case GDK_F6: key_code = WXK_F6; break;
- case GDK_F7: key_code = WXK_F7; break;
- case GDK_F8: key_code = WXK_F8; break;
- case GDK_F9: key_code = WXK_F9; break;
- case GDK_F10: key_code = WXK_F10; break;
- case GDK_F11: key_code = WXK_F11; break;
- case GDK_F12: key_code = WXK_F12; break;
+ case GDK_BackSpace: key_code = WXK_BACK; break;
+ case GDK_Tab: key_code = WXK_TAB; break;
+ case GDK_Linefeed: key_code = WXK_RETURN; break;
+ case GDK_Clear: key_code = WXK_CLEAR; break;
+ case GDK_Return: key_code = WXK_RETURN; break;
+ case GDK_Pause: key_code = WXK_PAUSE; break;
+ case GDK_Scroll_Lock: key_code = WXK_SCROLL; break;
+ case GDK_Escape: key_code = WXK_ESCAPE; break;
+ case GDK_Delete: key_code = WXK_DELETE; break;
+ case GDK_Home: key_code = WXK_HOME; break;
+ case GDK_Left: key_code = WXK_LEFT; break;
+ case GDK_Up: key_code = WXK_UP; break;
+ case GDK_Right: key_code = WXK_RIGHT; break;
+ case GDK_Down: key_code = WXK_DOWN; break;
+ case GDK_Prior: key_code = WXK_PRIOR; break;
+// case GDK_Page_Up: key_code = WXK_PAGEUP; break;
+ case GDK_Next: key_code = WXK_NEXT; break;
+// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break;
+ case GDK_End: key_code = WXK_END; break;
+ case GDK_Begin: key_code = WXK_HOME; break;
+ case GDK_Select: key_code = WXK_SELECT; break;
+ case GDK_Print: key_code = WXK_PRINT; break;
+ case GDK_Execute: key_code = WXK_EXECUTE; break;
+ case GDK_Insert: key_code = WXK_INSERT; break;
+ case GDK_Num_Lock: key_code = WXK_NUMLOCK; break;
+ case GDK_KP_Tab: key_code = WXK_TAB; break;
+ case GDK_KP_Enter: key_code = WXK_RETURN; break;
+ case GDK_KP_Home: key_code = WXK_HOME; break;
+ case GDK_KP_Left: key_code = WXK_LEFT; break;
+ case GDK_KP_Up: key_code = WXK_UP; break;
+ case GDK_KP_Right: key_code = WXK_RIGHT; break;
+ case GDK_KP_Down: key_code = WXK_DOWN; break;
+ case GDK_KP_Prior: key_code = WXK_PRIOR; break;
+// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break;
+ case GDK_KP_Next: key_code = WXK_NEXT; break;
+// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break;
+ case GDK_KP_End: key_code = WXK_END; break;
+ case GDK_KP_Begin: key_code = WXK_HOME; break;
+ case GDK_KP_Insert: key_code = WXK_INSERT; break;
+ case GDK_KP_Delete: key_code = WXK_DELETE; break;
+ case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break;
+ case GDK_KP_Add: key_code = WXK_ADD; break;
+ case GDK_KP_Separator: key_code = WXK_SEPARATOR; break;
+ case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break;
+ case GDK_KP_Decimal: key_code = WXK_DECIMAL; break;
+ case GDK_KP_Divide: key_code = WXK_DIVIDE; break;
+ case GDK_KP_0: key_code = WXK_NUMPAD0; break;
+ case GDK_KP_1: key_code = WXK_NUMPAD1; break;
+ case GDK_KP_2: key_code = WXK_NUMPAD2; break;
+ case GDK_KP_3: key_code = WXK_NUMPAD3; break;
+ case GDK_KP_4: key_code = WXK_NUMPAD4; break;
+ case GDK_KP_5: key_code = WXK_NUMPAD5; break;
+ case GDK_KP_6: key_code = WXK_NUMPAD6; break;
+ case GDK_KP_7: key_code = WXK_NUMPAD7; break;
+ case GDK_KP_8: key_code = WXK_NUMPAD7; break;
+ case GDK_KP_9: key_code = WXK_NUMPAD9; break;
+ case GDK_F1: key_code = WXK_F1; break;
+ case GDK_F2: key_code = WXK_F2; break;
+ case GDK_F3: key_code = WXK_F3; break;
+ case GDK_F4: key_code = WXK_F4; break;
+ case GDK_F5: key_code = WXK_F5; break;
+ case GDK_F6: key_code = WXK_F6; break;
+ case GDK_F7: key_code = WXK_F7; break;
+ case GDK_F8: key_code = WXK_F8; break;
+ case GDK_F9: key_code = WXK_F9; break;
+ case GDK_F10: key_code = WXK_F10; break;
+ case GDK_F11: key_code = WXK_F11; break;
+ case GDK_F12: key_code = WXK_F12; break;
default:
{
if ((gdk_event->keyval >= 0x20) && (gdk_event->keyval <= 0xFF))
event.m_y = 0;
event.SetEventObject( win );
- bool ret = win->ProcessEvent( event );
+ bool ret = win->GetEventHandler()->ProcessEvent( event );
if (ret)
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
}
-/*
- if (ret) printf( "found.\n") ;
-*/
return ret;
}
//-----------------------------------------------------------------------------
-// button_press
+// "button_press_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_button_press_callback( GtkWidget *WXUNUSED(widget), GdkEventButton *gdk_event, wxWindow *win )
+static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (!win->HasVMT()) return TRUE;
-/*
printf( "OnButtonPress from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
printf( win->GetClassInfo()->GetClassName() );
printf( ".\n" );
-*/
wxEventType event_type = wxEVT_LEFT_DOWN;
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// button_release
+// "button_release"
+//-----------------------------------------------------------------------------
-gint gtk_window_button_release_callback( GtkWidget *WXUNUSED(widget), GdkEventButton *gdk_event, wxWindow *win )
+static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK);
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_release_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// motion_notify
+// "motion_notify_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_motion_notify_callback( GtkWidget *WXUNUSED(widget), GdkEventMotion *gdk_event, wxWindow *win )
+static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "motion_notify_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// focus_in
+// "focus_in_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_blockEventsOnDrag) return TRUE;
if (win->m_wxwindow)
wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "focus_in_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// focus out
+// "focus_out_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_blockEventsOnDrag) return TRUE;
if (win->m_wxwindow)
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "focus_out_event" );
+
return TRUE;
}
//-----------------------------------------------------------------------------
-// vertical scroll
+// "value_changed" from m_vAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
float diff = win->m_vAdjust->value - win->m_oldVerticalPos;
if (fabs(diff) < 0.2) return;
-/*
- int i = (int)(win->m_oldVerticalPos+0.5);
- printf( "Old value: %d.\n", i );
- i = (int)(win->m_vAdjust->value+0.5);
- printf( "Sending new value: %d.\n", i );
-*/
-
wxEventType command = wxEVT_NULL;
float line_step = win->m_vAdjust->step_increment;
wxScrollEvent event( command, win->GetId(), value, wxVERTICAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// horizontal scroll
+// "value_changed" from m_hAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
float diff = win->m_hAdjust->value - win->m_oldHorizontalPos;
if (fabs(diff) < 0.2) return;
-/*
- int i = (int)(win->m_oldHorizontalPos+0.5);
- printf( "Old value: %d.\n", i );
- i = (int)(win->m_hAdjust->value+0.5);
- printf( "Sending new value: %d.\n", i );
-*/
-
wxEventType command = wxEVT_NULL;
float line_step = win->m_hAdjust->step_increment;
wxScrollEvent event( command, win->GetId(), value, wxHORIZONTAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// vertical scroll change
+// "changed" from m_vAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
wxScrollEvent event( command, win->GetId(), value, wxVERTICAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// horizontal scroll change
+// "changed" from m_hAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
wxScrollEvent event( command, win->GetId(), value, wxHORIZONTAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// drop
+// "drop_data_available_event"
+//-----------------------------------------------------------------------------
-void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
+static void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
{
if (!win->HasVMT()) return;
}
//-----------------------------------------------------------------------------
-// destroy
-
-bool gtk_window_destroy_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
-{
- printf( "OnDestroy from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
- printf( "Goodbye.\n" );
- printf( " Robert Roebling.\n" );
-
- return FALSE;
-}
-
+// "enter_notify_event"
//-----------------------------------------------------------------------------
-// enter
-bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
+static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (widget->window != gdk_event->window) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
wxMouseEvent event( wxEVT_ENTER_WINDOW );
event.SetEventObject( win );
- return win->ProcessEvent( event );
+ return win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// leave
+// "leave_notify_event"
+//-----------------------------------------------------------------------------
-bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
+static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (widget->window != gdk_event->window) return TRUE;
if (!win->HasVMT()) return TRUE;
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
event.SetEventObject( win );
- return win->ProcessEvent( event );
+ return win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// wxWindow implementation
+// wxWindow
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxWindow,wxEvtHandler)
m_y = 0;
m_width = 0;
m_height = 0;
+ m_minWidth = -1;
+ m_minHeight = -1;
+ m_maxWidth = -1;
+ m_maxHeight = -1;
m_retCode = 0;
m_eventHandler = this;
m_windowValidator = (wxValidator *) NULL;
long style, const wxString &name )
{
if (m_needParent && (parent == NULL))
- wxFatalError( _("Need complete parent."), name );
+ wxFatalError( "Need complete parent.", name );
m_widget = (GtkWidget *) NULL;
m_hasVMT = FALSE;
if (m_width == -1) m_width = 20;
m_height = size.y;
if (m_height == -1) m_height = 20;
+ m_minWidth = -1;
+ m_minHeight = -1;
+ m_maxWidth = -1;
+ m_maxHeight = -1;
m_retCode = 0;
m_eventHandler = this;
m_windowId = id;
GtkWidget *connect_widget = GetConnectWidget();
- gtk_object_set_data (GTK_OBJECT (connect_widget), "MyWxWindow", (gpointer)this );
-
if (m_wxwindow)
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
}
-/*
- gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
- GTK_SIGNAL_FUNC(gtk_window_size_callback), (gpointer)this );
-*/
-
gtk_signal_connect( GTK_OBJECT(connect_widget), "key_press_event",
GTK_SIGNAL_FUNC(gtk_window_key_press_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this );
}
-/*
- // Does destroy ever get called ?
-
- gtk_signal_connect( GTK_OBJECT(m_widget), "destroy_event",
- GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
-
- if (m_wxwindow)
- {
- gtk_signal_connect( GTK_OBJECT(m_wxwindow), "destroy_event",
- GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
- }
-*/
-
if (m_widget && m_parent) gtk_widget_realize( m_widget );
if (m_wxwindow)
void wxWindow::ImplementSetSize(void)
{
+ 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_minWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
gtk_widget_set_usize( m_widget, m_width, m_height );
}
if (!m_parent)
{
- wxFAIL_MSG( _("wxWindow::SetSize error.\n") );
+ wxFAIL_MSG( "wxWindow::SetSize error.\n" );
return;
}
GtkWidget *vscrollbar = scroll_window->vscrollbar;
if ((m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSUNKEN_BORDER)
- )
+ (m_windowStyle & wxSUNKEN_BORDER))
{
dw += 2 * viewport_class->xthickness;
dh += 2 * viewport_class->ythickness;
GtkWidget *vscrollbar = scroll_window->vscrollbar;
if ((m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSUNKEN_BORDER)
- )
+ (m_windowStyle & wxSUNKEN_BORDER))
{
dw += 2 * viewport_class->xthickness;
dh += 2 * viewport_class->ythickness;
void wxWindow::ClientToScreen( int *x, int *y )
{
- // Does this look simple ?
-
GdkWindow *source = (GdkWindow *) NULL;
if (m_wxwindow)
source = m_wxwindow->window;
SetClientSize(maxX + 5, maxY + 10);
}
+void wxWindow::SetSizeHints( int minW, int minH, int maxW, int maxH, int WXUNUSED(incW), int WXUNUSED(incH) )
+{
+ m_minWidth = minW;
+ m_minHeight = minH;
+ m_maxWidth = maxW;
+ m_maxHeight = maxH;
+}
+
void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) )
{
//if (GetAutoLayout()) Layout();
if (!wxTheApp)
{
- printf( _("wxWindows error: wxTheApp == NULL\n") );
+ printf( "wxWindows error: wxTheApp == NULL\n" );
return 0;
}
#include "wx/dcclient.h"
#include "wx/gtk/win_gtk.h"
+//-----------------------------------------------------------------------------
+// constants
+//-----------------------------------------------------------------------------
+
const int wxMENU_HEIGHT = 28;
const int wxSTATUS_HEIGHT = 25;
+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
extern wxList wxTopLevelWindows;
extern wxList wxPendingDelete;
//-----------------------------------------------------------------------------
-// wxFrame
-//-----------------------------------------------------------------------------
-
+// "size_allocate"
//-----------------------------------------------------------------------------
-// set size
-void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxFrame *win )
+static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxFrame *win )
{
if (!win->HasVMT()) return;
}
//-----------------------------------------------------------------------------
-// delete
+// "delete_event"
+//-----------------------------------------------------------------------------
-bool gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxFrame *win )
+static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxFrame *win )
{
/*
printf( "OnDelete from " );
}
//-----------------------------------------------------------------------------
-// configure
+// "configure_event"
+//-----------------------------------------------------------------------------
-gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win )
+static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win )
{
if (!win->HasVMT()) return FALSE;
return FALSE;
}
+//-----------------------------------------------------------------------------
+// wxFrame
//-----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxFrame, wxWindow)
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_minWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
- // VZ: why??
- //gtk_widget_set_usize( m_widget, width, height );
+ gtk_widget_set_usize( m_widget, width, height );
int main_x = 0;
int main_y = 0;
{
// wxFrame and wxDialog as children aren't placed into the parents
- if (IS_KIND_OF(child,wxMDIChildFrame)) printf( "wxFrame::AddChild error.\n" );
+ if (IS_KIND_OF(child,wxMDIChildFrame)) wxFAIL_MSG( "wxFrame::AddChild error.\n" );
if ( IS_KIND_OF(child,wxFrame) || IS_KIND_OF(child,wxDialog))
{
gtk_window_set_title( GTK_WINDOW(m_widget), title );
}
-void wxFrame::SetSizeHints(int minW, int minH,
- int WXUNUSED(maxW), int WXUNUSED(maxH),
- int WXUNUSED(incW), int WXUNUSED(incH) )
-{
- // gdk_window_set_hints alone doesn't really prevent the user from shrinking
- // the window to the size smaller than (minW, minH)
- gtk_widget_set_usize( GTK_WIDGET(m_widget), minW, minH );
-
- /*
- gdk_window_set_hints( m_widget->window, -1, -1,
- minW, minH, maxW, maxH,
- GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE );
- */
-}
-
void wxFrame::SetIcon( const wxIcon &icon )
{
m_icon = icon;
}
//-----------------------------------------------------------------------------
-// wxToolBar
+// "clicked" (internal from gtk_toolbar)
//-----------------------------------------------------------------------------
static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool )
tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState );
}
+//-----------------------------------------------------------------------------
+// "enter_notify_event"
+//-----------------------------------------------------------------------------
+
static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool )
{
return TRUE;
}
+//-----------------------------------------------------------------------------
+// wxToolBar
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxToolBar,wxControl)
-BEGIN_EVENT_TABLE(wxToolBar, wxControl)
-END_EVENT_TABLE()
-
wxToolBar::wxToolBar()
{
}
#include <wx/intl.h>
//-----------------------------------------------------------------------------
-// wxTextCtrl
+// "changed"
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
-
static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
win->SetModified();
win->GetEventHandler()->ProcessEvent( event );
}
+//-----------------------------------------------------------------------------
+// wxTextCtrl
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
+
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_CHAR(wxTextCtrl::OnChar)
END_EVENT_TABLE()
extern bool g_blockEventsOnDrag;
//-----------------------------------------------------------------------------
-// GTK callbacks for wxWindows event system
+// "expose_event" (of m_wxwindow, not of m_widget)
//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-// expose (of m_wxwindow, not of m_widget)
-
-void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
+static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
{
if (!win->HasVMT()) return;
if (g_blockEventsOnDrag) return;
-/*
- if (IS_KIND_OF(win,wxStatusBar))
- {
- printf( "OnExpose from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
-
- printf( "x: %d \n", gdk_event->area.x );
- printf( "y: %d \n", gdk_event->area.y );
- printf( "w: %d \n", gdk_event->area.width );
- printf( "h: %d \n", gdk_event->area.height );
-}
-*/
-
win->m_updateRegion.Union( gdk_event->area.x,
gdk_event->area.y,
- gdk_event->area.width,
- gdk_event->area.height );
+ gdk_event->area.width,
+ gdk_event->area.height );
if (gdk_event->count > 0) return;
wxPaintEvent event( win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
win->m_updateRegion.Clear();
}
//-----------------------------------------------------------------------------
-// draw (of m_wxwindow, not of m_widget)
+// "draw" (of m_wxwindow, not of m_widget)
+//-----------------------------------------------------------------------------
-void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
+static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
{
if (!win->HasVMT()) return;
if (g_blockEventsOnDrag) return;
-/*
- if (IS_KIND_OF(win,wxStatusBar))
- {
- printf( "OnDraw from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
-
- printf( "x: %d \n", rect->x );
- printf( "y: %d \n", rect->y );
- printf( "w: %d \n", rect->width );
- printf( "h: %d \n", rect->height );
-}
-*/
-
win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height );
wxPaintEvent event( win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
win->m_updateRegion.Clear();
}
//-----------------------------------------------------------------------------
-// size
-// I don't any longer intercept GTK's internal resize events, except
-// for frames and from within MDI and tabbed windows (client area
-// size determined internally by GTK, not wxWin).
-
-/*
-void gtk_window_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
-{
- if (!win->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
-
- return;
-
- if ((win->m_x == alloc->x) &&
- (win->m_y == alloc->y) &&
- (win->m_width == alloc->width) &&
- (win->m_height == alloc->height))
- {
- return;
- }
-
- printf( "OnResize from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( " .\n" );
-
- printf( " Old: X: %d Y: %d ", win->m_x, win->m_y );
- printf( " W: %d H: %d ", win->m_width, win->m_height );
- printf( " .\n" );
-
- printf( " New: X: %d Y: %d ", alloc->x, alloc->y );
- printf( " W: %d H: %d ", alloc->width, alloc->height );
- printf( " .\n" );
-
- wxSizeEvent event( wxSize( alloc->width, alloc->height), win->GetId() );
- event.SetEventObject( win );
- win->ProcessEvent( event );
-}
-*/
-
+// "key_press_event"
//-----------------------------------------------------------------------------
-// key_press
-gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
+static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
{
if (!win->HasVMT()) return FALSE;
if (g_blockEventsOnDrag) return FALSE;
long key_code = 0;
switch (gdk_event->keyval)
{
- case GDK_BackSpace: key_code = WXK_BACK; break;
- case GDK_Tab: key_code = WXK_TAB; break;
- case GDK_Linefeed: key_code = WXK_RETURN; break;
- case GDK_Clear: key_code = WXK_CLEAR; break;
- case GDK_Return: key_code = WXK_RETURN; break;
- case GDK_Pause: key_code = WXK_PAUSE; break;
- case GDK_Scroll_Lock: key_code = WXK_SCROLL; break;
- case GDK_Escape: key_code = WXK_ESCAPE; break;
- case GDK_Delete: key_code = WXK_DELETE; break;
- case GDK_Home: key_code = WXK_HOME; break;
- case GDK_Left: key_code = WXK_LEFT; break;
- case GDK_Up: key_code = WXK_UP; break;
- case GDK_Right: key_code = WXK_RIGHT; break;
- case GDK_Down: key_code = WXK_DOWN; break;
- case GDK_Prior: key_code = WXK_PRIOR; break;
-// case GDK_Page_Up: key_code = WXK_PAGEUP; break;
- case GDK_Next: key_code = WXK_NEXT; break;
-// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break;
- case GDK_End: key_code = WXK_END; break;
- case GDK_Begin: key_code = WXK_HOME; break;
- case GDK_Select: key_code = WXK_SELECT; break;
- case GDK_Print: key_code = WXK_PRINT; break;
- case GDK_Execute: key_code = WXK_EXECUTE; break;
- case GDK_Insert: key_code = WXK_INSERT; break;
- case GDK_Num_Lock: key_code = WXK_NUMLOCK; break;
- case GDK_KP_Tab: key_code = WXK_TAB; break;
- case GDK_KP_Enter: key_code = WXK_RETURN; break;
- case GDK_KP_Home: key_code = WXK_HOME; break;
- case GDK_KP_Left: key_code = WXK_LEFT; break;
- case GDK_KP_Up: key_code = WXK_UP; break;
- case GDK_KP_Right: key_code = WXK_RIGHT; break;
- case GDK_KP_Down: key_code = WXK_DOWN; break;
- case GDK_KP_Prior: key_code = WXK_PRIOR; break;
-// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break;
- case GDK_KP_Next: key_code = WXK_NEXT; break;
-// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break;
- case GDK_KP_End: key_code = WXK_END; break;
- case GDK_KP_Begin: key_code = WXK_HOME; break;
- case GDK_KP_Insert: key_code = WXK_INSERT; break;
- case GDK_KP_Delete: key_code = WXK_DELETE; break;
- case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break;
- case GDK_KP_Add: key_code = WXK_ADD; break;
- case GDK_KP_Separator: key_code = WXK_SEPARATOR; break;
- case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break;
- case GDK_KP_Decimal: key_code = WXK_DECIMAL; break;
- case GDK_KP_Divide: key_code = WXK_DIVIDE; break;
- case GDK_KP_0: key_code = WXK_NUMPAD0; break;
- case GDK_KP_1: key_code = WXK_NUMPAD1; break;
- case GDK_KP_2: key_code = WXK_NUMPAD2; break;
- case GDK_KP_3: key_code = WXK_NUMPAD3; break;
- case GDK_KP_4: key_code = WXK_NUMPAD4; break;
- case GDK_KP_5: key_code = WXK_NUMPAD5; break;
- case GDK_KP_6: key_code = WXK_NUMPAD6; break;
- case GDK_KP_7: key_code = WXK_NUMPAD7; break;
- case GDK_KP_8: key_code = WXK_NUMPAD7; break;
- case GDK_KP_9: key_code = WXK_NUMPAD9; break;
- case GDK_F1: key_code = WXK_F1; break;
- case GDK_F2: key_code = WXK_F2; break;
- case GDK_F3: key_code = WXK_F3; break;
- case GDK_F4: key_code = WXK_F4; break;
- case GDK_F5: key_code = WXK_F5; break;
- case GDK_F6: key_code = WXK_F6; break;
- case GDK_F7: key_code = WXK_F7; break;
- case GDK_F8: key_code = WXK_F8; break;
- case GDK_F9: key_code = WXK_F9; break;
- case GDK_F10: key_code = WXK_F10; break;
- case GDK_F11: key_code = WXK_F11; break;
- case GDK_F12: key_code = WXK_F12; break;
+ case GDK_BackSpace: key_code = WXK_BACK; break;
+ case GDK_Tab: key_code = WXK_TAB; break;
+ case GDK_Linefeed: key_code = WXK_RETURN; break;
+ case GDK_Clear: key_code = WXK_CLEAR; break;
+ case GDK_Return: key_code = WXK_RETURN; break;
+ case GDK_Pause: key_code = WXK_PAUSE; break;
+ case GDK_Scroll_Lock: key_code = WXK_SCROLL; break;
+ case GDK_Escape: key_code = WXK_ESCAPE; break;
+ case GDK_Delete: key_code = WXK_DELETE; break;
+ case GDK_Home: key_code = WXK_HOME; break;
+ case GDK_Left: key_code = WXK_LEFT; break;
+ case GDK_Up: key_code = WXK_UP; break;
+ case GDK_Right: key_code = WXK_RIGHT; break;
+ case GDK_Down: key_code = WXK_DOWN; break;
+ case GDK_Prior: key_code = WXK_PRIOR; break;
+// case GDK_Page_Up: key_code = WXK_PAGEUP; break;
+ case GDK_Next: key_code = WXK_NEXT; break;
+// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break;
+ case GDK_End: key_code = WXK_END; break;
+ case GDK_Begin: key_code = WXK_HOME; break;
+ case GDK_Select: key_code = WXK_SELECT; break;
+ case GDK_Print: key_code = WXK_PRINT; break;
+ case GDK_Execute: key_code = WXK_EXECUTE; break;
+ case GDK_Insert: key_code = WXK_INSERT; break;
+ case GDK_Num_Lock: key_code = WXK_NUMLOCK; break;
+ case GDK_KP_Tab: key_code = WXK_TAB; break;
+ case GDK_KP_Enter: key_code = WXK_RETURN; break;
+ case GDK_KP_Home: key_code = WXK_HOME; break;
+ case GDK_KP_Left: key_code = WXK_LEFT; break;
+ case GDK_KP_Up: key_code = WXK_UP; break;
+ case GDK_KP_Right: key_code = WXK_RIGHT; break;
+ case GDK_KP_Down: key_code = WXK_DOWN; break;
+ case GDK_KP_Prior: key_code = WXK_PRIOR; break;
+// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break;
+ case GDK_KP_Next: key_code = WXK_NEXT; break;
+// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break;
+ case GDK_KP_End: key_code = WXK_END; break;
+ case GDK_KP_Begin: key_code = WXK_HOME; break;
+ case GDK_KP_Insert: key_code = WXK_INSERT; break;
+ case GDK_KP_Delete: key_code = WXK_DELETE; break;
+ case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break;
+ case GDK_KP_Add: key_code = WXK_ADD; break;
+ case GDK_KP_Separator: key_code = WXK_SEPARATOR; break;
+ case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break;
+ case GDK_KP_Decimal: key_code = WXK_DECIMAL; break;
+ case GDK_KP_Divide: key_code = WXK_DIVIDE; break;
+ case GDK_KP_0: key_code = WXK_NUMPAD0; break;
+ case GDK_KP_1: key_code = WXK_NUMPAD1; break;
+ case GDK_KP_2: key_code = WXK_NUMPAD2; break;
+ case GDK_KP_3: key_code = WXK_NUMPAD3; break;
+ case GDK_KP_4: key_code = WXK_NUMPAD4; break;
+ case GDK_KP_5: key_code = WXK_NUMPAD5; break;
+ case GDK_KP_6: key_code = WXK_NUMPAD6; break;
+ case GDK_KP_7: key_code = WXK_NUMPAD7; break;
+ case GDK_KP_8: key_code = WXK_NUMPAD7; break;
+ case GDK_KP_9: key_code = WXK_NUMPAD9; break;
+ case GDK_F1: key_code = WXK_F1; break;
+ case GDK_F2: key_code = WXK_F2; break;
+ case GDK_F3: key_code = WXK_F3; break;
+ case GDK_F4: key_code = WXK_F4; break;
+ case GDK_F5: key_code = WXK_F5; break;
+ case GDK_F6: key_code = WXK_F6; break;
+ case GDK_F7: key_code = WXK_F7; break;
+ case GDK_F8: key_code = WXK_F8; break;
+ case GDK_F9: key_code = WXK_F9; break;
+ case GDK_F10: key_code = WXK_F10; break;
+ case GDK_F11: key_code = WXK_F11; break;
+ case GDK_F12: key_code = WXK_F12; break;
default:
{
if ((gdk_event->keyval >= 0x20) && (gdk_event->keyval <= 0xFF))
event.m_y = 0;
event.SetEventObject( win );
- bool ret = win->ProcessEvent( event );
+ bool ret = win->GetEventHandler()->ProcessEvent( event );
if (ret)
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
}
-/*
- if (ret) printf( "found.\n") ;
-*/
return ret;
}
//-----------------------------------------------------------------------------
-// button_press
+// "button_press_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_button_press_callback( GtkWidget *WXUNUSED(widget), GdkEventButton *gdk_event, wxWindow *win )
+static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (!win->HasVMT()) return TRUE;
-/*
printf( "OnButtonPress from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
printf( win->GetClassInfo()->GetClassName() );
printf( ".\n" );
-*/
wxEventType event_type = wxEVT_LEFT_DOWN;
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// button_release
+// "button_release"
+//-----------------------------------------------------------------------------
-gint gtk_window_button_release_callback( GtkWidget *WXUNUSED(widget), GdkEventButton *gdk_event, wxWindow *win )
+static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK);
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_release_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// motion_notify
+// "motion_notify_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_motion_notify_callback( GtkWidget *WXUNUSED(widget), GdkEventMotion *gdk_event, wxWindow *win )
+static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, wxWindow *win )
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
event.m_x = (long)gdk_event->x;
event.m_y = (long)gdk_event->y;
+
+ // Some control don't have their own X window and thus cannot get
+ // any events.
+
+ wxNode *node = win->GetChildren()->First();
+ while (node)
+ {
+ wxWindow *child = (wxWindow*)node->Data();
+ if ((child->m_x <= event.m_x) &&
+ (child->m_y <= event.m_y) &&
+ (child->m_x+child->m_width >= event.m_x) &&
+ (child->m_y+child->m_height >= event.m_y))
+ {
+ win = child;
+ event.m_x -= child->m_x;
+ event.m_y -= child->m_y;
+ break;
+ }
+ node = node->Next();
+ }
+
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "motion_notify_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// focus_in
+// "focus_in_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_blockEventsOnDrag) return TRUE;
if (win->m_wxwindow)
wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "focus_in_event" );
return TRUE;
}
//-----------------------------------------------------------------------------
-// focus out
+// "focus_out_event"
+//-----------------------------------------------------------------------------
-gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_blockEventsOnDrag) return TRUE;
if (win->m_wxwindow)
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ if (win->GetEventHandler()->ProcessEvent( event ))
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "focus_out_event" );
+
return TRUE;
}
//-----------------------------------------------------------------------------
-// vertical scroll
+// "value_changed" from m_vAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
float diff = win->m_vAdjust->value - win->m_oldVerticalPos;
if (fabs(diff) < 0.2) return;
-/*
- int i = (int)(win->m_oldVerticalPos+0.5);
- printf( "Old value: %d.\n", i );
- i = (int)(win->m_vAdjust->value+0.5);
- printf( "Sending new value: %d.\n", i );
-*/
-
wxEventType command = wxEVT_NULL;
float line_step = win->m_vAdjust->step_increment;
wxScrollEvent event( command, win->GetId(), value, wxVERTICAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// horizontal scroll
+// "value_changed" from m_hAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
float diff = win->m_hAdjust->value - win->m_oldHorizontalPos;
if (fabs(diff) < 0.2) return;
-/*
- int i = (int)(win->m_oldHorizontalPos+0.5);
- printf( "Old value: %d.\n", i );
- i = (int)(win->m_hAdjust->value+0.5);
- printf( "Sending new value: %d.\n", i );
-*/
-
wxEventType command = wxEVT_NULL;
float line_step = win->m_hAdjust->step_increment;
wxScrollEvent event( command, win->GetId(), value, wxHORIZONTAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// vertical scroll change
+// "changed" from m_vAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
wxScrollEvent event( command, win->GetId(), value, wxVERTICAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// horizontal scroll change
+// "changed" from m_hAdjust
+//-----------------------------------------------------------------------------
-void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_blockEventsOnDrag) return;
wxScrollEvent event( command, win->GetId(), value, wxHORIZONTAL );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// drop
+// "drop_data_available_event"
+//-----------------------------------------------------------------------------
-void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
+static void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
{
if (!win->HasVMT()) return;
}
//-----------------------------------------------------------------------------
-// destroy
-
-bool gtk_window_destroy_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
-{
- printf( "OnDestroy from " );
- if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
- printf( win->GetClassInfo()->GetClassName() );
- printf( ".\n" );
- printf( "Goodbye.\n" );
- printf( " Robert Roebling.\n" );
-
- return FALSE;
-}
-
+// "enter_notify_event"
//-----------------------------------------------------------------------------
-// enter
-bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
+static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (widget->window != gdk_event->window) return TRUE;
if (g_blockEventsOnDrag) return TRUE;
wxMouseEvent event( wxEVT_ENTER_WINDOW );
event.SetEventObject( win );
- return win->ProcessEvent( event );
+ return win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// leave
+// "leave_notify_event"
+//-----------------------------------------------------------------------------
-bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
+static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (widget->window != gdk_event->window) return TRUE;
if (!win->HasVMT()) return TRUE;
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
event.SetEventObject( win );
- return win->ProcessEvent( event );
+ return win->GetEventHandler()->ProcessEvent( event );
}
//-----------------------------------------------------------------------------
-// wxWindow implementation
+// wxWindow
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxWindow,wxEvtHandler)
m_y = 0;
m_width = 0;
m_height = 0;
+ m_minWidth = -1;
+ m_minHeight = -1;
+ m_maxWidth = -1;
+ m_maxHeight = -1;
m_retCode = 0;
m_eventHandler = this;
m_windowValidator = (wxValidator *) NULL;
long style, const wxString &name )
{
if (m_needParent && (parent == NULL))
- wxFatalError( _("Need complete parent."), name );
+ wxFatalError( "Need complete parent.", name );
m_widget = (GtkWidget *) NULL;
m_hasVMT = FALSE;
if (m_width == -1) m_width = 20;
m_height = size.y;
if (m_height == -1) m_height = 20;
+ m_minWidth = -1;
+ m_minHeight = -1;
+ m_maxWidth = -1;
+ m_maxHeight = -1;
m_retCode = 0;
m_eventHandler = this;
m_windowId = id;
GtkWidget *connect_widget = GetConnectWidget();
- gtk_object_set_data (GTK_OBJECT (connect_widget), "MyWxWindow", (gpointer)this );
-
if (m_wxwindow)
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
}
-/*
- gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
- GTK_SIGNAL_FUNC(gtk_window_size_callback), (gpointer)this );
-*/
-
gtk_signal_connect( GTK_OBJECT(connect_widget), "key_press_event",
GTK_SIGNAL_FUNC(gtk_window_key_press_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this );
}
-/*
- // Does destroy ever get called ?
-
- gtk_signal_connect( GTK_OBJECT(m_widget), "destroy_event",
- GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
-
- if (m_wxwindow)
- {
- gtk_signal_connect( GTK_OBJECT(m_wxwindow), "destroy_event",
- GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this );
- }
-*/
-
if (m_widget && m_parent) gtk_widget_realize( m_widget );
if (m_wxwindow)
void wxWindow::ImplementSetSize(void)
{
+ 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_minWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
gtk_widget_set_usize( m_widget, m_width, m_height );
}
if (!m_parent)
{
- wxFAIL_MSG( _("wxWindow::SetSize error.\n") );
+ wxFAIL_MSG( "wxWindow::SetSize error.\n" );
return;
}
GtkWidget *vscrollbar = scroll_window->vscrollbar;
if ((m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSUNKEN_BORDER)
- )
+ (m_windowStyle & wxSUNKEN_BORDER))
{
dw += 2 * viewport_class->xthickness;
dh += 2 * viewport_class->ythickness;
GtkWidget *vscrollbar = scroll_window->vscrollbar;
if ((m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSUNKEN_BORDER)
- )
+ (m_windowStyle & wxSUNKEN_BORDER))
{
dw += 2 * viewport_class->xthickness;
dh += 2 * viewport_class->ythickness;
void wxWindow::ClientToScreen( int *x, int *y )
{
- // Does this look simple ?
-
GdkWindow *source = (GdkWindow *) NULL;
if (m_wxwindow)
source = m_wxwindow->window;
SetClientSize(maxX + 5, maxY + 10);
}
+void wxWindow::SetSizeHints( int minW, int minH, int maxW, int maxH, int WXUNUSED(incW), int WXUNUSED(incH) )
+{
+ m_minWidth = minW;
+ m_minHeight = minH;
+ m_maxWidth = maxW;
+ m_maxHeight = maxH;
+}
+
void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) )
{
//if (GetAutoLayout()) Layout();