summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Bintz <me@johnbintz.com>2006-08-13 17:45:18 +0000
committerjohncoswell <johncoswell@users.sourceforge.net>2006-08-13 17:45:18 +0000
commitaddfca5cf637c0fe78d5bdeb2cb122f1f77131f8 (patch)
tree88d085d9e6083b9f07ca5d2a0230948e49ab8955 /src
parentFixed: Wrong colour space was used in images with transparency. (diff)
downloadinkscape-addfca5cf637c0fe78d5bdeb2cb122f1f77131f8.tar.gz
inkscape-addfca5cf637c0fe78d5bdeb2cb122f1f77131f8.zip
added functions to allow update events to process during long-running operations
(bzr r1595)
Diffstat (limited to 'src')
-rw-r--r--src/desktop.cpp6
-rw-r--r--src/desktop.h1
-rw-r--r--src/ui/view/edit-widget-interface.h3
-rw-r--r--src/ui/view/edit-widget.cpp9
-rw-r--r--src/ui/view/edit-widget.h1
-rw-r--r--src/widgets/desktop-widget.cpp9
-rw-r--r--src/widgets/desktop-widget.h3
7 files changed, 32 insertions, 0 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 189ab9866..04328e84d 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -1054,6 +1054,12 @@ SPDesktop::onRedrawRequested ()
}
}
+void
+SPDesktop::updateCanvasNow()
+{
+ _widget->requestCanvasUpdateAndWait();
+}
+
/**
* Associate document with desktop.
*/
diff --git a/src/desktop.h b/src/desktop.h
index e499358c7..5e0b1f3a8 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -224,6 +224,7 @@ struct SPDesktop : public Inkscape::UI::View::View
void setToolboxAdjustmentValue (gchar const* id, double val);
bool isToolboxButtonActive (gchar const *id);
void updateNow();
+ void updateCanvasNow();
void fullscreen();
diff --git a/src/ui/view/edit-widget-interface.h b/src/ui/view/edit-widget-interface.h
index 689eff4a7..605c72b59 100644
--- a/src/ui/view/edit-widget-interface.h
+++ b/src/ui/view/edit-widget-interface.h
@@ -70,6 +70,9 @@ struct EditWidgetInterface
/// Queue a redraw request with the canvas
virtual void requestCanvasUpdate() = 0;
+ /// Force a redraw of the canvas
+ virtual void requestCanvasUpdateAndWait() = 0;
+
/// Update the "active desktop" indicator
virtual void activateDesktop() = 0;
diff --git a/src/ui/view/edit-widget.cpp b/src/ui/view/edit-widget.cpp
index 626c30941..6a4306147 100644
--- a/src/ui/view/edit-widget.cpp
+++ b/src/ui/view/edit-widget.cpp
@@ -1294,6 +1294,15 @@ EditWidget::requestCanvasUpdate()
}
void
+EditWidget::requestCanvasUpdateAndWait()
+{
+ requestCanvasUpdate();
+
+ while (gtk_events_pending())
+ gtk_main_iteration_do(FALSE);
+}
+
+void
EditWidget::activateDesktop()
{
/// \todo active_desktop_indicator not implemented
diff --git a/src/ui/view/edit-widget.h b/src/ui/view/edit-widget.h
index 0beb77b53..096137c2a 100644
--- a/src/ui/view/edit-widget.h
+++ b/src/ui/view/edit-widget.h
@@ -108,6 +108,7 @@ public:
virtual bool shutdown();
virtual void destroy();
virtual void requestCanvasUpdate();
+ virtual void requestCanvasUpdateAndWait();
virtual void activateDesktop();
virtual void deactivateDesktop();
virtual void viewSetPosition (NR::Point p);
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 9590af94c..795fdb0f8 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -661,6 +661,15 @@ SPDesktopWidget::requestCanvasUpdate() {
}
void
+SPDesktopWidget::requestCanvasUpdateAndWait() {
+ requestCanvasUpdate();
+
+ while (gtk_events_pending())
+ gtk_main_iteration_do(FALSE);
+
+}
+
+void
SPDesktopWidget::setCoordinateStatus(NR::Point p)
{
gchar *cstr;
diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h
index cc66bf180..409f38a8d 100644
--- a/src/widgets/desktop-widget.h
+++ b/src/widgets/desktop-widget.h
@@ -133,6 +133,8 @@ struct SPDesktopWidget {
virtual void requestCanvasUpdate()
{ _dtw->requestCanvasUpdate(); }
+ virtual void requestCanvasUpdateAndWait()
+ { _dtw->requestCanvasUpdateAndWait(); }
virtual void activateDesktop()
{ sp_dtw_desktop_activate (_dtw); }
virtual void deactivateDesktop()
@@ -183,6 +185,7 @@ struct SPDesktopWidget {
bool isToolboxButtonActive (gchar const *id);
void setCoordinateStatus(NR::Point p);
void requestCanvasUpdate();
+ void requestCanvasUpdateAndWait();
void updateTitle(gchar const *uri);
};