}
*/
- win->GetUpdateRegion().Union( gdk_event->area.x,
- gdk_event->area.y,
- gdk_event->area.width,
- gdk_event->area.height );
+ GtkPizza *pizza = GTK_PIZZA (widget);
- if (gdk_event->count == 0)
- {
- wxEraseEvent eevent( win->GetId() );
- eevent.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent(eevent);
+ if (win->GetThemeEnabled())
+ {
+ wxWindow *parent = win->GetParent();
+ while (parent && !parent->IsTopLevel())
+ parent = parent->GetParent();
+ if (!parent)
+ parent = win;
- wxPaintEvent event( win->GetId() );
- event.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent( event );
+ gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE, &gdk_event->area, parent->m_widget, "base", 0, 0, -1, -1);
+ }
+
+ win->GetUpdateRegion().Union( gdk_event->area.x,
+ gdk_event->area.y,
+ gdk_event->area.width,
+ gdk_event->area.height );
- win->GetUpdateRegion().Clear();
- }
+ if (gdk_event->count == 0)
+ {
+ wxEraseEvent eevent( win->GetId() );
+ eevent.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent(eevent);
+
+ wxPaintEvent event( win->GetId() );
+ event.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent( event );
+
+ win->GetUpdateRegion().Clear();
+ }
/* The following code will result in all window-less widgets
being redrawn if the wxWindows class is given a chance to
paint *anything* because it will then be allowed to paint
over the window-less widgets */
- GtkPizza *pizza = GTK_PIZZA (widget);
-
GList *children = pizza->children;
while (children)
{
if (g_isIdle)
wxapp_install_idle_handler();
-
+
+ // this is supposed to take care of extra (and unneeded) frame repaints
+ if (win->GetChildren().GetCount() == 0)
+ return;
+
/*
if (win->GetName() == wxT("panel"))
{
*/
GtkPizza *pizza = GTK_PIZZA (widget);
+
+ if (win->GetThemeEnabled())
+ {
+ wxWindow *parent = win->GetParent();
+ while (parent && !parent->IsTopLevel())
+ parent = parent->GetParent();
+ if (!parent)
+ parent = win;
+
+ gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE, rect, parent->m_widget, "base", 0, 0, -1, -1);
+ }
- if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
- (pizza->clear_on_draw))
- {
- gdk_window_clear_area( pizza->bin_window,
+
+ if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
+ (pizza->clear_on_draw))
+ {
+ gdk_window_clear_area( pizza->bin_window,
rect->x, rect->y, rect->width, rect->height);
- }
+ }
- win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
+ win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
- win->m_clipPaintRegion = TRUE;
+ win->m_clipPaintRegion = TRUE;
wxEraseEvent eevent( win->GetId() );
eevent.SetEventObject( win );
*/
}
-// Helper for wxFindWindowAtPointer
-wxWindow* wxFindWindowForGdkWindow(wxWindow* win, GdkWindow* gdkWindow)
-{
- GdkWindow* thisGdkWindow1 = 0;
- GdkWindow* thisGdkWindow2 = 0;
-
- if (win->m_wxwindow)
- thisGdkWindow1 = GTK_PIZZA(win->m_wxwindow)->bin_window;
-
- thisGdkWindow2 = win->m_widget->window;
-
- if (gdkWindow == thisGdkWindow1 || gdkWindow == thisGdkWindow2)
- return win;
-
- wxNode* node = win->GetChildren().First();
- while (node)
- {
- wxWindow* child = (wxWindow*) node->Data();
- wxWindow* found = wxFindWindowForGdkWindow(child, gdkWindow);
- if (found)
- return found;
-
- node = node->Next();
- }
- return NULL;
-}
-
// Find the wxWindow at the current mouse position, also returning the mouse
// position.
wxWindow* wxFindWindowAtPointer(wxPoint& pt)
{
- int x, y;
- GdkWindow* windowAtPtr = gdk_window_at_pointer(& x, & y);
- pt.x = x;
- pt.y = y;
- if (windowAtPtr)
- {
- wxNode* node = wxTopLevelWindows.First();
- while (node)
- {
- wxWindow* win = (wxWindow*) node->Data();
- wxWindow* wxWinAtPtr = wxFindWindowForGdkWindow(win, windowAtPtr);
- if (wxWinAtPtr)
- return wxWinAtPtr;
- node = node->Next();
- }
- }
- return NULL;
+ pt = wxGetMousePosition();
+ wxWindow* found = wxFindWindowAtPoint(pt);
+ return found;
}
// Get the current mouse position.
wxPoint wxGetMousePosition()
{
+ /* This crashes when used within wxHelpContext,
+ so we have to use the X-specific implementation below.
+ gint x, y;
+ GdkModifierType *mask;
+ (void) gdk_window_get_pointer(NULL, &x, &y, mask);
+
+ return wxPoint(x, y);
+ */
+
int x, y;
GdkWindow* windowAtPtr = gdk_window_at_pointer(& x, & y);
- return wxPoint(x, y);
+ if (!windowAtPtr)
+ return wxPoint(-999, -999);
+
+ Display *display = GDK_WINDOW_XDISPLAY(windowAtPtr);
+ Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display));
+ Window rootReturn, childReturn;
+ int rootX, rootY, winX, winY;
+ unsigned int maskReturn;
+
+ XQueryPointer (display,
+ rootWindow,
+ &rootReturn,
+ &childReturn,
+ &rootX, &rootY, &winX, &winY, &maskReturn);
+ return wxPoint(rootX, rootY);
+
}