X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/64c11164f0a9ed48a69d0ef3f77ae03e11671394..fac7f644e2c46168555cfeda70feb9cfe46a179e:/src/gtk/toplevel.cpp diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index 89a5791978..c024778629 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -163,7 +163,7 @@ static gboolean gtk_frame_focus_in_callback( GtkWidget *widget, wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), g_activeFrame); wxActivateEvent event(wxEVT_ACTIVATE, true, g_activeFrame->GetId()); event.SetEventObject(g_activeFrame); - g_activeFrame->GetEventHandler()->ProcessEvent(event); + g_activeFrame->HandleWindowEvent(event); return FALSE; } @@ -193,7 +193,7 @@ gboolean gtk_frame_focus_out_callback(GtkWidget * WXUNUSED(widget), wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), g_activeFrame); wxActivateEvent event(wxEVT_ACTIVATE, false, g_activeFrame->GetId()); event.SetEventObject(g_activeFrame); - g_activeFrame->GetEventHandler()->ProcessEvent(event); + g_activeFrame->HandleWindowEvent(event); g_activeFrame = NULL; } @@ -234,16 +234,19 @@ size_allocate(GtkWidget*, GtkAllocation* alloc, wxTopLevelWindowGTK* win) { win->m_oldClientWidth = alloc->width; win->m_oldClientHeight = alloc->height; - wxSize sizeDecor; + + wxSize size(win->m_widget->allocation.width, + win->m_widget->allocation.height); if (!win->IsFullScreen()) - sizeDecor = GetDecorSize(win->m_gdkDecor); - win->m_width = win->m_widget->allocation.width + sizeDecor.x; - win->m_height = win->m_widget->allocation.height + sizeDecor.y; + size += win->m_decorSize; + win->m_width = size.x; + win->m_height = size.y; + if (!win->IsIconized()) { - wxSizeEvent event(win->GetSize(), win->GetId()); + wxSizeEvent event(size, win->GetId()); event.SetEventObject(win); - win->GetEventHandler()->ProcessEvent(event); + win->HandleWindowEvent(event); } // else the window is currently unmapped, don't generate size events } @@ -306,7 +309,7 @@ gtk_frame_configure_callback( GtkWidget* widget, win->m_y = point.y; wxMoveEvent mevent(point, win->GetId()); mevent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( mevent ); + win->HandleWindowEvent( mevent ); return FALSE; } @@ -365,14 +368,14 @@ gtk_frame_map_callback( GtkWidget* widget, gdk_window_get_frame_extents(widget->window, &rect); int w, h; gdk_drawable_get_size(widget->window, &w, &h); - wxSize& decorSize = GetDecorSize(win->m_gdkDecor); - const wxSize size = wxSize(rect.width - w, rect.height - h); - if (decorSize.x != size.x || decorSize.y != size.y) + const wxSize decorSize = wxSize(rect.width - w, rect.height - h); + if (win->m_decorSize != decorSize) { // Update window size and frame extents cache win->m_width = rect.width; win->m_height = rect.height; - decorSize = size; + win->m_decorSize = decorSize; + GetDecorSize(win->m_gdkDecor) = decorSize; } } @@ -438,17 +441,17 @@ static gboolean property_notify_event( &type, &format, &nitems, &bytes_after, (guchar**)&data); if (status == Success && data && nitems == 4) { - wxSize& decorSize = GetDecorSize(win->m_gdkDecor); - const wxSize size = + const wxSize decorSize = wxSize(int(data[0] + data[1]), int(data[2] + data[3])); - if (decorSize.x != size.x || decorSize.y != size.y) + if (win->m_decorSize != decorSize) { // Update window size and frame extents cache - win->m_width += size.x - decorSize.x; - win->m_height += size.y - decorSize.y; + win->m_width += decorSize.x - win->m_decorSize.x; + win->m_height += decorSize.y - win->m_decorSize.y; if (win->m_width < 0) win->m_width = 0; if (win->m_height < 0) win->m_height = 0; - decorSize = size; + win->m_decorSize = decorSize; + GetDecorSize(win->m_gdkDecor) = decorSize; win->m_oldClientWidth = 0; gtk_widget_queue_resize(win->m_wxwindow); } @@ -671,7 +674,9 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, } } - // m_gdkDecor needs to be set before calling GTKDoGetSize + m_decorSize = GetDecorSize(m_gdkDecor); + + // m_sizeDecor needs to be set before calling GTKDoGetSize int w, h; GTKDoGetSize(&w, &h); gtk_window_set_default_size(GTK_WINDOW(m_widget), w, h); @@ -682,8 +687,12 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, wxTopLevelWindowGTK::~wxTopLevelWindowGTK() { #if wxUSE_LIBHILDON - hildon_program_remove_window(wxTheApp->GetHildonProgram(), - HILDON_WINDOW(m_widget)); + // it can also be a (standard) dialog + if ( HILDON_IS_WINDOW(m_widget) ) + { + hildon_program_remove_window(wxTheApp->GetHildonProgram(), + HILDON_WINDOW(m_widget)); + } #endif // wxUSE_LIBHILDON if (m_grabbed) @@ -814,7 +823,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) // top down), before the initial size_allocate signals occur. wxSizeEvent event(GetSize(), GetId()); event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); } bool change = wxTopLevelWindowBase::Show(show); @@ -849,7 +858,7 @@ void wxTopLevelWindowGTK::GTKDoGetSize(int *width, int *height) const wxSize size(m_width, m_height); if (!IsFullScreen()) { - size -= GetDecorSize(m_gdkDecor); + size -= m_decorSize; if (size.x < 0) size.x = 0; if (size.y < 0) size.y = 0; } @@ -899,7 +908,7 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si GetClientSize(&m_oldClientWidth, &m_oldClientHeight); wxSizeEvent event(GetSize(), GetId()); event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); } } @@ -932,24 +941,23 @@ void wxTopLevelWindowGTK::DoSetSizeHints( int minW, int minH, const wxSize maxSize = GetMaxSize(); GdkGeometry hints; int hints_mask = 0; - const wxSize sizeDecor = GetDecorSize(m_gdkDecor); if (minSize.x > 0 || minSize.y > 0) { hints_mask |= GDK_HINT_MIN_SIZE; - hints.min_width = minSize.x - sizeDecor.x; + hints.min_width = minSize.x - m_decorSize.x; if (hints.min_width < 0) hints.min_width = 0; - hints.min_height = minSize.y - sizeDecor.y; + hints.min_height = minSize.y - m_decorSize.y; if (hints.min_height < 0) hints.min_height = 0; } if (maxSize.x > 0 || maxSize.y > 0) { hints_mask |= GDK_HINT_MAX_SIZE; - hints.max_width = maxSize.x - sizeDecor.x; + hints.max_width = maxSize.x - m_decorSize.x; if (hints.max_width < 0) hints.max_width = INT_MAX; - hints.max_height = maxSize.y - sizeDecor.y; + hints.max_height = maxSize.y - m_decorSize.y; if (hints.max_height < 0) hints.max_height = INT_MAX; }