gboolean rubberband_finish (Sheet *sheet, GdkEvent *event) { RubberbandInfo *rubberband_info; rubberband_info = sheet->priv->rubberband_info; #if 1 GList *iter = NULL; if (sheet->priv->preserve_selection_items) { for (iter = sheet->priv->preserve_selection_items; iter; iter = iter->next) sheet_item_set_preserve_selection (SHEET_ITEM (iter->data), FALSE); g_list_free (sheet->priv->preserve_selection_items); sheet->priv->preserve_selection_items = NULL; } #endif sheet_pointer_ungrab (sheet, event); g_object_set (rubberband_info->rectangle, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL); rubberband_info->state = RUBBERBAND_START; return TRUE; }
/** * save the selection * @attention not stackable */ GList *sheet_preserve_selection (Sheet *sheet) { g_return_val_if_fail (sheet != NULL, FALSE); g_return_val_if_fail (IS_SHEET (sheet), FALSE); GList *list = NULL; for (list = sheet->priv->selected_objects; list; list = list->next) { sheet_item_set_preserve_selection (SHEET_ITEM (list->data), TRUE); } // Return the list so that we can remove the preserve_selection // flags later. return sheet->priv->selected_objects; }
gboolean rubberband_start (Sheet *sheet, GdkEvent *event) { GList *list; double x, y; RubberbandInfo *rubberband_info; g_assert (event->type == GDK_BUTTON_PRESS); x = event->button.x; y = event->button.y; goo_canvas_convert_from_pixels (GOO_CANVAS (sheet), &x, &y); rubberband_info = sheet->priv->rubberband_info; rubberband_info->start.x = x; rubberband_info->start.y = y; rubberband_info->end.x = x; rubberband_info->end.y = y; rubberband_info->state = RUBBERBAND_ACTIVE; //FIXME TODO recheck g_assert (rubberband_info->rectangle!=NULL); g_object_set (rubberband_info->rectangle, "x", x, "y", y, "width", 0., "height", 0., "visibility", GOO_CANVAS_ITEM_VISIBLE, NULL); #if 1 // Mark all the selected objects to preserve their selected state // if SHIFT is pressed while rubberbanding. if (event->button.state & GDK_SHIFT_MASK) { for (list = sheet->priv->selected_objects; list; list = list->next) sheet_item_set_preserve_selection (SHEET_ITEM (list->data), TRUE); sheet->priv->preserve_selection_items = g_list_copy (sheet->priv->selected_objects); } #endif sheet_pointer_grab (sheet, event); return TRUE; }
void sheet_stop_rubberband (Sheet *sheet, GdkEventButton *event) { GList *list = NULL; sheet->priv->rubberband->state = RUBBER_NO; if (sheet->priv->preserve_selection_items != NULL) { for (list = sheet->priv->preserve_selection_items; list; list = list->next) sheet_item_set_preserve_selection (SHEET_ITEM (list->data), FALSE); g_list_free (sheet->priv->preserve_selection_items); sheet->priv->preserve_selection_items = NULL; } goo_canvas_pointer_ungrab (GOO_CANVAS (sheet), GOO_CANVAS_ITEM (sheet->grid), event->time); goo_canvas_item_remove (GOO_CANVAS_ITEM (sheet->priv->rubberband->rectangle)); //g_list_free_full (list, g_object_unref); //FIXME }