From c1df0965d931ff829a3d5b3c12fc600ef25882f8 Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Wed, 7 Oct 2009 18:37:32 +0200 Subject: [PATCH] Remove GailCList completely --- modules/other/gail/gailclist.c | 1609 -------------------------------- modules/other/gail/gailclist.h | 64 -- 2 files changed, 1673 deletions(-) delete mode 100644 modules/other/gail/gailclist.c delete mode 100644 modules/other/gail/gailclist.h diff --git a/modules/other/gail/gailclist.c b/modules/other/gail/gailclist.c deleted file mode 100644 index 6a68ffe8aa..0000000000 --- a/modules/other/gail/gailclist.c +++ /dev/null @@ -1,1609 +0,0 @@ -/* GAIL - The GNOME Accessibility Implementation Library - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include - -#undef GTK_DISABLE_DEPRECATED - -#include -#include "gailclist.h" -#include "gailclistcell.h" -#include "gailcellparent.h" - -/* Copied from gtkclist.c */ -/* this defigns the base grid spacing */ -#define CELL_SPACING 1 - -/* added the horizontal space at the beginning and end of a row*/ -#define COLUMN_INSET 3 - - -/* gives the top pixel of the given row in context of - * the clist's voffset */ -#define ROW_TOP_YPIXEL(clist, row) (((clist)->row_height * (row)) + \ - (((row) + 1) * CELL_SPACING) + \ - (clist)->voffset) - -/* returns the row index from a y pixel location in the - * context of the clist's voffset */ -#define ROW_FROM_YPIXEL(clist, y) (((y) - (clist)->voffset) / \ - ((clist)->row_height + CELL_SPACING)) -/* gives the left pixel of the given column in context of - * the clist's hoffset */ -#define COLUMN_LEFT_XPIXEL(clist, colnum) ((clist)->column[(colnum)].area.x + \ - (clist)->hoffset) - -/* returns the column index from a x pixel location in the - * context of the clist's hoffset */ -static inline gint -COLUMN_FROM_XPIXEL (GtkCList * clist, - gint x) -{ - gint i, cx; - - for (i = 0; i < clist->columns; i++) - if (clist->column[i].visible) - { - cx = clist->column[i].area.x + clist->hoffset; - - if (x >= (cx - (COLUMN_INSET + CELL_SPACING)) && - x <= (cx + clist->column[i].area.width + COLUMN_INSET)) - return i; - } - - /* no match */ - return -1; -} - -/* returns the top pixel of the given row in the context of - * the list height */ -#define ROW_TOP(clist, row) (((clist)->row_height + CELL_SPACING) * (row)) - -/* returns the left pixel of the given column in the context of - * the list width */ -#define COLUMN_LEFT(clist, colnum) ((clist)->column[(colnum)].area.x) - -/* returns the total height of the list */ -#define LIST_HEIGHT(clist) (((clist)->row_height * ((clist)->rows)) + \ - (CELL_SPACING * ((clist)->rows + 1))) - -static inline gint -LIST_WIDTH (GtkCList * clist) -{ - gint last_column; - - for (last_column = clist->columns - 1; - last_column >= 0 && !clist->column[last_column].visible; last_column--); - - if (last_column >= 0) - return (clist->column[last_column].area.x + - clist->column[last_column].area.width + - COLUMN_INSET + CELL_SPACING); - return 0; -} - -/* returns the GList item for the nth row */ -#define ROW_ELEMENT(clist, row) (((row) == (clist)->rows - 1) ? \ - (clist)->row_list_end : \ - g_list_nth ((clist)->row_list, (row))) - -typedef struct _GailCListRow GailCListRow; -typedef struct _GailCListCellData GailCListCellData; - - -static void gail_clist_class_init (GailCListClass *klass); -static void gail_clist_init (GailCList *clist); -static void gail_clist_real_initialize (AtkObject *obj, - gpointer data); -static void gail_clist_finalize (GObject *object); - -static gint gail_clist_get_n_children (AtkObject *obj); -static AtkObject* gail_clist_ref_child (AtkObject *obj, - gint i); -static AtkStateSet* gail_clist_ref_state_set (AtkObject *obj); - - -static void atk_selection_interface_init (AtkSelectionIface *iface); -static gboolean gail_clist_clear_selection (AtkSelection *selection); - -static AtkObject* gail_clist_ref_selection (AtkSelection *selection, - gint i); -static gint gail_clist_get_selection_count (AtkSelection *selection); -static gboolean gail_clist_is_child_selected (AtkSelection *selection, - gint i); -static gboolean gail_clist_select_all_selection (AtkSelection *selection); - -static void atk_table_interface_init (AtkTableIface *iface); -static gint gail_clist_get_index_at (AtkTable *table, - gint row, - gint column); -static gint gail_clist_get_column_at_index (AtkTable *table, - gint index); -static gint gail_clist_get_row_at_index (AtkTable *table, - gint index); -static AtkObject* gail_clist_ref_at (AtkTable *table, - gint row, - gint column); -static AtkObject* gail_clist_ref_at_actual (AtkTable *table, - gint row, - gint column); -static AtkObject* - gail_clist_get_caption (AtkTable *table); - -static gint gail_clist_get_n_columns (AtkTable *table); -static gint gail_clist_get_n_actual_columns (GtkCList *clist); - -static G_CONST_RETURN gchar* - gail_clist_get_column_description(AtkTable *table, - gint column); -static AtkObject* gail_clist_get_column_header (AtkTable *table, - gint column); -static gint gail_clist_get_n_rows (AtkTable *table); -static G_CONST_RETURN gchar* - gail_clist_get_row_description (AtkTable *table, - gint row); -static AtkObject* gail_clist_get_row_header (AtkTable *table, - gint row); -static AtkObject* gail_clist_get_summary (AtkTable *table); -static gboolean gail_clist_add_row_selection (AtkTable *table, - gint row); -static gboolean gail_clist_remove_row_selection (AtkTable *table, - gint row); -static gint gail_clist_get_selected_rows (AtkTable *table, - gint **rows_selected); -static gboolean gail_clist_is_row_selected (AtkTable *table, - gint row); -static gboolean gail_clist_is_selected (AtkTable *table, - gint row, - gint column); -static void gail_clist_set_caption (AtkTable *table, - AtkObject *caption); -static void gail_clist_set_column_description(AtkTable *table, - gint column, - const gchar *description); -static void gail_clist_set_column_header (AtkTable *table, - gint column, - AtkObject *header); -static void gail_clist_set_row_description (AtkTable *table, - gint row, - const gchar *description); -static void gail_clist_set_row_header (AtkTable *table, - gint row, - AtkObject *header); -static void gail_clist_set_summary (AtkTable *table, - AtkObject *accessible); - -/* gailcellparent.h */ - -static void gail_cell_parent_interface_init (GailCellParentIface *iface); -static void gail_clist_get_cell_extents (GailCellParent *parent, - GailCell *cell, - gint *x, - gint *y, - gint *width, - gint *height, - AtkCoordType coord_type); - -static void gail_clist_get_cell_area (GailCellParent *parent, - GailCell *cell, - GdkRectangle *cell_rect); - -static void gail_clist_select_row_gtk (GtkCList *clist, - int row, - int column, - GdkEvent *event, - gpointer data); -static void gail_clist_unselect_row_gtk (GtkCList *clist, - int row, - int column, - GdkEvent *event, - gpointer data); -static gint gail_clist_get_visible_column (AtkTable *table, - int column); -static gint gail_clist_get_actual_column (AtkTable *table, - int visible_column); -static void gail_clist_set_row_data (AtkTable *table, - gint row, - const gchar *description, - AtkObject *header, - gboolean is_header); -static GailCListRow* - gail_clist_get_row_data (AtkTable *table, - gint row); -static void gail_clist_get_visible_rect (GtkCList *clist, - GdkRectangle *clist_rect); -static gboolean gail_clist_is_cell_visible (GdkRectangle *cell_rect, - GdkRectangle *visible_rect); -static void gail_clist_cell_data_new (GailCList *clist, - GailCell *cell, - gint column, - gint row); -static void gail_clist_cell_destroyed (gpointer data); -static void gail_clist_cell_data_remove (GailCList *clist, - GailCell *cell); -static GailCell* gail_clist_find_cell (GailCList *clist, - gint index); -static void gail_clist_adjustment_changed (GtkAdjustment *adjustment, - GtkCList *clist); - -struct _GailCListColumn -{ - gchar *description; - AtkObject *header; -}; - -struct _GailCListRow -{ - GtkCListRow *row_data; - int row_number; - gchar *description; - AtkObject *header; -}; - -struct _GailCListCellData -{ - GtkCell *gtk_cell; - GailCell *gail_cell; - int row_number; - int column_number; -}; - -G_DEFINE_TYPE_WITH_CODE (GailCList, gail_clist, GAIL_TYPE_CONTAINER, - G_IMPLEMENT_INTERFACE (ATK_TYPE_TABLE, atk_table_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init) - G_IMPLEMENT_INTERFACE (GAIL_TYPE_CELL_PARENT, gail_cell_parent_interface_init)) - -static void -gail_clist_class_init (GailCListClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - class->get_n_children = gail_clist_get_n_children; - class->ref_child = gail_clist_ref_child; - class->ref_state_set = gail_clist_ref_state_set; - class->initialize = gail_clist_real_initialize; - - gobject_class->finalize = gail_clist_finalize; -} - -static void -gail_clist_init (GailCList *clist) -{ -} - -static void -gail_clist_real_initialize (AtkObject *obj, - gpointer data) -{ - GailCList *clist; - GtkCList *gtk_clist; - gint i; - - ATK_OBJECT_CLASS (gail_clist_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_TABLE; - - clist = GAIL_CLIST (obj); - - clist->caption = NULL; - clist->summary = NULL; - clist->row_data = NULL; - clist->cell_data = NULL; - clist->previous_selected_cell = NULL; - - gtk_clist = GTK_CLIST (data); - - clist->n_cols = gtk_clist->columns; - clist->columns = g_new (GailCListColumn, gtk_clist->columns); - for (i = 0; i < gtk_clist->columns; i++) - { - clist->columns[i].description = NULL; - clist->columns[i].header = NULL; - } - /* - * Set up signal handlers for select-row and unselect-row - */ - g_signal_connect (gtk_clist, - "select-row", - G_CALLBACK (gail_clist_select_row_gtk), - obj); - g_signal_connect (gtk_clist, - "unselect-row", - G_CALLBACK (gail_clist_unselect_row_gtk), - obj); - /* - * Adjustment callbacks - */ - if (gtk_clist->hadjustment) - { - g_signal_connect (gtk_clist->hadjustment, - "value_changed", - G_CALLBACK (gail_clist_adjustment_changed), - gtk_clist); - } - if (gtk_clist->vadjustment) - { - g_signal_connect (gtk_clist->vadjustment, - "value_changed", - G_CALLBACK (gail_clist_adjustment_changed), - gtk_clist); - } -} - -static void -gail_clist_finalize (GObject *object) -{ - GailCList *clist = GAIL_CLIST (object); - gint i; - GArray *array; - - if (clist->caption) - g_object_unref (clist->caption); - if (clist->summary) - g_object_unref (clist->summary); - - for (i = 0; i < clist->n_cols; i++) - { - g_free (clist->columns[i].description); - if (clist->columns[i].header) - g_object_unref (clist->columns[i].header); - } - g_free (clist->columns); - - array = clist->row_data; - - if (clist->previous_selected_cell) - g_object_unref (clist->previous_selected_cell); - - if (array) - { - for (i = 0; i < array->len; i++) - { - GailCListRow *row_data; - - row_data = g_array_index (array, GailCListRow*, i); - - if (row_data->header) - g_object_unref (row_data->header); - g_free (row_data->description); - } - } - - if (clist->cell_data) - { - GList *temp_list; - - for (temp_list = clist->cell_data; temp_list; temp_list = temp_list->next) - { - g_list_free (temp_list->data); - } - g_list_free (clist->cell_data); - } - - G_OBJECT_CLASS (gail_clist_parent_class)->finalize (object); -} - -static gint -gail_clist_get_n_children (AtkObject *obj) -{ - GtkWidget *widget; - gint row, col; - - g_return_val_if_fail (GAIL_IS_CLIST (obj), 0); - - widget = GTK_ACCESSIBLE (obj)->widget; - if (widget == NULL) - /* - * State is defunct - */ - return 0; - - row = gail_clist_get_n_rows (ATK_TABLE (obj)); - col = gail_clist_get_n_actual_columns (GTK_CLIST (widget)); - return (row * col); -} - -static AtkObject* -gail_clist_ref_child (AtkObject *obj, - gint i) -{ - GtkWidget *widget; - gint row, col; - gint n_columns; - - g_return_val_if_fail (GAIL_IS_CLIST (obj), NULL); - g_return_val_if_fail (i >= 0, NULL); - - widget = GTK_ACCESSIBLE (obj)->widget; - if (widget == NULL) - /* - * State is defunct - */ - return NULL; - - n_columns = gail_clist_get_n_actual_columns (GTK_CLIST (widget)); - if (!n_columns) - return NULL; - - row = i / n_columns; - col = i % n_columns; - return gail_clist_ref_at_actual (ATK_TABLE (obj), row, col); -} - -static AtkStateSet* -gail_clist_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gail_clist_parent_class)->ref_state_set (obj); - widget = GTK_ACCESSIBLE (obj)->widget; - - if (widget != NULL) - atk_state_set_add_state (state_set, ATK_STATE_MANAGES_DESCENDANTS); - - return state_set; -} - -static void -atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->clear_selection = gail_clist_clear_selection; - iface->ref_selection = gail_clist_ref_selection; - iface->get_selection_count = gail_clist_get_selection_count; - iface->is_child_selected = gail_clist_is_child_selected; - iface->select_all_selection = gail_clist_select_all_selection; -} - -static gboolean -gail_clist_clear_selection (AtkSelection *selection) -{ - GtkCList *clist; - GtkWidget *widget; - - widget = GTK_ACCESSIBLE (selection)->widget; - if (widget == NULL) - /* State is defunct */ - return FALSE; - - clist = GTK_CLIST (widget); - gtk_clist_unselect_all(clist); - return TRUE; -} - -static AtkObject* -gail_clist_ref_selection (AtkSelection *selection, - gint i) -{ - gint visible_columns; - gint selected_row; - gint selected_column; - gint *selected_rows; - - if ( i < 0 && i >= gail_clist_get_selection_count (selection)) - return NULL; - - visible_columns = gail_clist_get_n_columns (ATK_TABLE (selection)); - gail_clist_get_selected_rows (ATK_TABLE (selection), &selected_rows); - selected_row = selected_rows[i / visible_columns]; - g_free (selected_rows); - selected_column = gail_clist_get_actual_column (ATK_TABLE (selection), - i % visible_columns); - - return gail_clist_ref_at (ATK_TABLE (selection), selected_row, - selected_column); -} - -static gint -gail_clist_get_selection_count (AtkSelection *selection) -{ - gint n_rows_selected; - - n_rows_selected = gail_clist_get_selected_rows (ATK_TABLE (selection), NULL); - - if (n_rows_selected > 0) - /* - * The number of cells selected is the number of columns - * times the number of selected rows - */ - return gail_clist_get_n_columns (ATK_TABLE (selection)) * n_rows_selected; - return 0; -} - -static gboolean -gail_clist_is_child_selected (AtkSelection *selection, - gint i) -{ - gint row; - - row = atk_table_get_row_at_index (ATK_TABLE (selection), i); - - if (row == 0 && i >= gail_clist_get_n_columns (ATK_TABLE (selection))) - return FALSE; - return gail_clist_is_row_selected (ATK_TABLE (selection), row); -} - -static gboolean -gail_clist_select_all_selection (AtkSelection *selection) -{ - GtkCList *clist; - GtkWidget *widget; - /* GtkArg arg; */ - - widget = GTK_ACCESSIBLE (selection)->widget; - if (widget == NULL) - /* State is defunct */ - return FALSE; - - clist = GTK_CLIST (widget); - gtk_clist_select_all(clist); - - return TRUE; -} - -static void -atk_table_interface_init (AtkTableIface *iface) -{ - iface->ref_at = gail_clist_ref_at; - iface->get_index_at = gail_clist_get_index_at; - iface->get_column_at_index = gail_clist_get_column_at_index; - iface->get_row_at_index = gail_clist_get_row_at_index; - iface->get_caption = gail_clist_get_caption; - iface->get_n_columns = gail_clist_get_n_columns; - iface->get_column_description = gail_clist_get_column_description; - iface->get_column_header = gail_clist_get_column_header; - iface->get_n_rows = gail_clist_get_n_rows; - iface->get_row_description = gail_clist_get_row_description; - iface->get_row_header = gail_clist_get_row_header; - iface->get_summary = gail_clist_get_summary; - iface->add_row_selection = gail_clist_add_row_selection; - iface->remove_row_selection = gail_clist_remove_row_selection; - iface->get_selected_rows = gail_clist_get_selected_rows; - iface->is_row_selected = gail_clist_is_row_selected; - iface->is_selected = gail_clist_is_selected; - iface->set_caption = gail_clist_set_caption; - iface->set_column_description = gail_clist_set_column_description; - iface->set_column_header = gail_clist_set_column_header; - iface->set_row_description = gail_clist_set_row_description; - iface->set_row_header = gail_clist_set_row_header; - iface->set_summary = gail_clist_set_summary; -} - -static AtkObject* -gail_clist_ref_at (AtkTable *table, - gint row, - gint column) -{ - GtkWidget *widget; - gint actual_column; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return NULL; - - actual_column = gail_clist_get_actual_column (table, column); - return gail_clist_ref_at_actual (table, row, actual_column); -} - - -static AtkObject* -gail_clist_ref_at_actual (AtkTable *table, - gint row, - gint column) -{ - /* - * The column number pased to this function is the actual column number - * whereas the column number passed to gail_clist_ref_at is the - * visible column number - */ - GtkCList *clist; - GtkWidget *widget; - GtkCellType cellType; - AtkObject *return_object; - gint n_rows, n_columns; - gint index; - GailCell *cell; - - g_return_val_if_fail (GTK_IS_ACCESSIBLE (table), NULL); - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return NULL; - - clist = GTK_CLIST (widget); - n_rows = gail_clist_get_n_rows (table); - n_columns = gail_clist_get_n_actual_columns (clist); - - if (row < 0 || row >= n_rows) - return NULL; - if (column < 0 || column >= n_columns) - return NULL; - - /* - * Check whether the child is cached - */ - index = column + row * n_columns; - cell = gail_clist_find_cell (GAIL_CLIST (table), index); - if (cell) - { - g_object_ref (cell); - return ATK_OBJECT (cell); - } - cellType = gtk_clist_get_cell_type(clist, row, column); - switch (cellType) - { - case GTK_CELL_TEXT: - case GTK_CELL_PIXTEXT: - return_object = gail_clist_cell_new (); - break; - case GTK_CELL_PIXMAP: - return_object = NULL; - break; - default: - /* Don't handle GTK_CELL_EMPTY or GTK_CELL_WIDGET, return NULL */ - return_object = NULL; - break; - } - if (return_object) - { - cell = GAIL_CELL (return_object); - - g_return_val_if_fail (ATK_IS_OBJECT (table), NULL); - - gail_cell_initialise (cell, widget, ATK_OBJECT (table), - index); - /* - * Store the cell in a cache - */ - gail_clist_cell_data_new (GAIL_CLIST (table), cell, column, row); - /* - * If the column is visible, sets the cell's state - */ - if (clist->column[column].visible) - { - GdkRectangle cell_rect, visible_rect; - - gail_clist_get_cell_area (GAIL_CELL_PARENT (table), cell, &cell_rect); - gail_clist_get_visible_rect (clist, &visible_rect); - gail_cell_add_state (cell, ATK_STATE_VISIBLE, FALSE); - if (gail_clist_is_cell_visible (&cell_rect, &visible_rect)) - gail_cell_add_state (cell, ATK_STATE_SHOWING, FALSE); - } - /* - * If a row is selected, all cells in the row are selected - */ - if (gail_clist_is_row_selected (table, row)) - { - gail_cell_add_state (cell, ATK_STATE_SELECTED, FALSE); - if (clist->columns == 1) - gail_cell_add_state (cell, ATK_STATE_FOCUSED, FALSE); - } - } - - return return_object; -} - -static gint -gail_clist_get_index_at (AtkTable *table, - gint row, - gint column) -{ - gint n_cols, n_rows; - - n_cols = atk_table_get_n_columns (table); - n_rows = atk_table_get_n_rows (table); - - g_return_val_if_fail (row < n_rows, 0); - g_return_val_if_fail (column < n_cols, 0); - - return row * n_cols + column; -} - -static gint -gail_clist_get_column_at_index (AtkTable *table, - gint index) -{ - gint n_cols; - - n_cols = atk_table_get_n_columns (table); - - if (n_cols == 0) - return 0; - else - return (gint) (index % n_cols); -} - -static gint -gail_clist_get_row_at_index (AtkTable *table, - gint index) -{ - gint n_cols; - - n_cols = atk_table_get_n_columns (table); - - if (n_cols == 0) - return 0; - else - return (gint) (index / n_cols); -} - -static AtkObject* -gail_clist_get_caption (AtkTable *table) -{ - GailCList* obj = GAIL_CLIST (table); - - return obj->caption; -} - -static gint -gail_clist_get_n_columns (AtkTable *table) -{ - GtkWidget *widget; - GtkCList *clist; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - - return gail_clist_get_visible_column (table, - gail_clist_get_n_actual_columns (clist)); -} - -static gint -gail_clist_get_n_actual_columns (GtkCList *clist) -{ - return clist->columns; -} - -static G_CONST_RETURN gchar* -gail_clist_get_column_description (AtkTable *table, - gint column) -{ - GailCList *clist = GAIL_CLIST (table); - GtkWidget *widget; - gint actual_column; - - if (column < 0 || column >= gail_clist_get_n_columns (table)) - return NULL; - - actual_column = gail_clist_get_actual_column (table, column); - if (clist->columns[actual_column].description) - return (clist->columns[actual_column].description); - - widget = GTK_ACCESSIBLE (clist)->widget; - if (widget == NULL) - return NULL; - - return gtk_clist_get_column_title (GTK_CLIST (widget), actual_column); -} - -static AtkObject* -gail_clist_get_column_header (AtkTable *table, - gint column) -{ - GailCList *clist = GAIL_CLIST (table); - GtkWidget *widget; - GtkWidget *return_widget; - gint actual_column; - - if (column < 0 || column >= gail_clist_get_n_columns (table)) - return NULL; - - actual_column = gail_clist_get_actual_column (table, column); - - if (clist->columns[actual_column].header) - return (clist->columns[actual_column].header); - - widget = GTK_ACCESSIBLE (clist)->widget; - if (widget == NULL) - return NULL; - - return_widget = gtk_clist_get_column_widget (GTK_CLIST (widget), - actual_column); - if (return_widget == NULL) - return NULL; - - g_return_val_if_fail (GTK_IS_BIN (return_widget), NULL); - return_widget = gtk_bin_get_child (GTK_BIN(return_widget)); - - return gtk_widget_get_accessible (return_widget); -} - -static gint -gail_clist_get_n_rows (AtkTable *table) -{ - GtkWidget *widget; - GtkCList *clist; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - return clist->rows; -} - -static G_CONST_RETURN gchar* -gail_clist_get_row_description (AtkTable *table, - gint row) -{ - GailCListRow* row_data; - - row_data = gail_clist_get_row_data (table, row); - if (row_data == NULL) - return NULL; - return row_data->description; -} - -static AtkObject* -gail_clist_get_row_header (AtkTable *table, - gint row) -{ - GailCListRow* row_data; - - row_data = gail_clist_get_row_data (table, row); - if (row_data == NULL) - return NULL; - return row_data->header; -} - -static AtkObject* -gail_clist_get_summary (AtkTable *table) -{ - GailCList* obj = GAIL_CLIST (table); - - return obj->summary; -} - -static gboolean -gail_clist_add_row_selection (AtkTable *table, - gint row) -{ - GtkWidget *widget; - GtkCList *clist; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - gtk_clist_select_row (clist, row, -1); - if (gail_clist_is_row_selected (table, row)) - return TRUE; - - return FALSE; -} - -static gboolean -gail_clist_remove_row_selection (AtkTable *table, - gint row) -{ - GtkWidget *widget; - GtkCList *clist; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - if (gail_clist_is_row_selected (table, row)) - { - gtk_clist_select_row (clist, row, -1); - return TRUE; - } - return FALSE; -} - -static gint -gail_clist_get_selected_rows (AtkTable *table, - gint **rows_selected) -{ - GtkWidget *widget; - GtkCList *clist; - GList *list; - gint n_selected; - gint i; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - - n_selected = g_list_length (clist->selection); - - if (n_selected == 0) - return 0; - - if (rows_selected) - { - gint *selected_rows; - - selected_rows = (gint*) g_malloc (sizeof (gint) * n_selected); - list = clist->selection; - - i = 0; - while (list) - { - selected_rows[i++] = GPOINTER_TO_INT (list->data); - list = list->next; - } - *rows_selected = selected_rows; - } - return n_selected; -} - -static gboolean -gail_clist_is_row_selected (AtkTable *table, - gint row) -{ - GList *elem; - GtkWidget *widget; - GtkCList *clist; - GtkCListRow *clist_row; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return FALSE; - - clist = GTK_CLIST (widget); - - if (row < 0 || row >= clist->rows) - return FALSE; - - elem = ROW_ELEMENT (clist, row); - if (!elem) - return FALSE; - clist_row = elem->data; - - return (clist_row->state == GTK_STATE_SELECTED); -} - -static gboolean -gail_clist_is_selected (AtkTable *table, - gint row, - gint column) -{ - return gail_clist_is_row_selected (table, row); -} - -static void -gail_clist_set_caption (AtkTable *table, - AtkObject *caption) -{ - GailCList* obj = GAIL_CLIST (table); - AtkPropertyValues values = { NULL }; - AtkObject *old_caption; - - old_caption = obj->caption; - obj->caption = caption; - if (obj->caption) - g_object_ref (obj->caption); - - g_value_init (&values.old_value, G_TYPE_POINTER); - g_value_set_pointer (&values.old_value, old_caption); - g_value_init (&values.new_value, G_TYPE_POINTER); - g_value_set_pointer (&values.new_value, obj->caption); - - values.property_name = "accessible-table-caption"; - g_signal_emit_by_name (table, - "property_change::accessible-table-caption", - &values, NULL); - if (old_caption) - g_object_unref (old_caption); -} - -static void -gail_clist_set_column_description (AtkTable *table, - gint column, - const gchar *description) -{ - GailCList *clist = GAIL_CLIST (table); - AtkPropertyValues values = { NULL }; - gint actual_column; - - if (column < 0 || column >= gail_clist_get_n_columns (table)) - return; - - if (description == NULL) - return; - - actual_column = gail_clist_get_actual_column (table, column); - g_free (clist->columns[actual_column].description); - clist->columns[actual_column].description = g_strdup (description); - - g_value_init (&values.new_value, G_TYPE_INT); - g_value_set_int (&values.new_value, column); - - values.property_name = "accessible-table-column-description"; - g_signal_emit_by_name (table, - "property_change::accessible-table-column-description", - &values, NULL); - -} - -static void -gail_clist_set_column_header (AtkTable *table, - gint column, - AtkObject *header) -{ - GailCList *clist = GAIL_CLIST (table); - AtkPropertyValues values = { NULL }; - gint actual_column; - - if (column < 0 || column >= gail_clist_get_n_columns (table)) - return; - - actual_column = gail_clist_get_actual_column (table, column); - if (clist->columns[actual_column].header) - g_object_unref (clist->columns[actual_column].header); - if (header) - g_object_ref (header); - clist->columns[actual_column].header = header; - - g_value_init (&values.new_value, G_TYPE_INT); - g_value_set_int (&values.new_value, column); - - values.property_name = "accessible-table-column-header"; - g_signal_emit_by_name (table, - "property_change::accessible-table-column-header", - &values, NULL); -} - -static void -gail_clist_set_row_description (AtkTable *table, - gint row, - const gchar *description) -{ - gail_clist_set_row_data (table, row, description, NULL, FALSE); -} - -static void -gail_clist_set_row_header (AtkTable *table, - gint row, - AtkObject *header) -{ - gail_clist_set_row_data (table, row, NULL, header, TRUE); -} - -static void -gail_clist_set_summary (AtkTable *table, - AtkObject *accessible) -{ - GailCList* obj = GAIL_CLIST (table); - AtkPropertyValues values = { 0, }; - AtkObject *old_summary; - - old_summary = obj->summary; - obj->summary = accessible; - if (obj->summary) - g_object_ref (obj->summary); - - g_value_init (&values.old_value, G_TYPE_POINTER); - g_value_set_pointer (&values.old_value, old_summary); - g_value_init (&values.new_value, G_TYPE_POINTER); - g_value_set_pointer (&values.new_value, obj->summary); - - values.property_name = "accessible-table-summary"; - g_signal_emit_by_name (table, - "property_change::accessible-table-summary", - &values, NULL); - if (old_summary) - g_object_unref (old_summary); -} - - -static void gail_cell_parent_interface_init (GailCellParentIface *iface) -{ - iface->get_cell_extents = gail_clist_get_cell_extents; - iface->get_cell_area = gail_clist_get_cell_area; -} - -static void -gail_clist_get_cell_extents (GailCellParent *parent, - GailCell *cell, - gint *x, - gint *y, - gint *width, - gint *height, - AtkCoordType coord_type) -{ - GtkWidget* widget; - GtkCList *clist; - gint widget_x, widget_y, widget_width, widget_height; - GdkRectangle cell_rect; - GdkRectangle visible_rect; - - widget = GTK_ACCESSIBLE (parent)->widget; - if (widget == NULL) - return; - clist = GTK_CLIST (widget); - - atk_component_get_extents (ATK_COMPONENT (parent), &widget_x, &widget_y, - &widget_width, &widget_height, - coord_type); - - gail_clist_get_cell_area (parent, cell, &cell_rect); - *width = cell_rect.width; - *height = cell_rect.height; - gail_clist_get_visible_rect (clist, &visible_rect); - if (gail_clist_is_cell_visible (&cell_rect, &visible_rect)) - { - *x = cell_rect.x + widget_x; - *y = cell_rect.y + widget_y; - } - else - { - *x = G_MININT; - *y = G_MININT; - } -} - -static void -gail_clist_get_cell_area (GailCellParent *parent, - GailCell *cell, - GdkRectangle *cell_rect) -{ - GtkWidget* widget; - GtkCList *clist; - gint column, row, n_columns; - - widget = GTK_ACCESSIBLE (parent)->widget; - if (widget == NULL) - return; - clist = GTK_CLIST (widget); - - n_columns = gail_clist_get_n_actual_columns (clist); - g_return_if_fail (n_columns > 0); - column = cell->index % n_columns; - row = cell->index / n_columns; - cell_rect->x = COLUMN_LEFT (clist, column); - cell_rect->y = ROW_TOP (clist, row); - cell_rect->width = clist->column[column].area.width; - cell_rect->height = clist->row_height; -} - -static void -gail_clist_select_row_gtk (GtkCList *clist, - gint row, - gint column, - GdkEvent *event, - gpointer data) -{ - GailCList *gail_clist; - GList *temp_list; - AtkObject *selected_cell; - - gail_clist = GAIL_CLIST (data); - - for (temp_list = gail_clist->cell_data; temp_list; temp_list = temp_list->next) - { - GailCListCellData *cell_data; - - cell_data = (GailCListCellData *) (temp_list->data); - - if (row == cell_data->row_number) - { - /* - * Row is selected - */ - gail_cell_add_state (cell_data->gail_cell, ATK_STATE_SELECTED, TRUE); - } - } - if (clist->columns == 1) - { - selected_cell = gail_clist_ref_at (ATK_TABLE (data), row, 1); - if (selected_cell) - { - if (gail_clist->previous_selected_cell) - g_object_unref (gail_clist->previous_selected_cell); - gail_clist->previous_selected_cell = selected_cell; - gail_cell_add_state (GAIL_CELL (selected_cell), ATK_STATE_FOCUSED, FALSE); - g_signal_emit_by_name (gail_clist, - "active-descendant-changed", - selected_cell); - } - } - - g_signal_emit_by_name (gail_clist, "selection_changed"); -} - -static void -gail_clist_unselect_row_gtk (GtkCList *clist, - gint row, - gint column, - GdkEvent *event, - gpointer data) -{ - GailCList *gail_clist; - GList *temp_list; - - gail_clist = GAIL_CLIST (data); - - for (temp_list = gail_clist->cell_data; temp_list; temp_list = temp_list->next) - { - GailCListCellData *cell_data; - - cell_data = (GailCListCellData *) (temp_list->data); - - if (row == cell_data->row_number) - { - /* - * Row is unselected - */ - gail_cell_add_state (cell_data->gail_cell, ATK_STATE_FOCUSED, FALSE); - gail_cell_remove_state (cell_data->gail_cell, ATK_STATE_SELECTED, TRUE); - } - } - - g_signal_emit_by_name (gail_clist, "selection_changed"); -} - -/* - * This function determines the number of visible columns - * up to and including the specified column - */ -static gint -gail_clist_get_visible_column (AtkTable *table, - int column) -{ - GtkWidget *widget; - GtkCList *clist; - gint i; - gint vis_columns; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - for (i = 0, vis_columns = 0; i < column; i++) - if (clist->column[i].visible) - vis_columns++; - - return vis_columns; -} - -static gint -gail_clist_get_actual_column (AtkTable *table, - int visible_column) -{ - GtkWidget *widget; - GtkCList *clist; - gint i; - gint vis_columns; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return 0; - - clist = GTK_CLIST (widget); - for (i = 0, vis_columns = 0; i < clist->columns; i++) - { - if (clist->column[i].visible) - { - if (visible_column == vis_columns) - return i; - vis_columns++; - } - } - return 0; -} - -static void -gail_clist_set_row_data (AtkTable *table, - gint row, - const gchar *description, - AtkObject *header, - gboolean is_header) -{ - GtkWidget *widget; - GtkCList *gtk_clist; - GailCList *gail_clist; - GArray *array; - GailCListRow* row_data; - gint i; - gboolean found = FALSE; - AtkPropertyValues values = { NULL }; - gchar *signal_name; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return; - - gtk_clist = GTK_CLIST (widget); - if (row < 0 || row >= gtk_clist->rows) - return; - - gail_clist = GAIL_CLIST (table); - - if (gail_clist->row_data == NULL) - gail_clist->row_data = g_array_sized_new (FALSE, TRUE, - sizeof (GailCListRow *), 0); - - array = gail_clist->row_data; - - for (i = 0; i < array->len; i++) - { - row_data = g_array_index (array, GailCListRow*, i); - - if (row == row_data->row_number) - { - found = TRUE; - if (is_header) - { - if (row_data->header) - g_object_unref (row_data->header); - row_data->header = header; - if (row_data->header) - g_object_ref (row_data->header); - } - else - { - g_free (row_data->description); - row_data->description = g_strdup (row_data->description); - } - break; - } - } - if (!found) - { - GList *elem; - - elem = ROW_ELEMENT (gtk_clist, row); - g_return_if_fail (elem != NULL); - - row_data = g_new (GailCListRow, 1); - row_data->row_number = row; - row_data->row_data = elem->data; - if (is_header) - { - row_data->header = header; - if (row_data->header) - g_object_ref (row_data->header); - row_data->description = NULL; - } - else - { - row_data->description = g_strdup (row_data->description); - row_data->header = NULL; - } - g_array_append_val (array, row_data); - } - - g_value_init (&values.new_value, G_TYPE_INT); - g_value_set_int (&values.new_value, row); - - if (is_header) - { - values.property_name = "accessible-table-row-header"; - signal_name = "property_change::accessible-table-row-header"; - } - else - { - values.property_name = "accessible-table-row-description"; - signal_name = "property_change::accessible-table-row-description"; - } - g_signal_emit_by_name (table, - signal_name, - &values, NULL); - -} - -static GailCListRow* -gail_clist_get_row_data (AtkTable *table, - gint row) -{ - GtkWidget *widget; - GtkCList *clist; - GailCList *obj; - GArray *array; - GailCListRow* row_data; - gint i; - - widget = GTK_ACCESSIBLE (table)->widget; - if (widget == NULL) - /* State is defunct */ - return NULL; - - clist = GTK_CLIST (widget); - if (row < 0 || row >= clist->rows) - return NULL; - - obj = GAIL_CLIST (table); - - if (obj->row_data == NULL) - return NULL; - - array = obj->row_data; - - for (i = 0; i < array->len; i++) - { - row_data = g_array_index (array, GailCListRow*, i); - - if (row == row_data->row_number) - return row_data; - } - - return NULL; -} - -static void -gail_clist_get_visible_rect (GtkCList *clist, - GdkRectangle *clist_rect) -{ - clist_rect->x = - clist->hoffset; - clist_rect->y = - clist->voffset; - clist_rect->width = clist->clist_window_width; - clist_rect->height = clist->clist_window_height; -} - -static gboolean -gail_clist_is_cell_visible (GdkRectangle *cell_rect, - GdkRectangle *visible_rect) -{ - /* - * A cell is reported as visible if any part of the cell is visible - */ - if (((cell_rect->x + cell_rect->width) < visible_rect->x) || - ((cell_rect->y + cell_rect->height) < visible_rect->y) || - (cell_rect->x > (visible_rect->x + visible_rect->width)) || - (cell_rect->y > (visible_rect->y + visible_rect->height))) - return FALSE; - else - return TRUE; -} - -static void -gail_clist_cell_data_new (GailCList *clist, - GailCell *cell, - gint column, - gint row) -{ - GList *elem; - GailCListCellData *cell_data; - GtkCList *gtk_clist; - GtkCListRow *clist_row; - - gtk_clist = GTK_CLIST (GTK_ACCESSIBLE (clist)->widget); - elem = g_list_nth (gtk_clist->row_list, row); - g_return_if_fail (elem != NULL); - clist_row = (GtkCListRow *) elem->data; - cell_data = g_new (GailCListCellData, 1); - cell_data->gail_cell = cell; - cell_data->gtk_cell = &(clist_row->cell[column]); - cell_data->column_number = column; - cell_data->row_number = row; - clist->cell_data = g_list_append (clist->cell_data, cell_data); - - g_object_weak_ref (G_OBJECT (cell), - (GWeakNotify) gail_clist_cell_destroyed, - cell); -} - -static void -gail_clist_cell_destroyed (gpointer data) -{ - GailCell *cell = GAIL_CELL (data); - AtkObject* parent; - - parent = atk_object_get_parent (ATK_OBJECT (cell)); - - gail_clist_cell_data_remove (GAIL_CLIST (parent), cell); -} - -static void -gail_clist_cell_data_remove (GailCList *clist, - GailCell *cell) -{ - GList *temp_list; - - for (temp_list = clist->cell_data; temp_list; temp_list = temp_list->next) - { - GailCListCellData *cell_data; - - cell_data = (GailCListCellData *) temp_list->data; - if (cell_data->gail_cell == cell) - { - clist->cell_data = g_list_remove_link (clist->cell_data, temp_list); - g_free (cell_data); - return; - } - } - g_warning ("No cell removed in gail_clist_cell_data_remove\n"); -} - -static GailCell* -gail_clist_find_cell (GailCList *clist, - gint index) -{ - GList *temp_list; - gint n_cols; - - n_cols = clist->n_cols; - - for (temp_list = clist->cell_data; temp_list; temp_list = temp_list->next) - { - GailCListCellData *cell_data; - gint real_index; - - cell_data = (GailCListCellData *) (temp_list->data); - - real_index = cell_data->column_number + n_cols * cell_data->row_number; - if (real_index == index) - return cell_data->gail_cell; - } - return NULL; -} - -static void -gail_clist_adjustment_changed (GtkAdjustment *adjustment, - GtkCList *clist) -{ - AtkObject *atk_obj; - GdkRectangle visible_rect; - GdkRectangle cell_rect; - GailCList* obj; - GList *temp_list; - - /* - * The scrollbars have changed - */ - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (clist)); - obj = GAIL_CLIST (atk_obj); - - /* Get the currently visible area */ - gail_clist_get_visible_rect (clist, &visible_rect); - - /* loop over the cells and report if they are visible or not. */ - /* Must loop through them all */ - for (temp_list = obj->cell_data; temp_list; temp_list = temp_list->next) - { - GailCell *cell; - GailCListCellData *cell_data; - - cell_data = (GailCListCellData *) (temp_list->data); - cell = cell_data->gail_cell; - - gail_clist_get_cell_area (GAIL_CELL_PARENT (atk_obj), - cell, &cell_rect); - if (gail_clist_is_cell_visible (&cell_rect, &visible_rect)) - gail_cell_add_state (cell, ATK_STATE_SHOWING, TRUE); - else - gail_cell_remove_state (cell, ATK_STATE_SHOWING, TRUE); - } - g_signal_emit_by_name (atk_obj, "visible_data_changed"); -} - diff --git a/modules/other/gail/gailclist.h b/modules/other/gail/gailclist.h deleted file mode 100644 index 44eba4d17f..0000000000 --- a/modules/other/gail/gailclist.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GAIL - The GNOME Accessibility Implementation Library - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GAIL_CLIST_H__ -#define __GAIL_CLIST_H__ - -#include - -G_BEGIN_DECLS - -#define GAIL_TYPE_CLIST (gail_clist_get_type ()) -#define GAIL_CLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_CLIST, GailCList)) -#define GAIL_CLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_CLIST, GailCListClass)) -#define GAIL_IS_CLIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_CLIST)) -#define GAIL_IS_CLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_CLIST)) -#define GAIL_CLIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_CLIST, GailCListClass)) - -typedef struct _GailCList GailCList; -typedef struct _GailCListClass GailCListClass; - -typedef struct _GailCListColumn GailCListColumn; - -struct _GailCList -{ - GailContainer parent; - - AtkObject* caption; - AtkObject* summary; - - /* dynamically allocated array of column structures */ - GailCListColumn *columns; - /* private */ - gint n_cols; - GArray *row_data; - GList *cell_data; - AtkObject *previous_selected_cell; -}; - -GType gail_clist_get_type (void); - -struct _GailCListClass -{ - GailContainerClass parent_class; -}; - -G_END_DECLS - -#endif /* __GAIL_CLIST_H__ */