X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a8bfbebf9c233b8d019a2e608b658fc1322bd5f6..5041b46fedadcafbdd945acad45c2cae500fd11d:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index c48b032dc2..21eaaf3f96 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -330,6 +330,9 @@ void wxgtk_window_size_request_callback(GtkWidget * WXUNUSED(widget), // "expose_event" of m_wxwindow //----------------------------------------------------------------------------- + +extern GtkWidget *GetEntryWidget(); + extern "C" { static gboolean gtk_window_expose_callback( GtkWidget *widget, @@ -338,9 +341,34 @@ gtk_window_expose_callback( GtkWidget *widget, { DEBUG_MAIN_THREAD + wxPizza *pizza = WX_PIZZA(widget); + GdkWindow *backing_window = pizza->m_backing_window; + + int w = widget->allocation.width; + int h = widget->allocation.height; + // if this event is for the border-only GdkWindow - if (gdk_event->window != widget->window) - return false; + if (backing_window && gdk_event->window == pizza->m_backing_window) + { + 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, 0, 0, w - 1, h - 1); + g_object_unref(gc); + } + else + { + GtkShadowType shadow = GTK_SHADOW_IN; + if (win->HasFlag(wxBORDER_RAISED)) + shadow = GTK_SHADOW_OUT; + gtk_paint_shadow( + GetEntryWidget()->style, gdk_event->window, GTK_STATE_NORMAL, + shadow, NULL, GetEntryWidget(), "entry", 0, 0, w, h); + } + + return TRUE; + } #if 0 if (win->GetName()) @@ -383,10 +411,10 @@ gtk_window_expose_callback( GtkWidget *widget, #ifndef __WXUNIVERSAL__ extern "C" { static gboolean -expose_event_border(GtkWidget* widget, GdkEventExpose* event, wxWindow* win) +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 && event->window == widget->window) + if (win->m_wxwindow == win->m_widget && gdk_event->window == widget->window) return false; int x = 0; @@ -402,9 +430,9 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* event, wxWindow* win) if (win->HasFlag(wxBORDER_SIMPLE)) { GdkGC* gc; - gc = gdk_gc_new(event->window); + gc = gdk_gc_new(gdk_event->window); gdk_gc_set_foreground(gc, &widget->style->black); - gdk_draw_rectangle(event->window, gc, false, x, y, w - 1, h - 1); + gdk_draw_rectangle(gdk_event->window, gc, false, x, y, w - 1, h - 1); g_object_unref(gc); } else @@ -413,8 +441,8 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* event, wxWindow* win) if (win->HasFlag(wxBORDER_RAISED)) shadow = GTK_SHADOW_OUT; gtk_paint_shadow( - widget->style, event->window, GTK_STATE_NORMAL, - shadow, &event->area, widget, NULL, x, y, w, h); + GetEntryWidget()->style, gdk_event->window, GTK_STATE_NORMAL, + shadow, NULL, GetEntryWidget(), "viewport", x, y, w, h); } // no further painting is needed for border-only GdkWindow @@ -3671,11 +3699,11 @@ void wxWindowGTK::GtkSendPaintEvents() GetEventHandler()->ProcessEvent(erase_event); } - + wxNcPaintEvent nc_paint_event( GetId() ); nc_paint_event.SetEventObject( this ); GetEventHandler()->ProcessEvent( nc_paint_event ); - + wxPaintEvent paint_event( GetId() ); paint_event.SetEventObject( this ); GetEventHandler()->ProcessEvent( paint_event );