MetaWindow::workspace-changed signal.

Emitted when window is moved from one workspace to another; the number of the
  old workspace is passed to the signal handlers.
This commit is contained in:
Tomas Frydrych 2009-01-20 12:52:06 +00:00
parent cb3870f9f6
commit a96939be0f
2 changed files with 30 additions and 0 deletions

View File

@ -367,6 +367,8 @@ struct _MetaWindow
struct _MetaWindowClass struct _MetaWindowClass
{ {
GObjectClass parent_class; GObjectClass parent_class;
void (*workspace_changed) (MetaWindow *window, int old_workspace);
}; };
/* These differ from window->has_foo_func in that they consider /* These differ from window->has_foo_func in that they consider

View File

@ -142,6 +142,15 @@ enum {
PROP_MINI_ICON, PROP_MINI_ICON,
}; };
enum
{
WORKSPACE_CHANGED,
LAST_SIGNAL
};
static guint window_signals[LAST_SIGNAL] = { 0 };
static void static void
meta_window_finalize (GObject *object) meta_window_finalize (GObject *object)
{ {
@ -237,6 +246,16 @@ meta_window_class_init (MetaWindowClass *klass)
"16 pixel sized icon", "16 pixel sized icon",
GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF,
G_PARAM_READABLE)); G_PARAM_READABLE));
window_signals[WORKSPACE_CHANGED] =
g_signal_new ("workspace-changed",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaWindowClass, workspace_changed),
NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, 1,
G_TYPE_INT);
} }
static void static void
@ -4448,9 +4467,16 @@ static void
meta_window_change_workspace_without_transients (MetaWindow *window, meta_window_change_workspace_without_transients (MetaWindow *window,
MetaWorkspace *workspace) MetaWorkspace *workspace)
{ {
int old_workspace = -1;
meta_verbose ("Changing window %s to workspace %d\n", meta_verbose ("Changing window %s to workspace %d\n",
window->desc, meta_workspace_index (workspace)); window->desc, meta_workspace_index (workspace));
if (!window->on_all_workspaces)
{
old_workspace = meta_workspace_index (window->workspace);
}
/* unstick if stuck. meta_window_unstick would call /* unstick if stuck. meta_window_unstick would call
* meta_window_change_workspace recursively if the window * meta_window_change_workspace recursively if the window
* is not in the active workspace. * is not in the active workspace.
@ -4463,6 +4489,8 @@ meta_window_change_workspace_without_transients (MetaWindow *window,
{ {
meta_workspace_remove_window (window->workspace, window); meta_workspace_remove_window (window->workspace, window);
meta_workspace_add_window (workspace, window); meta_workspace_add_window (workspace, window);
g_signal_emit (window, window_signals[WORKSPACE_CHANGED], 0,
old_workspace);
} }
} }