diff options
Diffstat (limited to 'src/Slit.cc')
-rw-r--r-- | src/Slit.cc | 78 |
1 files changed, 36 insertions, 42 deletions
diff --git a/src/Slit.cc b/src/Slit.cc index 210c2a5..f1e171d 100644 --- a/src/Slit.cc +++ b/src/Slit.cc | |||
@@ -227,12 +227,12 @@ void Slit::SlitClientsRes::pushToLua(lua::state &l) const { | |||
227 | Slit::Slit(BScreen &scr, FbTk::Layer &layer) | 227 | Slit::Slit(BScreen &scr, FbTk::Layer &layer) |
228 | : m_hidden(false), m_visible(false), | 228 | : m_hidden(false), m_visible(false), |
229 | m_screen(scr), | 229 | m_screen(scr), |
230 | m_clientlist_menu(scr.menuTheme(), | 230 | m_clientlist_menu(new FbMenu(scr.menuTheme(), |
231 | scr.imageControl(), | 231 | scr.imageControl(), |
232 | *scr.layerManager().getLayer(ResourceLayer::MENU)), | 232 | *scr.layerManager().getLayer(ResourceLayer::MENU)) ), |
233 | m_slitmenu(scr.menuTheme(), | 233 | m_slitmenu(new FbMenu(scr.menuTheme(), |
234 | scr.imageControl(), | 234 | scr.imageControl(), |
235 | *scr.layerManager().getLayer(ResourceLayer::MENU)), | 235 | *scr.layerManager().getLayer(ResourceLayer::MENU)) ), |
236 | #ifdef XINERAMA | 236 | #ifdef XINERAMA |
237 | m_xineramaheadmenu(0), | 237 | m_xineramaheadmenu(0), |
238 | #endif // XINERAMA | 238 | #endif // XINERAMA |
@@ -729,7 +729,7 @@ void Slit::reconfigure() { | |||
729 | else if (!doAutoHide() && isHidden()) | 729 | else if (!doAutoHide() && isHidden()) |
730 | toggleHidden(); // restore visible | 730 | toggleHidden(); // restore visible |
731 | 731 | ||
732 | m_slitmenu.reconfigure(); | 732 | m_slitmenu->reconfigure(); |
733 | updateClientmenu(); | 733 | updateClientmenu(); |
734 | updateStrut(); | 734 | updateStrut(); |
735 | 735 | ||
@@ -952,11 +952,11 @@ void Slit::buttonPressEvent(XButtonEvent &be) { | |||
952 | return; | 952 | return; |
953 | 953 | ||
954 | if (be.button == Button3) { | 954 | if (be.button == Button3) { |
955 | if (! m_slitmenu.isVisible()) { | 955 | if (! m_slitmenu->isVisible()) { |
956 | screen().placementStrategy() | 956 | screen().placementStrategy() |
957 | .placeAndShowMenu(m_slitmenu, be.x_root, be.y_root, false); | 957 | .placeAndShowMenu(*m_slitmenu, be.x_root, be.y_root, false); |
958 | } else | 958 | } else |
959 | m_slitmenu.hide(); | 959 | m_slitmenu->hide(); |
960 | } | 960 | } |
961 | } | 961 | } |
962 | 962 | ||
@@ -985,7 +985,7 @@ void Slit::leaveNotifyEvent(XCrossingEvent &ev) { | |||
985 | } else { | 985 | } else { |
986 | if (! m_timer.isTiming()) { | 986 | if (! m_timer.isTiming()) { |
987 | // the menu is open, keep it firing until it closes | 987 | // the menu is open, keep it firing until it closes |
988 | if (m_slitmenu.isVisible()) | 988 | if (m_slitmenu->isVisible()) |
989 | m_timer.fireOnce(false); | 989 | m_timer.fireOnce(false); |
990 | m_timer.start(); | 990 | m_timer.start(); |
991 | } | 991 | } |
@@ -1048,7 +1048,7 @@ void Slit::clearWindow() { | |||
1048 | 1048 | ||
1049 | void Slit::toggleHidden() { | 1049 | void Slit::toggleHidden() { |
1050 | if (doAutoHide()) { | 1050 | if (doAutoHide()) { |
1051 | if (!m_slitmenu.isVisible()) { | 1051 | if (!m_slitmenu->isVisible()) { |
1052 | m_timer.fireOnce(true); | 1052 | m_timer.fireOnce(true); |
1053 | } else | 1053 | } else |
1054 | return; | 1054 | return; |
@@ -1068,24 +1068,24 @@ void Slit::updateClientmenu() { | |||
1068 | _FB_USES_NLS; | 1068 | _FB_USES_NLS; |
1069 | 1069 | ||
1070 | // clear old items | 1070 | // clear old items |
1071 | m_clientlist_menu.removeAll(); | 1071 | m_clientlist_menu->removeAll(); |
1072 | m_clientlist_menu.setLabel(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu")); | 1072 | m_clientlist_menu->setLabel(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu")); |
1073 | 1073 | ||
1074 | FbTk::RefCount<FbTk::Command<void> > cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); | 1074 | FbTk::RefCount<FbTk::Command<void> > cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); |
1075 | FbTk::RefCount<FbTk::Command<void> > cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); | 1075 | FbTk::RefCount<FbTk::Command<void> > cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); |
1076 | m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleUp, "Cycle Up", "Cycle clients upwards"), cycle_up); | 1076 | m_clientlist_menu->insert(_FB_XTEXT(Slit, CycleUp, "Cycle Up", "Cycle clients upwards"), cycle_up); |
1077 | m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleDown, "Cycle Down", "Cycle clients downwards"), cycle_down); | 1077 | m_clientlist_menu->insert(_FB_XTEXT(Slit, CycleDown, "Cycle Down", "Cycle clients downwards"), cycle_down); |
1078 | 1078 | ||
1079 | m_clientlist_menu.insert(new FbTk::MenuSeparator()); | 1079 | m_clientlist_menu->insert(new FbTk::MenuSeparator()); |
1080 | 1080 | ||
1081 | FbTk::RefCount<FbTk::Command<void> > reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); | 1081 | FbTk::RefCount<FbTk::Command<void> > reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); |
1082 | SlitClients::iterator it = m_client_list.begin(); | 1082 | SlitClients::iterator it = m_client_list.begin(); |
1083 | for (; it != m_client_list.end(); ++it) { | 1083 | for (; it != m_client_list.end(); ++it) { |
1084 | if ((*it) != 0 && (*it)->window() != 0) | 1084 | if ((*it) != 0 && (*it)->window() != 0) |
1085 | m_clientlist_menu.insert(new SlitClientMenuItem(*this, *(*it), reconfig)); | 1085 | m_clientlist_menu->insert(new SlitClientMenuItem(*this, *(*it), reconfig)); |
1086 | } | 1086 | } |
1087 | 1087 | ||
1088 | m_clientlist_menu.updateMenu(); | 1088 | m_clientlist_menu->updateMenu(); |
1089 | } | 1089 | } |
1090 | 1090 | ||
1091 | void Slit::saveClientList() { | 1091 | void Slit::saveClientList() { |
@@ -1112,39 +1112,35 @@ void Slit::setupMenu() { | |||
1112 | FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure_slit(s_a_reconf_slit_macro); | 1112 | FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure_slit(s_a_reconf_slit_macro); |
1113 | 1113 | ||
1114 | 1114 | ||
1115 | // it'll be freed by the slitmenu (since not marked internal) | 1115 | FbTk::RefCount<FbTk::Menu> placement_menu( new FbMenu(m_screen.menuTheme(), |
1116 | FbMenu *placement_menu = new FbMenu(m_screen.menuTheme(), | ||
1117 | m_screen.imageControl(), | 1116 | m_screen.imageControl(), |
1118 | *m_screen.layerManager().getLayer(::ResourceLayer::MENU)); | 1117 | *m_screen.layerManager().getLayer(::ResourceLayer::MENU)) ); |
1119 | 1118 | ||
1120 | 1119 | ||
1121 | // setup base menu | 1120 | // setup base menu |
1122 | m_slitmenu.setLabel(_FB_XTEXT(Slit, Slit, "Slit", "The Slit")); | 1121 | m_slitmenu->setLabel(_FB_XTEXT(Slit, Slit, "Slit", "The Slit")); |
1123 | m_slitmenu.insert(_FB_XTEXT(Menu, Placement, "Placement", "Title of Placement menu"), | 1122 | m_slitmenu->insert(_FB_XTEXT(Menu, Placement, "Placement", "Title of Placement menu"), |
1124 | placement_menu); | 1123 | placement_menu); |
1125 | 1124 | ||
1126 | m_slitmenu.insert(_FB_XTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), m_layermenu.get()); | 1125 | m_slitmenu->insert(_FB_XTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), |
1126 | FbTk::RefCount<FbTk::Menu>(m_layermenu) ); | ||
1127 | 1127 | ||
1128 | #ifdef XINERAMA | 1128 | #ifdef XINERAMA |
1129 | if (screen().hasXinerama()) { | 1129 | if (screen().hasXinerama()) { |
1130 | m_slitmenu.insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"), | 1130 | m_xineramaheadmenu.reset( new XineramaHeadMenu<Slit>( |
1131 | m_xineramaheadmenu = | 1131 | screen().menuTheme(), screen(), screen().imageControl(), |
1132 | new XineramaHeadMenu<Slit>( | 1132 | *screen().layerManager().getLayer(::ResourceLayer::MENU), *this, |
1133 | screen().menuTheme(), | 1133 | _FB_XTEXT(Slit, OnHead, "Slit on Head", "Title of Slits On Head menu")) ); |
1134 | screen(), | 1134 | m_slitmenu->insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"), |
1135 | screen().imageControl(), | 1135 | FbTk::RefCount<FbTk::Menu>(m_xineramaheadmenu)); |
1136 | *screen().layerManager().getLayer(::ResourceLayer::MENU), | ||
1137 | *this, | ||
1138 | _FB_XTEXT(Slit, OnHead, "Slit on Head", "Title of Slits On Head menu") | ||
1139 | )); | ||
1140 | } | 1136 | } |
1141 | #endif //XINERAMA | 1137 | #endif //XINERAMA |
1142 | 1138 | ||
1143 | m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"), | 1139 | m_slitmenu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"), |
1144 | m_rc_auto_hide, | 1140 | m_rc_auto_hide, |
1145 | save_and_reconfigure_slit)); | 1141 | save_and_reconfigure_slit)); |
1146 | 1142 | ||
1147 | m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"), | 1143 | m_slitmenu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"), |
1148 | m_rc_maximize_over, | 1144 | m_rc_maximize_over, |
1149 | save_and_reconfigure_slit)); | 1145 | save_and_reconfigure_slit)); |
1150 | 1146 | ||
@@ -1152,7 +1148,7 @@ void Slit::setupMenu() { | |||
1152 | FbTk::MenuItem *alpha_menuitem = | 1148 | FbTk::MenuItem *alpha_menuitem = |
1153 | new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"), | 1149 | new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"), |
1154 | m_rc_alpha, | 1150 | m_rc_alpha, |
1155 | 0, 255, m_slitmenu); | 1151 | 0, 255, *m_slitmenu); |
1156 | // setup command for alpha value | 1152 | // setup command for alpha value |
1157 | MacroCommand *alpha_macrocmd = new MacroCommand(); | 1153 | MacroCommand *alpha_macrocmd = new MacroCommand(); |
1158 | RefCount<Command<void> > alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); | 1154 | RefCount<Command<void> > alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); |
@@ -1161,17 +1157,15 @@ void Slit::setupMenu() { | |||
1161 | RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); | 1157 | RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); |
1162 | alpha_menuitem->setCommand(set_alpha_cmd); | 1158 | alpha_menuitem->setCommand(set_alpha_cmd); |
1163 | 1159 | ||
1164 | m_slitmenu.insert(alpha_menuitem); | 1160 | m_slitmenu->insert(alpha_menuitem); |
1165 | 1161 | ||
1166 | m_slitmenu.insert(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), &m_clientlist_menu); | 1162 | m_slitmenu->insert(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), |
1167 | m_slitmenu.updateMenu(); | 1163 | FbTk::RefCount<FbTk::Menu>(m_clientlist_menu) ); |
1164 | m_slitmenu->updateMenu(); | ||
1168 | 1165 | ||
1169 | // setup sub menu | 1166 | // setup sub menu |
1170 | placement_menu->setLabel(_FB_XTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); | 1167 | placement_menu->setLabel(_FB_XTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); |
1171 | placement_menu->setMinimumColumns(3); | 1168 | placement_menu->setMinimumColumns(3); |
1172 | m_layermenu->setInternalMenu(); | ||
1173 | m_clientlist_menu.setInternalMenu(); | ||
1174 | m_slitmenu.setInternalMenu(); | ||
1175 | 1169 | ||
1176 | typedef pair<FbTk::FbString, Slit::Placement> PlacementP; | 1170 | typedef pair<FbTk::FbString, Slit::Placement> PlacementP; |
1177 | typedef list<PlacementP> Placements; | 1171 | typedef list<PlacementP> Placements; |