I wrote a small code that shows a notification on workspace switch action.
This code requires libnotify and libwnck
To compile it use the command:
gcc -O2 -o wsnd `pkg-config --cflags --libs libnotify --libs libwnck` wsn.c
If you found compiling errors with above command, try this one:
gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wsnd `pkg-config --cflags --libs libnotify --libs libwnck-1.0` wsn.c
To test it from a terminal: ./wsnd
Include it as XFCE startup application:
In XFCE you need to add it as startup applicaion on settings-manager->session and startup -> Application Autostart
The code:
//////////////////////////////////////////////////////////////////////////////////////
// Workspace Switch Notifier //
// Shows a OSD with workspace name on workspace switching action //
// //
// wsn.c - //
// //
// Authors: //
// Isaac Maia Pessoa //
// //
// This program is free software: you can redistribute it and/or modify it //
// under the terms of the GNU General Public License version 3, as published //
// by the Free Software Foundation. //
// //
// This program is distributed in the hope that it will be useful, but //
// WITHOUT ANY WARRANTY; without even the implied warranties of //
// MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR //
// PURPOSE. See the GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License along //
// with this program. If not, see <http://www.gnu.org/licenses/>. //
//////////////////////////////////////////////////////////////////////////////////////
#include <libnotify/notify.h>
#include <libwnck/libwnck.h>
#define N_SUMMARY "Workspace Changed"
#define N_ICON "dialog-information"
#define N_APPNAME "workspace switch notifier"
#define N_TIMEOUT 2000 /*2000ms = 2s */
static NotifyNotification * m_notification = NULL;
static void
on_active_workspace_changed (WnckScreen *screen,
WnckWorkspace *space,
gpointer data)
{
WnckWorkspace * active_workspace = wnck_screen_get_active_workspace(screen);
const char * w_name = wnck_workspace_get_name (active_workspace);
notify_notification_update(m_notification, N_SUMMARY, w_name, N_ICON);
notify_notification_show(m_notification, NULL);
}
int main(int argc, char ** argv)
{
GMainLoop *loop;
WnckScreen *screen;
if (notify_init(N_APPNAME))
m_notification = notify_notification_new(N_SUMMARY, "" , N_ICON);
else
fprintf(stderr, "Failed to init notifications\n");
notify_notification_set_timeout(m_notification, N_TIMEOUT);
gdk_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
screen = wnck_screen_get_default();
g_signal_connect (screen, "active-workspace-changed",
G_CALLBACK (on_active_workspace_changed), NULL);
g_main_loop_run (loop);
g_main_loop_unref (loop);
return 0;
}
In Xfce 4 you can define multiple workspaces by either adding a new wokspace switcher to the panel, as it has been done in the question, or by using the workplace switcher that is already installed in the lower right corner by default.
With a right click on this swicher you can select the switcher properties. Choose more than 1 row to have more than 1 workspace.
Moving applications to another workspace can be done with a right click on the application's top title bar and select Move to Another Workspace:
Number and names of workspaces can be defined in the Xfce 4 Settings Manager (from Applications -> Settings):
Best Answer
It's possible to manually set the
_NET_DESKTOP_LAYOUT
property using thexprop
command.For example, to get 4 columns x 2 rows, issue this:
And to change the number of workspaces/desktops to 8:
Further information regarding the
_NET_DESKTOP_LAYOUT
property (among others) can be found here