Exemplo n.º 1
0
static void
_j4status_i3focus_window_callback(GObject *object, i3ipcWindowEvent *event, gpointer user_data)
{
    J4statusSection *section = user_data;
    gboolean focused;

    g_object_get(event->container, "focused", &focused, NULL);

    if ( focused )
        j4status_section_set_value(section, g_strdup(i3ipc_con_get_name(event->container)));
}
Exemplo n.º 2
0
static Window *visible_windows_on_all_outputs(i3ipcCon *root, SortMethod sort_method)
{
    GSList *raw_replies = i3ipc_connection_get_workspaces(connection, NULL);
    GSList *replies = g_slist_reverse(raw_replies); // i3ipc-glib reverses the order internally

    if (sort_method == BY_NUMBER)
    {
        replies = g_slist_sort(replies, compare_workspace_nums);
    }
    else if (sort_method == BY_LOCATION)
    {
        GSList *outputs = i3ipc_connection_get_outputs(connection, NULL);
        replies = g_slist_sort_with_data(replies, compare_workspace_position, outputs);
        g_slist_free_full(outputs, (GDestroyNotify) i3ipc_output_reply_free);
    }

    GList *workspaces = i3ipc_con_workspaces(root);

    Window *res = NULL;
    const GSList *reply;
    i3ipcWorkspaceReply *curr_reply;
    for (reply = replies; reply; reply = reply->next)
    {
        curr_reply = reply->data;
        if (!curr_reply->visible)
            continue;

        const GList *ws;
        i3ipcCon *curr_ws;
        for (ws = workspaces; ws; ws = ws->next)
        {
            curr_ws = ws->data;
            const char *name = i3ipc_con_get_name(curr_ws);
            if (strcmp(curr_reply->name, name) == 0)
            {
                i3ipcCon *con = con_get_visible_container(curr_ws);
                res = window_append(res, visible_windows(con));
                break;
            }
        }
    }

    g_slist_free_full(replies, (GDestroyNotify) i3ipc_workspace_reply_free);
    g_list_free(workspaces);

    return res;
}