avoid deprecated functions with GTK3

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2012-11-16 07:35:53 +00:00
parent 070bae64c4
commit 6bfcc4ec98

View File

@@ -1532,8 +1532,11 @@ gtk_window_motion_notify_callback( GtkWidget * WXUNUSED(widget),
{ {
int x = 0; int x = 0;
int y = 0; int y = 0;
GdkModifierType state; #ifdef __WXGTK3__
gdk_window_get_pointer(gdk_event->window, &x, &y, &state); 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
gdk_event->x = x; gdk_event->x = x;
gdk_event->y = y; gdk_event->y = y;
} }
@@ -1546,7 +1549,12 @@ gtk_window_motion_notify_callback( GtkWidget * WXUNUSED(widget),
if ( g_captureWindow ) if ( g_captureWindow )
{ {
// synthesise a mouse enter or leave event if needed // synthesise a mouse enter or leave event if needed
GdkWindow *winUnderMouse = gdk_window_at_pointer(NULL, NULL); GdkWindow* winUnderMouse =
#ifdef __WXGTK3__
gdk_device_get_window_at_position(gdk_event->device, NULL, NULL);
#else
gdk_window_at_pointer(NULL, NULL);
#endif
// This seems to be necessary and actually been added to // This seems to be necessary and actually been added to
// GDK itself in version 2.0.X // GDK itself in version 2.0.X
gdk_flush(); gdk_flush();
@@ -2114,7 +2122,7 @@ bool wxGetKeyState(wxKeyCode WXUNUSED(key))
} }
#endif // __WINDOWS__ #endif // __WINDOWS__
static void GetMouseState(int& x, int& y, GdkModifierType& mask) static GdkDisplay* GetDisplay()
{ {
wxWindow* tlw = NULL; wxWindow* tlw = NULL;
if (!wxTopLevelWindows.empty()) if (!wxTopLevelWindows.empty())
@@ -2124,7 +2132,7 @@ static void GetMouseState(int& x, int& y, GdkModifierType& mask)
display = gtk_widget_get_display(tlw->m_widget); display = gtk_widget_get_display(tlw->m_widget);
else else
display = gdk_display_get_default(); display = gdk_display_get_default();
gdk_display_get_pointer(display, NULL, &x, &y, &mask); return display;
} }
wxMouseState wxGetMouseState() wxMouseState wxGetMouseState()
@@ -2135,7 +2143,17 @@ wxMouseState wxGetMouseState()
gint y; gint y;
GdkModifierType mask; GdkModifierType mask;
GetMouseState(x, y, mask); GdkDisplay* display = GetDisplay();
#ifdef __WXGTK3__
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
GdkScreen* screen;
gdk_device_get_position(device, &screen, &x, &y);
GdkWindow* window = gdk_screen_get_root_window(screen);
gdk_device_get_state(device, window, NULL, &mask);
#else
gdk_display_get_pointer(display, NULL, &x, &y, &mask);
#endif
ms.SetX(x); ms.SetX(x);
ms.SetY(y); ms.SetY(y);
@@ -4268,7 +4286,11 @@ void wxPopupMenuPositionCallback( GtkMenu *menu,
{ {
// ensure that the menu appears entirely on screen // ensure that the menu appears entirely on screen
GtkRequisition req; GtkRequisition req;
#ifdef __WXGTK3__
gtk_widget_get_preferred_size(GTK_WIDGET(menu), &req, NULL);
#else
gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req); gtk_widget_get_child_requisition(GTK_WIDGET(menu), &req);
#endif
wxSize sizeScreen = wxGetDisplaySize(); wxSize sizeScreen = wxGetDisplaySize();
wxPoint *pos = (wxPoint*)user_data; wxPoint *pos = (wxPoint*)user_data;
@@ -4394,15 +4416,25 @@ void wxWindowGTK::DoCaptureMouse()
if (!cursor->IsOk()) if (!cursor->IsOk())
cursor = wxSTANDARD_CURSOR; cursor = wxSTANDARD_CURSOR;
const GdkEventMask mask = GdkEventMask(
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK);
#ifdef __WXGTK3__
GdkDisplay* display = gdk_window_get_display(window);
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_grab(
device, window, GDK_OWNERSHIP_NONE, false, mask,
cursor->GetCursor(), unsigned(GDK_CURRENT_TIME));
#else
gdk_pointer_grab( window, FALSE, gdk_pointer_grab( window, FALSE,
(GdkEventMask) mask,
(GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK),
NULL, NULL,
cursor->GetCursor(), cursor->GetCursor(),
(guint32)GDK_CURRENT_TIME ); (guint32)GDK_CURRENT_TIME );
#endif
g_captureWindow = this; g_captureWindow = this;
g_captureWindowHasMouse = true; g_captureWindowHasMouse = true;
} }
@@ -4424,7 +4456,14 @@ void wxWindowGTK::DoReleaseMouse()
if (!window) if (!window)
return; return;
#ifdef __WXGTK3__
GdkDisplay* display = gdk_window_get_display(window);
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME));
#else
gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME ); gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME );
#endif
} }
void wxWindowGTK::GTKReleaseMouseAndNotify() void wxWindowGTK::GTKReleaseMouseAndNotify()
@@ -4650,8 +4689,14 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
wxPoint wxGetMousePosition() wxPoint wxGetMousePosition()
{ {
int x, y; int x, y;
GdkModifierType unused; GdkDisplay* display = GetDisplay();
GetMouseState(x, y, unused); #ifdef __WXGTK3__
GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_get_position(device, NULL, &x, &y);
#else
gdk_display_get_pointer(display, NULL, &x, &y, NULL);
#endif
return wxPoint(x, y); return wxPoint(x, y);
} }