summaryrefslogtreecommitdiffstats
path: root/src/dialogs
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2006-10-26 06:58:34 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2006-10-26 06:58:34 +0000
commitb959fcf57e91d740f7e617e3fdacb771069e0faf (patch)
tree9f6855761384aca0bbc57f3baca55fde5ce4d9cb /src/dialogs
parentextend the semantics of sp_canvas_force_full_redraw_after_interruptions to al... (diff)
downloadinkscape-b959fcf57e91d740f7e617e3fdacb771069e0faf.tar.gz
inkscape-b959fcf57e91d740f7e617e3fdacb771069e0faf.zip
workaround for crash 1580903 and several other issues caused by GTK's braindead behavior exposed by display interruptibility
(bzr r1866)
Diffstat (limited to 'src/dialogs')
-rw-r--r--src/dialogs/fill-style.cpp6
-rw-r--r--src/dialogs/object-properties.cpp16
2 files changed, 21 insertions, 1 deletions
diff --git a/src/dialogs/fill-style.cpp b/src/dialogs/fill-style.cpp
index 22c1ee0f7..9933887f3 100644
--- a/src/dialogs/fill-style.cpp
+++ b/src/dialogs/fill-style.cpp
@@ -35,6 +35,7 @@
#include <document-private.h>
#include <xml/repr.h>
#include <glibmm/i18n.h>
+#include <display/sp-canvas.h>
// These can be deleted once we sort out the libart dependence.
@@ -396,9 +397,14 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel,
case SP_PAINT_SELECTOR_MODE_COLOR_RGB:
case SP_PAINT_SELECTOR_MODE_COLOR_CMYK:
{
+ // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in losing release events
+ sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(desktop), 0);
+
sp_paint_selector_set_flat_color (psel, desktop, "fill", "fill-opacity");
sp_document_maybe_done (sp_desktop_document(desktop), undo_label, SP_VERB_DIALOG_FILL_STROKE,
_("Set fill color"));
+ // resume interruptibility
+ sp_canvas_end_forced_full_redraws(sp_desktop_canvas(desktop));
// on release, toggle undo_label so that the next drag will not be lumped with this one
if (undo_label == undo_label_1)
diff --git a/src/dialogs/object-properties.cpp b/src/dialogs/object-properties.cpp
index 77d71b5fe..dc04d2772 100644
--- a/src/dialogs/object-properties.cpp
+++ b/src/dialogs/object-properties.cpp
@@ -44,6 +44,7 @@
#include "document-private.h"
#include <selection.h>
#include "xml/repr.h"
+#include "display/sp-canvas.h"
static GtkWidget *dlg = NULL;
static win_data wd;
@@ -360,6 +361,9 @@ sp_fillstroke_opacity_changed (GtkAdjustment *a, SPWidget *base)
gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (TRUE));
+ // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in crash 1580903
+ sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(SP_ACTIVE_DESKTOP), 0);
+
SPCSSAttr *css = sp_repr_css_attr_new ();
Inkscape::CSSOStringStream os;
@@ -373,6 +377,9 @@ sp_fillstroke_opacity_changed (GtkAdjustment *a, SPWidget *base)
sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "fillstroke:opacity", SP_VERB_DIALOG_FILL_STROKE,
_("Change opacity"));
+ // resume interruptibility
+ sp_canvas_end_forced_full_redraws(sp_desktop_canvas(SP_ACTIVE_DESKTOP));
+
gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (FALSE));
}
@@ -386,12 +393,15 @@ sp_fillstroke_blur_changed (GtkAdjustment *a, SPWidget *base)
//lock dialog
gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (TRUE));
-
+
//get desktop
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
if (!desktop) {
return;
}
+
+ // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in crash 1580903
+ sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(desktop), 0);
//get current selection
Inkscape::Selection *selection = sp_desktop_selection (desktop);
@@ -423,6 +433,10 @@ sp_fillstroke_blur_changed (GtkAdjustment *a, SPWidget *base)
}
sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "fillstroke:blur", SP_VERB_DIALOG_FILL_STROKE, _("Change blur"));
+
+ // resume interruptibility
+ sp_canvas_end_forced_full_redraws(sp_desktop_canvas(desktop));
+
gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (FALSE));
}