[glom] Avoid deprecated Gtk::Stock* API.



commit 6472e7209cfaa7a6164b706dee0e48c5f2c957ec
Author: Murray Cumming <murrayc murrayc com>
Date:   Fri Jul 19 11:08:47 2013 +0200

    Avoid deprecated Gtk::Stock* API.
    
    Gtk::Stock::* and Gtk::StockID are now deprecated,
    because they are deprecated in GTK+, though that is
    rather annoying.
    This replaces them with standard icon names (or
    legacy gtk names) where there is no standard icon
    name, or with the recommended label string, both
    as listed here:
    https://docs.google.com/spreadsheet/pub?key=0AsPAM3pPwxagdGF4THNMMUpjUW5xMXZfdUNzMXhEa2c&output=html
    See
    https://mail.gnome.org/archives/gtk-devel-list/2013-July/msg00005.html

 ChangeLog                                          |   15 +++++++++
 glom/appwindow.cc                                  |   21 ++++++------
 glom/bakery/appwindow_withdoc_gtk.cc               |   27 +++++++--------
 glom/bakery/dialog_offersave.cc                    |    5 +--
 glom/base_db_table_data.cc                         |    5 +--
 glom/box_withbuttons.cc                            |    9 +++--
 glom/dialog_existing_or_new.cc                     |   34 +++++++++----------
 glom/filechooser_export.cc                         |    3 +-
 glom/frame_glom.cc                                 |   11 +++---
 glom/main.cc                                       |    4 +-
 glom/mode_data/box_data.cc                         |    3 +-
 glom/mode_data/box_data_calendar_related.cc        |    3 +-
 glom/mode_data/box_data_details.cc                 |   13 +++----
 glom/mode_data/datawidget/cellcreation.cc          |    3 +-
 .../datawidget/cellrenderer_buttonimage.cc         |    5 +--
 .../datawidget/cellrenderer_buttontext.cc          |    2 +-
 glom/mode_data/datawidget/datawidget.cc            |    7 ++--
 glom/mode_data/db_adddel/db_adddel.cc              |    7 ++--
 glom/mode_data/db_adddel/db_adddel_withbuttons.cc  |    8 ++--
 glom/mode_design/fields/box_db_table_definition.cc |    5 +--
 .../layout_item_dialogs/dialog_formatting.cc       |    5 +--
 .../mode_design/print_layouts/box_print_layouts.cc |    3 +-
 .../print_layouts/print_layout_toolbar.cc          |    1 -
 .../print_layouts/window_print_layout_edit.cc      |   25 +++++++-------
 .../dialog_relationships_overview.cc               |    3 +-
 .../script_library/dialog_script_library.cc        |    5 +--
 .../mode_design/translation/window_translations.cc |    5 +--
 glom/mode_design/users/dialog_groups_list.cc       |    4 +-
 glom/navigation/box_tables.cc                      |    3 +-
 glom/onlineglom_strings.cc                         |    4 +-
 glom/print_layout/canvas_print_layout.cc           |    5 +--
 glom/utility_widgets/adddel/adddel.cc              |    5 +--
 glom/utility_widgets/adddel/adddel_withbuttons.cc  |   14 ++++----
 .../utility_widgets/canvas/canvas_image_movable.cc |   18 +++++++++--
 .../utility_widgets/canvas/test_canvas_editable.cc |    4 +-
 glom/utility_widgets/imageglom.cc                  |   23 ++++++-------
 glom/utility_widgets/layouttoolbar.cc              |    1 -
 glom/utility_widgets/layoutwidgetmenu.cc           |    2 +-
 glom/utility_widgets/layoutwidgetutils.cc          |    2 +-
 glom/utility_widgets/notebooklabelglom.cc          |    2 +-
 glom/utils_ui.cc                                   |    3 +-
 41 files changed, 162 insertions(+), 165 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 9b94067..76cf7a0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2013-07-19  Murray Cumming  <murrayc murrayc com>
+
+       Avoid deprecated Gtk::Stock* API.
+
+       Gtk::Stock::* and Gtk::StockID are now deprecated,
+       because they are deprecated in GTK+, though that is 
+       rather annoying.
+       This replaces them with standard icon names (or
+       legacy gtk names) where there is no standard icon
+       name, or with the recommended label string, both 
+       as listed here:
+       https://docs.google.com/spreadsheet/pub?key=0AsPAM3pPwxagdGF4THNMMUpjUW5xMXZfdUNzMXhEa2c&output=html
+       See
+       https://mail.gnome.org/archives/gtk-devel-list/2013-July/msg00005.html
+
 2013-07-18  Murray Cumming  <murrayc murrayc com>
 
        Initial dialog: Fix crash with latest libxml.
diff --git a/glom/appwindow.cc b/glom/appwindow.cc
index d973f4a..4b00799 100644
--- a/glom/appwindow.cc
+++ b/glom/appwindow.cc
@@ -39,7 +39,6 @@
 #include <libglom/spawn_with_feedback.h>
 
 #include <gtkmm/radioaction.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/main.h>
 
 #include <cstdio>
@@ -267,9 +266,9 @@ void AppWindow::init_menus_file()
   m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_Menu_File_RecentFiles", _("_Recent Files")));
 
   //File actions
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_New", Gtk::Stock::NEW),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_New", _("_New")),
                         sigc::mem_fun((AppWindow&)*this, &AppWindow::on_menu_file_new));
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Open", Gtk::Stock::OPEN),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Open", _("_Open")),
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_open));
 
   Glib::RefPtr<Gtk::Action> action = Gtk::Action::create("BakeryAction_File_SaveAsExample", _("_Save as 
Example"));
@@ -299,7 +298,7 @@ void AppWindow::init_menus_file()
   m_listDeveloperActions.push_back(m_toggleaction_network_shared);
 #endif //!GLOM_ENABLE_CLIENT_ONLY
 
-  action = Gtk::Action::create("GlomAction_Menu_File_Print", Gtk::Stock::PRINT);
+  action = Gtk::Action::create("GlomAction_Menu_File_Print", _("_Print"));
   m_refFileActionGroup->add(action);
   m_listTableSensitiveActions.push_back(action);
   m_refFileActionGroup->add(Gtk::Action::create("GlomAction_File_Print", _("_Standard")),
@@ -311,7 +310,7 @@ void AppWindow::init_menus_file()
   m_listDeveloperActions.push_back(action_print_edit);
 #endif // !GLOM_ENABLE_CLIENT_ONLY
 
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Close", Gtk::Stock::CLOSE),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Close", _("_Close")),
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_close));
 
   m_refUIManager->insert_action_group(m_refFileActionGroup);
@@ -1112,7 +1111,7 @@ bool AppWindow::on_document_load()
       Gtk::MessageDialog dialog(Utils::bold_message(_("Opening Read-Only File.")), true,  Gtk::MESSAGE_INFO, 
Gtk::BUTTONS_NONE);
       dialog.set_secondary_text(_("This file is read only, so you will not be able to enter Developer mode 
to make design changes."));
       dialog.set_transient_for(*this);
-      dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+      dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
       dialog.add_button(_("Continue without Developer Mode"), Gtk::RESPONSE_OK); //arbitrary response code.
 
       const int response = dialog.run();
@@ -2327,8 +2326,8 @@ Glib::ustring AppWindow::ui_file_select_save(const Glib::ustring& old_file_uri)
   if(pWindow)
     fileChooser_Save->set_transient_for(*pWindow);
 
-  fileChooser_Save->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  fileChooser_Save->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
+  fileChooser_Save->add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  fileChooser_Save->add_button(_("_Save"), Gtk::RESPONSE_OK);
 
   fileChooser_Save->set_default_response(Gtk::RESPONSE_OK);
 
@@ -2610,8 +2609,8 @@ void AppWindow::on_menu_developer_export_backup()
 
   // This actually creates the directory:
   Gtk::FileChooserDialog dialog(*this, _("Save Backup"), Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER);
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Save"), Gtk::RESPONSE_ACCEPT);
   dialog.set_local_only(); //Because pg_dump, pg_restore and tar can't use URIs.
   dialog.set_current_name(starting_name);
   const int result = dialog.run();
@@ -2647,7 +2646,7 @@ void AppWindow::on_menu_developer_restore_backup()
   filter->add_pattern("*.tgz");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   file_dlg.add_button(_("Restore"), Gtk::RESPONSE_OK);
 
   const int result = file_dlg.run();
diff --git a/glom/bakery/appwindow_withdoc_gtk.cc b/glom/bakery/appwindow_withdoc_gtk.cc
index a5661c7..2943966 100644
--- a/glom/bakery/appwindow_withdoc_gtk.cc
+++ b/glom/bakery/appwindow_withdoc_gtk.cc
@@ -21,7 +21,6 @@
 //#include <libgnomevfsmm/utils.h> //For escape_path_string()
 //#include <libgnomevfsmm/mime-handlers.h> //For type_is_known(). 
 #include <gtkmm/toolbutton.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/recentchoosermenu.h>
 #include <gtkmm/messagedialog.h>
 #include <gtkmm/filechooserdialog.h>
@@ -229,21 +228,21 @@ void AppWindow_WithDoc_Gtk::init_menus_file()
   m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_Menu_File_RecentFiles", _("_Recent Files")));
 
   //File actions
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_New", Gtk::Stock::NEW),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_New", _("_New")),
                         sigc::mem_fun((AppWindow&)*this, &AppWindow::on_menu_file_new));
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Open", Gtk::Stock::OPEN),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Open", _("_Open")),
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_open));
 
   //Remember thes ones for later, so we can disable Save menu and toolbar items:
-  m_action_save = Gtk::Action::create("BakeryAction_File_Save", Gtk::Stock::SAVE);
+  m_action_save = Gtk::Action::create("BakeryAction_File_Save", _("_Save"));
   m_refFileActionGroup->add(m_action_save,
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_save));
 
-  m_action_saveas = Gtk::Action::create("BakeryAction_File_SaveAs", Gtk::Stock::SAVE_AS);                   
+  m_action_saveas = Gtk::Action::create("BakeryAction_File_SaveAs", _("Save _As"));                   
   m_refFileActionGroup->add(m_action_saveas,
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_saveas));
                         
-  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Close", Gtk::Stock::CLOSE),
+  m_refFileActionGroup->add(Gtk::Action::create("BakeryAction_File_Close", _("_Close")),
                         sigc::mem_fun((AppWindow_WithDoc&)*this, &AppWindow_WithDoc::on_menu_file_close));
                         
   m_refUIManager->insert_action_group(m_refFileActionGroup);
@@ -283,13 +282,13 @@ void AppWindow_WithDoc_Gtk::init_menus_edit()
   m_refEditActionGroup = Gtk::ActionGroup::create("BakeryEditActions");
   m_refEditActionGroup->add(Action::create("BakeryAction_Menu_Edit", _("_Edit")));
   
-  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Cut", Gtk::Stock::CUT),
+  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Cut", _("Cu_t")),
                         sigc::mem_fun((AppWindow_WithDoc_Gtk&)*this, 
&AppWindow_WithDoc_Gtk::on_menu_edit_cut_activate));
-  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Copy", Gtk::Stock::COPY),
+  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Copy", _("_Copy")),
                         sigc::mem_fun((AppWindow_WithDoc_Gtk&)*this, 
&AppWindow_WithDoc_Gtk::on_menu_edit_copy_activate));
-  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Paste", Gtk::Stock::PASTE),
+  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Paste", _("_Paste")),
                         sigc::mem_fun((AppWindow_WithDoc_Gtk&)*this, 
&AppWindow_WithDoc_Gtk::on_menu_edit_paste_activate));
-  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Clear", Gtk::Stock::CLEAR));
+  m_refEditActionGroup->add(Action::create("BakeryAction_Edit_Clear", _("_Clear")));
 
   m_refUIManager->insert_action_group(m_refEditActionGroup);
   
@@ -374,8 +373,8 @@ Glib::ustring AppWindow_WithDoc_Gtk::ui_file_select_open(const Glib::ustring& st
   Gtk::Window* pWindow = this;
 
   Gtk::FileChooserDialog fileChooser_Open(_("Open Document"), Gtk::FILE_CHOOSER_ACTION_OPEN);
-  fileChooser_Open.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  fileChooser_Open.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
+  fileChooser_Open.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  fileChooser_Open.add_button(_("_Open"), Gtk::RESPONSE_OK);
   fileChooser_Open.set_default_response(Gtk::RESPONSE_OK);
 
   if(pWindow)
@@ -423,8 +422,8 @@ Glib::ustring AppWindow_WithDoc_Gtk::ui_file_select_save(const Glib::ustring& ol
  Gtk::Window* pWindow = this;
 
   Gtk::FileChooserDialog fileChooser_Save(_("Save Document"), Gtk::FILE_CHOOSER_ACTION_SAVE);
-  fileChooser_Save.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  fileChooser_Save.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
+  fileChooser_Save.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  fileChooser_Save.add_button(_("_Save"), Gtk::RESPONSE_OK);
   fileChooser_Save.set_default_response(Gtk::RESPONSE_OK);
 
   if(pWindow)
diff --git a/glom/bakery/dialog_offersave.cc b/glom/bakery/dialog_offersave.cc
index eb420f8..fe05858 100644
--- a/glom/bakery/dialog_offersave.cc
+++ b/glom/bakery/dialog_offersave.cc
@@ -20,7 +20,6 @@
 #include <gtkmm/box.h>
 #include <glom/bakery/dialog_offersave.h>
 #include <glom/bakery/appwindow_withdoc_gtk.h>
-#include <gtkmm/stock.h>
 #include <glibmm/convert.h> 
 #include <glibmm/i18n-lib.h>
 
@@ -54,8 +53,8 @@ Dialog_OfferSave::Dialog_OfferSave(const Glib::ustring& file_uri)
   set_secondary_text(get_confirmation_message(file_uri));
 
   add_button(_("Discard"), BUTTON_Discard);
-  Gtk::Button* cancel_button = add_button(Gtk::Stock::CANCEL, BUTTON_Cancel);
-  add_button(Gtk::Stock::SAVE, BUTTON_Save);
+  Gtk::Button* cancel_button = add_button(_("_Cancel"), BUTTON_Cancel);
+  add_button(_("_Save"), BUTTON_Save);
 
   // Otherwise Discard has focus initially which seems inconvenient:
   cancel_button->grab_focus();
diff --git a/glom/base_db_table_data.cc b/glom/base_db_table_data.cc
index 568a77d..6b65b20 100644
--- a/glom/base_db_table_data.cc
+++ b/glom/base_db_table_data.cc
@@ -24,7 +24,6 @@
 #include <glom/appwindow.h>
 #include <glom/python_embed/glom_python.h>
 #include <glom/utils_ui.h>
-#include <gtkmm/stock.h>
 #include <libglom/db_utils.h>
 #include <sstream>
 #include <iostream>
@@ -391,8 +390,8 @@ bool Base_DB_Table_Data::confirm_delete_record()
   Gtk::MessageDialog dialog(Utils::bold_message(_("Delete record")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
   dialog.set_secondary_text(message);
   dialog.set_transient_for(*AppWindow::get_appwindow());
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  dialog.add_button(Gtk::Stock::DELETE, Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Delete"), Gtk::RESPONSE_OK);
 
   const int response = dialog.run();
   return (response == Gtk::RESPONSE_OK);
diff --git a/glom/box_withbuttons.cc b/glom/box_withbuttons.cc
index b833ecd..65aca42 100644
--- a/glom/box_withbuttons.cc
+++ b/glom/box_withbuttons.cc
@@ -21,18 +21,19 @@
 #include <glom/box_withbuttons.h>
 #include <glom/appwindow.h> //AppWindow.
 #include <glom/utils_ui.h>
-#include <gtkmm/stock.h>
 #include <libglom/appstate.h>
 
 #include <sstream> //For stringstream
 
+#include <glibmm/i18n-lib.h>
+
 namespace Glom
 {
 
 Box_WithButtons::Box_WithButtons()
 : Gtk::Box(Gtk::ORIENTATION_VERTICAL),
   m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::DEFAULT_SPACING_SMALL),
-  m_Button_Cancel(Gtk::Stock::CANCEL)
+  m_Button_Cancel(_("_Cancel"))
 {
   //m_pDocument = 0;
 
@@ -46,7 +47,7 @@ Box_WithButtons::Box_WithButtons()
 Box_WithButtons::Box_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& /* builder */)
 : Gtk::Box(cobject),
   m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::DEFAULT_SPACING_SMALL),
-  m_Button_Cancel(Gtk::Stock::CANCEL)
+  m_Button_Cancel(_("_Cancel"))
 {
   //m_pDocument = 0;
 
@@ -60,7 +61,7 @@ Box_WithButtons::Box_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk
 Box_WithButtons::Box_WithButtons(BaseObjectType* cobject)
 : Gtk::Box(cobject),
   m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::DEFAULT_SPACING_SMALL),
-  m_Button_Cancel(Gtk::Stock::CANCEL)
+  m_Button_Cancel(_("_Cancel"))
 {
 }
 
diff --git a/glom/dialog_existing_or_new.cc b/glom/dialog_existing_or_new.cc
index 4bf6298..430f847 100644
--- a/glom/dialog_existing_or_new.cc
+++ b/glom/dialog_existing_or_new.cc
@@ -28,7 +28,6 @@
 #include <giomm/contenttype.h>
 #include <gtkmm/recentmanager.h>
 #include <gtkmm/filechooserdialog.h>
-#include <gtkmm/stock.h>
 #include <glibmm/miscutils.h>
 
 #ifdef G_OS_WIN32
@@ -203,8 +202,7 @@ Dialog_ExistingOrNew::Dialog_ExistingOrNew(BaseObjectType* cobject, const Glib::
 #endif
 
   m_select_button->signal_clicked().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_select_clicked));
-  m_select_button->set_image(*Gtk::manage(new Gtk::Image(Gtk::Stock::APPLY, Gtk::ICON_SIZE_BUTTON)));
-
+ 
 #ifndef GLOM_ENABLE_CLIENT_ONLY
   m_notebook->signal_switch_page().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_switch_page));
 #endif /* !GLOM_ENABLE_CLIENT_ONLY */
@@ -481,29 +479,29 @@ void Dialog_ExistingOrNew::existing_icon_data_func(Gtk::CellRenderer* renderer,
   throw std::logic_error("Renderer not a pixbuf renderer in existing_icon_data_func");
 
   pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
-  pixbuf_renderer->property_stock_id() = "";
+  pixbuf_renderer->property_icon_name() = "";
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
 
   if(iter == m_iter_existing_recent)
-    pixbuf_renderer->property_stock_id() = Gtk::Stock::INDEX.id; // TODO: More meaningful icon?
+    pixbuf_renderer->property_icon_name() = "folder";
 
   pixbuf_renderer->set_property("stock-size", Gtk::ICON_SIZE_BUTTON);
-  pixbuf_renderer->set_property("stock-id", std::string());
+  pixbuf_renderer->property_icon_name() = std::string();
   pixbuf_renderer->set_property("pixbuf", Glib::RefPtr<Gdk::Pixbuf>());
 
   if(iter == m_iter_existing_recent)
-    pixbuf_renderer->set_property("stock-id", Gtk::StockID(Gtk::Stock::INDEX));
+    pixbuf_renderer->property_icon_name() = "folder";
 #ifndef G_OS_WIN32
   else if(iter == m_iter_existing_network)
-    pixbuf_renderer->set_property("stock-id", Gtk::StockID(Gtk::Stock::NETWORK));
+    pixbuf_renderer->property_icon_name() = "folder";
 #endif
   else if(iter == m_iter_existing_other)
-    pixbuf_renderer->set_property("stock-id", Gtk::StockID(Gtk::Stock::OPEN));
+    pixbuf_renderer->property_icon_name() = "folder";
   else if(m_iter_existing_recent_dummy.get() && iter == *m_iter_existing_recent_dummy)
-    pixbuf_renderer->set_property("stock-id", std::string()); // TODO: Use Stock::STOP instead?
+    pixbuf_renderer->property_icon_name() = std::string(); // TODO: Use Stock::STOP instead?
 #ifndef G_OS_WIN32
   else if(m_iter_existing_network_dummy.get() && iter == *m_iter_existing_network_dummy)
-    pixbuf_renderer->set_property("stock-id", std::string()); // TODO: Use Stock::STOP instead?
+    pixbuf_renderer->property_icon_name() = std::string(); // TODO: Use Stock::STOP instead?
 #endif
   else
   {
@@ -516,7 +514,7 @@ void Dialog_ExistingOrNew::existing_icon_data_func(Gtk::CellRenderer* renderer,
 #ifndef G_OS_WIN32
     else if(m_existing_model->is_ancestor(m_iter_existing_network, iter))
     {
-      //pixbuf_renderer->property_stock_id() = Gtk::Stock::CONNECT.id;
+      //pixbuf_renderer->property_icon_name() = Gtk::Stock::CONNECT.id;
       pixbuf_renderer->set_property("icon-name", Glib::ustring("glom"));
     }
 #endif
@@ -558,15 +556,15 @@ void Dialog_ExistingOrNew::new_icon_data_func(Gtk::CellRenderer* renderer, const
     throw std::logic_error("Renderer not a pixbuf renderer in new_icon_data_func");
 
   pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
-  pixbuf_renderer->property_stock_id() = "";
+  pixbuf_renderer->property_icon_name() = "";
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
 
   if(iter == m_iter_new_empty)
-    pixbuf_renderer->property_stock_id() = Gtk::Stock::NEW.id;
+    pixbuf_renderer->property_icon_name() = "folder";
   else if(iter == m_iter_new_template)
-    pixbuf_renderer->property_stock_id() = Gtk::Stock::EDIT.id; // TODO: More meaningful icon?
+    pixbuf_renderer->property_icon_name() = "folder"; // TODO: More meaningful icon?
   else if(m_iter_new_template_dummy.get() && iter == *m_iter_new_template_dummy)
-    pixbuf_renderer->property_stock_id() = Gtk::Stock::DIALOG_ERROR.id; // TODO: Use Stock::STOP instead?
+    pixbuf_renderer->property_icon_name() = "dialog-error"; // TODO: Use Stock::STOP instead?
   else
   {
     if(m_new_model->is_ancestor(m_iter_new_template, iter))
@@ -832,8 +830,8 @@ void Dialog_ExistingOrNew::on_select_clicked()
   if(action == OPEN_URI && iter == m_iter_existing_other)
   {
     Gtk::FileChooserDialog dialog(*this, "Open Glom File");
-    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-    dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
+    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+    dialog.add_button(_("_Open"), Gtk::RESPONSE_OK);
     dialog.set_default_response(Gtk::RESPONSE_OK);
 
     Glib::RefPtr<Gtk::FileFilter> filter = Gtk::FileFilter::create();
diff --git a/glom/filechooser_export.cc b/glom/filechooser_export.cc
index 1e5003f..9f0b526 100644
--- a/glom/filechooser_export.cc
+++ b/glom/filechooser_export.cc
@@ -22,7 +22,6 @@
 #include <glom/mode_design/layout/dialog_layout_export.h>
 #include <glom/utils_ui.h>
 #include <glom/glade_utils.h>
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 
 namespace Glom
@@ -37,7 +36,7 @@ FileChooser_Export::FileChooser_Export()
 #endif //GLOM_ENABLE_CLIENT_ONLY
   m_document(0)
 {
-  add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   add_button(_("_Export"), Gtk::RESPONSE_OK);
 
   m_extra_widget.pack_start(m_button_format, Gtk::PACK_SHRINK);
diff --git a/glom/frame_glom.cc b/glom/frame_glom.cc
index bf97262..465e616 100644
--- a/glom/frame_glom.cc
+++ b/glom/frame_glom.cc
@@ -62,7 +62,6 @@
 #include <glom/print_layout/print_layout_utils.h>
 
 #include <glom/filechooser_export.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/radioaction.h>
 #include <libglom/privs.h>
 #include <libglom/db_utils.h>
@@ -513,7 +512,7 @@ void Frame_Glom::on_menu_developer_developer(const Glib::RefPtr<Gtk::RadioAction
         Gtk::MessageDialog dialog(Utils::bold_message(_("Saving in new document format")), true, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE);
         dialog.set_secondary_text(_("The document was created by an earlier version of the application. 
Making changes to the document will mean that the document cannot be opened by some earlier versions of the 
application."));
         dialog.set_transient_for(*get_app_window());
-        dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+        dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
         dialog.add_button(_("Continue"), Gtk::RESPONSE_OK);
         const int response = dialog.run();
         test = (response == Gtk::RESPONSE_OK);
@@ -750,8 +749,8 @@ void Frame_Glom::on_menu_file_import()
   else
   {
     Gtk::FileChooserDialog file_chooser(*get_app_window(), _("Open CSV Document"), 
Gtk::FILE_CHOOSER_ACTION_OPEN);
-    file_chooser.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-    file_chooser.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
+    file_chooser.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+    file_chooser.add_button(_("_Open"), Gtk::RESPONSE_ACCEPT);
     Glib::RefPtr<Gtk::FileFilter> filter_csv = Gtk::FileFilter::create();
     filter_csv->set_name(_("CSV files"));
     filter_csv->add_mime_type("text/csv");
@@ -835,7 +834,7 @@ void Frame_Glom::on_menu_file_toggle_share(const Glib::RefPtr<Gtk::ToggleAction>
     Gtk::MessageDialog dialog(Utils::bold_message(_("Share on the network")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
     dialog.set_secondary_text(_("This will allow other users on the network to use this database."));
     dialog.set_transient_for(*get_app_window());
-    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
     dialog.add_button(_("_Share"), Gtk::RESPONSE_OK);
 
     const int response = dialog.run();
@@ -941,7 +940,7 @@ void Frame_Glom::on_menu_file_toggle_share(const Glib::RefPtr<Gtk::ToggleAction>
     Gtk::MessageDialog dialog(Utils::bold_message(_("Stop sharing on the network")), true, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE);
     dialog.set_secondary_text(_("This will prevent other users on the network from using this database."));
     dialog.set_transient_for(*get_app_window());
-    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
     dialog.add_button(_("_Stop Sharing"), Gtk::RESPONSE_OK);
 
     const int response = dialog.run();
diff --git a/glom/main.cc b/glom/main.cc
index 6013c8c..658a1b4 100644
--- a/glom/main.cc
+++ b/glom/main.cc
@@ -259,7 +259,7 @@ bool check_postgres_is_available_with_warning()
   //This is a packaging bug, but it would probably annoy packagers to mention that in the dialog:
   Gtk::MessageDialog dialog(Utils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, true /* modal */);
   dialog.set_secondary_text(_("Your installation of Glom is not complete, because PostgreSQL is not 
available on your system. PostgreSQL is needed for self-hosting of Glom databases.\n\nYou may now install 
PostgreSQL to complete the Glom installation."));
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("Install PostgreSQL"), Gtk::RESPONSE_OK);
   const int response = dialog.run();
   if(response != Gtk::RESPONSE_OK)
@@ -310,7 +310,7 @@ bool check_mysql_is_available_with_warning()
   //Unlike for PostgreSQL, this warning is only shown if MySQL was specified in the build.
   Gtk::MessageDialog dialog(Utils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, true /* modal */);
   dialog.set_secondary_text(_("Your installation of Glom is not complete, because MySQL is not available on 
your system. MySQL is needed for self-hosting of some Glom databases.\n\nYou may now install MySQL to 
complete the Glom installation."));
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("Install MySQL"), Gtk::RESPONSE_OK);
   const int response = dialog.run();
   if(response != Gtk::RESPONSE_OK)
diff --git a/glom/mode_data/box_data.cc b/glom/mode_data/box_data.cc
index 3aa37cd..9832633 100644
--- a/glom/mode_data/box_data.cc
+++ b/glom/mode_data/box_data.cc
@@ -29,7 +29,6 @@
 #include <glom/python_embed/glom_python.h>
 #include <glom/python_embed/python_ui_callbacks.h>
 #include <glom/appwindow.h>
-#include <gtkmm/stock.h>
 #include <algorithm> //For std::find()
 #include <libglom/libglom_config.h>
 #include <iostream>
@@ -40,7 +39,7 @@ namespace Glom
 {
 
 Box_Data::Box_Data()
-: m_Button_Find(Gtk::Stock::FIND)
+: m_Button_Find(_("_Find"))
 #ifndef GLOM_ENABLE_CLIENT_ONLY
   ,m_pDialogLayout(0)
 #endif // !GLOM_ENABLE_CLIENT_ONLY
diff --git a/glom/mode_data/box_data_calendar_related.cc b/glom/mode_data/box_data_calendar_related.cc
index 5a171d2..e3307ba 100644
--- a/glom/mode_data/box_data_calendar_related.cc
+++ b/glom/mode_data/box_data_calendar_related.cc
@@ -25,7 +25,6 @@
 #include <libglom/data_structure/glomconversions.h>
 #include <libglom/db_utils.h>
 #include <glom/frame_glom.h> //For show_ok_dialog()
-#include <gtkmm/stock.h>
 #include <glom/glade_utils.h>
 #include <glibmm/i18n.h>
 
@@ -503,7 +502,7 @@ void Box_Data_Calendar_Related::setup_menu()
 
   m_refActionGroup->add(Gtk::Action::create("ContextMenu", "Context Menu") );
 
-  m_refContextEdit =  Gtk::Action::create("ContextEdit", Gtk::Stock::EDIT);
+  m_refContextEdit =  Gtk::Action::create("ContextEdit", _("_Edit"));
 
   m_refActionGroup->add(m_refContextEdit,
     sigc::mem_fun(*this, &Box_Data_Calendar_Related::on_MenuPopup_activate_Edit) );
diff --git a/glom/mode_data/box_data_details.cc b/glom/mode_data/box_data_details.cc
index 39f99f1..9a26900 100644
--- a/glom/mode_data/box_data_details.cc
+++ b/glom/mode_data/box_data_details.cc
@@ -32,7 +32,6 @@
 #include <glom/python_embed/glom_python.h>
 #include <glom/print_layout/print_layout_utils.h>
 #include <glom/appwindow.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/viewport.h>
 #include <sstream> //For stringstream
 #include <glibmm/i18n.h>
@@ -43,12 +42,12 @@ namespace Glom
 Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
 : m_hbox_content(Gtk::ORIENTATION_HORIZONTAL, Utils::DEFAULT_SPACING_SMALL),
   m_hbox_buttons(Gtk::ORIENTATION_HORIZONTAL),
-  m_Button_New(Gtk::Stock::ADD),
-  m_Button_Del(Gtk::Stock::DELETE),
-  m_Button_Nav_First(Gtk::Stock::GOTO_FIRST),
-  m_Button_Nav_Prev(Gtk::Stock::GO_BACK),
-  m_Button_Nav_Next(Gtk::Stock::GO_FORWARD),
-  m_Button_Nav_Last(Gtk::Stock::GOTO_LAST),
+  m_Button_New(_("_Add"), true),
+  m_Button_Del(_("_Delete"), true),
+  m_Button_Nav_First(_("_First"), true),
+  m_Button_Nav_Prev(_("_Back"), true),
+  m_Button_Nav_Next(_("_Forward"), true),
+  m_Button_Nav_Last(_("_Last"), true),
   m_bDoNotRefreshRelated(false),
   m_ignore_signals(true)
 #ifndef GLOM_ENABLE_CLIENT_ONLY
diff --git a/glom/mode_data/datawidget/cellcreation.cc b/glom/mode_data/datawidget/cellcreation.cc
index 6a1bdaa..a1f6355 100644
--- a/glom/mode_data/datawidget/cellcreation.cc
+++ b/glom/mode_data/datawidget/cellcreation.cc
@@ -25,7 +25,6 @@
 #include <glom/utils_ui.h>
 #include <glom/appwindow.h>
 #include <gtkmm/cellrenderertext.h>
-#include <gtkmm/stock.h>
 #include <libglom/data_structure/layout/layoutitem_field.h>
 #include <libglom/data_structure/layout/layoutitem_image.h>
 #include <libglom/utils.h>
@@ -138,7 +137,7 @@ Gtk::CellRenderer* create_cell(const sharedptr<const LayoutItem>& layout_item, c
       if(pixbuf)
         pixbuf_renderer->set_property("pixbuf", pixbuf);
       else
-        pixbuf_renderer->set_property("stock-id", Gtk::StockID(Gtk::Stock::MISSING_IMAGE));
+        pixbuf_renderer->property_icon_name() = "image-missing";
 
       cell = pixbuf_renderer;
     }
diff --git a/glom/mode_data/datawidget/cellrenderer_buttonimage.cc 
b/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
index b24da6f..0b21a18 100644
--- a/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
+++ b/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
@@ -19,8 +19,6 @@
  */
 
 #include "cellrenderer_buttonimage.h"
-#include <gtkmm/stock.h>
-
 
 namespace Glom
 {
@@ -28,9 +26,8 @@ namespace Glom
 GlomCellRenderer_ButtonImage::GlomCellRenderer_ButtonImage():
   Glib::ObjectBase("GlomCellRenderer_ButtonImage") // Create a new GType for us
 {
-  const Gtk::StockID stock_id = Gtk::Stock::OPEN; //A default.
+  property_icon_name() = "document-open"; //A default.
 
-  set_property("stock_id", stock_id.get_string());
   //So that it calls activate_vfunc():
   set_property("mode", Gtk::CELL_RENDERER_MODE_ACTIVATABLE);
 }
diff --git a/glom/mode_data/datawidget/cellrenderer_buttontext.cc 
b/glom/mode_data/datawidget/cellrenderer_buttontext.cc
index 2f54f16..3d9c4f4 100644
--- a/glom/mode_data/datawidget/cellrenderer_buttontext.cc
+++ b/glom/mode_data/datawidget/cellrenderer_buttontext.cc
@@ -26,7 +26,7 @@ namespace Glom
 GlomCellRenderer_ButtonText::GlomCellRenderer_ButtonText():
   Glib::ObjectBase("GlomCellRenderer_ButtonText") // Create a new GType for us
 {
-  //const Gtk::StockID stock_id = Gtk::Stock::OPEN; //A default.
+  //const Gtk::StockID stock_id = _("_Open"); //A default.
   //property_stock_id() = stock_id.get_string();
 
   set_property("mode", Gtk::CELL_RENDERER_MODE_ACTIVATABLE); //So that it calls activate_vfunc().
diff --git a/glom/mode_data/datawidget/datawidget.cc b/glom/mode_data/datawidget/datawidget.cc
index 09a9730..1309af5 100644
--- a/glom/mode_data/datawidget/datawidget.cc
+++ b/glom/mode_data/datawidget/datawidget.cc
@@ -36,7 +36,6 @@
 #include <glom/mode_design/layout/layout_item_dialogs/dialog_field_layout.h>
 #include <glom/utils_ui.h>
 #include <glom/glade_utils.h>
-#include <gtkmm/stock.h>
 #include <libglom/db_utils.h>
 
 #include <glibmm/i18n.h>
@@ -220,7 +219,7 @@ DataWidget::DataWidget(const sharedptr<LayoutItem_Field>& field, const Glib::ust
     if(hbox_parent && add_open_button)
     {
       //Add a button for related record navigation:
-      m_button_go_to_details = Gtk::manage(new Gtk::Button(Gtk::Stock::OPEN));
+      m_button_go_to_details = Gtk::manage(new Gtk::Button(_("_Open")));
       m_button_go_to_details->set_tooltip_text(_("Open the record identified by this ID, in the other 
table."));
       hbox_parent->pack_start(*m_button_go_to_details, Gtk::PACK_SHRINK);
       m_button_go_to_details->signal_clicked().connect(sigc::mem_fun(*this, 
&DataWidget::on_button_open_details));
@@ -230,12 +229,12 @@ DataWidget::DataWidget(const sharedptr<LayoutItem_Field>& field, const Glib::ust
       //can generally not be edited via another table's layout.
       if(field_used_in_relationship_to_one)
       {
-        Gtk::Button* button_select = Gtk::manage(new Gtk::Button(Gtk::Stock::FIND));
+        Gtk::Button* button_select = Gtk::manage(new Gtk::Button(_("_Find")));
         button_select->set_tooltip_text(_("Enter search criteria to identify records in the other table, to 
choose an ID for this field."));
         hbox_parent->pack_start(*button_select, Gtk::PACK_SHRINK);
         button_select->signal_clicked().connect(sigc::mem_fun(*this, &DataWidget::on_button_select_id));
 
-        Gtk::Button* button_new = Gtk::manage(new Gtk::Button(Gtk::Stock::NEW));
+        Gtk::Button* button_new = Gtk::manage(new Gtk::Button(_("_New")));
         button_new->set_tooltip_text(_("Enter details for a new record in the other table, then use its ID 
for this field."));
         hbox_parent->pack_start(*button_new, Gtk::PACK_SHRINK);
         button_new->signal_clicked().connect(sigc::mem_fun(*this, &DataWidget::on_button_new_id));
diff --git a/glom/mode_data/db_adddel/db_adddel.cc b/glom/mode_data/db_adddel/db_adddel.cc
index cb70fb6..602b4d2 100644
--- a/glom/mode_data/db_adddel/db_adddel.cc
+++ b/glom/mode_data/db_adddel/db_adddel.cc
@@ -31,7 +31,6 @@
 #include <glom/appwindow.h>
 #include <glom/utils_ui.h> //For Utils::image_scale_keeping_ratio().
 #include <glom/mode_data/datawidget/cellcreation.h>
-#include <gtkmm/stock.h>
 #include <glibmm/main.h>
 #include <libglom/db_utils.h>
 
@@ -227,18 +226,18 @@ void DbAddDel::setup_menu()
   m_refActionGroup->add(Gtk::Action::create("ContextMenu", "Context Menu") );
 
   if(m_open_button_title.empty())
-    m_refContextEdit =  Gtk::Action::create("ContextEdit", Gtk::Stock::EDIT);
+    m_refContextEdit =  Gtk::Action::create("ContextEdit", _("_Edit"));
   else
     m_refContextEdit =  Gtk::Action::create("ContextEdit", m_open_button_title);
 
   m_refActionGroup->add(m_refContextEdit,
     sigc::mem_fun(*this, &DbAddDel::on_MenuPopup_activate_Edit) );
 
-  m_refContextDelete =  Gtk::Action::create("ContextDelete", Gtk::Stock::DELETE);
+  m_refContextDelete =  Gtk::Action::create("ContextDelete", _("_Delete"));
   m_refActionGroup->add(m_refContextDelete,
     sigc::mem_fun(*this, &DbAddDel::on_MenuPopup_activate_Delete) );
 
-  m_refContextAdd =  Gtk::Action::create("ContextAdd", Gtk::Stock::ADD);
+  m_refContextAdd =  Gtk::Action::create("ContextAdd", _("_Add"));
   m_refActionGroup->add(m_refContextAdd,
     sigc::mem_fun(*this, &DbAddDel::on_MenuPopup_activate_Add) );
   m_refContextAdd->set_sensitive(m_allow_add);
diff --git a/glom/mode_data/db_adddel/db_adddel_withbuttons.cc 
b/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
index 5d6db3a..830c622 100644
--- a/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
+++ b/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
@@ -21,16 +21,16 @@
 #include "db_adddel_withbuttons.h"
 #include <glom/utils_ui.h>
 #include <gtkmm/buttonbox.h>
-#include <gtkmm/stock.h>
+#include <glibmm/i18n.h>
 
 namespace Glom
 {
 
 DbAddDel_WithButtons::DbAddDel_WithButtons()
 : m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
-  m_Button_Del(Gtk::Stock::DELETE),
-  m_Button_Edit(Gtk::Stock::OPEN),
-  m_Button_Add(Gtk::Stock::ADD)
+  m_Button_Del(_("_Delete"), true),
+  m_Button_Edit(_("_Open"), true),
+  m_Button_Add(_("_Add"), true)
 {
   m_ButtonBox.set_layout(Gtk::BUTTONBOX_END);
   m_ButtonBox.set_spacing(Utils::DEFAULT_SPACING_SMALL);
diff --git a/glom/mode_design/fields/box_db_table_definition.cc 
b/glom/mode_design/fields/box_db_table_definition.cc
index 28795ca..657c537 100644
--- a/glom/mode_design/fields/box_db_table_definition.cc
+++ b/glom/mode_design/fields/box_db_table_definition.cc
@@ -25,7 +25,6 @@
 #include <glom/appwindow.h>
 #include <libglom/libglom_config.h>
 #include <libglom/db_utils.h>
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 
 namespace Glom
@@ -271,7 +270,7 @@ bool Box_DB_Table_Definition::check_field_change(const sharedptr<const Field>& f
       if(parent_window)
         dialog.set_transient_for(*parent_window);
 
-      dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+      dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
       dialog.add_button(_("Recalculate"), Gtk::RESPONSE_OK);
       result = (dialog.run() == Gtk::RESPONSE_OK);
     }
@@ -322,7 +321,7 @@ bool Box_DB_Table_Definition::check_field_change(const sharedptr<const Field>& f
     if(parent_window)
       dialog.set_transient_for(*parent_window);
 
-    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
     dialog.add_button(_("Change Primary Key"), Gtk::RESPONSE_OK);
     if(dialog.run() != Gtk::RESPONSE_OK)
       return false; //Otherwise, continue, allowing the change.
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
index 82ae1fb..a75b9ea 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
@@ -21,7 +21,6 @@
 #include "dialog_formatting.h"
 #include <libglom/data_structure/glomconversions.h>
 #include <glom/glade_utils.h>
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 
 namespace Glom
@@ -39,8 +38,8 @@ Dialog_Formatting::Dialog_Formatting()
   get_content_area()->pack_start(*m_box_formatting, Gtk::PACK_EXPAND_WIDGET);
   add_view(m_box_formatting);
 
-  add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
+  add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  add_button(_("_Save"), Gtk::RESPONSE_OK);
 
   show_all_children();
 }
diff --git a/glom/mode_design/print_layouts/box_print_layouts.cc 
b/glom/mode_design/print_layouts/box_print_layouts.cc
index b51e156..6e5bb75 100644
--- a/glom/mode_design/print_layouts/box_print_layouts.cc
+++ b/glom/mode_design/print_layouts/box_print_layouts.cc
@@ -22,7 +22,6 @@
 #include <glom/appwindow.h>
 #include <gtkmm/alignment.h>
 #include <gtkmm/messagedialog.h>
-#include <gtkmm/stock.h>
 #include <libglom/utils.h> //For bold_message()).
 #include <glibmm/i18n.h>
 
@@ -225,7 +224,7 @@ void Box_Print_Layouts::on_adddel_user_changed(const Gtk::TreeModel::iterator& r
         {
           Glib::ustring strMsg = _("Are you sure that you want to rename this print layout?");  //TODO: Show 
old and new names?
           Gtk::MessageDialog dialog(_("<b>Rename Print Layout</b>"), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE );
-          dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+          dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
           dialog.add_button(_("Rename"), Gtk::RESPONSE_OK);
           dialog.set_secondary_text(strMsg);
           const int iButtonClicked = dialog.run();
diff --git a/glom/mode_design/print_layouts/print_layout_toolbar.cc 
b/glom/mode_design/print_layouts/print_layout_toolbar.cc
index e56ec17..440aea9 100644
--- a/glom/mode_design/print_layouts/print_layout_toolbar.cc
+++ b/glom/mode_design/print_layouts/print_layout_toolbar.cc
@@ -19,7 +19,6 @@
  */
 
 #include "print_layout_toolbar.h"
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 #include <libglom/libglom_config.h>
 
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.cc 
b/glom/mode_design/print_layouts/window_print_layout_edit.cc
index c3038c3..794d7fb 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.cc
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.cc
@@ -26,7 +26,6 @@
 #include <glom/print_layout/print_layout_utils.h>
 #include <gtkmm/radioaction.h>
 #include <gtkmm/printsettings.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/grid.h>
 #include <gtkmm/printoperation.h>
 #include <libglom/data_structure/layout/layoutitem_line.h>
@@ -196,33 +195,33 @@ void Window_PrintLayout_Edit::init_menu()
   m_action_group = Gtk::ActionGroup::create();
 
   m_action_group->add(Gtk::Action::create("Menu_File", _("_File")));
-  m_action_group->add(Gtk::Action::create("Action_Menu_File_PageSetup", Gtk::Stock::PAGE_SETUP),
+  m_action_group->add(Gtk::Action::create("Action_Menu_File_PageSetup", _("Page Set_up")),
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_file_page_setup));
-  m_action_group->add(Gtk::Action::create("Action_Menu_File_PrintPreview", Gtk::Stock::PRINT_PREVIEW),
+  m_action_group->add(Gtk::Action::create("Action_Menu_File_PrintPreview", _("Print Pre_view")),
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_file_print_preview));
 
 
-  m_action_group->add(Gtk::Action::create("Menu_Edit", Gtk::Stock::EDIT));
+  m_action_group->add(Gtk::Action::create("Menu_Edit", _("_Edit")));
 
-  m_action_edit_cut = Gtk::Action::create("Action_Menu_Edit_Cut", Gtk::Stock::CUT);
+  m_action_edit_cut = Gtk::Action::create("Action_Menu_Edit_Cut", _("Cu_t"));
   m_action_group->add(m_action_edit_cut,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_cut) );
 
-  m_action_edit_copy = Gtk::Action::create("Action_Menu_Edit_Copy", Gtk::Stock::COPY);
+  m_action_edit_copy = Gtk::Action::create("Action_Menu_Edit_Copy", _("_Copy"));
   m_action_group->add(m_action_edit_copy,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_copy) );
   
-  m_action_edit_paste = Gtk::Action::create("Action_Menu_Edit_Paste", Gtk::Stock::PASTE);
+  m_action_edit_paste = Gtk::Action::create("Action_Menu_Edit_Paste", _("_Paste"));
   m_action_group->add(m_action_edit_paste,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_paste) );
   m_action_edit_paste->set_sensitive(false); //This is enable when something is copied or cut.
 
-  m_action_edit_delete = Gtk::Action::create("Action_Menu_Edit_Delete", Gtk::Stock::DELETE);
+  m_action_edit_delete = Gtk::Action::create("Action_Menu_Edit_Delete", _("_Delete"));
   m_action_group->add(m_action_edit_delete,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_delete) );
 
   m_action_group->add(
-    Gtk::Action::create("Action_Menu_Edit_SelectAll", Gtk::Stock::SELECT_ALL),
+    Gtk::Action::create("Action_Menu_Edit_SelectAll", _("Select _All")),
     Gtk::AccelKey("<control>A"), //TODO: Suggest this as part of the stock item in GTK+?
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_selectall) );
   m_action_group->add(
@@ -286,7 +285,7 @@ void Window_PrintLayout_Edit::init_menu()
     sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 200));
 
   Glib::RefPtr<Gtk::RadioAction> action_zoom100 = 
-    Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom100", Gtk::Stock::ZOOM_100);
+    Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom100", _("_Normal Size"));
   m_action_group->add(action_zoom100,
     sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 100));
 
@@ -761,7 +760,7 @@ void Window_PrintLayout_Edit::setup_context_menu()
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_context_menu_insert_text) );
 
   /*
-  action =  Gtk::Action::create("ContextDelete", Gtk::Stock::DELETE);
+  action =  Gtk::Action::create("ContextDelete", _("_Delete"));
   m_context_menu_action_group->add(action,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_context_menu_delete) );
   */
@@ -914,7 +913,7 @@ void Window_PrintLayout_Edit::on_menu_insert_create_standard()
   Gtk::MessageDialog dialog(Utils::bold_message(_("Create Standard Layout")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
   dialog.set_secondary_text(_("This is an experimental feature. It will remove all items from the print 
layout and then try to create a layout similar to the layout of the detail view."));
   dialog.set_transient_for(*this);
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("Create"), Gtk::RESPONSE_OK);
 
   const int response = dialog.run();
@@ -958,7 +957,7 @@ void Window_PrintLayout_Edit::on_menu_insert_delete_page()
   Gtk::MessageDialog dialog(Utils::bold_message(_("Remove page")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
   dialog.set_secondary_text(_("Are you sure that you wish to remove the last page and any items on that 
page?"));
   dialog.set_transient_for(*this);
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("Remove Page"), Gtk::RESPONSE_OK);
   if(dialog.run() != Gtk::RESPONSE_OK)
     return;
diff --git a/glom/mode_design/relationships_overview/dialog_relationships_overview.cc 
b/glom/mode_design/relationships_overview/dialog_relationships_overview.cc
index 9fb585f..1d87079 100644
--- a/glom/mode_design/relationships_overview/dialog_relationships_overview.cc
+++ b/glom/mode_design/relationships_overview/dialog_relationships_overview.cc
@@ -25,7 +25,6 @@
 #include <glom/mode_design/layout/dialog_choose_relationship.h>
 #include "printoperation_relationshipsoverview.h"
 #include "glom/appwindow.h"
-#include <gtkmm/stock.h>
 #include <goocanvas.h>
 #include <glibmm/i18n.h>
 #include <iostream>
@@ -58,7 +57,7 @@ Dialog_RelationshipsOverview::Dialog_RelationshipsOverview(BaseObjectType* cobje
   m_refActionGroup->add(Gtk::Action::create("Overview_MainMenu_File", _("_File")) );
   m_refActionGroup->add(Gtk::Action::create("Overview_MainMenu_File_PageSetup", _("Page _Setup")),
     sigc::mem_fun(*this, &Dialog_RelationshipsOverview::on_menu_file_page_setup) );
-  m_refActionGroup->add(Gtk::Action::create("Overview_MainMenu_File_Print", Gtk::Stock::PRINT),
+  m_refActionGroup->add(Gtk::Action::create("Overview_MainMenu_File_Print", _("_Print")),
     sigc::mem_fun(*this, &Dialog_RelationshipsOverview::on_menu_file_print) );
 
   m_refActionGroup->add(Gtk::Action::create("Overview_MainMenu_View", _("_View")) );
diff --git a/glom/mode_design/script_library/dialog_script_library.cc 
b/glom/mode_design/script_library/dialog_script_library.cc
index 1e8a65f..bcda2b4 100644
--- a/glom/mode_design/script_library/dialog_script_library.cc
+++ b/glom/mode_design/script_library/dialog_script_library.cc
@@ -27,7 +27,6 @@
 #include <glom/mode_design/script_library/dialog_new_script.h>
 #include <gtksourceviewmm/languagemanager.h>
 #include <glom/appwindow.h>
-#include <gtkmm/stock.h>
 
 
 //#include <libgnome/gnome-i18n.h>
@@ -129,8 +128,8 @@ void Dialog_ScriptLibrary::on_button_remove()
 
   Gtk::MessageDialog dialog(Utils::bold_message(_("Remove library script")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE );
   dialog.set_secondary_text(_("Do you really want to delete this script? This data can not be recovered"));
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  dialog.add_button(Gtk::Stock::REMOVE, Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Remove"), Gtk::RESPONSE_OK);
   dialog.set_transient_for(*this);
   const int response = dialog.run();
   dialog.hide();
diff --git a/glom/mode_design/translation/window_translations.cc 
b/glom/mode_design/translation/window_translations.cc
index f1e5bad..ae18f92 100644
--- a/glom/mode_design/translation/window_translations.cc
+++ b/glom/mode_design/translation/window_translations.cc
@@ -28,7 +28,6 @@
 #include <glom/glade_utils.h>
 #include <glom/appwindow.h>
 #include <gtkmm/filefilter.h>
-#include <gtkmm/stock.h>
 #include <gtkmm/filechooserdialog.h>
 
 #include <glibmm/i18n.h>
@@ -339,7 +338,7 @@ void Window_Translations::on_button_export()
   filter->add_pattern("*.po");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   file_dlg.add_button(_("Export"), Gtk::RESPONSE_OK); 
   
   const int result = file_dlg.run();
@@ -378,7 +377,7 @@ void Window_Translations::on_button_import()
   filter->add_pattern("*.po");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
 
   //Note to translators: "Import" here is an action verb - it's a button. 
   file_dlg.add_button(_("Import"), Gtk::RESPONSE_OK);
diff --git a/glom/mode_design/users/dialog_groups_list.cc b/glom/mode_design/users/dialog_groups_list.cc
index fe318bb..697cd1a 100644
--- a/glom/mode_design/users/dialog_groups_list.cc
+++ b/glom/mode_design/users/dialog_groups_list.cc
@@ -76,13 +76,13 @@ Dialog_GroupsList::Dialog_GroupsList(BaseObjectType* cobject, const Glib::RefPtr
   treeview_append_bool_column(*m_treeview_tables, _("View"), m_model_columns_tables.m_col_view,
     sigc::mem_fun( *this, &Dialog_GroupsList::on_treeview_tables_toggled_view) );
 
-  treeview_append_bool_column(*m_treeview_tables, _("Edit"), m_model_columns_tables.m_col_edit,
+  treeview_append_bool_column(*m_treeview_tables, _("_Edit"), m_model_columns_tables.m_col_edit,
     sigc::mem_fun( *this, &Dialog_GroupsList::on_treeview_tables_toggled_edit) );
 
   treeview_append_bool_column(*m_treeview_tables, _("Create"), m_model_columns_tables.m_col_create,
     sigc::mem_fun( *this, &Dialog_GroupsList::on_treeview_tables_toggled_create) );
 
-  treeview_append_bool_column(*m_treeview_tables, _("Delete"), m_model_columns_tables.m_col_delete,
+  treeview_append_bool_column(*m_treeview_tables, _("_Delete"), m_model_columns_tables.m_col_delete,
     sigc::mem_fun( *this, &Dialog_GroupsList::on_treeview_tables_toggled_delete) );
 
 
diff --git a/glom/navigation/box_tables.cc b/glom/navigation/box_tables.cc
index 7d715b1..36cfc2c 100644
--- a/glom/navigation/box_tables.cc
+++ b/glom/navigation/box_tables.cc
@@ -22,7 +22,6 @@
 #include <glom/utils_ui.h> //For bold_message()).
 #include <libglom/db_utils.h>
 #include <glom/appwindow.h>
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 
 #include <iostream>
@@ -399,7 +398,7 @@ void Box_Tables::on_adddel_changed(const Gtk::TreeModel::iterator& row, guint co
       {
         Glib::ustring strMsg = _("Are you sure that you want to rename this table?");  //TODO: Show old and 
new names?
         Gtk::MessageDialog dialog(_("<b>Rename Table</b>"), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE );
-        dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+        dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
         dialog.add_button(_("Rename"), Gtk::RESPONSE_OK);
         dialog.set_secondary_text(strMsg);
         int iButtonClicked = dialog.run();
diff --git a/glom/onlineglom_strings.cc b/glom/onlineglom_strings.cc
index 606c2f5..5422247 100644
--- a/glom/onlineglom_strings.cc
+++ b/glom/onlineglom_strings.cc
@@ -29,7 +29,7 @@
 const char* online_glom_search = _("Search");
 const char* online_glom_backToList = _("Back to List");
 const char* online_glom_details = _("Details");
-const char* online_glom_open = _("Open");
+const char* online_glom_open = _("_Open");
 const char* online_glom_reports = _("Reports");
 const char* online_glom_generating_report = _("Generating the report...");
 const char* online_glom_login_login = _("Login");
@@ -37,7 +37,7 @@ const char* online_glom_login_enter = _("Enter the username and password.");
 const char* online_glom_login_username = _("Username");
 const char* online_glom_login_password = _("Password");
 const char* online_glom_login_logout = _("Log Out");
-const char* online_glom_login_cancel = _("Cancel");
+const char* online_glom_login_cancel = _("_Cancel");
 const char* online_glom_login_wrong = _("The username or password are not correct.");
 const char* online_glom_login_needs_https = _("Login seems to be necessary, but will not be attempted. This 
site is not being served via HTTPS, which is required for secure login. Please contact your system 
administrator.");
 
diff --git a/glom/print_layout/canvas_print_layout.cc b/glom/print_layout/canvas_print_layout.cc
index 5383c58..c219d8d 100644
--- a/glom/print_layout/canvas_print_layout.cc
+++ b/glom/print_layout/canvas_print_layout.cc
@@ -21,7 +21,6 @@
 
 #include "canvas_print_layout.h"
 #include <glom/utils_ui.h> //For bold_message()).
-#include <gtkmm/stock.h>
 #include <glom/mode_design/print_layouts/dialog_text_formatting.h>
 #include <glom/mode_design/layout/dialog_layout_list_related.h>
 #include <glom/mode_design/layout/layout_item_dialogs/dialog_line.h>
@@ -280,11 +279,11 @@ void Canvas_PrintLayout::setup_context_menu()
     sigc::mem_fun(*this, &Canvas_PrintLayout::on_context_menu_insert_text) );
 */
 
-  m_action_edit = Gtk::Action::create("ContextMenuEdit", Gtk::Stock::EDIT);
+  m_action_edit = Gtk::Action::create("ContextMenuEdit", _("_Edit"));
   m_context_menu_action_group->add(m_action_edit);
   m_action_formatting =  Gtk::Action::create("ContextMenuFormatting", _("_Formatting"));
   m_context_menu_action_group->add(m_action_formatting);
-  m_action_delete =  Gtk::Action::create("ContextMenuDelete", Gtk::Stock::DELETE);
+  m_action_delete =  Gtk::Action::create("ContextMenuDelete", _("_Delete"));
   m_context_menu_action_group->add(m_action_delete);
 
   m_action_edit->signal_activate().connect( sigc::mem_fun(*this, &Canvas_PrintLayout::on_context_menu_edit) 
);
diff --git a/glom/utility_widgets/adddel/adddel.cc b/glom/utility_widgets/adddel/adddel.cc
index 7697f86..b551df3 100644
--- a/glom/utility_widgets/adddel/adddel.cc
+++ b/glom/utility_widgets/adddel/adddel.cc
@@ -28,7 +28,6 @@
 #include <libglom/data_structure/glomconversions.h>
 #include <glom/dialog_invalid_data.h>
 #include <glom/utils_ui.h>
-#include <gtkmm/stock.h>
 #include <libglom/utils.h>
 //#include <glom/bakery/app_gtk.h>
 #include <iostream> //For debug output.
@@ -232,13 +231,13 @@ void AddDel::setup_menu()
   m_refActionGroup = Gtk::ActionGroup::create();
   m_refActionGroup->add(Gtk::Action::create("ContextMenu", "Context Menu") );
 
-  m_refContextEdit = Gtk::Action::create("ContextEdit", Gtk::Stock::EDIT);
+  m_refContextEdit = Gtk::Action::create("ContextEdit", _("_Edit"));
   m_refActionGroup->add(m_refContextEdit,
     sigc::mem_fun(*this, &AddDel::on_MenuPopup_activate_Edit) );
 
   if(get_allow_user_actions())
   {
-    m_refContextDelete =  Gtk::Action::create("ContextDelete", Gtk::Stock::DELETE);
+    m_refContextDelete =  Gtk::Action::create("ContextDelete", _("_Delete"));
     m_refActionGroup->add(m_refContextDelete,
       sigc::mem_fun(*this, &AddDel::on_MenuPopup_activate_Delete) );
   }
diff --git a/glom/utility_widgets/adddel/adddel_withbuttons.cc 
b/glom/utility_widgets/adddel/adddel_withbuttons.cc
index dbf6768..3044cce 100644
--- a/glom/utility_widgets/adddel/adddel_withbuttons.cc
+++ b/glom/utility_widgets/adddel/adddel_withbuttons.cc
@@ -20,7 +20,7 @@
 
 #include "adddel_withbuttons.h"
 #include <glom/utils_ui.h>
-#include <gtkmm/stock.h>
+#include <glibmm/i18n.h>
 
 //#include <libgnome/gnome-i18n.h>
 
@@ -29,9 +29,9 @@ namespace Glom
 
 AddDel_WithButtons::AddDel_WithButtons()
 : m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
-  m_Button_Add(Gtk::Stock::ADD),
-  m_Button_Del(Gtk::Stock::DELETE),
-  m_Button_Edit(Gtk::Stock::OPEN)
+  m_Button_Add(_("_Add"), true),
+  m_Button_Del(_("_Delete"), true),
+  m_Button_Edit(_("_Open"), true)
 {
   init();
 }
@@ -39,9 +39,9 @@ AddDel_WithButtons::AddDel_WithButtons()
 AddDel_WithButtons::AddDel_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder)
 : AddDel(cobject, builder),
   m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
-  m_Button_Add(Gtk::Stock::ADD),
-  m_Button_Del(Gtk::Stock::DELETE),
-  m_Button_Edit(Gtk::Stock::OPEN)
+  m_Button_Add(_("_Add"), true),
+  m_Button_Del(_("_Delete"), true),
+  m_Button_Edit(_("_Open"), true)
 {
   init();
 }
diff --git a/glom/utility_widgets/canvas/canvas_image_movable.cc 
b/glom/utility_widgets/canvas/canvas_image_movable.cc
index c716199..492133c 100644
--- a/glom/utility_widgets/canvas/canvas_image_movable.cc
+++ b/glom/utility_widgets/canvas/canvas_image_movable.cc
@@ -22,8 +22,8 @@
 
 #include "canvas_image_movable.h"
 #include <goocanvasmm/canvas.h>
-#include <gtkmm/stock.h>
 #include <glom/utils_ui.h> //For Utils::image_scale_keeping_ratio().
+#include <gtkmm/icontheme.h>
 #include <iostream>
 
 namespace Glom
@@ -211,8 +211,20 @@ void CanvasImageMovable::set_image_empty()
 
   Glib::RefPtr<Gdk::Pixbuf> pixbuf;
   if(widget)
-    pixbuf = widget->render_icon_pixbuf(Gtk::Stock::MISSING_IMAGE, Gtk::ICON_SIZE_DIALOG);
-    property_pixbuf() = pixbuf;
+  {
+    Glib::RefPtr<Gtk::IconTheme> theme = Gtk::IconTheme::get_default();
+
+    try
+    {
+      pixbuf = theme->load_icon("image-missing", Gtk::ICON_SIZE_DIALOG);
+    }
+    catch(const Glib::Error& ex)
+    {
+      std::cerr << G_STRFUNC << ": Could not load the icon: " << ex.what() << std::endl;
+    }
+  }
+
+  property_pixbuf() = pixbuf;
 }
 
 bool CanvasImageMovable::get_image_empty() const
diff --git a/glom/utility_widgets/canvas/test_canvas_editable.cc 
b/glom/utility_widgets/canvas/test_canvas_editable.cc
index fddde1d..ca5826c 100644
--- a/glom/utility_widgets/canvas/test_canvas_editable.cc
+++ b/glom/utility_widgets/canvas/test_canvas_editable.cc
@@ -171,11 +171,11 @@ private:
 
     m_context_menu_action_group->add(Gtk::Action::create("ContextMenu", "Context Menu") );
 
-    Glib::RefPtr<Gtk::Action> action =  Gtk::Action::create("ContextEdit", Gtk::Stock::EDIT);
+    Glib::RefPtr<Gtk::Action> action =  Gtk::Action::create("ContextEdit", _("_Edit"));
     m_context_menu_action_group->add(action,
       sigc::mem_fun(*this, &MyCanvas::on_context_menu_edit) );
 
-    action =  Gtk::Action::create("ContextDelete", Gtk::Stock::DELETE);
+    action =  Gtk::Action::create("ContextDelete", _("_Delete"));
     m_context_menu_action_group->add(action,
       sigc::mem_fun(*this, &MyCanvas::on_context_menu_delete) );
 
diff --git a/glom/utility_widgets/imageglom.cc b/glom/utility_widgets/imageglom.cc
index 729f97a..898a3bb 100644
--- a/glom/utility_widgets/imageglom.cc
+++ b/glom/utility_widgets/imageglom.cc
@@ -28,7 +28,6 @@
 #include <glom/utility_widgets/dialog_image_save_progress.h>
 #include <gtkmm/appchooserdialog.h>
 #include <gtkmm/filechooserdialog.h>
-#include <gtkmm/stock.h>
 #include <giomm/file.h>
 #include <giomm/contenttype.h>
 #include <libgda/gda-blob-op.h>
@@ -434,7 +433,7 @@ void ImageGlom::show_image_data()
     }
     else
     {
-      m_image.set(Gtk::Stock::MISSING_IMAGE, Gtk::ICON_SIZE_DIALOG);
+      m_image.set_from_icon_name("image-missing", Gtk::ICON_SIZE_DIALOG);
     }
   }
 }
@@ -681,8 +680,8 @@ void ImageGlom::on_menupopup_activate_save_file()
           
   set_file_filter_images(dialog);
 
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-  dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Save"), Gtk::RESPONSE_OK);
   const int response = dialog.run();
   dialog.hide();
   if(response != Gtk::RESPONSE_OK)
@@ -768,7 +767,7 @@ void ImageGlom::on_menupopup_activate_select_file()
           
   set_file_filter_images(dialog);
 
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("Select"), Gtk::RESPONSE_OK);
   int response = dialog.run();
   dialog.hide();
@@ -923,13 +922,13 @@ void ImageGlom::setup_menu_usermode()
 
   m_refActionGroup_UserModePopup->add(Gtk::Action::create("ContextMenu_UserMode", "Context Menu") );
   
-  m_refActionOpenFile =  Gtk::Action::create("ContextOpenFile", Gtk::Stock::OPEN);
-  m_refActionOpenFileWith =  Gtk::Action::create("ContextOpenFileWith", Gtk::Stock::OPEN, _("Open With"));
-  m_refActionSaveFile =  Gtk::Action::create("ContextSaveFile", Gtk::Stock::SAVE);
-  m_refActionSelectFile =  Gtk::Action::create("ContextSelectFile", Gtk::Stock::EDIT, _("Choose File"));
-  m_refActionCopy = Gtk::Action::create("ContextCopy", Gtk::Stock::COPY);
-  m_refActionPaste = Gtk::Action::create("ContextPaste", Gtk::Stock::PASTE);
-  m_refActionClear = Gtk::Action::create("ContextClear", Gtk::Stock::CLEAR);
+  m_refActionOpenFile =  Gtk::Action::create("ContextOpenFile", _("_Open"));
+  m_refActionOpenFileWith =  Gtk::Action::create("ContextOpenFileWith", _("Open With"));
+  m_refActionSaveFile =  Gtk::Action::create("ContextSaveFile", _("_Save"));
+  m_refActionSelectFile =  Gtk::Action::create("ContextSelectFile", _("Choose File"));
+  m_refActionCopy = Gtk::Action::create("ContextCopy", _("_Copy"));
+  m_refActionPaste = Gtk::Action::create("ContextPaste", _("_Paste"));
+  m_refActionClear = Gtk::Action::create("ContextClear", _("_Clear"));
 
   m_refActionGroup_UserModePopup->add(m_refActionOpenFile,
     sigc::mem_fun(*this, &ImageGlom::on_menupopup_activate_open_file) );
diff --git a/glom/utility_widgets/layouttoolbar.cc b/glom/utility_widgets/layouttoolbar.cc
index 20d666b..fb66e42 100644
--- a/glom/utility_widgets/layouttoolbar.cc
+++ b/glom/utility_widgets/layouttoolbar.cc
@@ -19,7 +19,6 @@
  */
 
 #include "layouttoolbar.h"
-#include <gtkmm/stock.h>
 #include <glibmm/i18n.h>
 #include <libglom/libglom_config.h>
 
diff --git a/glom/utility_widgets/layoutwidgetmenu.cc b/glom/utility_widgets/layoutwidgetmenu.cc
index 3028cab..9f371fb 100644
--- a/glom/utility_widgets/layoutwidgetmenu.cc
+++ b/glom/utility_widgets/layoutwidgetmenu.cc
@@ -44,7 +44,7 @@ LayoutWidgetMenu::LayoutWidgetMenu()
   m_refContextAddGroup =  Gtk::Action::create("ContextAddGroup", _("Add Group"));
   m_refContextAddButton =  Gtk::Action::create("ContextAddButton", _("Add Button"));
   m_refContextAddText =  Gtk::Action::create("ContextAddText", _("Add Text"));
-  m_refContextDelete = Gtk::Action::create("ContextDelete", _("Delete"));
+  m_refContextDelete = Gtk::Action::create("ContextDelete", _("_Delete"));
 #endif // !GLOM_ENABLE_CLIENT_ONLY
 }
 
diff --git a/glom/utility_widgets/layoutwidgetutils.cc b/glom/utility_widgets/layoutwidgetutils.cc
index c7f20b2..d24542f 100644
--- a/glom/utility_widgets/layoutwidgetutils.cc
+++ b/glom/utility_widgets/layoutwidgetutils.cc
@@ -34,7 +34,7 @@ LayoutWidgetUtils::LayoutWidgetUtils() :
 
   m_refActionGroup->add(Gtk::Action::create("UtilMenu", "Utility Menu") );
   m_refUtilProperties = Gtk::Action::create("UtilProperties", _("Properties"));
-  m_refUtilDelete = Gtk::Action::create("UtilDelete", _("Delete"));
+  m_refUtilDelete = Gtk::Action::create("UtilDelete", _("_Delete"));
 #ifndef GLOM_ENABLE_CLIENT_ONLY
   setup_util_menu();
 #endif
diff --git a/glom/utility_widgets/notebooklabelglom.cc b/glom/utility_widgets/notebooklabelglom.cc
index f143d8f..2afd27f 100644
--- a/glom/utility_widgets/notebooklabelglom.cc
+++ b/glom/utility_widgets/notebooklabelglom.cc
@@ -114,7 +114,7 @@ void NotebookLabel::setup_menu()
 
   m_refActionGroup->add(Gtk::Action::create("NotebookMenu", "Notebook Menu") );
   m_refNewGroup = Gtk::Action::create("NewGroup", _("New Group"));
-  m_refDelete = Gtk::Action::create("Delete", _("Delete"));
+  m_refDelete = Gtk::Action::create("Delete", _("_Delete"));
   
   m_refActionGroup->add(m_refNewGroup,
     sigc::mem_fun(*this, &NotebookLabel::on_menu_new_group_activate) );
diff --git a/glom/utils_ui.cc b/glom/utils_ui.cc
index 80c57ed..b981004 100644
--- a/glom/utils_ui.cc
+++ b/glom/utils_ui.cc
@@ -31,7 +31,6 @@
 #include <libgda/gda-blob-op.h> // For gda_blob_op_read_all()
 
 #include <gtkmm/messagedialog.h>
-#include <gtkmm/stock.h>
 #include <glibmm/convert.h>
 #include <glibmm/miscutils.h>
 #include <glibmm/fileutils.h>
@@ -479,7 +478,7 @@ bool Utils::show_warning_no_records_found(Gtk::Window& transient_for)
   dialog.set_secondary_text(message);
   dialog.set_transient_for(transient_for);
 
-  dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
   dialog.add_button(_("New Find"), Gtk::RESPONSE_OK);
 
   const bool find_again = (dialog.run() == Gtk::RESPONSE_OK);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]