X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e8d910979bd7c3c1dada49e87645a81d04e682e..0d17c5b66a4cea4b687243d7b0ee95ff1a5fe924:/src/generic/statusbr.cpp diff --git a/src/generic/statusbr.cpp b/src/generic/statusbr.cpp index 7dc2839535..6de10c46aa 100644 --- a/src/generic/statusbr.cpp +++ b/src/generic/statusbr.cpp @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: Francesco Montorsi // Created: 01/02/97 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,6 +29,7 @@ #ifdef __WXGTK20__ #include #include "wx/gtk/private.h" + #include "wx/gtk/private/gtk2-compat.h" #endif // we only have to do it here when we use wxStatusBarGeneric in addition to the @@ -90,8 +90,10 @@ gboolean statusbar_query_tooltip(GtkWidget* WXUNUSED(widget), BEGIN_EVENT_TABLE(wxStatusBarGeneric, wxWindow) EVT_PAINT(wxStatusBarGeneric::OnPaint) EVT_SIZE(wxStatusBarGeneric::OnSize) +#ifdef __WXGTK20__ EVT_LEFT_DOWN(wxStatusBarGeneric::OnLeftDown) EVT_RIGHT_DOWN(wxStatusBarGeneric::OnRightDown) +#endif EVT_SYS_COLOUR_CHANGED(wxStatusBarGeneric::OnSysColourChanged) END_EVENT_TABLE() @@ -132,7 +134,11 @@ bool wxStatusBarGeneric::Create(wxWindow *parent, #if defined( __WXGTK20__ ) #if GTK_CHECK_VERSION(2,12,0) - if (HasFlag(wxSTB_SHOW_TIPS) && !gtk_check_version(2,12,0)) + if (HasFlag(wxSTB_SHOW_TIPS) +#ifndef __WXGTK3__ + && gtk_check_version(2,12,0) == NULL +#endif + ) { g_object_set(m_widget, "has-tooltip", TRUE, NULL); g_signal_connect(m_widget, "query-tooltip", @@ -284,10 +290,10 @@ void wxStatusBarGeneric::DrawField(wxDC& dc, int i, int textHeight) return; // happens when the status bar is shrunk in a very small area! int style = m_panes[i].GetStyle(); - if (style != wxSB_FLAT) + if (style == wxSB_RAISED || style == wxSB_SUNKEN) { // Draw border - // For wxSB_NORMAL: paint a grey background, plus 3-d border (one black rectangle) + // For wxSB_SUNKEN: paint a grey background, plus 3-d border (one black rectangle) // Inside this, left and top sides (dark grey). Bottom and right (white). // Reverse it for wxSB_RAISED @@ -427,6 +433,25 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) ) if ( ShowsSizeGrip() ) { const wxRect& rc = GetSizeGripRect(); +#ifdef __WXGTK3__ + GtkWidget* toplevel = gtk_widget_get_toplevel(m_widget); + GdkRectangle rect; + if (toplevel && (!gtk_window_get_resize_grip_area(GTK_WINDOW(toplevel), &rect) || + rect.width == 0 || rect.height == 0)) + { + GtkStyleContext* sc = gtk_widget_get_style_context(toplevel); + gtk_style_context_save(sc); + gtk_style_context_add_class(sc, GTK_STYLE_CLASS_GRIP); + GtkJunctionSides sides = GTK_JUNCTION_CORNER_BOTTOMRIGHT; + if (GetLayoutDirection() == wxLayout_RightToLeft) + sides = GTK_JUNCTION_CORNER_BOTTOMLEFT; + gtk_style_context_set_junction_sides(sc, sides); + gtk_render_handle(sc, + static_cast(dc.GetImpl()->GetCairoContext()), + rc.x, rc.y, rc.width, rc.height); + gtk_style_context_restore(sc); + } +#else GdkWindowEdge edge = GetLayoutDirection() == wxLayout_RightToLeft ? GDK_WINDOW_EDGE_SOUTH_WEST : GDK_WINDOW_EDGE_SOUTH_EAST; @@ -438,6 +463,7 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) ) "statusbar", edge, rc.x, rc.y, rc.width, rc.height ); +#endif } #endif // __WXGTK20__ @@ -460,19 +486,24 @@ void wxStatusBarGeneric::OnSysColourChanged(wxSysColourChangedEvent& event) wxWindow::OnSysColourChanged(event); } +#ifdef __WXGTK20__ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event) { -#ifdef __WXGTK20__ int width, height; GetClientSize(&width, &height); - if ( ShowsSizeGrip() && (event.GetX() > width-height) ) + GtkWidget* ancestor = gtk_widget_get_toplevel(m_widget); +#ifdef __WXGTK3__ + GdkRectangle rect; + if (ancestor && gtk_window_get_resize_grip_area(GTK_WINDOW(ancestor), &rect) && + rect.width && rect.height) { - GtkWidget *ancestor = gtk_widget_get_toplevel( m_widget ); - - if (!GTK_IS_WINDOW (ancestor)) - return; + ancestor = NULL; + } +#endif + if (ancestor && ShowsSizeGrip() && event.GetX() > width - height) + { GdkWindow *source = GTKGetDrawingWindow(); int org_x = 0; @@ -502,24 +533,25 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event) { event.Skip( true ); } -#else - event.Skip( true ); -#endif } void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event) { -#ifdef __WXGTK20__ int width, height; GetClientSize(&width, &height); - if ( ShowsSizeGrip() && (event.GetX() > width-height) ) + GtkWidget* ancestor = gtk_widget_get_toplevel(m_widget); +#ifdef __WXGTK3__ + GdkRectangle rect; + if (ancestor && gtk_window_get_resize_grip_area(GTK_WINDOW(ancestor), &rect) && + rect.width && rect.height) { - GtkWidget *ancestor = gtk_widget_get_toplevel( m_widget ); - - if (!GTK_IS_WINDOW (ancestor)) - return; + ancestor = NULL; + } +#endif + if (ancestor && ShowsSizeGrip() && event.GetX() > width - height) + { GdkWindow *source = GTKGetDrawingWindow(); int org_x = 0; @@ -536,10 +568,8 @@ void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event) { event.Skip( true ); } -#else - event.Skip( true ); -#endif } +#endif // __WXGTK20__ void wxStatusBarGeneric::OnSize(wxSizeEvent& event) {