Example #1
0
/**
 * Popup menu item has been clicked. This requires removing a master device.
 */
static gboolean signal_popup_activate(GtkWidget *menuitem, gpointer data)
{
    GDeviceSetup *gds = (GDeviceSetup*)data;
    GtkTreeView *treeview = GTK_TREE_VIEW(gds->treeview);
    GtkTreeModel *model = gtk_tree_view_get_model(treeview);
    GtkTreeSelection *selection;
    GtkTreeIter iter;
    int id;

    selection = gtk_tree_view_get_selection(treeview);
    gtk_tree_selection_get_selected(selection, NULL, &iter);

    gtk_tree_model_get(model, &iter, COL_ID, &id, -1);

    remove_master(gds, id);

    return TRUE;
}
Example #2
0
int
ProcXIChangeHierarchy(ClientPtr client)
{
    xXIAnyHierarchyChangeInfo *any;
    int required_len = sizeof(xXIChangeHierarchyReq);
    char n;
    int rc = Success;
    int flags[MAXDEVICES] = {0};

    REQUEST(xXIChangeHierarchyReq);
    REQUEST_AT_LEAST_SIZE(xXIChangeHierarchyReq);

    if (!stuff->num_changes)
        return rc;

    any = (xXIAnyHierarchyChangeInfo*)&stuff[1];
    while(stuff->num_changes--)
    {
        SWAPIF(swapl(&any->type, n));
        SWAPIF(swaps(&any->length, n));

        required_len += any->length;
        if ((stuff->length * 4) < required_len)
            return BadLength;

        switch(any->type)
        {
            case XIAddMaster:
                {
                    xXIAddMasterInfo* c = (xXIAddMasterInfo*)any;
                    SWAPIF(swaps(&c->name_len, n));

                    rc = add_master(client, c, flags);
                    if (rc != Success)
                        goto unwind;
                }
                break;
            case XIRemoveMaster:
                {
                    xXIRemoveMasterInfo* r = (xXIRemoveMasterInfo*)any;

                    rc = remove_master(client, r, flags);
                    if (rc != Success)
                        goto unwind;
                }
                break;
            case XIDetachSlave:
                {
                    xXIDetachSlaveInfo* c = (xXIDetachSlaveInfo*)any;

                    rc = detach_slave(client, c, flags);
                    if (rc != Success)
                       goto unwind;
                }
                break;
            case XIAttachSlave:
                {
                    xXIAttachSlaveInfo* c = (xXIAttachSlaveInfo*)any;

                    rc = attach_slave(client, c, flags);
                    if (rc != Success)
                       goto unwind;
                }
                break;
        }

        any = (xXIAnyHierarchyChangeInfo*)((char*)any + any->length * 4);
    }

unwind:

    XISendDeviceHierarchyEvent(flags);
    return rc;
}