diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp index 2ba2856ffef5297d6478495d1b96bf5eef29d499..decc18530a8d2bab5a4a82ba7caa5e09487bc570 100644 --- a/src/ui/dialog/dialog.cpp +++ b/src/ui/dialog/dialog.cpp @@ -55,18 +55,25 @@ Dialog::Dialog(Behavior::BehaviorFactory behavior_factory, const char *prefs_pat _prefs_path(prefs_path), _verb_num(verb_num), _title(), + _tooltip(), _apply_label(std::move(apply_label)), _desktop(nullptr), _is_active_desktop(true), _behavior(nullptr) { gchar title[500]; + gchar tooltip[500]; if (verb_num) { - sp_ui_dialog_title_string (Inkscape::Verb::get(verb_num), title); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool showShortcut = prefs->getBool("/options/shortcutindialogtitle/value", false); + + sp_ui_dialog_title_string (Inkscape::Verb::get(verb_num), title, showShortcut); + sp_ui_dialog_title_string (Inkscape::Verb::get(verb_num), tooltip, true); } _title = title; + _tooltip = tooltip; _behavior = behavior_factory(*this); _desktop = SP_ACTIVE_DESKTOP; diff --git a/src/ui/dialog/dialog.h b/src/ui/dialog/dialog.h index 404f4f9a333f0e12aaca714f1cd84143bd26806a..03d0da6828db6f654c51d54f4a40591f2175a01f 100644 --- a/src/ui/dialog/dialog.h +++ b/src/ui/dialog/dialog.h @@ -116,6 +116,7 @@ protected: Glib::ustring const _prefs_path; int _verb_num; Glib::ustring _title; + Glib::ustring _tooltip; Glib::ustring _apply_label; SPDesktop * _desktop; bool _is_active_desktop; diff --git a/src/ui/dialog/dock-behavior.cpp b/src/ui/dialog/dock-behavior.cpp index 87f312a9442a6ba8601892e9994b4442b747b7a9..42ba2e18dc6e63c6ac0f104a11ecb8c858ea37e6 100644 --- a/src/ui/dialog/dock-behavior.cpp +++ b/src/ui/dialog/dock-behavior.cpp @@ -30,7 +30,7 @@ DockBehavior::DockBehavior(Dialog &dialog) : _dock_item(*SP_ACTIVE_DESKTOP->getDock(), Inkscape::Verb::get(dialog._verb_num)->get_id(), dialog._title.c_str(), (Inkscape::Verb::get(dialog._verb_num)->get_image() ? - Inkscape::Verb::get(dialog._verb_num)->get_image() : ""), + Inkscape::Verb::get(dialog._verb_num)->get_image() : ""), dialog._tooltip.c_str(), static_cast( Inkscape::Preferences::get()->getInt(_dialog._prefs_path + "/state", UI::Widget::DockItem::DOCKED_STATE)), diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 1f094abbfd93d690b785f06da1561f053d7ce24c..9d9a1eac2ad8e0a94cf696d738964e19defd11eb 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -1067,6 +1067,7 @@ void InkscapePreferences::initPageUI() _win_hide_task.init ( _("Dialogs are hidden in taskbar"), "/options/dialogsskiptaskbar/value", true); _win_save_viewport.init ( _("Save and restore documents viewport"), "/options/savedocviewport/value", true); _win_zoom_resize.init ( _("Zoom when window is resized"), "/options/stickyzoom/value", false); + _win_show_shortcut_dialog.init ( _("Show shortcut in dialog title bar"), "/options/shortcutindialogtitle/value", false); _win_ontop_none.init ( C_("Dialog on top", "None"), "/options/transientpolicy/value", 0, false, nullptr); _win_ontop_normal.init ( _("Normal"), "/options/transientpolicy/value", 1, true, &_win_ontop_none); _win_ontop_agressive.init ( _("Aggressive"), "/options/transientpolicy/value", 2, false, &_win_ontop_none); @@ -1144,6 +1145,8 @@ void InkscapePreferences::initPageUI() _("Zoom drawing when document window is resized, to keep the same area visible (this is the default which can be changed in any window using the button above the right scrollbar)")); _page_windows.add_line( true, "", _win_save_viewport, "", _("Save documents viewport (zoom and panning position). Useful to turn off when sharing version controlled files.")); + _page_windows.add_line( true, "", _win_show_shortcut_dialog, "", + _("Show the dialog shortcut in its title bar.")); this->AddPage(_page_windows, _("Windows"), iter_ui, PREFS_PAGE_UI_WINDOWS); // Grids diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index a9b485a01cfdfdac58d44a06b06e759c33682324..0a66416717f70f8e985eae3182dd0fc2bbf245f4 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -268,6 +268,7 @@ protected: UI::Widget::PrefCheckButton _win_hide_task; UI::Widget::PrefCheckButton _win_save_viewport; UI::Widget::PrefCheckButton _win_zoom_resize; + UI::Widget::PrefCheckButton _win_show_shortcut_dialog; UI::Widget::PrefSpinButton _win_trans_focus; /**< The dialog transparency setting for when the dialog is focused. */ UI::Widget::PrefSpinButton _win_trans_blur; /**< The dialog transparency setting for when the dialog is out of focus. */ UI::Widget::PrefSpinButton _win_trans_time; /**< How much time to go from one transparency setting to another */ diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 45736da52291e3ccf85d247040403c65b5139b58..a73ff462bbb9924fb0e2060a93ac68ea22b43466 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -169,7 +169,7 @@ sp_ui_close_all() void -sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) +sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c, bool showShortcut) { SPAction *action; unsigned int shortcut; @@ -186,13 +186,15 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) g_free(atitle); - shortcut = sp_shortcut_get_primary(verb); - if (shortcut!=GDK_KEY_VoidSymbol) { - gchar* key = sp_shortcut_get_label(shortcut); - s = g_stpcpy(s, " ("); - s = g_stpcpy(s, key); - g_stpcpy(s, ")"); - g_free(key); + if (showShortcut) { + shortcut = sp_shortcut_get_primary(verb); + if (shortcut!=GDK_KEY_VoidSymbol) { + gchar* key = sp_shortcut_get_label(shortcut); + s = g_stpcpy(s, " ("); + s = g_stpcpy(s, key); + g_stpcpy(s, ")"); + g_free(key); + } } } diff --git a/src/ui/interface.h b/src/ui/interface.h index 67cb0f393134390c200121771c412a89d32382ca..a4dfe6a5a8c79b98616de1fc429851d23f90a11a 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -54,7 +54,7 @@ void sp_ui_import_files(gchar *buffer); */ unsigned int sp_ui_close_all (); -void sp_ui_dialog_title_string (Inkscape::Verb * verb, char* c); +void sp_ui_dialog_title_string (Inkscape::Verb * verb, char* c, bool showShortcut = false); Glib::ustring getLayoutPrefPath( Inkscape::UI::View::View *view ); diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index a02009ab5d00a64fd0a4a0ad1deca706e1ba7f55..6395d31430226801b35aa63e4c385fc5b87acc12 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -22,7 +22,8 @@ namespace UI { namespace Widget { DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& long_name, - const Glib::ustring& icon_name, State state, GdlDockPlacement placement) : + const Glib::ustring& icon_name, const Glib::ustring& tooltip, + State state, GdlDockPlacement placement) : _dock(dock), _prev_state(state), _prev_position(0), @@ -51,6 +52,11 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l _gdl_dock_item = gdl_dock_item_new(name.c_str(), long_name.c_str(), gdl_dock_behavior); } + GtkWidget *grip = gdl_dock_item_get_grip(GDL_DOCK_ITEM(_gdl_dock_item)); + if (grip) { + gtk_widget_set_tooltip_text(grip, tooltip.c_str()); + } + _frame.set_shadow_type(Gtk::SHADOW_IN); gtk_container_add (GTK_CONTAINER (_gdl_dock_item), GTK_WIDGET (_frame.gobj())); _frame.add(_dock_item_box); diff --git a/src/ui/widget/dock-item.h b/src/ui/widget/dock-item.h index be7ac77d2b8115b0e943dea31910ee8a4ad76142..b26a69759cf32683875c430c79def0c883d23fb5 100644 --- a/src/ui/widget/dock-item.h +++ b/src/ui/widget/dock-item.h @@ -43,7 +43,8 @@ public: ICONIFIED_FLOATING_STATE}; // item iconified in its assigned dock from float DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& long_name, - const Glib::ustring& icon_name, State state, GdlDockPlacement placement); + const Glib::ustring& icon_name, const Glib::ustring& tooltip, + State state, GdlDockPlacement placement); ~DockItem();