diff options
-rw-r--r-- | src/Toolbar.cc | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 8d748d4..9834f06 100644 --- a/src/Toolbar.cc +++ b/src/Toolbar.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Toolbar.cc,v 1.112 2003/08/19 21:28:57 fluxgen Exp $ | 25 | // $Id: Toolbar.cc,v 1.113 2003/08/23 15:42:48 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Toolbar.hh" | 27 | #include "Toolbar.hh" |
28 | 28 | ||
@@ -161,7 +161,7 @@ getString() { | |||
161 | namespace { | 161 | namespace { |
162 | class SetToolbarPlacementCmd: public FbTk::Command { | 162 | class SetToolbarPlacementCmd: public FbTk::Command { |
163 | public: | 163 | public: |
164 | explicit SetToolbarPlacementCmd(Toolbar &tbar, Toolbar::Placement place):m_tbar(tbar), m_place(place) { } | 164 | SetToolbarPlacementCmd(Toolbar &tbar, Toolbar::Placement place):m_tbar(tbar), m_place(place) { } |
165 | void execute() { | 165 | void execute() { |
166 | m_tbar.setPlacement(m_place); | 166 | m_tbar.setPlacement(m_place); |
167 | m_tbar.reconfigure(); | 167 | m_tbar.reconfigure(); |
@@ -172,6 +172,32 @@ private: | |||
172 | Toolbar::Placement m_place; | 172 | Toolbar::Placement m_place; |
173 | }; | 173 | }; |
174 | 174 | ||
175 | class ShowMenuAboveToolbar: public FbTk::Command { | ||
176 | public: | ||
177 | explicit ShowMenuAboveToolbar(Toolbar &tbar):m_tbar(tbar) { } | ||
178 | void execute() { | ||
179 | |||
180 | // get last button pos | ||
181 | const XEvent &event = Fluxbox::instance()->lastEvent(); | ||
182 | int x = event.xbutton.x_root - (m_tbar.menu().width() / 2); | ||
183 | int y = event.xbutton.y_root - (m_tbar.menu().height() / 2); | ||
184 | |||
185 | if (x < 0) | ||
186 | x = 0; | ||
187 | else if (x + m_tbar.menu().width() > m_tbar.screen().width()) | ||
188 | x = m_tbar.screen().width() - m_tbar.menu().width(); | ||
189 | |||
190 | if (y < 0) | ||
191 | y = 0; | ||
192 | else if (y + m_tbar.menu().height() > m_tbar.screen().height()) | ||
193 | y = m_tbar.screen().height() - m_tbar.menu().height(); | ||
194 | |||
195 | m_tbar.menu().move(x, y); | ||
196 | m_tbar.menu().show(); | ||
197 | } | ||
198 | private: | ||
199 | Toolbar &m_tbar; | ||
200 | }; | ||
175 | }; // end anonymous | 201 | }; // end anonymous |
176 | 202 | ||
177 | // toolbar frame | 203 | // toolbar frame |
@@ -258,7 +284,11 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi | |||
258 | frame.grab_x = frame.grab_y = 0; | 284 | frame.grab_x = frame.grab_y = 0; |
259 | 285 | ||
260 | // add toolbar items | 286 | // add toolbar items |
261 | m_item_list.push_back(new WorkspaceNameTool(frame.window, m_workspace_theme, screen())); | 287 | WorkspaceNameTool *item = new WorkspaceNameTool(frame.window, m_workspace_theme, screen()); |
288 | using namespace FbTk; | ||
289 | RefCount<Command> showmenu(new ShowMenuAboveToolbar(*this)); | ||
290 | item->button().setOnClick(showmenu); | ||
291 | m_item_list.push_back(item); | ||
262 | m_item_list.push_back(new IconbarTool(frame.window, m_iconbar_theme, screen())); | 292 | m_item_list.push_back(new IconbarTool(frame.window, m_iconbar_theme, screen())); |
263 | m_item_list.push_back(new SystemTray(frame.window)); | 293 | m_item_list.push_back(new SystemTray(frame.window)); |
264 | m_item_list.push_back(new ClockTool(frame.window, m_clock_theme, screen())); | 294 | m_item_list.push_back(new ClockTool(frame.window, m_clock_theme, screen())); |
@@ -279,7 +309,8 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi | |||
279 | frame.window.show(); | 309 | frame.window.show(); |
280 | 310 | ||
281 | scrn.resourceManager().unlock(); | 311 | scrn.resourceManager().unlock(); |
282 | 312 | // setup to listen to child events | |
313 | FbTk::EventManager::instance()->addParent(*this, window()); | ||
283 | // get everything together | 314 | // get everything together |
284 | reconfigure(); | 315 | reconfigure(); |
285 | 316 | ||