+//-----------------------------------------------------------------------------
+// "expose_event" from m_widget, for drawing border
+//-----------------------------------------------------------------------------
+
+#ifndef __WXUNIVERSAL__
+
+GtkWidget* GetEntryWidget();
+
+extern "C" {
+static gboolean
+expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
+{
+ // if this event is not for the GdkWindow the border is drawn on
+ if (win->m_wxwindow == win->m_widget && gdk_event->window == widget->window)
+ return false;
+
+ int x = 0;
+ int y = 0;
+ // GtkScrolledWindow is GTK_NO_WINDOW
+ if (GTK_WIDGET_NO_WINDOW(widget))
+ {
+ x = widget->allocation.x;
+ y = widget->allocation.y;
+ }
+ int w = win->m_wxwindow->allocation.width;
+ int h = win->m_wxwindow->allocation.height;
+ if (win->HasFlag(wxBORDER_SIMPLE))
+ {
+ GdkGC* gc = gdk_gc_new(gdk_event->window);
+ gdk_gc_set_foreground(gc, &widget->style->black);
+ gdk_draw_rectangle(gdk_event->window, gc, false, x, y, w - 1, h - 1);
+ g_object_unref(gc);
+ }
+ else
+ {
+ GtkShadowType shadow = GTK_SHADOW_IN;
+ if (win->HasFlag(wxBORDER_RAISED))
+ shadow = GTK_SHADOW_OUT;
+
+ // Style detail to use
+ const char* detail;
+ if (widget == win->m_wxwindow)
+ // for non-scrollable wxWindows
+ detail = "entry";
+ else
+ // for scrollable ones
+ detail = "viewport";
+
+ GtkWidget* styleWidget = GetEntryWidget();
+ gtk_paint_shadow(
+ styleWidget->style, gdk_event->window, GTK_STATE_NORMAL,
+ shadow, NULL, styleWidget, detail, x, y, w, h);
+ }
+
+ // no further painting is needed for border-only GdkWindow
+ return win->m_wxwindow == win->m_widget;
+}
+}
+#endif // !__WXUNIVERSAL__
+