X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/326f9654d2d097262a7c9bf4e9c41d751e11d719..dfc3d7e025e919d9cf0d2e59d3c74bfab0b07e55:/src/gtk/frame.cpp diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index e2b3321531..258bf92514 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -146,15 +146,19 @@ static void gtk_toolbar_detached_callback( GtkWidget *widget, GtkWidget *WXUNUSE // "configure_event" //----------------------------------------------------------------------------- -static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win ) +static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *WXUNUSED(event), wxFrame *win ) { if (g_isIdle) wxapp_install_idle_handler(); if (!win->m_hasVMT) return FALSE; - - win->m_x = event->x; - win->m_y = event->y; + + int x = 0; + int y = 0; + gdk_window_get_root_origin( win->m_widget->window, &x, &y ); + + win->m_x = x; + win->m_y = y; wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() ); mevent.SetEventObject( win ); @@ -249,13 +253,10 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win ) * virtual function here as wxWindows requires different ways to insert * a child in container classes. */ -static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child ) +static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) { - if (wxIS_KIND_OF(child,wxToolBar) || wxIS_KIND_OF(child,wxMenuBar)) + if (!parent->m_insertInClientArea) { - /* actually, menubars are never inserted here, but this - may change one day */ - /* these are outside the client area */ wxFrame* frame = (wxFrame*) parent; gtk_myfixed_put( GTK_MYFIXED(frame->m_mainWidget), @@ -307,7 +308,7 @@ END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxFrame,wxWindow) -wxFrame::wxFrame() +void wxFrame::Init() { m_frameMenuBar = (wxMenuBar *) NULL; m_frameStatusBar = (wxStatusBar *) NULL; @@ -318,23 +319,15 @@ wxFrame::wxFrame() m_mainWidget = (GtkWidget*) NULL; m_menuBarDetached = FALSE; m_toolBarDetached = FALSE; - m_insertCallback = wxInsertChildInFrame; + m_insertInClientArea = TRUE; } wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - m_frameMenuBar = (wxMenuBar *) NULL; - m_frameStatusBar = (wxStatusBar *) NULL; - m_frameToolBar = (wxToolBar *) NULL; - m_sizeSet = FALSE; - m_miniEdge = 0; - m_miniTitle = 0; - m_mainWidget = (GtkWidget*) NULL; - m_menuBarDetached = FALSE; - m_toolBarDetached = FALSE; - m_insertCallback = wxInsertChildInFrame; + Init(); + Create( parent, id, title, pos, size, style, name ); } @@ -350,7 +343,7 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, m_title = title; - m_insertCallback = wxInsertChildInFrame; + m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame; GtkWindowType win_type = GTK_WINDOW_TOPLEVEL; if (style & wxSIMPLE_BORDER) win_type = GTK_WINDOW_POPUP; @@ -511,7 +504,6 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { if ((m_x != old_x) || (m_y != old_y)) { - /* we set the size here and in gtk_frame_map_callback */ gtk_widget_set_uposition( m_widget, m_x, m_y ); } } @@ -744,15 +736,27 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height m_resizing = FALSE; } +void wxFrame::MakeModal( bool modal ) +{ + if (modal) + gtk_grab_add( m_widget ); + else + gtk_grab_remove( m_widget ); +} + void wxFrame::OnInternalIdle() { if (!m_sizeSet && GTK_WIDGET_REALIZED(m_wxwindow)) GtkOnSize( m_x, m_y, m_width, m_height ); DoMenuUpdates(); + + if (m_frameMenuBar) m_frameMenuBar->OnInternalIdle(); + if (m_frameToolBar) m_frameToolBar->OnInternalIdle(); + if (m_frameStatusBar) m_frameStatusBar->OnInternalIdle(); } -void wxFrame::OnCloseWindow( wxCloseEvent& event ) +void wxFrame::OnCloseWindow( wxCloseEvent& WXUNUSED(event) ) { Destroy(); } @@ -887,15 +891,19 @@ void wxFrame::OnMenuHighlight(wxMenuEvent& event) } } -wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) +wxToolBar* wxFrame::CreateToolBar( long style, wxWindowID id, const wxString& name ) { wxASSERT_MSG( (m_widget != NULL), _T("invalid frame") ); wxCHECK_MSG( m_frameToolBar == NULL, FALSE, _T("recreating toolbar in wxFrame") ); + m_insertInClientArea = FALSE; + m_frameToolBar = OnCreateToolBar( style, id, name ); - GetChildren().DeleteObject( m_frameToolBar ); + if (m_frameToolBar) GetChildren().DeleteObject( m_frameToolBar ); + + m_insertInClientArea = TRUE; m_sizeSet = FALSE;