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 2e32f27..5f7cfcf 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 |
@@ -727,7 +727,7 @@ void Slit::reconfigure() { | |||
727 | else if (!doAutoHide() && isHidden()) | 727 | else if (!doAutoHide() && isHidden()) |
728 | toggleHidden(); // restore visible | 728 | toggleHidden(); // restore visible |
729 | 729 | ||
730 | m_slitmenu.reconfigure(); | 730 | m_slitmenu->reconfigure(); |
731 | updateClientmenu(); | 731 | updateClientmenu(); |
732 | updateStrut(); | 732 | updateStrut(); |
733 | 733 | ||
@@ -950,11 +950,11 @@ void Slit::buttonPressEvent(XButtonEvent &be) { | |||
950 | return; | 950 | return; |
951 | 951 | ||
952 | if (be.button == Button3) { | 952 | if (be.button == Button3) { |
953 | if (! m_slitmenu.isVisible()) { | 953 | if (! m_slitmenu->isVisible()) { |
954 | screen().placementStrategy() | 954 | screen().placementStrategy() |
955 | .placeAndShowMenu(m_slitmenu, be.x_root, be.y_root, false); | 955 | .placeAndShowMenu(*m_slitmenu, be.x_root, be.y_root, false); |
956 | } else | 956 | } else |
957 | m_slitmenu.hide(); | 957 | m_slitmenu->hide(); |
958 | } | 958 | } |
959 | } | 959 | } |
960 | 960 | ||
@@ -983,7 +983,7 @@ void Slit::leaveNotifyEvent(XCrossingEvent &ev) { | |||
983 | } else { | 983 | } else { |
984 | if (! m_timer.isTiming()) { | 984 | if (! m_timer.isTiming()) { |
985 | // the menu is open, keep it firing until it closes | 985 | // the menu is open, keep it firing until it closes |
986 | if (m_slitmenu.isVisible()) | 986 | if (m_slitmenu->isVisible()) |
987 | m_timer.fireOnce(false); | 987 | m_timer.fireOnce(false); |
988 | m_timer.start(); | 988 | m_timer.start(); |
989 | } | 989 | } |
@@ -1046,7 +1046,7 @@ void Slit::clearWindow() { | |||
1046 | 1046 | ||
1047 | void Slit::toggleHidden() { | 1047 | void Slit::toggleHidden() { |
1048 | if (doAutoHide()) { | 1048 | if (doAutoHide()) { |
1049 | if (!m_slitmenu.isVisible()) { | 1049 | if (!m_slitmenu->isVisible()) { |
1050 | m_timer.fireOnce(true); | 1050 | m_timer.fireOnce(true); |
1051 | } else | 1051 | } else |
1052 | return; | 1052 | return; |
@@ -1066,24 +1066,24 @@ void Slit::updateClientmenu() { | |||
1066 | _FB_USES_NLS; | 1066 | _FB_USES_NLS; |
1067 | 1067 | ||
1068 | // clear old items | 1068 | // clear old items |
1069 | m_clientlist_menu.removeAll(); | 1069 | m_clientlist_menu->removeAll(); |
1070 | m_clientlist_menu.setLabel(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu")); | 1070 | m_clientlist_menu->setLabel(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu")); |
1071 | 1071 | ||
1072 | FbTk::RefCount<FbTk::Command<void> > cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); | 1072 | FbTk::RefCount<FbTk::Command<void> > cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); |
1073 | FbTk::RefCount<FbTk::Command<void> > cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); | 1073 | FbTk::RefCount<FbTk::Command<void> > cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); |
1074 | m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleUp, "Cycle Up", "Cycle clients upwards"), cycle_up); | 1074 | m_clientlist_menu->insert(_FB_XTEXT(Slit, CycleUp, "Cycle Up", "Cycle clients upwards"), cycle_up); |
1075 | m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleDown, "Cycle Down", "Cycle clients downwards"), cycle_down); | 1075 | m_clientlist_menu->insert(_FB_XTEXT(Slit, CycleDown, "Cycle Down", "Cycle clients downwards"), cycle_down); |
1076 | 1076 | ||
1077 | m_clientlist_menu.insert(new FbTk::MenuSeparator()); | 1077 | m_clientlist_menu->insert(new FbTk::MenuSeparator()); |
1078 | 1078 | ||
1079 | FbTk::RefCount<FbTk::Command<void> > reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); | 1079 | FbTk::RefCount<FbTk::Command<void> > reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); |
1080 | SlitClients::iterator it = m_client_list.begin(); | 1080 | SlitClients::iterator it = m_client_list.begin(); |
1081 | for (; it != m_client_list.end(); ++it) { | 1081 | for (; it != m_client_list.end(); ++it) { |
1082 | if ((*it) != 0 && (*it)->window() != 0) | 1082 | if ((*it) != 0 && (*it)->window() != 0) |
1083 | m_clientlist_menu.insert(new SlitClientMenuItem(*this, *(*it), reconfig)); | 1083 | m_clientlist_menu->insert(new SlitClientMenuItem(*this, *(*it), reconfig)); |
1084 | } | 1084 | } |
1085 | 1085 | ||
1086 | m_clientlist_menu.updateMenu(); | 1086 | m_clientlist_menu->updateMenu(); |
1087 | } | 1087 | } |
1088 | 1088 | ||
1089 | void Slit::saveClientList() { | 1089 | void Slit::saveClientList() { |
@@ -1110,39 +1110,35 @@ void Slit::setupMenu() { | |||
1110 | FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure_slit(s_a_reconf_slit_macro); | 1110 | FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure_slit(s_a_reconf_slit_macro); |
1111 | 1111 | ||
1112 | 1112 | ||
1113 | // it'll be freed by the slitmenu (since not marked internal) | 1113 | FbTk::RefCount<FbTk::Menu> placement_menu( new FbMenu(m_screen.menuTheme(), |
1114 | FbMenu *placement_menu = new FbMenu(m_screen.menuTheme(), | ||
1115 | m_screen.imageControl(), | 1114 | m_screen.imageControl(), |
1116 | *m_screen.layerManager().getLayer(::ResourceLayer::MENU)); | 1115 | *m_screen.layerManager().getLayer(::ResourceLayer::MENU)) ); |
1117 | 1116 | ||
1118 | 1117 | ||
1119 | // setup base menu | 1118 | // setup base menu |
1120 | m_slitmenu.setLabel(_FB_XTEXT(Slit, Slit, "Slit", "The Slit")); | 1119 | m_slitmenu->setLabel(_FB_XTEXT(Slit, Slit, "Slit", "The Slit")); |
1121 | m_slitmenu.insert(_FB_XTEXT(Menu, Placement, "Placement", "Title of Placement menu"), | 1120 | m_slitmenu->insert(_FB_XTEXT(Menu, Placement, "Placement", "Title of Placement menu"), |
1122 | placement_menu); | 1121 | placement_menu); |
1123 | 1122 | ||
1124 | m_slitmenu.insert(_FB_XTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), m_layermenu.get()); | 1123 | m_slitmenu->insert(_FB_XTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), |
1124 | FbTk::RefCount<FbTk::Menu>(m_layermenu) ); | ||
1125 | 1125 | ||
1126 | #ifdef XINERAMA | 1126 | #ifdef XINERAMA |
1127 | if (screen().hasXinerama()) { | 1127 | if (screen().hasXinerama()) { |
1128 | m_slitmenu.insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"), | 1128 | m_xineramaheadmenu.reset( new XineramaHeadMenu<Slit>( |
1129 | m_xineramaheadmenu = | 1129 | screen().menuTheme(), screen(), screen().imageControl(), |
1130 | new XineramaHeadMenu<Slit>( | 1130 | *screen().layerManager().getLayer(::ResourceLayer::MENU), *this, |
1131 | screen().menuTheme(), | 1131 | _FB_XTEXT(Slit, OnHead, "Slit on Head", "Title of Slits On Head menu")) ); |
1132 | screen(), | 1132 | m_slitmenu->insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"), |
1133 | screen().imageControl(), | 1133 | FbTk::RefCount<FbTk::Menu>(m_xineramaheadmenu)); |
1134 | *screen().layerManager().getLayer(::ResourceLayer::MENU), | ||
1135 | *this, | ||
1136 | _FB_XTEXT(Slit, OnHead, "Slit on Head", "Title of Slits On Head menu") | ||
1137 | )); | ||
1138 | } | 1134 | } |
1139 | #endif //XINERAMA | 1135 | #endif //XINERAMA |
1140 | 1136 | ||
1141 | m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"), | 1137 | m_slitmenu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"), |
1142 | m_rc_auto_hide, | 1138 | m_rc_auto_hide, |
1143 | save_and_reconfigure_slit)); | 1139 | save_and_reconfigure_slit)); |
1144 | 1140 | ||
1145 | m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"), | 1141 | m_slitmenu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"), |
1146 | m_rc_maximize_over, | 1142 | m_rc_maximize_over, |
1147 | save_and_reconfigure_slit)); | 1143 | save_and_reconfigure_slit)); |
1148 | 1144 | ||
@@ -1150,7 +1146,7 @@ void Slit::setupMenu() { | |||
1150 | FbTk::MenuItem *alpha_menuitem = | 1146 | FbTk::MenuItem *alpha_menuitem = |
1151 | new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"), | 1147 | new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"), |
1152 | m_rc_alpha, | 1148 | m_rc_alpha, |
1153 | 0, 255, m_slitmenu); | 1149 | 0, 255, *m_slitmenu); |
1154 | // setup command for alpha value | 1150 | // setup command for alpha value |
1155 | MacroCommand *alpha_macrocmd = new MacroCommand(); | 1151 | MacroCommand *alpha_macrocmd = new MacroCommand(); |
1156 | RefCount<Command<void> > alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); | 1152 | RefCount<Command<void> > alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); |
@@ -1159,17 +1155,15 @@ void Slit::setupMenu() { | |||
1159 | RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); | 1155 | RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); |
1160 | alpha_menuitem->setCommand(set_alpha_cmd); | 1156 | alpha_menuitem->setCommand(set_alpha_cmd); |
1161 | 1157 | ||
1162 | m_slitmenu.insert(alpha_menuitem); | 1158 | m_slitmenu->insert(alpha_menuitem); |
1163 | 1159 | ||
1164 | m_slitmenu.insert(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), &m_clientlist_menu); | 1160 | m_slitmenu->insert(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), |
1165 | m_slitmenu.updateMenu(); | 1161 | FbTk::RefCount<FbTk::Menu>(m_clientlist_menu) ); |
1162 | m_slitmenu->updateMenu(); | ||
1166 | 1163 | ||
1167 | // setup sub menu | 1164 | // setup sub menu |
1168 | placement_menu->setLabel(_FB_XTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); | 1165 | placement_menu->setLabel(_FB_XTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); |
1169 | placement_menu->setMinimumColumns(3); | 1166 | placement_menu->setMinimumColumns(3); |
1170 | m_layermenu->setInternalMenu(); | ||
1171 | m_clientlist_menu.setInternalMenu(); | ||
1172 | m_slitmenu.setInternalMenu(); | ||
1173 | 1167 | ||
1174 | typedef pair<FbTk::FbString, Slit::Placement> PlacementP; | 1168 | typedef pair<FbTk::FbString, Slit::Placement> PlacementP; |
1175 | typedef list<PlacementP> Placements; | 1169 | typedef list<PlacementP> Placements; |