X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8ab75332894d55b557102c5a287727ca635cb1ff..b5ec0c78b521cfa0f276e4d5d830f35b4fa26e91:/src/gtk/minifram.cpp diff --git a/src/gtk/minifram.cpp b/src/gtk/minifram.cpp index 0cf5dd8d24..073587e6af 100644 --- a/src/gtk/minifram.cpp +++ b/src/gtk/minifram.cpp @@ -104,14 +104,12 @@ static gboolean expose_event(GtkWidget* widget, GdkEventExpose* gdk_event, wxMin int style = win->GetWindowStyle(); -#ifndef __WXGTK3__ if (style & wxRESIZE_BORDER) { dc.SetBrush( *wxGREY_BRUSH ); dc.SetPen( *wxTRANSPARENT_PEN ); dc.DrawRectangle( win->m_width - 14, win->m_height-14, 14, 14 ); } -#endif if (win->m_miniTitle && !win->GetTitle().empty()) { @@ -156,7 +154,6 @@ gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, w int y = (int)gdk_event->y; int x = (int)gdk_event->x; -#ifndef __WXGTK3__ if ((style & wxRESIZE_BORDER) && (x > win->m_width-14) && (y > win->m_height-14)) { @@ -177,7 +174,6 @@ gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, w return TRUE; } -#endif if (win->m_miniTitle && (style & wxCLOSE_BOX)) { @@ -193,17 +189,20 @@ gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, w gdk_window_raise(gtk_widget_get_window(win->m_widget)); - gdk_pointer_grab( gtk_widget_get_window(widget), false, - (GdkEventMask) - (GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_MOTION_MASK | - GDK_BUTTON1_MOTION_MASK), - NULL, - NULL, - (unsigned int) GDK_CURRENT_TIME ); + const GdkEventMask mask = GdkEventMask( + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_BUTTON1_MOTION_MASK); +#ifdef __WXGTK3__ + gdk_device_grab( + gdk_event->device, gdk_event->window, GDK_OWNERSHIP_NONE, + false, mask, NULL, gdk_event->time); +#else + gdk_pointer_grab(gdk_event->window, false, mask, NULL, NULL, gdk_event->time); +#endif win->m_diffX = x; win->m_diffY = y; @@ -235,7 +234,11 @@ gtk_window_button_release_callback(GtkWidget* widget, GdkEventButton* gdk_event, int x = (int)gdk_event->x; int y = (int)gdk_event->y; - gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME ); +#ifdef __WXGTK3__ + gdk_device_ungrab(gdk_event->device, gdk_event->time); +#else + gdk_pointer_ungrab(gdk_event->time); +#endif int org_x = 0; int org_y = 0; gdk_window_get_origin(gtk_widget_get_window(widget), &org_x, &org_y); @@ -282,23 +285,20 @@ gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; + int x = int(gdk_event->x); + int y = int(gdk_event->y); + if (gdk_event->is_hint) { - int x = 0; - int y = 0; - GdkModifierType state; - gdk_window_get_pointer(gdk_event->window, &x, &y, &state); - gdk_event->x = x; - gdk_event->y = y; - gdk_event->state = state; +#ifdef __WXGTK3__ + gdk_window_get_device_position(gdk_event->window, gdk_event->device, &x, &y, NULL); +#else + gdk_window_get_pointer(gdk_event->window, &x, &y, NULL); +#endif } - int x = (int)gdk_event->x; - int y = (int)gdk_event->y; - if (!win->m_isDragging) { -#ifndef __WXGTK3__ if (win->GetWindowStyle() & wxRESIZE_BORDER) { if ((x > win->m_width-14) && (y > win->m_height-14)) @@ -307,7 +307,6 @@ gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); win->GTKUpdateCursor(false); } -#endif return TRUE; } @@ -436,6 +435,10 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title void wxMiniFrame::DoGetClientSize(int* width, int* height) const { wxFrame::DoGetClientSize(width, height); + + if (m_useCachedClientSize) + return; + if (width) { *width -= 2 * m_miniEdge;