aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/FbTk/Menu.cc13
-rw-r--r--src/IconButton.cc15
-rw-r--r--src/Window.cc30
3 files changed, 30 insertions, 28 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc
index 8b4a91e..8b4ddd2 100644
--- a/src/FbTk/Menu.cc
+++ b/src/FbTk/Menu.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: Menu.cc,v 1.40 2003/11/01 00:12:53 rathnor Exp $ 25// $Id: Menu.cc,v 1.41 2003/11/19 12:57:27 rathnor Exp $
26 26
27//use GNU extensions 27//use GNU extensions
28#ifndef _GNU_SOURCE 28#ifndef _GNU_SOURCE
@@ -425,11 +425,12 @@ void Menu::update(int active_index) {
425 if (! menu.width) menu.width = menu.item_w; 425 if (! menu.width) menu.width = menu.item_w;
426 426
427 menu.frame_h = (menu.item_h * menu.persub); 427 menu.frame_h = (menu.item_h * menu.persub);
428 if (menu.frame_h < 1) 428 if (menu.frame_h < 0)
429 menu.frame_h = 1; 429 menu.frame_h = 0;
430 430
431 menu.height = (title_vis ? menu.title_h + menu.title.borderWidth() : 0) + 431 menu.height = menu.frame_h;
432 menu.frame_h; 432 if (title_vis)
433 menu.height += menu.title_h + ((menu.frame_h>0)?menu.title.borderWidth():0);
433 434
434 if (menu.height < 1) 435 if (menu.height < 1)
435 menu.height = 1; 436 menu.height = 1;
@@ -554,7 +555,7 @@ void Menu::show() {
554 raise(); 555 raise();
555 visible = true; 556 visible = true;
556 557
557 if (! m_parent) { 558 if (! m_parent && shown != this) {
558 if (shown && (! shown->torn)) 559 if (shown && (! shown->torn))
559 shown->hide(); 560 shown->hide();
560 561
diff --git a/src/IconButton.cc b/src/IconButton.cc
index bc0c9d5..20fca8a 100644
--- a/src/IconButton.cc
+++ b/src/IconButton.cc
@@ -20,7 +20,7 @@
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21// DEALINGS IN THE SOFTWARE. 21// DEALINGS IN THE SOFTWARE.
22 22
23// $Id: IconButton.cc,v 1.11 2003/10/31 20:02:49 rathnor Exp $ 23// $Id: IconButton.cc,v 1.12 2003/11/19 12:57:27 rathnor Exp $
24 24
25#include "IconButton.hh" 25#include "IconButton.hh"
26 26
@@ -53,18 +53,7 @@ public:
53 int x = event.xbutton.x_root - (m_win.menu().width() / 2); 53 int x = event.xbutton.x_root - (m_win.menu().width() / 2);
54 int y = event.xbutton.y_root - (m_win.menu().height() / 2); 54 int y = event.xbutton.y_root - (m_win.menu().height() / 2);
55 55
56 if (x < 0) 56 m_win.showMenu(x, y);
57 x = 0;
58 else if (x + m_win.menu().width() > m_win.screen().width())
59 x = m_win.screen().width() - m_win.menu().width();
60
61 if (y < 0)
62 y = 0;
63 else if (y + m_win.menu().height() > m_win.screen().height())
64 y = m_win.screen().height() - m_win.menu().height();
65
66 m_win.menu().move(x, y);
67 m_win.menu().show();
68 } 57 }
69private: 58private:
70 FluxboxWindow &m_win; 59 FluxboxWindow &m_win;
diff --git a/src/Window.cc b/src/Window.cc
index cce7d16..90d4b19 100644
--- a/src/Window.cc
+++ b/src/Window.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: Window.cc,v 1.243 2003/10/28 02:17:02 rathnor Exp $ 25// $Id: Window.cc,v 1.244 2003/11/19 12:57:27 rathnor Exp $
26 26
27#include "Window.hh" 27#include "Window.hh"
28 28
@@ -1885,8 +1885,22 @@ void FluxboxWindow::restoreAttributes() {
1885/** 1885/**
1886 Show the window menu at pos mx, my 1886 Show the window menu at pos mx, my
1887*/ 1887*/
1888void FluxboxWindow::showMenu(int mx, int my) { 1888void FluxboxWindow::showMenu(int menu_x, int menu_y) {
1889 m_windowmenu.move(mx, my); 1889 // move menu directly under titlebar
1890
1891 int head = screen().getHead(menu_x, menu_y);
1892
1893 // but not under screen
1894 if (menu_y + m_windowmenu.height() >= screen().maxBottom(head))
1895 menu_y = screen().maxBottom(head) - m_windowmenu.height() - 1 - m_windowmenu.fbwindow().borderWidth();
1896
1897 if (menu_x < static_cast<signed>(screen().maxLeft(head)))
1898 menu_x = screen().maxLeft(head);
1899 else if (menu_x + static_cast<signed>(m_windowmenu.width()) >= static_cast<signed>(screen().maxRight(head)))
1900 menu_x = screen().maxRight(head) - m_windowmenu.width() - 1;
1901
1902
1903 m_windowmenu.move(menu_x, menu_y);
1890 m_windowmenu.show(); 1904 m_windowmenu.show();
1891 m_windowmenu.raise(); 1905 m_windowmenu.raise();
1892} 1906}
@@ -1900,14 +1914,12 @@ void FluxboxWindow::popupMenu() {
1900 m_windowmenu.hide(); 1914 m_windowmenu.hide();
1901 return; 1915 return;
1902 } 1916 }
1903 // move menu directly under titlebar 1917
1904 int diff_y = frame().titlebar().height() + frame().titlebar().borderWidth(); 1918 int menu_y = frame().titlebar().height() + frame().titlebar().borderWidth();
1905 if (!decorations.titlebar) // if we don't have any titlebar 1919 if (!decorations.titlebar) // if we don't have any titlebar
1906 diff_y = 0; 1920 menu_y = 0;
1907 1921
1908 m_windowmenu.move(m_last_button_x, frame().y() + diff_y); 1922 showMenu(m_last_button_x, menu_y + frame().y());
1909 m_windowmenu.show();
1910 m_windowmenu.raise();
1911} 1923}
1912 1924
1913/** 1925/**