From 14043c52e4cd2a3bd4ef921213c7feaa125b8fce Mon Sep 17 00:00:00 2001 From: Matthew Kern Date: Mon, 23 Aug 2010 05:38:15 -0400 Subject: Changes screen config option .workspaces to .workspacerows and .workspacecols, and adds UpWorkspace and DownWorkspace functions --- src/Screen.cc | 29 +++++++++++++++++++++++------ src/Screen.hh | 19 ++++++++++++++++--- src/WorkspaceCmd.cc | 18 ++++++++++++++++++ src/WorkspaceCmd.hh | 16 ++++++++++++++++ 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/Screen.cc b/src/Screen.cc index eab0f59..ac2314b 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -303,7 +303,8 @@ BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager &rm, tab_placement(rm, FbWinFrame::TOPLEFT, scrname+".tab.placement", altscrname+".Tab.Placement"), windowmenufile(rm, Fluxbox::instance()->getDefaultDataFilename("windowmenu"), scrname+".windowMenu", altscrname+".WindowMenu"), typing_delay(rm, 0, scrname+".noFocusWhileTypingDelay", altscrname+".NoFocusWhileTypingDelay"), - workspaces(rm, 4, scrname+".workspaces", altscrname+".Workspaces"), + workspacerows(rm, 2, scrname+".workspacerows", altscrname+".WorkspaceRows"), + workspacecols(rm, 2, scrname+".workspacecols", altscrname+".WorkspaceCols"), edge_snap_threshold(rm, 10, scrname+".edgeSnapThreshold", altscrname+".EdgeSnapThreshold"), focused_alpha(rm, 255, scrname+".window.focus.alpha", altscrname+".Window.Focus.Alpha"), unfocused_alpha(rm, 255, scrname+".window.unfocus.alpha", altscrname+".Window.Unfocus.Alpha"), @@ -473,7 +474,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm, fluxbox->load_rc(*this); // setup workspaces and workspace menu - int nr_ws = *resource.workspaces; + int nr_ws = *resource.workspacerows * *resource.workspacecols; addWorkspace(); // at least one for (int i = 1; i < nr_ws; ++i) { addWorkspace(); @@ -914,7 +915,7 @@ void BScreen::reconfigure() { m_menutheme->setDelay(*resource.menu_delay); // realize the number of workspaces from the init-file - const unsigned int nr_ws = *resource.workspaces; + const unsigned int nr_ws = *resource.workspacerows * *resource.workspacecols; if (nr_ws > m_workspaces_list.size()) { while(nr_ws != m_workspaces_list.size()) { addWorkspace(); @@ -1824,14 +1825,14 @@ void BScreen::setLayer(FbTk::XLayerItem &item, int layernum) { /** - Goes to the workspace "right" of the current + Goes to the workspace next sequentially */ void BScreen::nextWorkspace(const int delta) { changeWorkspaceID( (currentWorkspaceID() + delta) % numberOfWorkspaces()); } /** - Goes to the workspace "left" of the current + Goes to the workspace previous sequentially */ void BScreen::prevWorkspace(const int delta) { changeWorkspaceID( (static_cast(numberOfWorkspaces()) + currentWorkspaceID() - (delta % numberOfWorkspaces())) % numberOfWorkspaces()); @@ -1841,7 +1842,7 @@ void BScreen::prevWorkspace(const int delta) { Goes to the workspace "right" of the current */ void BScreen::rightWorkspace(const int delta) { - if (currentWorkspaceID()+delta < numberOfWorkspaces()) + if ((currentWorkspaceID() % getWorkspaceCols())+delta < getWorkspaceCols()) changeWorkspaceID(currentWorkspaceID()+delta); } @@ -1853,6 +1854,22 @@ void BScreen::leftWorkspace(const int delta) { changeWorkspaceID(currentWorkspaceID()-delta); } +/** + Goes to the workspace "above" the current +*/ +void BScreen::downWorkspace(const int delta) { + if (((currentWorkspaceID() - (currentWorkspaceID() % getWorkspaceCols()))/getWorkspaceCols()) >= static_cast(delta)) + changeWorkspaceID(currentWorkspaceID()-(delta*getWorkspaceCols())); +} + +/** + Goes to the workspace "below" the current +*/ +void BScreen::upWorkspace(const int delta) { + if (((currentWorkspaceID() - (currentWorkspaceID() % getWorkspaceCols()))/getWorkspaceCols())+delta < getWorkspaceRows()) + changeWorkspaceID(currentWorkspaceID()+(delta*getWorkspaceCols())); +} + void BScreen::renderGeomWindow() { diff --git a/src/Screen.hh b/src/Screen.hh index 2267d86..464d269 100644 --- a/src/Screen.hh +++ b/src/Screen.hh @@ -98,7 +98,9 @@ public: void initWindows(); void initMenus(); - + + int getWorkspaceRows() const { return *resource.workspacerows; } + int getWorkspaceCols() const { return *resource.workspacecols; } bool isRootColormapInstalled() const { return root_colormap_installed; } bool isScreenManaged() const { return managed; } bool isWorkspaceWarping() const { return *resource.workspace_warping; } @@ -263,7 +265,7 @@ public: void saveTabPlacement(FbWinFrame::TabPlacement place) { *resource.tab_placement = place; } - void saveWorkspaces(int w) { *resource.workspaces = w; } + void saveWorkspaces(int w) { *resource.workspacecols = w; *resource.workspacerows = 1; } FbTk::ThemeProxy &focusedWinFrameTheme() { return *m_focused_windowtheme.get(); } const FbTk::ThemeProxy &focusedWinFrameTheme() const { return *m_focused_windowtheme.get(); } @@ -326,6 +328,17 @@ public: * @param delta number of steps to jump */ void leftWorkspace(int delta); + /** + * Jump up to a workspace + * @param delta number of steps to jump + */ + void upWorkspace(int delta); + /** + * Jump down to a workspace + * @param delta number of steps to jump + */ + void downWorkspace(int delta); + /// update workspace name for given workspace void updateWorkspaceName(unsigned int w); @@ -544,7 +557,7 @@ private: FbTk::Resource tab_placement; FbTk::Resource windowmenufile; FbTk::Resource typing_delay; - FbTk::Resource workspaces, edge_snap_threshold, focused_alpha, + FbTk::Resource workspacerows, workspacecols, edge_snap_threshold, focused_alpha, unfocused_alpha, menu_alpha, menu_delay, tab_width, tooltip_delay; FbTk::Resource allow_remote_actions; diff --git a/src/WorkspaceCmd.cc b/src/WorkspaceCmd.cc index d72ef13..94d971f 100644 --- a/src/WorkspaceCmd.cc +++ b/src/WorkspaceCmd.cc @@ -306,6 +306,10 @@ FbTk::Command *parseIntCmd(const string &command, const string &args, return new RightWorkspaceCmd(num); else if (command == "leftworkspace") return new LeftWorkspaceCmd(num); + else if (command == "upworkspace") + return new UpWorkspaceCmd(num); + else if (command == "downworkspace") + return new DownWorkspaceCmd(num); else if (command == "workspace") // workspaces appear 1-indexed to the user, hence the minus 1 return new JumpToWorkspaceCmd(num - 1); @@ -316,6 +320,8 @@ REGISTER_COMMAND_PARSER(nextworkspace, parseIntCmd, void); REGISTER_COMMAND_PARSER(prevworkspace, parseIntCmd, void); REGISTER_COMMAND_PARSER(rightworkspace, parseIntCmd, void); REGISTER_COMMAND_PARSER(leftworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(upworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(downworkspace, parseIntCmd, void); REGISTER_COMMAND_PARSER(workspace, parseIntCmd, void); } // end anonymous namespace @@ -344,6 +350,18 @@ void RightWorkspaceCmd::execute() { screen->rightWorkspace(m_param); } +void UpWorkspaceCmd::execute() { + BScreen *screen = Fluxbox::instance()->mouseScreen(); + if (screen != 0) + screen->upWorkspace(m_param); +} + +void DownWorkspaceCmd::execute() { + BScreen *screen = Fluxbox::instance()->mouseScreen(); + if (screen != 0) + screen->downWorkspace(m_param); +} + JumpToWorkspaceCmd::JumpToWorkspaceCmd(int workspace_num):m_workspace_num(workspace_num) { } void JumpToWorkspaceCmd::execute() { diff --git a/src/WorkspaceCmd.hh b/src/WorkspaceCmd.hh index ad63d04..3fbe404 100644 --- a/src/WorkspaceCmd.hh +++ b/src/WorkspaceCmd.hh @@ -159,6 +159,22 @@ private: const int m_param; }; +class UpWorkspaceCmd: public FbTk::Command { +public: + explicit UpWorkspaceCmd(int num=1):m_param(num == 0 ? 1 : num) { } + void execute(); +private: + const int m_param; +}; + +class DownWorkspaceCmd: public FbTk::Command { +public: + explicit DownWorkspaceCmd(int num=1):m_param(num == 0 ? 1 : num) { } + void execute(); +private: + const int m_param; +}; + class JumpToWorkspaceCmd: public FbTk::Command { public: explicit JumpToWorkspaceCmd(int workspace_num); -- 1.7.2