diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-27 18:30:35 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-11-07 23:39:39 +0000 |
| commit | 9727c67e1593aa22bfb2c52c6893a8f4ac09519b (patch) | |
| tree | 4bcd8da01b15ef6c5b8a31cb105bb44681058c7e | |
| parent | Fix issue LPE Line Join rendering wrong for arcs line join. https://gitlab.co... (diff) | |
| download | inkscape-9727c67e1593aa22bfb2c52c6893a8f4ac09519b.tar.gz inkscape-9727c67e1593aa22bfb2c52c6893a8f4ac09519b.zip | |
Fix crash using split canvas with multiple monitors
| -rw-r--r-- | src/display/sp-canvas.cpp | 117 |
1 files changed, 61 insertions, 56 deletions
diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 311a727ec..3a338c53b 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -1647,43 +1647,45 @@ void SPCanvas::set_cursor(GtkWidget *widget) { SPCanvas *canvas = SP_CANVAS(widget); SPDesktop *desktop = SP_ACTIVE_DESKTOP; - if (desktop && desktop->splitMode()) { - GdkDisplay *display = gdk_display_get_default(); - GdkCursor *cursor = nullptr; - if (canvas->_split_hover_vertical) { - if (canvas->_changecursor != 1) { - cursor = gdk_cursor_new_from_name(display, "pointer"); - gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); - g_object_unref(cursor); - canvas->paintSpliter(); - } + GdkDisplay *display = gdk_display_get_default(); + GdkCursor *cursor = nullptr; + if (canvas->_split_hover_vertical) { + if (canvas->_changecursor != 1) { + cursor = gdk_cursor_new_from_name(display, "pointer"); + gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); + g_object_unref(cursor); + canvas->paintSpliter(); canvas->_changecursor = 1; - } else if (canvas->_split_hover_horizontal) { - if (canvas->_changecursor != 2) { - cursor = gdk_cursor_new_from_name(display, "pointer"); - gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); - g_object_unref(cursor); - canvas->paintSpliter(); - } + } + } else if (canvas->_split_hover_horizontal) { + if (canvas->_changecursor != 2) { + cursor = gdk_cursor_new_from_name(display, "pointer"); + gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); + g_object_unref(cursor); + canvas->paintSpliter(); canvas->_changecursor = 2; - } else if (canvas->_split_hover) { - if (canvas->_changecursor != 3) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (_split_vertical) { - cursor = gdk_cursor_new_from_name(display, "ew-resize"); - } else { - cursor = gdk_cursor_new_from_name(display, "ns-resize"); - } - gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); - g_object_unref(cursor); - canvas->paintSpliter(); + } + } else if (canvas->_split_hover) { + if (canvas->_changecursor != 3) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + if (_split_vertical) { + cursor = gdk_cursor_new_from_name(display, "ew-resize"); + } else { + cursor = gdk_cursor_new_from_name(display, "ns-resize"); } + gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); + g_object_unref(cursor); + canvas->paintSpliter(); canvas->_changecursor = 3; - } else { - if (desktop && desktop->event_context && !canvas->_split_pressed && canvas->_changecursor != 4) { - desktop->event_context->sp_event_context_update_cursor(); - canvas->paintSpliter(); - } + } + } else { + if (desktop && + desktop->event_context && + !canvas->_split_pressed && + (canvas->_changecursor != 0 && canvas->_changecursor != 4)) + { + desktop->event_context->sp_event_context_update_cursor(); + canvas->paintSpliter(); canvas->_changecursor = 4; } } @@ -1701,32 +1703,35 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) if (canvas->_root == nullptr) // canvas being deleted return FALSE; - + Geom::IntPoint cursor_pos = Geom::IntPoint(event->x, event->y); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (canvas->_spliter && - ((*canvas->_spliter).contains(cursor_pos) || canvas->_spliter_control.contains(cursor_pos)) && - !canvas->_is_dragging) { - canvas->_split_hover = true; - } else { - canvas->_split_hover = false; - } - if (canvas->_spliter_left && canvas->_spliter_right && - ((*canvas->_spliter_left).contains(cursor_pos) || (*canvas->_spliter_right).contains(cursor_pos)) && - !canvas->_is_dragging) { - canvas->_split_hover_horizontal = true; - } else { - canvas->_split_hover_horizontal = false; - } - if (!canvas->_split_hover_horizontal && canvas->_spliter_top && canvas->_spliter_bottom && - ((*canvas->_spliter_top).contains(cursor_pos) || (*canvas->_spliter_bottom).contains(cursor_pos)) && - !canvas->_is_dragging) { - canvas->_split_hover_vertical = true; - } else { - canvas->_split_hover_vertical = false; - } + + if (desktop && desktop->splitMode()) { + if (canvas->_spliter && + ((*canvas->_spliter).contains(cursor_pos) || canvas->_spliter_control.contains(cursor_pos)) && + !canvas->_is_dragging) { + canvas->_split_hover = true; + } else { + canvas->_split_hover = false; + } + if (canvas->_spliter_left && canvas->_spliter_right && + ((*canvas->_spliter_left).contains(cursor_pos) || (*canvas->_spliter_right).contains(cursor_pos)) && + !canvas->_is_dragging) { + canvas->_split_hover_horizontal = true; + } else { + canvas->_split_hover_horizontal = false; + } + if (!canvas->_split_hover_horizontal && canvas->_spliter_top && canvas->_spliter_bottom && + ((*canvas->_spliter_top).contains(cursor_pos) || (*canvas->_spliter_bottom).contains(cursor_pos)) && + !canvas->_is_dragging) { + canvas->_split_hover_vertical = true; + } else { + canvas->_split_hover_vertical = false; + } - canvas->set_cursor(widget); + canvas->set_cursor(widget); + } if (canvas->_split_pressed && desktop && desktop->event_context && desktop->splitMode()) { GtkAllocation allocation; canvas->_split_dragging = true; |
