summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2010-07-25 04:54:39 +0000
committerJon A. Cruz <jon@joncruz.org>2010-07-25 04:54:39 +0000
commit891cc7951b541d02863ca3c6a858334abeb6132e (patch)
treed7b22ccf96611eca7c3bb0469b0ec004e2f137c1 /src
parentAdding preference to suppress packing of previews. (diff)
downloadinkscape-891cc7951b541d02863ca3c6a858334abeb6132e.tar.gz
inkscape-891cc7951b541d02863ca3c6a858334abeb6132e.zip
Added preference to keep last selected item shown.
(bzr r9644)
Diffstat (limited to 'src')
-rw-r--r--src/preferences-skeleton.h1
-rw-r--r--src/ui/dialog/icon-preview.cpp46
-rw-r--r--src/ui/dialog/icon-preview.h1
3 files changed, 30 insertions, 18 deletions
diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h
index 283960b80..e117e85a5 100644
--- a/src/preferences-skeleton.h
+++ b/src/preferences-skeleton.h
@@ -393,6 +393,7 @@ static char const preferences_skeleton[] =
" <group\n"
" id=\"iconpreview\"\n"
" pack=\"1\"\n"
+" selectionHold=\"0\"\n"
" selectionOnly=\"0\">\n"
" <group\n"
" id=\"sizes\">\n"
diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp
index 7be667383..d3a28d96f 100644
--- a/src/ui/dialog/icon-preview.cpp
+++ b/src/ui/dialog/icon-preview.cpp
@@ -86,6 +86,7 @@ IconPreviewPanel::IconPreviewPanel() :
document(0),
timer(0),
pending(false),
+ targetId(),
hot(1),
selectionButton(0),
desktopChangeConn(),
@@ -302,28 +303,33 @@ void IconPreviewPanel::refreshPreview()
// Do not refresh too quickly
queueRefresh();
} else if ( desktop ) {
+ bool hold = Inkscape::Preferences::get()->getBool("/iconpreview/selectionHold", false);
if ( selectionButton && selectionButton->get_active() )
{
- Inkscape::Selection * sel = sp_desktop_selection(desktop);
- if ( sel ) {
- //g_message("found a selection to play with");
-
- GSList const *items = sel->itemList();
- SPObject *target = 0;
- while ( items && !target ) {
- SPItem* item = SP_ITEM( items->data );
- SPObject * obj = SP_OBJECT(item);
- gchar const *id = obj->getId();
- if ( id ) {
- target = obj;
+ SPObject *target = (hold && !targetId.empty()) ? desktop->doc()->getObjectById( targetId.c_str() ) : 0;
+ if ( !target ) {
+ targetId.clear();
+ Inkscape::Selection * sel = sp_desktop_selection(desktop);
+ if ( sel ) {
+ //g_message("found a selection to play with");
+
+ GSList const *items = sel->itemList();
+ while ( items && !target ) {
+ SPItem* item = SP_ITEM( items->data );
+ SPObject * obj = SP_OBJECT(item);
+ gchar const *id = obj->getId();
+ if ( id ) {
+ targetId = id;
+ target = obj;
+ }
+
+ items = g_slist_next(items);
}
-
- items = g_slist_next(items);
- }
- if ( target ) {
- renderPreview(target);
}
}
+ if ( target ) {
+ renderPreview(target);
+ }
} else {
SPObject *target = desktop->currentRoot();
if ( target ) {
@@ -362,7 +368,11 @@ void IconPreviewPanel::queueRefresh()
void IconPreviewPanel::modeToggled()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("/iconpreview/selectionOnly", (selectionButton && selectionButton->get_active()));
+ bool selectionOnly = (selectionButton && selectionButton->get_active());
+ prefs->setBool("/iconpreview/selectionOnly", selectionOnly);
+ if ( !selectionOnly ) {
+ targetId.clear();
+ }
refreshPreview();
}
diff --git a/src/ui/dialog/icon-preview.h b/src/ui/dialog/icon-preview.h
index 9de882569..0842c3c5e 100644
--- a/src/ui/dialog/icon-preview.h
+++ b/src/ui/dialog/icon-preview.h
@@ -68,6 +68,7 @@ private:
Gtk::VBox iconBox;
Gtk::HPaned splitter;
+ Glib::ustring targetId;
int hot;
int numEntries;
int* sizes;