diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2010-04-03 06:08:32 +0000 |
|---|---|---|
| committer | Jon A. Cruz <jon@joncruz.org> | 2010-04-03 06:08:32 +0000 |
| commit | 3711eca2865718dca833c2d1ed84c44c513dcd28 (patch) | |
| tree | 3cfc3d98b690d9018b06f9e786fa757fd18dad85 /src/ui/dialog/fill-and-stroke.cpp | |
| parent | Fix command line invocation on Windows (LP #167455). (diff) | |
| download | inkscape-3711eca2865718dca833c2d1ed84c44c513dcd28.tar.gz inkscape-3711eca2865718dca833c2d1ed84c44c513dcd28.zip | |
Split dynamic desktop tracking into common, shared code.
(bzr r9282)
Diffstat (limited to 'src/ui/dialog/fill-and-stroke.cpp')
| -rw-r--r-- | src/ui/dialog/fill-and-stroke.cpp | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index 6ee076a94..8c86e1ca4 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -43,11 +43,11 @@ FillAndStroke::FillAndStroke() _page_stroke_paint(1, 1, true, true), _page_stroke_style(1, 1, true, true), _composite_settings(SP_VERB_DIALOG_FILL_STROKE, "fillstroke", UI::Widget::SimpleFilterModifier::BLUR), - hierID(0), - trackActive(false), + deskTrack(), targetDesktop(0), fillWdgt(0), - strokeWdgt(0) + strokeWdgt(0), + desktopChangeConn() { Gtk::Box *contents = _getContents(); contents->set_spacing(0); @@ -68,59 +68,35 @@ FillAndStroke::FillAndStroke() _composite_settings.setSubject(&_subject); - // Use C/gobject callbacks to avoid gtkmm rewrap-during-destruct issues: - hierID = g_signal_connect( G_OBJECT(gobj()), "hierarchy-changed", G_CALLBACK(hierarchyChangeCB), this ); - - g_signal_connect( G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK( activateDesktopCB ), this ); + // Connect this up last + desktopChangeConn = deskTrack.connectDesktopChanged( sigc::mem_fun(*this, &FillAndStroke::setTargetDesktop) ); + deskTrack.connect(GTK_WIDGET(gobj())); } FillAndStroke::~FillAndStroke() { _composite_settings.setSubject(NULL); - if (hierID) { - g_signal_handler_disconnect(G_OBJECT(gobj()), hierID); - hierID = 0; - } -} -gboolean FillAndStroke::activateDesktopCB(Inkscape::Application */*inkscape*/, SPDesktop *desktop, FillAndStroke *self ) -{ - if (self && self->trackActive) { - self->setTargetDesktop(desktop); - } - return FALSE; -} - -bool FillAndStroke::hierarchyChangeCB(GtkWidget *widget, GtkWidget* /*prev*/, FillAndStroke *self) -{ - if (self) { - GtkWidget *ww = gtk_widget_get_ancestor(widget, SP_TYPE_VIEW_WIDGET); - bool newFlag = (ww == 0); - if (newFlag != self->trackActive) { - self->trackActive = newFlag; - if (self->trackActive) { - self->setTargetDesktop(SP_ACTIVE_DESKTOP); - } else { - self->setTargetDesktop(self->getDesktop()); - } - } - } - return false; + desktopChangeConn.disconnect(); + deskTrack.disconnect(); } void FillAndStroke::setDesktop(SPDesktop *desktop) { Panel::setDesktop(desktop); - setTargetDesktop(desktop); + deskTrack.setBase(desktop); } void FillAndStroke::setTargetDesktop(SPDesktop *desktop) { - if (fillWdgt) { - sp_fill_style_widget_set_desktop(fillWdgt, desktop); - } - if (strokeWdgt) { - sp_stroke_style_widget_set_desktop(strokeWdgt, desktop); + if (targetDesktop != desktop) { + targetDesktop = desktop; + if (fillWdgt) { + sp_fill_style_widget_set_desktop(fillWdgt, desktop); + } + if (strokeWdgt) { + sp_stroke_style_widget_set_desktop(strokeWdgt, desktop); + } } } |
