diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop.cpp | 80 | ||||
| -rw-r--r-- | src/ui/dialog/dialog-manager.cpp | 9 | ||||
| -rw-r--r-- | src/ui/dialog/dialog-manager.h | 4 |
3 files changed, 42 insertions, 51 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp index d19a99da6..dbad37b92 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -1896,55 +1896,45 @@ SPDesktop::show_dialogs() /* - * Get each dialogs previous state from preferences and reopen on startup if needed. - * Map dialog 'open' verb ids to dialog last visible state preference. - * Would prefer to use the Dialog Manager to open, but currently it doesn't support non-dockable dialogs + * Get each dialogs previous state from preferences and reopen on startup if needed, without grabbing focus (canvas retains focus). + * Map dialog manager's dialog IDs to dialog last visible state preference. FIXME: store this correspondence in dialogs themselves! */ - std::map<int, Glib::ustring> mapVerbPreference; - std::map<int, Glib::ustring>::const_iterator iter; - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_LAYERS, "/dialogs/layers") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_FILL_STROKE, "/dialogs/fillstroke") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_EXTENSIONEDITOR, "/dialogs/extensioneditor") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_ALIGN_DISTRIBUTE, "/dialogs/align") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_METADATA, "/dialogs/documentmetadata") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_NAMEDVIEW, "/dialogs/documentoptions") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_FILTER_EFFECTS, "/dialogs/filtereffects") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_FIND, "/dialogs/find") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_GLYPHS, "/dialogs/glyphs") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_DEBUG, "/dialogs/messages") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_HELP_MEMORY, "/dialogs/memory") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_LIVE_PATH_EFFECT, "/dialogs/livepatheffect") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_UNDO_HISTORY, "/dialogs/undo-history") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_TRANSFORM, "/dialogs/transformation") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_SWATCHES, "/dialogs/swatches") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_VIEW_ICON_PREVIEW, "/dialogs/iconpreview") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_SVG_FONTS, "/dialogs/svgfonts") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_INPUT, "/dialogs/inputdevices") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_DISPLAY, "/dialogs/preferences") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_GRIDTILE, "/dialogs/gridtiler") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_TRACE, "/dialogs/trace") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_PIXEL_ART, "/dialogs/pixelart") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_TEXT, "/dialogs/textandfont") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_EXPORT, "/dialogs/export") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_XML_EDITOR, "/dialogs/xml") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_FIND, "/dialogs/find") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_CLONETILER, "/dialogs/clonetiler") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_ITEM, "/dialogs/object") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_SPELLCHECK, "/dialogs/spellcheck") ); - mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_SYMBOLS, "/dialogs/symbols") ); - - for (iter = mapVerbPreference.begin(); iter != mapVerbPreference.end(); iter++) { - int verbId = iter->first; + std::map<Glib::ustring, Glib::ustring> mapVerbPreference; + mapVerbPreference.insert(std::make_pair ("LayersPanel", "/dialogs/layers") ); + mapVerbPreference.insert(std::make_pair ("FillAndStroke", "/dialogs/fillstroke") ); + mapVerbPreference.insert(std::make_pair ("ExtensionEditor", "/dialogs/extensioneditor") ); + mapVerbPreference.insert(std::make_pair ("AlignAndDistribute", "/dialogs/align") ); + mapVerbPreference.insert(std::make_pair ("DocumentMetadata", "/dialogs/documentmetadata") ); + mapVerbPreference.insert(std::make_pair ("DocumentProperties", "/dialogs/documentoptions") ); + mapVerbPreference.insert(std::make_pair ("FilterEffectsDialog", "/dialogs/filtereffects") ); + mapVerbPreference.insert(std::make_pair ("Find", "/dialogs/find") ); + mapVerbPreference.insert(std::make_pair ("Glyphs", "/dialogs/glyphs") ); + mapVerbPreference.insert(std::make_pair ("Messages", "/dialogs/messages") ); + mapVerbPreference.insert(std::make_pair ("Memory", "/dialogs/memory") ); + mapVerbPreference.insert(std::make_pair ("LivePathEffect", "/dialogs/livepatheffect") ); + mapVerbPreference.insert(std::make_pair ("UndoHistory", "/dialogs/undo-history") ); + mapVerbPreference.insert(std::make_pair ("Transformation", "/dialogs/transformation") ); + mapVerbPreference.insert(std::make_pair ("Swatches", "/dialogs/swatches") ); + mapVerbPreference.insert(std::make_pair ("IconPreviewPanel", "/dialogs/iconpreview") ); + mapVerbPreference.insert(std::make_pair ("SvgFontsDialog", "/dialogs/svgfonts") ); + mapVerbPreference.insert(std::make_pair ("InputDevices", "/dialogs/inputdevices") ); + mapVerbPreference.insert(std::make_pair ("InkscapePreferences", "/dialogs/preferences") ); + mapVerbPreference.insert(std::make_pair ("TileDialog", "/dialogs/gridtiler") ); + mapVerbPreference.insert(std::make_pair ("Trace", "/dialogs/trace") ); + mapVerbPreference.insert(std::make_pair ("PixelArt", "/dialogs/pixelart") ); + mapVerbPreference.insert(std::make_pair ("TextFont", "/dialogs/textandfont") ); + mapVerbPreference.insert(std::make_pair ("Export", "/dialogs/export") ); + mapVerbPreference.insert(std::make_pair ("XmlTree", "/dialogs/xml") ); + mapVerbPreference.insert(std::make_pair ("CloneTiler", "/dialogs/clonetiler") ); + mapVerbPreference.insert(std::make_pair ("ObjectProperties", "/dialogs/object") ); + mapVerbPreference.insert(std::make_pair ("SpellCheck", "/dialogs/spellcheck") ); + mapVerbPreference.insert(std::make_pair ("Symbols", "/dialogs/symbols") ); + + for (std::map<Glib::ustring, Glib::ustring>::const_iterator iter = mapVerbPreference.begin(); iter != mapVerbPreference.end(); iter++) { Glib::ustring pref = iter->second; int visible = prefs->getInt(pref + "/visible", 0); if (visible) { - Inkscape::Verb *verb = Inkscape::Verb::get(verbId); - if (verb) { - SPAction *action = verb->get_action(Inkscape::ActionContext(this)); - if (action) { - sp_action_perform(action, NULL); - } - } + _dlg_mgr->showDialog(iter->first.c_str(), false); // without grabbing focus, we need focus to remain on the canvas } } } diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp index 17f6ae74d..6d32e3aa8 100644 --- a/src/ui/dialog/dialog-manager.cpp +++ b/src/ui/dialog/dialog-manager.cpp @@ -243,14 +243,14 @@ Dialog *DialogManager::getDialog(GQuark name) { /** * Shows the named dialog, creating it if necessary. */ -void DialogManager::showDialog(gchar const *name) { - showDialog(g_quark_from_string(name)); +void DialogManager::showDialog(gchar const *name, bool grabfocus) { + showDialog(g_quark_from_string(name), grabfocus); } /** * Shows the named dialog, creating it if necessary. */ -void DialogManager::showDialog(GQuark name) { +void DialogManager::showDialog(GQuark name, bool grabfocus) { bool wantTiming = Inkscape::Preferences::get()->getBool("/dialogs/debug/trackAppear", false); GTimer *timer = (wantTiming) ? g_timer_new() : 0; // if needed, must be created/started before getDialog() Dialog *dialog = getDialog(name); @@ -261,7 +261,8 @@ void DialogManager::showDialog(GQuark name) { tracker->setAutodelete(true); timer = 0; } - dialog->present(); + if (grabfocus) + dialog->present(); } if ( timer ) { diff --git a/src/ui/dialog/dialog-manager.h b/src/ui/dialog/dialog-manager.h index 33b166aa1..15573f760 100644 --- a/src/ui/dialog/dialog-manager.h +++ b/src/ui/dialog/dialog-manager.h @@ -44,8 +44,8 @@ public: void registerFactory(GQuark name, DialogFactory factory); Dialog *getDialog(gchar const* dlgName); Dialog *getDialog(GQuark dlgName); - void showDialog(gchar const *name); - void showDialog(GQuark name); + void showDialog(gchar const *name, bool grabfocus=true); + void showDialog(GQuark name, bool grabfocus=true); protected: DialogManager(DialogManager const &d); // no copy |
