aboutsummaryrefslogtreecommitdiffstats
path: root/a11y/e-table/gal-a11y-e-cell-popup.c
diff options
context:
space:
mode:
authorAndrew Wu <yang.wu@sun.com>2003-12-08 13:52:32 +0800
committerBolian Yin <byin@src.gnome.org>2003-12-08 13:52:32 +0800
commitceb9cedfc48b4537e5e84e9bc80f26c06ba943c1 (patch)
tree3589a75190a2f95b1b50e34b859111c88918190f /a11y/e-table/gal-a11y-e-cell-popup.c
parent6408402a80d01fc9d59c3b1bca8c2db35441f0fd (diff)
downloadgsoc2013-evolution-ceb9cedfc48b4537e5e84e9bc80f26c06ba943c1.tar.gz
gsoc2013-evolution-ceb9cedfc48b4537e5e84e9bc80f26c06ba943c1.tar.zst
gsoc2013-evolution-ceb9cedfc48b4537e5e84e9bc80f26c06ba943c1.zip
Fixed #50844
2003-12-08 Andrew Wu <yang.wu@sun.com> Fixed #50844 * gal/a11y/e-table/gal-a11y-e-cell-popup.c: * gal/a11y/e-table/gal-a11y-e-cell-popup.h: a11y impl. for e-cell-popup. svn path=/trunk/; revision=23670
Diffstat (limited to 'a11y/e-table/gal-a11y-e-cell-popup.c')
-rw-r--r--a11y/e-table/gal-a11y-e-cell-popup.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/a11y/e-table/gal-a11y-e-cell-popup.c b/a11y/e-table/gal-a11y-e-cell-popup.c
new file mode 100644
index 0000000000..b1485fd42a
--- /dev/null
+++ b/a11y/e-table/gal-a11y-e-cell-popup.c
@@ -0,0 +1,143 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* vim:expandtab:shiftwidth=8:tabstop=8:
+ */
+/* Evolution Accessibility: gal-a11y-e-cell-popup.h
+ *
+ * Copyright (C) 2003 Ximian, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Yang Wu <yang.wu@sun.com> Sun Microsystem Inc., 2003
+ *
+ */
+
+#include <config.h>
+#include <gal/e-table/e-cell-popup.h>
+#include "gal-a11y-e-cell-popup.h"
+#include "gal-a11y-util.h"
+#include <atk/atkobject.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+
+static AtkObjectClass *parent_class = NULL;
+#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
+
+static void gal_a11y_e_cell_popup_class_init (GalA11yECellPopupClass *klass);
+static void popup_cell_action (GalA11yECell *cell);
+
+/**
+ * gal_a11y_e_cell_popup_get_type:
+ * @void:
+ *
+ * Registers the &GalA11yECellPopup class if necessary, and returns the type ID
+ * associated to it.
+ *
+ * Return value: The type ID of the &GalA11yECellPopup class.
+ **/
+GType
+gal_a11y_e_cell_popup_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ GTypeInfo info = {
+ sizeof (GalA11yECellPopupClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) gal_a11y_e_cell_popup_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+ sizeof (GalA11yECellPopup),
+ 0,
+ (GInstanceInitFunc) NULL,
+ NULL /* value_cell_popup */
+ };
+
+ type = g_type_register_static (PARENT_TYPE, "GalA11yECellPopup", &info, 0);
+ gal_a11y_e_cell_type_add_action_interface (type);
+ }
+
+ return type;
+}
+
+static void
+gal_a11y_e_cell_popup_class_init (GalA11yECellPopupClass *klass)
+{
+ AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_ref (PARENT_TYPE);
+}
+
+AtkObject *
+gal_a11y_e_cell_popup_new (ETableItem *item,
+ ECellView *cell_view,
+ AtkObject *parent,
+ int model_col,
+ int view_col,
+ int row)
+{
+ AtkObject *a11y;
+ GalA11yECell *cell;
+ ECellPopup *popupcell;
+
+ g_return_val_if_fail (a11y != NULL, NULL);
+ popupcell= E_CELL_POPUP(cell_view->ecell);
+ ECellView* child_view =popupcell->popup_cell_view->child_view;
+ if (child_view->ecell) {
+ a11y = gal_a11y_e_cell_registry_get_object (NULL,
+ item,
+ child_view,
+ parent,
+ model_col,
+ view_col,
+ row);
+ } else {
+ a11y = g_object_new (GAL_A11Y_TYPE_E_CELL_POPUP, NULL);
+ gal_a11y_e_cell_construct (a11y,
+ item,
+ cell_view,
+ parent,
+ model_col,
+ view_col,
+ row);
+ }
+ g_return_val_if_fail (a11y != NULL, NULL);
+ cell = GAL_A11Y_E_CELL(a11y);
+ gal_a11y_e_cell_add_action (cell,
+ "popup", /* action name*/
+ "popup a child", /* action description */
+ "<Alt>Down", /* action keybinding */
+ popup_cell_action);
+
+ a11y->role = ATK_ROLE_TABLE_CELL;
+ return a11y;
+}
+
+static void
+popup_cell_action (GalA11yECell *cell)
+{
+ ECellPopup *ecp;
+ gint finished;
+ GdkEvent event;
+
+ event.key.type = GDK_KEY_PRESS;
+ event.key.window = GTK_LAYOUT(GNOME_CANVAS_ITEM(cell->item)->canvas)->bin_window;;
+ event.key.send_event = TRUE;
+ event.key.time = GDK_CURRENT_TIME;
+ event.key.state = GDK_MOD1_MASK;
+ event.key.keyval = GDK_Down;
+
+ g_signal_emit_by_name (cell->item, "event", &event, &finished);
+}