Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: ui/gfx/gtk_preserve_window.cc

Issue 10382051: Add initial GTK web accessibility framework (third attempt). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/gtk_preserve_window.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/gtk_preserve_window.h" 5 #include "ui/gfx/gtk_preserve_window.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 9
10 #include "ui/base/gtk/gtk_compat.h" 10 #include "ui/base/gtk/gtk_compat.h"
11 11
12 G_BEGIN_DECLS 12 G_BEGIN_DECLS
13 13
14 #define GTK_PRESERVE_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ 14 #define GTK_PRESERVE_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
15 GTK_TYPE_PRESERVE_WINDOW, \ 15 GTK_TYPE_PRESERVE_WINDOW, \
16 GtkPreserveWindowPrivate)) 16 GtkPreserveWindowPrivate))
17 17
18 typedef struct _GtkPreserveWindowPrivate GtkPreserveWindowPrivate; 18 typedef struct _GtkPreserveWindowPrivate GtkPreserveWindowPrivate;
19 19
20 struct _GtkPreserveWindowPrivate { 20 struct _GtkPreserveWindowPrivate {
21 // If true, don't create/destroy windows on realize/unrealize. 21 // If true, don't create/destroy windows on realize/unrealize.
22 gboolean preserve_window; 22 gboolean preserve_window;
23 23
24 // Whether or not we delegate the resize of the GdkWindow 24 // Whether or not we delegate the resize of the GdkWindow
25 // to someone else. 25 // to someone else.
26 gboolean delegate_resize; 26 gboolean delegate_resize;
27
28 // Accessible factory and userdata.
29 AtkObject* (*accessible_factory)(void* userdata);
30 void* accessible_factory_userdata;
27 }; 31 };
28 32
29 G_DEFINE_TYPE(GtkPreserveWindow, gtk_preserve_window, GTK_TYPE_FIXED) 33 G_DEFINE_TYPE(GtkPreserveWindow, gtk_preserve_window, GTK_TYPE_FIXED)
30 34
31 static void gtk_preserve_window_destroy(GtkObject* object); 35 static void gtk_preserve_window_destroy(GtkObject* object);
32 static void gtk_preserve_window_realize(GtkWidget* widget); 36 static void gtk_preserve_window_realize(GtkWidget* widget);
33 static void gtk_preserve_window_unrealize(GtkWidget* widget); 37 static void gtk_preserve_window_unrealize(GtkWidget* widget);
34 static void gtk_preserve_window_size_allocate(GtkWidget* widget, 38 static void gtk_preserve_window_size_allocate(GtkWidget* widget,
35 GtkAllocation* allocation); 39 GtkAllocation* allocation);
40 static AtkObject* gtk_preserve_window_get_accessible(GtkWidget* widget);
36 41
37 static void gtk_preserve_window_class_init(GtkPreserveWindowClass *klass) { 42 static void gtk_preserve_window_class_init(GtkPreserveWindowClass *klass) {
38 GtkWidgetClass* widget_class = reinterpret_cast<GtkWidgetClass*>(klass); 43 GtkWidgetClass* widget_class = reinterpret_cast<GtkWidgetClass*>(klass);
39 widget_class->realize = gtk_preserve_window_realize; 44 widget_class->realize = gtk_preserve_window_realize;
40 widget_class->unrealize = gtk_preserve_window_unrealize; 45 widget_class->unrealize = gtk_preserve_window_unrealize;
41 widget_class->size_allocate = gtk_preserve_window_size_allocate; 46 widget_class->size_allocate = gtk_preserve_window_size_allocate;
47 widget_class->get_accessible = gtk_preserve_window_get_accessible;
42 48
43 GtkObjectClass* object_class = reinterpret_cast<GtkObjectClass*>(klass); 49 GtkObjectClass* object_class = reinterpret_cast<GtkObjectClass*>(klass);
44 object_class->destroy = gtk_preserve_window_destroy; 50 object_class->destroy = gtk_preserve_window_destroy;
45 51
46 GObjectClass* gobject_class = G_OBJECT_CLASS(klass); 52 GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
47 g_type_class_add_private(gobject_class, sizeof(GtkPreserveWindowPrivate)); 53 g_type_class_add_private(gobject_class, sizeof(GtkPreserveWindowPrivate));
48 } 54 }
49 55
50 static void gtk_preserve_window_init(GtkPreserveWindow* widget) { 56 static void gtk_preserve_window_init(GtkPreserveWindow* widget) {
51 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 57 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
52 priv->preserve_window = FALSE; 58 priv->preserve_window = FALSE;
59 priv->accessible_factory = NULL;
60 priv->accessible_factory_userdata = NULL;
53 61
54 // These widgets always have their own window. 62 // These widgets always have their own window.
55 gtk_widget_set_has_window(GTK_WIDGET(widget), TRUE); 63 gtk_widget_set_has_window(GTK_WIDGET(widget), TRUE);
56 } 64 }
57 65
58 GtkWidget* gtk_preserve_window_new() { 66 GtkWidget* gtk_preserve_window_new() {
59 return GTK_WIDGET(g_object_new(GTK_TYPE_PRESERVE_WINDOW, NULL)); 67 return GTK_WIDGET(g_object_new(GTK_TYPE_PRESERVE_WINDOW, NULL));
60 } 68 }
61 69
62 static void gtk_preserve_window_destroy(GtkObject* object) { 70 static void gtk_preserve_window_destroy(GtkObject* object) {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 children = children->next; 235 children = children->next;
228 } 236 }
229 } 237 }
230 238
231 void gtk_preserve_window_delegate_resize(GtkPreserveWindow* widget, 239 void gtk_preserve_window_delegate_resize(GtkPreserveWindow* widget,
232 gboolean delegate) { 240 gboolean delegate) {
233 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 241 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
234 priv->delegate_resize = delegate; 242 priv->delegate_resize = delegate;
235 } 243 }
236 244
245 void gtk_preserve_window_set_accessible_factory(
246 GtkPreserveWindow* widget,
247 AtkObject* (*factory)(void* userdata),
248 gpointer userdata) {
249 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
250 priv->accessible_factory = factory;
251 priv->accessible_factory_userdata = userdata;
252 }
253
254 AtkObject* gtk_preserve_window_get_accessible(GtkWidget* widget) {
255 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
256 if (priv->accessible_factory) {
257 return priv->accessible_factory(priv->accessible_factory_userdata);
258 } else {
259 return GTK_WIDGET_CLASS(gtk_preserve_window_parent_class)
260 ->get_accessible(widget);
261 }
262 }
263
237 G_END_DECLS 264 G_END_DECLS
OLDNEW
« no previous file with comments | « ui/gfx/gtk_preserve_window.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698