summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlex Valavanis <valavanisalex@gmail.com>2012-06-23 12:55:01 +0000
committerAlex Valavanis <valavanisalex@gmail.com>2012-06-23 12:55:01 +0000
commit3105af2e1edcb50e3d2e67f04f859165de2f5951 (patch)
tree68822dae76f1ff07ec91b8b958e28e7b265cfe5a /src
parentFix missing glibmm header (diff)
downloadinkscape-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.cpp25
-rw-r--r--src/display/sp-canvas.cpp48
-rw-r--r--src/knot.cpp11
-rw-r--r--src/widgets/sp-color-slider.cpp18
-rw-r--r--src/widgets/stroke-style.cpp5
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);