It seems like wnck_window_is_skip_pager isn't all we need to check. --- superswitcher/src/screen.c +++ superswitcher/src/screen.c @@ -505,6 +505,7 @@ static SSWindow * add_window_to_screen (SSScreen *screen, WnckWindow *wnck_window) { + WnckWorkspace *wnck_workspace; SSWindow *window; SSWorkspace *workspace; int n; @@ -513,7 +514,13 @@ return NULL; } - n = wnck_workspace_get_number (wnck_window_get_workspace (wnck_window)); + wnck_workspace = wnck_window_get_workspace (wnck_window); + + if (wnck_workspace == NULL) { + return NULL; + } + + n = wnck_workspace_get_number (wnck_workspace); workspace = ss_screen_get_nth_workspace (screen, n); window = ss_window_new (workspace, wnck_window); --- superswitcher/src/window.c +++ superswitcher/src/window.c @@ -254,6 +254,7 @@ static void on_workspace_changed (WnckWindow *wnck_window, gpointer data) { + WnckWorkspace *wnck_workspace; SSWindow *window; SSWorkspace *old_workspace; SSWorkspace *new_workspace; @@ -261,12 +262,19 @@ window = (SSWindow *) data; old_workspace = window->workspace; - new_workspace_id = wnck_workspace_get_number (wnck_window_get_workspace (wnck_window)); - new_workspace = ss_screen_get_nth_workspace (old_workspace->screen, new_workspace_id); - ss_workspace_remove_window (old_workspace, window); + + wnck_workspace = wnck_window_get_workspace (wnck_window); + if (wnck_workspace) { + new_workspace_id = wnck_workspace_get_number (wnck_workspace); + new_workspace = ss_screen_get_nth_workspace (old_workspace->screen, new_workspace_id); + + ss_workspace_add_window (new_workspace, window); + window->workspace = new_workspace; + } else { + window->workspace = NULL; + } + - window->workspace = new_workspace; - ss_workspace_add_window (new_workspace, window); window->new_window_index = -1; gtk_widget_queue_draw (gtk_widget_get_toplevel (window->widget)); }