[gnote] Fix blank first item in application menu (some envs)
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Fix blank first item in application menu (some envs)
- Date: Sun, 16 Jun 2013 17:27:58 +0000 (UTC)
commit 8d2ae0b191190b3e318f10e56b04e70701adf589
Author: Aurimas Černius <aurisc4 gmail com>
Date: Sun Jun 16 20:23:50 2013 +0300
Fix blank first item in application menu (some envs)
Part of Bug 701967.
src/actionmanager.cpp | 42 +++++++++++++++++++++++++-----------------
src/actionmanager.hpp | 30 +++++++++++++++++-------------
2 files changed, 42 insertions(+), 30 deletions(-)
---
diff --git a/src/actionmanager.cpp b/src/actionmanager.cpp
index 89f32c2..f91f98e 100644
--- a/src/actionmanager.cpp
+++ b/src/actionmanager.cpp
@@ -266,25 +266,26 @@ namespace gnote {
{
Glib::RefPtr<Gio::Menu> menu = Gio::Menu::create();
- int pos = 0;
- Glib::RefPtr<Gio::Menu> section = make_app_menu_section(APP_ACTION_NEW);
- if(section != 0) {
- menu->insert_section(pos++, "", section);
+ // append first section directly to menu, to avoid blank first item in some environments
+ std::pair<AppMenuItemMultiMap::const_iterator, AppMenuItemMultiMap::const_iterator>
+ range = m_app_menu_items.equal_range(APP_ACTION_NEW);
+ if(range.first != m_app_menu_items.end()) {
+ menu_append(menu, range.first, range.second);
}
- section = make_app_menu_section(APP_ACTION_MANAGE);
+ Glib::RefPtr<Gio::Menu> section = make_app_menu_section(APP_ACTION_MANAGE);
if(section != 0) {
- menu->insert_section(pos++, "", section);
+ menu->append_section("", section);
}
section = make_app_menu_section(APP_ACTION_HELP);
if(section != 0) {
- menu->insert_section(pos++, "", section);
+ menu->append_section("", section);
}
section = make_app_menu_section(APP_ACTION_LAST);
if(section != 0) {
- menu->insert_section(pos++, "", section);
+ menu->append_section("", section);
}
return menu;
@@ -297,21 +298,28 @@ namespace gnote {
Glib::RefPtr<Gio::Menu> section;
if(range.first != m_app_menu_items.end()) {
- std::vector<const AppMenuItem*> menu_items;
- for(AppMenuItemMultiMap::const_iterator iter = range.first; iter != range.second; ++iter) {
- menu_items.push_back(&iter->second);
- }
- std::sort(menu_items.begin(), menu_items.end(), AppMenuItem::ptr_comparator());
-
section = Gio::Menu::create();
- for(std::vector<const AppMenuItem*>::iterator iter = menu_items.begin(); iter != menu_items.end();
++iter) {
- section->append((*iter)->label, (*iter)->action_def);
- }
+ menu_append(section, range.first, range.second);
}
return section;
}
+ void ActionManager::menu_append(const Glib::RefPtr<Gio::Menu> & menu,
+ const AppMenuItemMultiMap::const_iterator & begin,
+ const AppMenuItemMultiMap::const_iterator & end) const
+ {
+ std::vector<const AppMenuItem*> menu_items;
+ for(AppMenuItemMultiMap::const_iterator iter = begin; iter != end; ++iter) {
+ menu_items.push_back(&iter->second);
+ }
+ std::sort(menu_items.begin(), menu_items.end(), AppMenuItem::ptr_comparator());
+
+ for(std::vector<const AppMenuItem*>::iterator iter = menu_items.begin(); iter != menu_items.end();
++iter) {
+ menu->append((*iter)->label, (*iter)->action_def);
+ }
+ }
+
void ActionManager::add_main_window_search_action(const Glib::RefPtr<Gtk::Action> & action, int order)
{
add_main_window_action(m_main_window_search_actions, action, order);
diff --git a/src/actionmanager.hpp b/src/actionmanager.hpp
index f4b0b2f..0b9fa5c 100644
--- a/src/actionmanager.hpp
+++ b/src/actionmanager.hpp
@@ -71,19 +71,6 @@ public:
virtual void remove_main_window_search_action(const std::string & name);
virtual std::vector<Glib::RefPtr<Gtk::Action> > get_main_window_search_actions();
private:
- void make_app_actions();
- void make_app_menu_items();
- Glib::RefPtr<Gio::Menu> make_app_menu_section(int section) const;
- void add_main_window_action(std::map<int, Glib::RefPtr<Gtk::Action> > & actions,
- const Glib::RefPtr<Gtk::Action> & action, int order);
- void remove_main_window_action(std::map<int, Glib::RefPtr<Gtk::Action> > & actions, const std::string &
name);
- std::vector<Glib::RefPtr<Gtk::Action> > get_main_window_actions(std::map<int, Glib::RefPtr<Gtk::Action> >
& actions);
-
- Glib::RefPtr<Gtk::UIManager> m_ui;
- Glib::RefPtr<Gtk::ActionGroup> m_main_window_actions;
-
- std::vector<Glib::RefPtr<Gio::SimpleAction> > m_app_actions;
-
struct AppMenuItem
{
int order;
@@ -105,6 +92,23 @@ private:
};
};
typedef std::multimap<int, AppMenuItem> AppMenuItemMultiMap;
+
+ void make_app_actions();
+ void make_app_menu_items();
+ Glib::RefPtr<Gio::Menu> make_app_menu_section(int section) const;
+ void menu_append(const Glib::RefPtr<Gio::Menu> & menu,
+ const AppMenuItemMultiMap::const_iterator & begin,
+ const AppMenuItemMultiMap::const_iterator & end) const;
+ void add_main_window_action(std::map<int, Glib::RefPtr<Gtk::Action> > & actions,
+ const Glib::RefPtr<Gtk::Action> & action, int order);
+ void remove_main_window_action(std::map<int, Glib::RefPtr<Gtk::Action> > & actions, const std::string &
name);
+ std::vector<Glib::RefPtr<Gtk::Action> > get_main_window_actions(std::map<int, Glib::RefPtr<Gtk::Action> >
& actions);
+
+ Glib::RefPtr<Gtk::UIManager> m_ui;
+ Glib::RefPtr<Gtk::ActionGroup> m_main_window_actions;
+
+ std::vector<Glib::RefPtr<Gio::SimpleAction> > m_app_actions;
+
AppMenuItemMultiMap m_app_menu_items;
std::map<int, Glib::RefPtr<Gtk::Action> > m_main_window_search_actions;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]