From 87e65a8c06593fac430a44eba1664654769e9f18 Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Tue, 7 Jan 2003 02:06:06 +0000
Subject: fixed menu and button action setup

---
 src/Screen.cc | 87 ++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 50 insertions(+), 37 deletions(-)

diff --git a/src/Screen.cc b/src/Screen.cc
index efc5afd..7a8ef48 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -22,7 +22,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: Screen.cc,v 1.93 2003/01/05 22:26:56 fluxgen Exp $
+// $Id: Screen.cc,v 1.94 2003/01/07 02:06:06 fluxgen Exp $
 
 
 #include "Screen.hh"
@@ -42,6 +42,7 @@
 #include "DirHelper.hh"
 #include "WinButton.hh"
 #include "SimpleCommand.hh"
+#include "MenuTheme.hh"
 
 //use GNU extensions
 #ifndef	 _GNU_SOURCE
@@ -273,6 +274,7 @@ BScreen::BScreen(ResourceManager &rm,
                              m_workspacenames_sig(*this), // workspace names signal 
                              m_currentworkspace_sig(*this), // current workspace signal
                              theme(0), m_windowtheme(scrn),
+                             m_menutheme(new FbTk::MenuTheme(scrn)),
                              resource(rm, screenname, altscreenname)
 {
     Display *disp = BaseDisplay::getXDisplay();
@@ -1020,7 +1022,8 @@ void BScreen::updateNetizenConfigNotify(XEvent *e) {
 }
 
 FluxboxWindow *BScreen::createWindow(Window client) {
-    FluxboxWindow *win = new FluxboxWindow(client, this, getScreenNumber(), *getImageControl(), winFrameTheme());
+    FluxboxWindow *win = new FluxboxWindow(client, this, getScreenNumber(), *getImageControl(), 
+                                           winFrameTheme(), *menuTheme());
  
 #ifdef SLIT
     if (win->initialState() == WithdrawnState)
@@ -1042,18 +1045,31 @@ void BScreen::setupWindowActions(FluxboxWindow &win) {
 
     FbWinFrame &frame = win.frame();
 
-    // clear old buttons from frame
-    frame.removeAllButtons();
 
     typedef FbTk::RefCount<FbTk::Command> CommandRef;
 
     using namespace FbTk;
+    typedef RefCount<Command> CommandRef;
+    typedef SimpleCommand<FluxboxWindow> WindowCmd;
+
+    CommandRef iconify_cmd(new WindowCmd(win, &FluxboxWindow::iconify));
+    CommandRef maximize_cmd(new WindowCmd(win, &FluxboxWindow::maximize));
+    CommandRef maximize_vert_cmd(new WindowCmd(win, &FluxboxWindow::maximizeVertical));
+    CommandRef maximize_horiz_cmd(new WindowCmd(win, &FluxboxWindow::maximizeHorizontal));
+    CommandRef close_cmd(new WindowCmd(win, &FluxboxWindow::close));
+    CommandRef shade_cmd(new WindowCmd(win, &FluxboxWindow::shade));
+    CommandRef raise_cmd(new WindowCmd(win, &FluxboxWindow::raise));
+    CommandRef lower_cmd(new WindowCmd(win, &FluxboxWindow::raise));
+    CommandRef stick_cmd(new WindowCmd(win, &FluxboxWindow::stick));
+    CommandRef show_menu_cmd(new WindowCmd(win, &FluxboxWindow::popupMenu));
+
+    // clear old buttons from frame
+    frame.removeAllButtons();
 
     //create new buttons
     if (win.isIconifiable()) {
         FbTk::Button *iconifybtn = new WinButton(WinButton::MINIMIZE, frame.titlebar(), 0, 0, 10, 10);
-        CommandRef iconifycmd(new SimpleCommand<FluxboxWindow>(win, &FluxboxWindow::iconify));
-        iconifybtn->setOnClick(iconifycmd);
+        iconifybtn->setOnClick(iconify_cmd);
         iconifybtn->show();
         frame.addRightButton(iconifybtn);
 #ifdef DEBUG
@@ -1063,11 +1079,8 @@ void BScreen::setupWindowActions(FluxboxWindow &win) {
 
     if (win.isMaximizable()) {
         FbTk::Button *maximizebtn = new WinButton(WinButton::MAXIMIZE, frame.titlebar(), 0, 0, 10, 10);
-        CommandRef maximizecmd(new SimpleCommand<FluxboxWindow>(win, &FluxboxWindow::maximize));
-        CommandRef maximize_horiz_cmd(new SimpleCommand<FluxboxWindow>(win, &FluxboxWindow::maximizeHorizontal));
-        CommandRef maximize_vert_cmd(new SimpleCommand<FluxboxWindow>(win, &FluxboxWindow::maximizeVertical));
 
-        maximizebtn->setOnClick(maximizecmd, 1);
+        maximizebtn->setOnClick(maximize_cmd, 1);
         maximizebtn->setOnClick(maximize_horiz_cmd, 3);
         maximizebtn->setOnClick(maximize_vert_cmd, 2);
         maximizebtn->show();
@@ -1079,39 +1092,39 @@ void BScreen::setupWindowActions(FluxboxWindow &win) {
 
     if (win.isClosable()) {
         Button *closebtn = new WinButton(WinButton::CLOSE, frame.titlebar(), 0, 0, 10, 10);
-        CommandRef closecmd(new SimpleCommand<FluxboxWindow>(win, &FluxboxWindow::close));
-        closebtn->setOnClick(closecmd);
+
+        closebtn->setOnClick(close_cmd);
         closebtn->show();
         frame.addRightButton(closebtn);
 #ifdef DEBUG
         cerr<<"Creating close button"<<endl;
 #endif // DEBUG
     }
-    /*
-    if (decorations.sticky) {
-        FbTk::Button *stickbtn = new WinButton(WinButton::STICK, m_frame.titlebar(),
-                                               0, 0, 10, 10);
-        FbTk::RefCount<FbTk::Command> stickcmd(new FbTk::SimpleCommand<FluxboxWindow>(*this, &FluxboxWindow::stick));
-        stickbtn->setOnClick(stickcmd);
-        stickbtn->show();
-        m_frame.addLeftButton(stickbtn);
-#ifdef DEBUG
-        cerr<<"Creating sticky button"<<endl;
-#endif // DEBUG
-    }
-    */
-    /*    if (decorations.shade) {
-        FbTk::Button *shadebtn = new WinButton(WinButton::SHADE, m_frame.titlebar(),
-                                               0, 0, 10, 10);
-        FbTk::RefCount<FbTk::Command> shadecmd(new FbTk::SimpleCommand<FluxboxWindow>(*this, &FluxboxWindow::shade));
-        shadebtn->setOnClick(shadecmd);
-        shadebtn->show();
-        m_frame.addRightButton(shadebtn);
-#ifdef DEBUG
-        cerr<<"Creating shade button"<<endl;
-#endif // DEBUG
-    }
-    */
+    // setup titlebar
+    frame.setOnClickTitlebar(raise_cmd, 1, false, true); // on press with button 1
+    frame.setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1
+    frame.setOnClickTitlebar(show_menu_cmd, 3); // on release with button 3
+    frame.setOnClickTitlebar(lower_cmd, 3, false, true);  // on press with button 3
+    frame.setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval());
+    // setup menu
+    FbTk::Menu &menu = win.getWindowmenu();
+    menu.removeAll(); // clear old items
+    menu.disableTitle();
+
+    // set new menu items
+    menu.insert("Shade", shade_cmd);
+    menu.insert("Stick", stick_cmd);
+    menu.insert("Maximize", maximize_cmd);
+    menu.insert("Maximize Vertical", maximize_vert_cmd);
+    menu.insert("Maximize Horizontal", maximize_horiz_cmd);
+    menu.insert("Iconify", iconify_cmd);
+    menu.insert("Raise", raise_cmd);
+    menu.insert("Lower", lower_cmd);
+    menu.insert("������������������");
+    menu.insert("Close", close_cmd);
+
+    menu.reconfigure(); // update graphics
+
 }
 void BScreen::raiseWindows(const Workspace::Stack &workspace_stack) {
 
-- 
cgit v0.11.2