diff options
| author | Alex Valavanis <valavanisalex@gmail.com> | 2012-06-23 12:55:01 +0000 |
|---|---|---|
| committer | Alex Valavanis <valavanisalex@gmail.com> | 2012-06-23 12:55:01 +0000 |
| commit | 3105af2e1edcb50e3d2e67f04f859165de2f5951 (patch) | |
| tree | 68822dae76f1ff07ec91b8b958e28e7b265cfe5a /src | |
| parent | Fix missing glibmm header (diff) | |
| download | inkscape-3105af2e1edcb50e3d2e67f04f859165de2f5951.tar.gz inkscape-3105af2e1edcb50e3d2e67f04f859165de2f5951.zip | |
Migrate to new device pointer API for GTK+ 3
(bzr r11511)
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop-events.cpp | 25 | ||||
| -rw-r--r-- | src/display/sp-canvas.cpp | 48 | ||||
| -rw-r--r-- | src/knot.cpp | 11 | ||||
| -rw-r--r-- | src/widgets/sp-color-slider.cpp | 18 | ||||
| -rw-r--r-- | src/widgets/stroke-style.cpp | 5 |
5 files changed, 101 insertions, 6 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 1e6837ed2..668dfd395 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -92,15 +92,18 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge SPDesktop *desktop = dtw->desktop; GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(dtw->canvas)); - gdk_window_get_pointer(window, &wx, &wy, NULL); - Geom::Point const event_win(wx, wy); - gint width, height; + #if GTK_CHECK_VERSION(3,0,0) + GdkDevice *device = gdk_event_get_device(event); + gdk_window_get_device_position(window, device, &wx, &wy, NULL); gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height); #else + gdk_window_get_pointer(window, &wx, &wy, NULL); gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height, NULL/*depth*/); #endif + + Geom::Point const event_win(wx, wy); switch (event->type) { case GDK_BUTTON_PRESS: @@ -153,10 +156,21 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge guide = sp_guideline_new(desktop->guides, NULL, event_dt, normal); sp_guideline_set_color(SP_GUIDELINE(guide), desktop->namedview->guidehicolor); + +#if GTK_CHECK_VERSION(3,0,0) + gdk_device_grab(device, + gtk_widget_get_window(widget), + GDK_OWNERSHIP_NONE, + FALSE, + (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), + NULL, + event->button.time); +#else gdk_pointer_grab(gtk_widget_get_window (widget), FALSE, (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), NULL, NULL, event->button.time); +#endif } break; case GDK_MOTION_NOTIFY: @@ -192,7 +206,12 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge if (clicked && event->button.button == 1) { sp_event_context_discard_delayed_snap_event(desktop->event_context); +#if GTK_CHECK_VERSION(3,0,0) + gdk_device_ungrab(device, event->button.time); +#else gdk_pointer_ungrab(event->button.time); +#endif + Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win)); Geom::Point event_dt(desktop->w2d(event_w)); diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index b11707d65..74c39f580 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -562,7 +562,14 @@ void sp_canvas_item_dispose(GObject *object) if (item == item->canvas->grabbed_item) { item->canvas->grabbed_item = NULL; + +#if GTK_CHECK_VERSION(3,0,0) + GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + gdk_device_ungrab(device, GDK_CURRENT_TIME); +#else gdk_pointer_ungrab (GDK_CURRENT_TIME); +#endif } if (item == item->canvas->focused_item) { @@ -891,9 +898,21 @@ int sp_canvas_item_grab(SPCanvasItem *item, guint event_mask, GdkCursor *cursor, // fixme: Top hack (Lauris) // fixme: If we add key masks to event mask, Gdk will abort (Lauris) // fixme: But Canvas actualle does get key events, so all we need is routing these here +#if GTK_CHECK_VERSION(3,0,0) + GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + gdk_device_grab(device, + getWindow(item->canvas), + GDK_OWNERSHIP_NONE, + FALSE, + (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), + cursor, + etime); +#else gdk_pointer_grab( getWindow(item->canvas), FALSE, (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), NULL, cursor, etime); +#endif item->canvas->grabbed_item = item; item->canvas->grabbed_event_mask = event_mask; @@ -920,7 +939,13 @@ void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime) item->canvas->grabbed_item = NULL; +#if GTK_CHECK_VERSION(3,0,0) + GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + gdk_device_ungrab(device, etime); +#else gdk_pointer_ungrab (etime); +#endif } /** @@ -1318,7 +1343,13 @@ void SPCanvasImpl::shutdown_transients(SPCanvas *canvas) if (canvas->grabbed_item) { canvas->grabbed_item = NULL; +#if GTK_CHECK_VERSION(3,0,0) + GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + gdk_device_ungrab(device, GDK_CURRENT_TIME); +#else gdk_pointer_ungrab (GDK_CURRENT_TIME); +#endif } remove_idle(canvas); @@ -1814,7 +1845,13 @@ gint SPCanvasImpl::handleScroll(GtkWidget *widget, GdkEventScroll *event) } static inline void request_motions(GdkWindow *w, GdkEventMotion *event) { +#if GTK_CHECK_VERSION(3,0,0) + gdk_window_get_device_position(w, + gdk_event_get_device((GdkEvent *)(event)), + NULL, NULL, NULL); +#else gdk_window_get_pointer(w, NULL, NULL, NULL); +#endif gdk_event_request_motions(event); } @@ -2082,7 +2119,18 @@ bool SPCanvasImpl::sp_canvas_paint_rect(SPCanvas *canvas, int xx0, int yy0, int // Save the mouse location gint x, y; + +#if GTK_CHECK_VERSION(3,0,0) + GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + + gdk_window_get_device_position(gtk_widget_get_window(GTK_WIDGET(canvas)), + device, + &x, &y, NULL); +#else gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET(canvas)), &x, &y, NULL); +#endif + setup.mouse_loc = sp_canvas_window_to_world (canvas, Geom::Point(x,y)); if (canvas->rendermode != Inkscape::RENDERMODE_OUTLINE) { diff --git a/src/knot.cpp b/src/knot.cpp index e6fd5c044..7a20f0c28 100644 --- a/src/knot.cpp +++ b/src/knot.cpp @@ -227,10 +227,21 @@ static void sp_knot_dispose(GObject *object) { SPKnot *knot = static_cast<SPKnot *>(object); +#if GTK_CHECK_VERSION(3,0,0) + GdkDisplay *display = gdk_display_get_default(); + GdkDeviceManager *dm = gdk_display_get_device_manager(display); + GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + + if ((knot->flags & SP_KNOT_GRABBED) && gdk_display_device_is_grabbed(display, device)) { + // This happens e.g. when deleting a node in node tool while dragging it + gdk_device_ungrab(device, GDK_CURRENT_TIME); + } +#else if ((knot->flags & SP_KNOT_GRABBED) && gdk_pointer_is_grabbed ()) { // This happens e.g. when deleting a node in node tool while dragging it gdk_pointer_ungrab (GDK_CURRENT_TIME); } +#endif if (knot->_event_handler_id > 0) { diff --git a/src/widgets/sp-color-slider.cpp b/src/widgets/sp-color-slider.cpp index 1d3d81ba1..7934a4118 100644 --- a/src/widgets/sp-color-slider.cpp +++ b/src/widgets/sp-color-slider.cpp @@ -306,10 +306,21 @@ sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event) slider->oldvalue = slider->value; ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) ); g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0); + +#if GTK_CHECK_VERSION(3,0,0) + gdk_device_grab(gdk_event_get_device((GdkEvent*)event), + gtk_widget_get_window(widget), + GDK_OWNERSHIP_NONE, + FALSE, + (GdkEventMask)(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), + NULL, + event->time); +#else gdk_pointer_grab(gtk_widget_get_window(widget), FALSE, (GdkEventMask)(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, NULL, event->time); +#endif } return FALSE; @@ -323,7 +334,14 @@ sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event) slider = SP_COLOR_SLIDER (widget); if (event->button == 1) { + +#if GTK_CHECK_VERSION(3,0,0) + gdk_device_ungrab(gdk_event_get_device((GdkEvent *)event), + gdk_event_get_time((GdkEvent *)event)); +#else gdk_pointer_ungrab (event->time); +#endif + slider->dragging = FALSE; g_signal_emit (G_OBJECT (slider), slider_signals[RELEASED], 0); if (slider->value != slider->oldvalue) g_signal_emit (G_OBJECT (slider), slider_signals[CHANGED], 0); diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 90634fe87..d6168ca04 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -341,13 +341,12 @@ Gtk::Container *sp_stroke_style_line_widget_new(void) #if WITH_GTKMM_3_0 Glib::RefPtr<Gtk::Adjustment> *a = new Glib::RefPtr<Gtk::Adjustment>(Gtk::Adjustment::create(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0)); - spw->set_data("width", a); - sb = new Inkscape::UI::Widget::SpinButton(*a, 0.1, 3); #else Gtk::Adjustment *a = new Gtk::Adjustment(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0); +#endif + spw->set_data("width", a); sb = new Inkscape::UI::Widget::SpinButton(*a, 0.1, 3); -#endif sb->set_tooltip_text(_("Stroke width")); sb->show(); spw_label(t, C_("Stroke width", "_Width:"), 0, i, sb); |
