static void etcta_reflow (GnomeCanvasItem *item, gint flags) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item); gdouble old_height = etcta->height; if (etcta->text) { g_object_get ( etcta->text, "height", &etcta->height, NULL); etcta->height += 6; } if (etcta->row) { g_object_get ( etcta->row, "height", &etcta->height, NULL); } if (etcta->rect) { g_object_set ( etcta->rect, "y2", etcta->height - 1, NULL); } if (old_height != etcta->height) e_canvas_item_request_parent_reflow (item); }
static void eti_get_extents (AtkComponent *component, gint *x, gint *y, gint *width, gint *height, AtkCoordType coord_type) { ETableItem *item; AtkObject *parent; item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component))); if (!item) return; parent = ATK_OBJECT (component)->accessible_parent; if (parent && ATK_IS_COMPONENT (parent)) atk_component_get_extents ( ATK_COMPONENT (parent), x, y, width, height, coord_type); if (parent && GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (parent)) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD ( atk_gobject_accessible_get_object ( ATK_GOBJECT_ACCESSIBLE (parent))); if (etcta) { *width = etcta->width; *height = etcta->height; } } }
static gboolean idle_do_action (gpointer data) { GtkLayout *layout; GdkEventButton event; ETableClickToAdd * etcta; gint finished; g_return_val_if_fail (data!= NULL, FALSE); etcta = E_TABLE_CLICK_TO_ADD ( atk_gobject_accessible_get_object ( ATK_GOBJECT_ACCESSIBLE (data))); g_return_val_if_fail (etcta, FALSE); layout = GTK_LAYOUT (GNOME_CANVAS_ITEM (etcta)->canvas); event.x = 0; event.y = 0; event.type = GDK_BUTTON_PRESS; event.window = gtk_layout_get_bin_window (layout); event.button = 1; event.send_event = TRUE; event.time = GDK_CURRENT_TIME; event.axes = NULL; g_signal_emit_by_name (etcta, "event", &event, &finished); return FALSE; }
static void etcta_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ETableClickToAdd *etcta; etcta = E_TABLE_CLICK_TO_ADD (object); switch (property_id) { case PROP_HEADER: g_value_set_object (value, etcta->eth); break; case PROP_MODEL: g_value_set_object (value, etcta->model); break; case PROP_MESSAGE: g_value_set_string (value, etcta->message); break; case PROP_WIDTH: g_value_set_double (value, etcta->width); break; case PROP_HEIGHT: g_value_set_double (value, etcta->height); break; case PROP_IS_EDITING: g_value_set_boolean (value, e_table_click_to_add_is_editing (etcta)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static AtkObject * etcta_ref_child (AtkObject *accessible, gint i) { AtkObject * atk_obj = NULL; ETableClickToAdd * etcta; if (i != 0) return NULL; etcta = E_TABLE_CLICK_TO_ADD ( atk_gobject_accessible_get_object ( ATK_GOBJECT_ACCESSIBLE (accessible))); g_return_val_if_fail (etcta, NULL); if (etcta->rect) { atk_obj = atk_gobject_accessible_for_object ( G_OBJECT (etcta->rect)); } else if (etcta->row) { atk_obj = atk_gobject_accessible_for_object ( G_OBJECT (etcta->row)); } g_object_ref (atk_obj); return atk_obj; }
static gint etcta_get_n_children (AtkObject *accessible) { ETableClickToAdd * etcta; etcta = E_TABLE_CLICK_TO_ADD ( atk_gobject_accessible_get_object ( ATK_GOBJECT_ACCESSIBLE (accessible))); return (etcta->rect || etcta->row) ? 1 : 0; }
static void etcta_realize (GnomeCanvasItem *item) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item); create_rect_and_text (etcta); e_canvas_item_move_absolute (etcta->text, 2, 2); if (GNOME_CANVAS_ITEM_CLASS (e_table_click_to_add_parent_class)->realize) (*GNOME_CANVAS_ITEM_CLASS (e_table_click_to_add_parent_class)->realize)(item); e_canvas_item_request_reflow (item); }
static void etcta_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GnomeCanvasItem *item; ETableClickToAdd *etcta; item = GNOME_CANVAS_ITEM (object); etcta = E_TABLE_CLICK_TO_ADD (object); switch (property_id) { case PROP_HEADER: etcta_drop_table_header (etcta); etcta_add_table_header (etcta, E_TABLE_HEADER (g_value_get_object (value))); break; case PROP_MODEL: etcta_drop_model (etcta); etcta_add_model (etcta, E_TABLE_MODEL (g_value_get_object (value))); break; case PROP_MESSAGE: etcta_drop_message (etcta); etcta_add_message (etcta, g_value_get_string (value)); break; case PROP_WIDTH: etcta->width = g_value_get_double (value); if (etcta->row) gnome_canvas_item_set ( etcta->row, "minimum_width", etcta->width, NULL); if (etcta->text) gnome_canvas_item_set ( etcta->text, "width", (etcta->width < 4 ? 4 : etcta->width) - 4, NULL); if (etcta->rect) gnome_canvas_item_set ( etcta->rect, "x2", etcta->width, NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); return; } gnome_canvas_item_request_update (item); }
static void etcta_dispose (GObject *object) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (object); etcta_drop_table_header (etcta); etcta_drop_model (etcta); etcta_drop_message (etcta); if (etcta->selection) g_object_unref (etcta->selection); etcta->selection = NULL; /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (e_table_click_to_add_parent_class)->dispose (object); }
static const gchar * etcta_get_name (AtkObject *obj) { ETableClickToAdd * etcta; g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (obj), NULL); etcta = E_TABLE_CLICK_TO_ADD ( atk_gobject_accessible_get_object ( ATK_GOBJECT_ACCESSIBLE (obj))); if (etcta && etcta->message != NULL) return etcta->message; return _("click to add"); }
/* Handles the events on the ETableClickToAdd, particularly * it creates the ETableItem and passes in some events. */ static gint etcta_event (GnomeCanvasItem *item, GdkEvent *e) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item); switch (e->type) { case GDK_FOCUS_CHANGE: if (!e->focus_change.in) return TRUE; /* coverity[fallthrough] */ case GDK_BUTTON_PRESS: if (etcta->text) { g_object_run_dispose (G_OBJECT (etcta->text)); etcta->text = NULL; } if (etcta->rect) { g_object_run_dispose (G_OBJECT (etcta->rect)); etcta->rect = NULL; } if (!etcta->row) { ETableModel *one; one = e_table_one_new (etcta->model); etcta_add_one (etcta, one); g_object_unref (one); e_selection_model_clear (E_SELECTION_MODEL (etcta->selection)); etcta->row = gnome_canvas_item_new ( GNOME_CANVAS_GROUP (item), e_table_item_get_type (), "ETableHeader", etcta->eth, "ETableModel", etcta->one, "minimum_width", etcta->width, "horizontal_draw_grid", TRUE, "vertical_draw_grid", TRUE, "selection_model", etcta->selection, "cursor_mode", E_CURSOR_SPREADSHEET, NULL); g_signal_connect ( etcta->row, "key_press", G_CALLBACK (item_key_press), etcta); e_signal_connect_notify ( etcta->row, "notify::is-editing", G_CALLBACK (table_click_to_add_row_is_editing_changed_cb), etcta); e_canvas_item_grab_focus (GNOME_CANVAS_ITEM (etcta->row), TRUE); set_initial_selection (etcta); g_object_notify (G_OBJECT (etcta), "is-editing"); } break; case GDK_KEY_PRESS: switch (e->key.keyval) { case GDK_KEY_Tab: case GDK_KEY_KP_Tab: case GDK_KEY_ISO_Left_Tab: finish_editing (etcta); break; default: return FALSE; case GDK_KEY_Escape: if (etcta->row) { e_table_item_leave_edit (E_TABLE_ITEM (etcta->row)); etcta_drop_one (etcta); g_object_run_dispose (G_OBJECT (etcta->row)); etcta->row = NULL; create_rect_and_text (etcta); e_canvas_item_move_absolute (etcta->text, 3, 3); } break; } break; default: return FALSE; } return TRUE; }