aboutsummaryrefslogtreecommitdiff
path: root/src/Window.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Window.cc')
-rw-r--r--src/Window.cc107
1 files changed, 74 insertions, 33 deletions
diff --git a/src/Window.cc b/src/Window.cc
index 9bc4c5a..ba6fe6d 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -1098,6 +1098,7 @@ void FluxboxWindow::reconfigure() {
1098 1098
1099 frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval()); 1099 frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval());
1100 1100
1101 updateButtons();
1101 frame().reconfigure(); 1102 frame().reconfigure();
1102 1103
1103 menu().reconfigure(); 1104 menu().reconfigure();
@@ -3911,25 +3912,16 @@ void FluxboxWindow::setupWindow() {
3911 typedef RefCount<Command> CommandRef; 3912 typedef RefCount<Command> CommandRef;
3912 typedef SimpleCommand<FluxboxWindow> WindowCmd; 3913 typedef SimpleCommand<FluxboxWindow> WindowCmd;
3913 3914
3914 CommandRef iconify_cmd(new WindowCmd(*this, &FluxboxWindow::iconify));
3915 CommandRef maximize_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeFull));
3916 CommandRef maximize_vert_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeVertical));
3917 CommandRef maximize_horiz_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeHorizontal));
3918 CommandRef close_cmd(new WindowCmd(*this, &FluxboxWindow::close));
3919 CommandRef shade_cmd(new WindowCmd(*this, &FluxboxWindow::shade)); 3915 CommandRef shade_cmd(new WindowCmd(*this, &FluxboxWindow::shade));
3920 CommandRef shade_on_cmd(new WindowCmd(*this, &FluxboxWindow::shadeOn)); 3916 CommandRef shade_on_cmd(new WindowCmd(*this, &FluxboxWindow::shadeOn));
3921 CommandRef shade_off_cmd(new WindowCmd(*this, &FluxboxWindow::shadeOff)); 3917 CommandRef shade_off_cmd(new WindowCmd(*this, &FluxboxWindow::shadeOff));
3922 CommandRef next_tab_cmd(new WindowCmd(*this, &FluxboxWindow::nextClient)); 3918 CommandRef next_tab_cmd(new WindowCmd(*this, &FluxboxWindow::nextClient));
3923 CommandRef prev_tab_cmd(new WindowCmd(*this, &FluxboxWindow::prevClient)); 3919 CommandRef prev_tab_cmd(new WindowCmd(*this, &FluxboxWindow::prevClient));
3924 CommandRef raise_cmd(new WindowCmd(*this, &FluxboxWindow::raise));
3925 CommandRef lower_cmd(new WindowCmd(*this, &FluxboxWindow::lower)); 3920 CommandRef lower_cmd(new WindowCmd(*this, &FluxboxWindow::lower));
3926 CommandRef raise_and_focus_cmd(new WindowCmd(*this, &FluxboxWindow::raiseAndFocus)); 3921 CommandRef raise_and_focus_cmd(new WindowCmd(*this, &FluxboxWindow::raiseAndFocus));
3927 CommandRef stick_cmd(new WindowCmd(*this, &FluxboxWindow::stick)); 3922 CommandRef stick_cmd(new WindowCmd(*this, &FluxboxWindow::stick));
3928 CommandRef show_menu_cmd(new WindowCmd(*this, &FluxboxWindow::popupMenu)); 3923 CommandRef show_menu_cmd(new WindowCmd(*this, &FluxboxWindow::popupMenu));
3929 3924
3930 // clear old buttons from frame
3931 frame().removeAllButtons();
3932
3933 typedef FbTk::Resource<vector<WinButton::Type> > WinButtonsResource; 3925 typedef FbTk::Resource<vector<WinButton::Type> > WinButtonsResource;
3934 3926
3935 string titlebar_name[2]; 3927 string titlebar_name[2];
@@ -3983,12 +3975,85 @@ void FluxboxWindow::setupWindow() {
3983 screen().addManagedResource(titlebar_side[i]); 3975 screen().addManagedResource(titlebar_side[i]);
3984 } 3976 }
3985 3977
3978 updateButtons();
3979
3980 // setup titlebar
3981 frame().setOnClickTitlebar(raise_and_focus_cmd, 1, false, true); // on press with button 1
3982 frame().setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1
3983 frame().setOnClickTitlebar(show_menu_cmd, 3); // on release with button 3
3984 frame().setOnClickTitlebar(lower_cmd, 2); // on release with button 2
3985
3986 int reverse = 0;
3987 if (screen().getScrollReverse())
3988 reverse = 1;
3989
3990 if (StringUtil::toLower(screen().getScrollAction()) == string("shade")) {
3991 frame().setOnClickTitlebar(shade_on_cmd, 5 - reverse); // shade on mouse roll
3992 frame().setOnClickTitlebar(shade_off_cmd, 4 + reverse); // unshade if rolled oposite direction
3993 } else if (StringUtil::toLower(screen().getScrollAction()) == string("nexttab")) {
3994 frame().setOnClickTitlebar(next_tab_cmd, 5 - reverse); // next tab
3995 frame().setOnClickTitlebar(prev_tab_cmd, 4 + reverse); // previous tab
3996 }
3997
3998 frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval());
3999
4000 // end setup frame
4001
4002}
4003
4004void FluxboxWindow::updateButtons() {
4005 string titlebar_name[2];
4006 titlebar_name[0] = screen().name() + ".titlebar.left";
4007 titlebar_name[1] = screen().name() + ".titlebar.right";
4008
4009 typedef FbTk::Resource<vector<WinButton::Type> > WinButtonsResource;
4010 WinButtonsResource *titlebar_side[2];
4011 ResourceManager &rm = screen().resourceManager();
4012
4013 bool need_update = false;
4014 // get resource for titlebar
4015 for (int i=0; i < 2; ++i) {
4016 titlebar_side[i] = dynamic_cast<WinButtonsResource *>(
4017 rm.findResource( titlebar_name[i] ) );
4018
4019 // check if we need to update our buttons
4020 size_t new_size = (*titlebar_side[i])->size();
4021 if (new_size != m_titlebar_buttons[i].size() || need_update)
4022 need_update = true;
4023 else {
4024 for (int j=0; j < new_size && !need_update; j++) {
4025 if ((*(*titlebar_side[i]))[j] != m_titlebar_buttons[i][j])
4026 need_update = true;
4027 }
4028 }
4029
4030 }
4031
4032 if (!need_update)
4033 return;
3986 4034
4035 // clear old buttons from frame
4036 frame().removeAllButtons();
3987 4037
4038 using namespace FbTk;
4039 typedef RefCount<Command> CommandRef;
4040 typedef SimpleCommand<FluxboxWindow> WindowCmd;
4041
4042 CommandRef iconify_cmd(new WindowCmd(*this, &FluxboxWindow::iconify));
4043 CommandRef maximize_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeFull));
4044 CommandRef maximize_vert_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeVertical));
4045 CommandRef maximize_horiz_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeHorizontal));
4046 CommandRef close_cmd(new WindowCmd(*this, &FluxboxWindow::close));
4047 CommandRef shade_cmd(new WindowCmd(*this, &FluxboxWindow::shade));
4048 CommandRef stick_cmd(new WindowCmd(*this, &FluxboxWindow::stick));
4049 CommandRef show_menu_cmd(new WindowCmd(*this, &FluxboxWindow::popupMenu));
4050
4051 WinButtonTheme &winbutton_theme = screen().winButtonTheme();
3988 4052
3989 for (size_t c = 0; c < 2 ; c++) { 4053 for (size_t c = 0; c < 2 ; c++) {
3990 // get titlebar configuration for current side 4054 // get titlebar configuration for current side
3991 const vector<WinButton::Type> &dir = *(*titlebar_side[c]); 4055 const vector<WinButton::Type> &dir = *(*titlebar_side[c]);
4056 m_titlebar_buttons[c] = dir;
3992 4057
3993 for (size_t i=0; i < dir.size(); ++i) { 4058 for (size_t i=0; i < dir.size(); ++i) {
3994 //create new buttons 4059 //create new buttons
@@ -4069,32 +4134,8 @@ void FluxboxWindow::setupWindow() {
4069 } // end for c 4134 } // end for c
4070 4135
4071 frame().reconfigure(); 4136 frame().reconfigure();
4072
4073 // setup titlebar
4074 frame().setOnClickTitlebar(raise_and_focus_cmd, 1, false, true); // on press with button 1
4075 frame().setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1
4076 frame().setOnClickTitlebar(show_menu_cmd, 3); // on release with button 3
4077 frame().setOnClickTitlebar(lower_cmd, 2); // on release with button 2
4078
4079 int reverse = 0;
4080 if (screen().getScrollReverse())
4081 reverse = 1;
4082
4083 if (StringUtil::toLower(screen().getScrollAction()) == string("shade")) {
4084 frame().setOnClickTitlebar(shade_on_cmd, 5 - reverse); // shade on mouse roll
4085 frame().setOnClickTitlebar(shade_off_cmd, 4 + reverse); // unshade if rolled oposite direction
4086 } else if (StringUtil::toLower(screen().getScrollAction()) == string("nexttab")) {
4087 frame().setOnClickTitlebar(next_tab_cmd, 5 - reverse); // next tab
4088 frame().setOnClickTitlebar(prev_tab_cmd, 4 + reverse); // previous tab
4089 }
4090
4091 frame().setDoubleClickTime(Fluxbox::instance()->getDoubleClickInterval());
4092
4093 // end setup frame
4094
4095} 4137}
4096 4138
4097
4098/** 4139/**
4099 * reconfigTheme: must be called after frame is reconfigured 4140 * reconfigTheme: must be called after frame is reconfigured
4100 * Client windows need to be made the same size and location as 4141 * Client windows need to be made the same size and location as