diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Toolbar.cc | 162 |
1 files changed, 82 insertions, 80 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 6471804..58bf1c4 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.72 2003/04/16 13:43:44 rathnor Exp $ | 25 | // $Id: Toolbar.cc,v 1.73 2003/04/23 00:17:51 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Toolbar.hh" | 27 | #include "Toolbar.hh" |
28 | 28 | ||
@@ -108,6 +108,7 @@ void setupMenus(Toolbar &tbar) { | |||
108 | tbar.screen().getToolbarWidthPercentResource(), | 108 | tbar.screen().getToolbarWidthPercentResource(), |
109 | 0, 100); // min/max value | 109 | 0, 100); // min/max value |
110 | 110 | ||
111 | |||
111 | FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk:: | 112 | FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk:: |
112 | SimpleCommand<Toolbar> | 113 | SimpleCommand<Toolbar> |
113 | (tbar, &Toolbar::reconfigure)); | 114 | (tbar, &Toolbar::reconfigure)); |
@@ -119,12 +120,10 @@ void setupMenus(Toolbar &tbar) { | |||
119 | toolbar_menuitem_macro->add(save_resources); | 120 | toolbar_menuitem_macro->add(save_resources); |
120 | 121 | ||
121 | FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro); | 122 | FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro); |
122 | |||
123 | toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource); | 123 | toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource); |
124 | 124 | ||
125 | tbar.menu().insert(toolbar_menuitem); | 125 | tbar.menu().insert(toolbar_menuitem); |
126 | 126 | ||
127 | |||
128 | menu.setInternalMenu(); | 127 | menu.setInternalMenu(); |
129 | 128 | ||
130 | menu.insert("Layer...", &tbar.layermenu()); | 129 | menu.insert("Layer...", &tbar.layermenu()); |
@@ -193,16 +192,16 @@ Toolbar::Frame::Frame(FbTk::EventHandler &evh, int screen_num): | |||
193 | 0, 0, // pos | 192 | 0, 0, // pos |
194 | 1, 1, // size | 193 | 1, 1, // size |
195 | // event mask | 194 | // event mask |
196 | ButtonPressMask | ButtonReleaseMask | | 195 | ButtonPressMask | ButtonReleaseMask | |
197 | ExposureMask | | 196 | ExposureMask | |
198 | EnterWindowMask | LeaveWindowMask), | 197 | EnterWindowMask | LeaveWindowMask), |
199 | clock(window, //parent | 198 | clock(window, //parent |
200 | 0, 0, // pos | 199 | 0, 0, // pos |
201 | 1, 1, // size | 200 | 1, 1, // size |
202 | // event mask | 201 | // event mask |
203 | ButtonPressMask | ButtonReleaseMask | | 202 | ButtonPressMask | ButtonReleaseMask | |
204 | ExposureMask | | 203 | ExposureMask | |
205 | EnterWindowMask | LeaveWindowMask), | 204 | EnterWindowMask | LeaveWindowMask), |
206 | psbutton(ArrowButton::LEFT, // arrow type | 205 | psbutton(ArrowButton::LEFT, // arrow type |
207 | window, // parent | 206 | window, // parent |
208 | 0, 0, // pos | 207 | 0, 0, // pos |
@@ -220,15 +219,15 @@ Toolbar::Frame::Frame(FbTk::EventHandler &evh, int screen_num): | |||
220 | 0, 0, // pos | 219 | 0, 0, // pos |
221 | 1, 1), // size | 220 | 1, 1), // size |
222 | hour(-1), // start with invalid number to force update | 221 | hour(-1), // start with invalid number to force update |
223 | minute(-1) | 222 | minute(-1) { |
224 | 223 | ||
225 | { | ||
226 | FbTk::EventManager &evm = *FbTk::EventManager::instance(); | 224 | FbTk::EventManager &evm = *FbTk::EventManager::instance(); |
227 | // add windows to eventmanager | 225 | // add windows to eventmanager |
228 | evm.add(evh, window); | 226 | evm.add(evh, window); |
229 | evm.add(evh, workspace_label); | 227 | evm.add(evh, workspace_label); |
230 | evm.add(evh, window_label); | 228 | evm.add(evh, window_label); |
231 | evm.add(evh, clock); | 229 | evm.add(evh, clock); |
230 | |||
232 | } | 231 | } |
233 | 232 | ||
234 | Toolbar::Frame::~Frame() { | 233 | Toolbar::Frame::~Frame() { |
@@ -263,7 +262,6 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi | |||
263 | m_themelistener(*this), | 262 | m_themelistener(*this), |
264 | m_layeritem(frame.window, layer) { | 263 | m_layeritem(frame.window, layer) { |
265 | 264 | ||
266 | |||
267 | // we need to get notified when the theme is reloaded | 265 | // we need to get notified when the theme is reloaded |
268 | m_theme.addListener(m_themelistener); | 266 | m_theme.addListener(m_themelistener); |
269 | 267 | ||
@@ -435,12 +433,16 @@ void Toolbar::reconfigure() { | |||
435 | 433 | ||
436 | I18n *i18n = I18n::instance(); | 434 | I18n *i18n = I18n::instance(); |
437 | frame.clock_w = m_theme.font().textWidth( | 435 | frame.clock_w = m_theme.font().textWidth( |
438 | i18n->getMessage( | 436 | i18n-> |
439 | FBNLS::ToolbarSet, FBNLS::ToolbarNoStrftimeLength, | 437 | getMessage( |
440 | "00:00000"), | 438 | FBNLS::ToolbarSet, |
441 | strlen(i18n->getMessage( | 439 | FBNLS::ToolbarNoStrftimeLength, |
442 | FBNLS::ToolbarSet, FBNLS::ToolbarNoStrftimeLength, | 440 | "00:00000"), |
443 | "00:00000"))) + (frame.bevel_w * 4); | 441 | strlen(i18n-> |
442 | getMessage( | ||
443 | FBNLS::ToolbarSet, | ||
444 | FBNLS::ToolbarNoStrftimeLength, | ||
445 | "00:00000"))) + (frame.bevel_w * 4); | ||
444 | 446 | ||
445 | #endif // HAVE_STRFTIME | 447 | #endif // HAVE_STRFTIME |
446 | 448 | ||
@@ -744,6 +746,7 @@ void Toolbar::checkClock(bool redraw, bool date) { | |||
744 | dy = frame.clock.height() - dx; | 746 | dy = frame.clock.height() - dx; |
745 | dx = tmp; | 747 | dx = tmp; |
746 | } | 748 | } |
749 | frame.clock.clear(); | ||
747 | m_theme.font().drawText( | 750 | m_theme.font().drawText( |
748 | frame.clock.window(), | 751 | frame.clock.window(), |
749 | screen().getScreenNumber(), | 752 | screen().getScreenNumber(), |
@@ -800,9 +803,9 @@ void Toolbar::redrawWorkspaceLabel(bool redraw) { | |||
800 | size_t textlen = screen().getCurrentWorkspace()->name().size(); | 803 | size_t textlen = screen().getCurrentWorkspace()->name().size(); |
801 | unsigned int newlen = textlen; | 804 | unsigned int newlen = textlen; |
802 | int dx = FbTk::doAlignment(frame.workspace_label_w, frame.bevel_w, | 805 | int dx = FbTk::doAlignment(frame.workspace_label_w, frame.bevel_w, |
803 | m_theme.justify(), | 806 | m_theme.justify(), |
804 | m_theme.font(), | 807 | m_theme.font(), |
805 | text, textlen, newlen); | 808 | text, textlen, newlen); |
806 | int dy = 1 + m_theme.font().ascent(); | 809 | int dy = 1 + m_theme.font().ascent(); |
807 | if (m_theme.font().isRotated()) { | 810 | if (m_theme.font().isRotated()) { |
808 | int tmp = dy; | 811 | int tmp = dy; |
@@ -810,11 +813,12 @@ void Toolbar::redrawWorkspaceLabel(bool redraw) { | |||
810 | dx = tmp; | 813 | dx = tmp; |
811 | } | 814 | } |
812 | m_theme.font().drawText( | 815 | m_theme.font().drawText( |
813 | frame.workspace_label.window(), | 816 | frame.workspace_label.window(), |
814 | screen().getScreenNumber(), | 817 | screen().getScreenNumber(), |
815 | m_theme.labelTextGC(), | 818 | m_theme.labelTextGC(), |
816 | text, newlen, | 819 | text, newlen, |
817 | dx, dy); | 820 | dx, dy); |
821 | |||
818 | } | 822 | } |
819 | 823 | ||
820 | void Toolbar::edit() { | 824 | void Toolbar::edit() { |
@@ -910,7 +914,8 @@ void Toolbar::buttonReleaseEvent(XButtonEvent &re) { | |||
910 | FbTk::Menu *menu = screen().getWorkspacemenu(); | 914 | FbTk::Menu *menu = screen().getWorkspacemenu(); |
911 | //move the workspace label and make it visible | 915 | //move the workspace label and make it visible |
912 | menu->move(re.x_root, re.y_root); | 916 | menu->move(re.x_root, re.y_root); |
913 | // make sure the entire menu is visible (TODO: this is repeated by other menus, make a function!) | 917 | // make sure the entire menu is visible |
918 | //!!TODO: this is repeated by other menus, make a function!) | ||
914 | int newx = menu->x(); // new x position of menu | 919 | int newx = menu->x(); // new x position of menu |
915 | int newy = menu->y(); // new y position of menu | 920 | int newy = menu->y(); // new y position of menu |
916 | if (menu->x() < 0) | 921 | if (menu->x() < 0) |
@@ -977,68 +982,65 @@ void Toolbar::exposeEvent(XExposeEvent &ee) { | |||
977 | 982 | ||
978 | 983 | ||
979 | void Toolbar::keyPressEvent(XKeyEvent &ke) { | 984 | void Toolbar::keyPressEvent(XKeyEvent &ke) { |
980 | if (ke.window == frame.workspace_label && editing) { | 985 | if (ke.window != frame.workspace_label.window() || !editing) |
986 | return; | ||
981 | 987 | ||
982 | KeySym ks; | 988 | KeySym ks; |
983 | char keychar[1]; | 989 | char keychar[1]; |
984 | XLookupString(&ke, keychar, 1, &ks, 0); | 990 | XLookupString(&ke, keychar, 1, &ks, 0); |
985 | 991 | ||
986 | if (ks == XK_Return || ks == XK_Escape) { | 992 | if (ks == XK_Return || ks == XK_Escape) { |
993 | editing = false; | ||
994 | Fluxbox * const fluxbox = Fluxbox::instance(); | ||
995 | fluxbox->setNoFocus(false); | ||
996 | if (fluxbox->getFocusedWindow()) { | ||
997 | fluxbox->getFocusedWindow()->setInputFocus(); | ||
998 | fluxbox->getFocusedWindow()->setFocusFlag(true); | ||
999 | } else | ||
1000 | XSetInputFocus(display, PointerRoot, None, CurrentTime); | ||
987 | 1001 | ||
1002 | if (ks == XK_Return) //change workspace name if keypress = Return | ||
1003 | screen().getCurrentWorkspace()->setName(new_workspace_name.c_str()); | ||
988 | 1004 | ||
989 | editing = false; | 1005 | new_workspace_name.erase(); //erase temporary workspace name |
990 | Fluxbox * const fluxbox = Fluxbox::instance(); | 1006 | reconfigure(); |
991 | fluxbox->setNoFocus(false); | 1007 | //save workspace names |
992 | if (fluxbox->getFocusedWindow()) { | 1008 | Fluxbox::instance()->save_rc(); |
993 | fluxbox->getFocusedWindow()->setInputFocus(); | ||
994 | fluxbox->getFocusedWindow()->setFocusFlag(true); | ||
995 | } else | ||
996 | XSetInputFocus(display, PointerRoot, None, CurrentTime); | ||
997 | |||
998 | if (ks == XK_Return) //change workspace name if keypress = Return | ||
999 | screen().getCurrentWorkspace()->setName(new_workspace_name.c_str()); | ||
1000 | 1009 | ||
1001 | new_workspace_name.erase(); //erase temporary workspace name | 1010 | } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { |
1002 | reconfigure(); | ||
1003 | //save workspace names | ||
1004 | Fluxbox::instance()->save_rc(); | ||
1005 | 1011 | ||
1006 | } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { | 1012 | if (ks == XK_BackSpace && new_workspace_name.size()) |
1013 | new_workspace_name.erase(new_workspace_name.size()-1); | ||
1014 | else | ||
1015 | new_workspace_name += keychar[0]; | ||
1007 | 1016 | ||
1008 | if (ks == XK_BackSpace && new_workspace_name.size()) | ||
1009 | new_workspace_name.erase(new_workspace_name.size()-1); | ||
1010 | else | ||
1011 | new_workspace_name += keychar[0]; | ||
1012 | 1017 | ||
1018 | frame.workspace_label.clear(); | ||
1019 | int l = new_workspace_name.size(), tw, x; | ||
1013 | 1020 | ||
1014 | frame.workspace_label.clear(); | 1021 | tw = m_theme.font().textWidth(new_workspace_name.c_str(), l); |
1015 | int l = new_workspace_name.size(), tw, x; | 1022 | x = (frame.workspace_label_w - tw) / 2; |
1016 | 1023 | ||
1017 | tw = m_theme.font().textWidth(new_workspace_name.c_str(), l); | 1024 | if (x < (signed) frame.bevel_w) |
1018 | x = (frame.workspace_label_w - tw) / 2; | 1025 | x = frame.bevel_w; |
1026 | int dy = 1 + m_theme.font().ascent(); | ||
1027 | if (m_theme.font().isRotated()) { | ||
1028 | int tmp = dy; | ||
1029 | dy = frame.workspace_label_w - x; | ||
1030 | x = tmp; | ||
1031 | } | ||
1019 | 1032 | ||
1020 | if (x < (signed) frame.bevel_w) | 1033 | m_theme.font().drawText( |
1021 | x = frame.bevel_w; | 1034 | frame.workspace_label.window(), |
1022 | int dy = 1 + m_theme.font().ascent(); | 1035 | screen().getScreenNumber(), |
1023 | if (m_theme.font().isRotated()) { | 1036 | screen().getWindowStyle()->l_text_focus_gc, |
1024 | int tmp = dy; | 1037 | new_workspace_name.c_str(), l, |
1025 | dy = frame.workspace_label_w - x; | 1038 | x, dy); |
1026 | x = tmp; | ||
1027 | } | ||
1028 | 1039 | ||
1029 | m_theme.font().drawText( | 1040 | XDrawRectangle(display, frame.workspace_label.window(), |
1030 | frame.workspace_label.window(), | 1041 | screen().getWindowStyle()->l_text_focus_gc, x + tw, 0, 1, |
1031 | screen().getScreenNumber(), | 1042 | frame.label_h - 1); |
1032 | screen().getWindowStyle()->l_text_focus_gc, | 1043 | } |
1033 | new_workspace_name.c_str(), l, | ||
1034 | x, dy); | ||
1035 | |||
1036 | XDrawRectangle(display, frame.workspace_label.window(), | ||
1037 | screen().getWindowStyle()->l_text_focus_gc, x + tw, 0, 1, | ||
1038 | frame.label_h - 1); | ||
1039 | } | ||
1040 | |||
1041 | } | ||
1042 | } | 1044 | } |
1043 | 1045 | ||
1044 | 1046 | ||