Skip to content

cloudmasterconstnt/workspace-grid-gnome-shell-extension

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Workspace Grid GNOME Shell Extension

This extension allows you to configure your workspaces in a grid, inspired by the Frippery Static Workspaces extension.

  • Holds the number of workspaces fixed.
  • Allows the user to specify the workspace layout (rows/columns).
  • Updates the workspaces display in the overview to reflect the workspace grid layout.
  • updates the workspace switcher/keybindings to reflect the workspace grid layout.

Note - if you use a bottom panel, Frippery Bottom Panel already has workspace grid functionality!

This extension Written 2012 by Amy Chan.

Maintained by Foivos S. Zakkak since October, 2014.

Project webpage: at github.

Report bugs: on the Issues page at github.

Other relevant extensions

Combine these extensions with this one or just use these if this doesn’t do what you want:

Let me know of similar extensions to add to this list.


Installation

  1. Download the .zip file on the Downloads page.
  2. Open gnome-tweak-tool, go to “Shell Extensions”, “Install Extension” and select the .zip file.

Configuration

To avoid weird re-sizing of the thumbnails-box please enable the extension User themes, as well. Workspace grid currently overrides the css decoration to fix such behaviors.

Before configuring workspace grid, set the Workspace Creation in gnome tweak tool to static and the Number of Workspaces to the total number of workspaces you want to have.

Things that can be configured:

  • Number of rows/columns in the workspace.
  • Whether workspaces wrap around.

    When navigating workspaces (via keybindings, scrolling over the workspace thumbnails in the Overview) do you want to wrap around from the start to the end (e.g. going past workspace n wraps back to workspace 1)?

  • Whether to show workspace labels in the switcher.
  • Workspaces thumbnails sidebar in overview.

    This sidebar can get pretty wide if you have multiple columns of workspaces. The sidebar can be collapsed to the side of the screen if it becomes too wide so that you then hover your mouse over it to uncollapse it.


For developers wanting to integrate with this extension

If you wish to see if your extension is compatible with this one, these are things you need to know.

Exported stuff

This extension exports a number of constants and functions to an object global.screen.workspace_grid for your convenience. (It isn’t particularly good code style as this “breaks the extension barrier” so to speak - extensions are meant to be standalone and modular, but when multiple extensions have overlapping functionalities it makes sense to use another extension’s functionality rather than re-implement it in your own).

Note that the Workspace Grid extension must be enabled for this all to work. The global.screen.workspace_grid object contains:

(Exported Constants)

  • Directions = { UP, LEFT, RIGHT, DOWN } : directions for navigating (see moveWorkspaces further down) (NOTE: From 3.6+ just use Meta.MotionDirection.{UP, LEFT, RIGHT, DOWN})
  • rows : number of rows of workspaces
  • columns : number of columns of workspaces

(Exported Functions)

  • moveWorkspace : switches workspaces in the direction specified, being either (Directions.)~UP~, LEFT, RIGHT or DOWN (see Directions).
  • rowColToIndex : converts the row/column into an index for use with (e.g.) global.screen.get_workspace_by_index(i)
  • indexToRowCol : converts an index (0 to global.screen.n_workspaces-1) to a row and column
  • calculateWorkspace : calculates the index of the workspace adjacent in the specified direction to the current one.
  • getWorkspaceSwitcherPopup : retrieves our workspace switcher popup.

For example, to move to the workspace below us:

const WorkspaceGrid = global.screen.workspace_grid;
WorkspaceGrid.moveWorkspace(WorkspaceGrid.Directions.DOWN);

Listening to Workspace Grid

Say you want to know the number of rows/columns of workspaces in your extension. Then you have to wait for this extension to load and populate global.screen.workspace_grid.

When the Workspace Grid extension enables or disables it fires a 'notify::n_workspaces' signal on global.screen. You can connect to this and check for the existence (or removal) of global.screen.workspace_grid.

e.g.:

let ID = global.screen.connect('notify::n-workspaces', function () {
    if (global.screen.workspace_grid) {
        // then we can use workspace_grid.rows, cols, etc
    } else {
        // remember, your extension should be able to handle this one being
        // switched on and off! If workspace_grid is no longer here then
        // your code should stop using it.
    }
});

Further notes

Workspaces can be changed by the user by a number of ways, and the ways this extension overrides are:

  • keybindings (Main.wm.setKeybindingHandler (GNOME 3.2), Meta.keybindings_set_custom_handler (GNOME 3.4)),
  • keybinding with global grab in progress (e.g. in Overview/lg): see Main._globalKeyPressHandler,
  • scrolling in the overview (WorkspacesView.WorkspacesDisplay.controls listens to 'scroll-event'), and
  • clicking in the overview.

For developers wanting to improve this extension:

  • The ‘3.18’ branch is compatible with GNOME 3.16 and 3.18. It’s meant to be stable.
  • The ‘3.16’ branch is only compatible with GNOME 3.16. It’s meant to be stable.
  • The ‘3.14’ branch is only compatible with GNOME 3.14. It’s meant to be stable.
  • The ‘3.12’ branch is only compatible with GNOME 3.12. It’s meant to be stable.
  • The ‘3.10’ branch is only compatible with GNOME 3.10. It’s meant to be stable.
  • The ‘3.8’ branch is only compatible with GNOME 3.8. It’s meant to be stable [16/05/2013: not yet working]
  • The ‘3.6’ branch is only compatible with GNOME 3.6. It’s meant to be stable.
  • The ‘3.4’ branch is only compatible with GNOME 3.4 - things like keybinding names have changed since GNOME 3.2. It’s meant to be stable.
  • The ‘3.2’ branch is only compatible with GNOME 3.2. It’s meant to be stable.
  • The ‘master’ branch is currently essentially the 3.2 branch…

Known issues

From GNOME 3.4+ to keep workspaces static we can just adjust some settings:

  • org.gnome.shell.overrides.dynamic-workspaces to false
  • org.gnome.desktop.wm.preferences.num-workspaces to the number of workspaces

However then you can’t drag/drop applications between workspaces (GNOME 3.4/3.6 anyway), so instead of doing that we make use of the Frippery Static Workspace code.

In Gnome 3.14 drag/drop is not working both in dynamic and static setup, so we dropped the Flippery Static Workspace code.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 96.0%
  • CSS 3.2%
  • Makefile 0.8%