static void update_name (WnckApplication *app) { g_assert (app->priv->name_from_leader || app->priv->name == NULL); if (app->priv->name == NULL) { /* if only one window, get name from there. If more than one and * they all have the same res_class, use that. Else we want to * use the fallback name, since using the title of one of the * windows would look wrong. */ if (app->priv->windows && app->priv->windows->next == NULL) { app->priv->name = g_strdup (wnck_window_get_name (app->priv->windows->data)); app->priv->name_window = app->priv->windows->data; emit_name_changed (app); } else if (app->priv->windows) { /* more than one */ app->priv->name = _wnck_get_res_class_utf8 (WNCK_SCREEN_XSCREEN (app->priv->screen), wnck_window_get_xid (app->priv->windows->data)); if (app->priv->name) { app->priv->name_window = app->priv->windows->data; emit_name_changed (app); } } } }
/** * wnck_workspace_activate: * @space: a #WnckWorkspace. * @timestamp: the X server timestamp of the user interaction event that caused * this call to occur. * * Asks the window manager to make @space the active workspace. The window * manager may decide to refuse the request (to not steal the focus if there is * a more recent user activity, for example). * * This function existed before 2.10, but the @timestamp argument was missing * in earlier versions. * * Since: 2.10 **/ void wnck_workspace_activate (WnckWorkspace *space, guint32 timestamp) { g_return_if_fail (WNCK_IS_WORKSPACE (space)); _wnck_activate_workspace (WNCK_SCREEN_XSCREEN (space->priv->screen), space->priv->number, timestamp); }
/* xwindow is a group leader */ WnckApplication* _wnck_application_create (Window xwindow, WnckScreen *screen) { WnckApplication *application; Screen *xscreen; if (app_hash == NULL) app_hash = g_hash_table_new_full (_wnck_xid_hash, _wnck_xid_equal, NULL, g_object_unref); g_return_val_if_fail (g_hash_table_lookup (app_hash, &xwindow) == NULL, NULL); xscreen = WNCK_SCREEN_XSCREEN (screen); application = g_object_new (WNCK_TYPE_APPLICATION, NULL); application->priv->xwindow = xwindow; application->priv->screen = screen; application->priv->name = _wnck_get_name (xscreen, xwindow); if (application->priv->name == NULL) application->priv->name = _wnck_get_res_class_utf8 (xscreen, xwindow); if (application->priv->name) application->priv->name_from_leader = TRUE; application->priv->pid = _wnck_get_pid (xscreen, application->priv->xwindow); application->priv->startup_id = _wnck_get_utf8_property (xscreen, application->priv->xwindow, _wnck_atom_get ("_NET_STARTUP_ID")); g_hash_table_insert (app_hash, &application->priv->xwindow, application); /* Hash now owns one ref, caller gets none */ /* Note that xwindow may correspond to a WnckWindow's xwindow, * so we select events needed by either */ application->priv->orig_event_mask = _wnck_select_input (xscreen, application->priv->xwindow, WNCK_APP_WINDOW_EVENT_MASK, TRUE); return application; }
static void get_icons (WnckApplication *app) { GdkPixbuf *icon; GdkPixbuf *mini_icon; gsize normal_size; gsize mini_size; icon = NULL; mini_icon = NULL; normal_size = _wnck_get_default_icon_size (); mini_size = _wnck_get_default_mini_icon_size (); if (_wnck_read_icons (WNCK_SCREEN_XSCREEN (app->priv->screen), app->priv->xwindow, app->priv->icon_cache, &icon, normal_size, normal_size, &mini_icon, mini_size, mini_size)) { app->priv->need_emit_icon_changed = TRUE; app->priv->icon_from_leader = TRUE; if (app->priv->icon) g_object_unref (G_OBJECT (app->priv->icon)); if (app->priv->mini_icon) g_object_unref (G_OBJECT (app->priv->mini_icon)); app->priv->icon = icon; app->priv->mini_icon = mini_icon; } /* FIXME we should really fall back to using the icon * for one of the windows. But then we need to be more * complicated about icon_changed and when the icon * needs updating and all that. */ g_assert ((app->priv->icon && app->priv->mini_icon) || !(app->priv->icon || app->priv->mini_icon)); }
static void wnck_application_finalize (GObject *object) { WnckApplication *application; application = WNCK_APPLICATION (object); _wnck_select_input (WNCK_SCREEN_XSCREEN (application->priv->screen), application->priv->xwindow, application->priv->orig_event_mask, FALSE); application->priv->xwindow = None; g_list_free (application->priv->windows); application->priv->windows = NULL; g_free (application->priv->name); application->priv->name = NULL; if (application->priv->icon) g_object_unref (G_OBJECT (application->priv->icon)); application->priv->icon = NULL; if (application->priv->mini_icon) g_object_unref (G_OBJECT (application->priv->mini_icon)); application->priv->mini_icon = NULL; _wnck_icon_cache_free (application->priv->icon_cache); application->priv->icon_cache = NULL; g_free (application->priv->startup_id); application->priv->startup_id = NULL; G_OBJECT_CLASS (wnck_application_parent_class)->finalize (object); }