]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/statusbr.cpp
require libsm-dev, it's needed for KDE/GNOME detection
[wxWidgets.git] / src / generic / statusbr.cpp
index b963470a674c26b4306c8cacf673901a052832d7..44fa9ad078fb59cf9a70dfd961f9f6bd4e9f64dd 100644 (file)
@@ -81,13 +81,14 @@ bool wxStatusBarGeneric::Create(wxWindow *parent,
     SetFont(*wxSMALL_FONT);
 #endif
 
-    // Set the height according to the font and the border size
-    wxClientDC dc(this);
-    dc.SetFont(GetFont());
-
-    wxCoord y;
-    dc.GetTextExtent(_T("X"), NULL, &y );
-
+       wxCoord y;
+       {
+               // Set the height according to the font and the border size
+               wxClientDC dc(this);
+               dc.SetFont(GetFont());
+
+               dc.GetTextExtent(_T("X"), NULL, &y );
+       }
     int height = (int)( (11*y)/10 + 2*GetBorderY());
 
     SetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, height);
@@ -199,16 +200,29 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
     {
         int width, height;
         GetClientSize(&width, &height);
-
-        gtk_paint_resize_grip( m_widget->style,
+        
+        if (GetLayoutDirection() == wxLayout_RightToLeft)
+        {
+            gtk_paint_resize_grip( m_widget->style,
+                               GTK_PIZZA(m_wxwindow)->bin_window,
+                               (GtkStateType) GTK_WIDGET_STATE (m_widget),
+                               NULL,
+                               m_widget,
+                               "statusbar",
+                               GDK_WINDOW_EDGE_SOUTH_WEST,
+                               2, 2, height-2, height-4 );
+        }
+        else
+        {
+            gtk_paint_resize_grip( m_widget->style,
                                GTK_PIZZA(m_wxwindow)->bin_window,
                                (GtkStateType) GTK_WIDGET_STATE (m_widget),
                                NULL,
                                m_widget,
                                "statusbar",
                                GDK_WINDOW_EDGE_SOUTH_EAST,
-                               width-height-2, 1, height-2, height-3 );
-
+                               width-height-2, 2, height-2, height-4 );
+        }
     }
 #endif
 
@@ -237,7 +251,7 @@ void wxStatusBarGeneric::DrawFieldText(wxDC& dc, int i)
 
     wxString text(GetStatusText(i));
 
-    long x = 0, y = 0;
+    wxCoord x = 0, y = 0;
 
     dc.GetTextExtent(text, &x, &y);
 
@@ -415,12 +429,24 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event)
         int org_y = 0;
         gdk_window_get_origin( source, &org_x, &org_y );
 
-        gtk_window_begin_resize_drag (GTK_WINDOW (ancestor),
+        if (GetLayoutDirection() == wxLayout_RightToLeft)
+        {
+            gtk_window_begin_resize_drag (GTK_WINDOW (ancestor),
+                                  GDK_WINDOW_EDGE_SOUTH_WEST,
+                                  1,
+                                  org_x - event.GetX() + GetSize().x ,
+                                  org_y + event.GetY(),
+                                  0);
+        }
+        else
+        {
+            gtk_window_begin_resize_drag (GTK_WINDOW (ancestor),
                                   GDK_WINDOW_EDGE_SOUTH_EAST,
                                   1,
                                   org_x + event.GetX(),
                                   org_y + event.GetY(),
                                   0);
+        }
     }
     else
     {