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
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_GTK_H_
6#define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_GTK_H_
7
8#include <atk/atk.h>
9
10#include "base/compiler_specific.h"
11#include "content/browser/accessibility/browser_accessibility.h"
12
13namespace content {
14
15class BrowserAccessibilityGtk;
16class BrowserAccessibilityManagerGtk;
17
18G_BEGIN_DECLS
19
20#define BROWSER_ACCESSIBILITY_TYPE (browser_accessibility_get_type())
21#define BROWSER_ACCESSIBILITY(obj) \
22    (G_TYPE_CHECK_INSTANCE_CAST( \
23             (obj), BROWSER_ACCESSIBILITY_TYPE, BrowserAccessibilityAtk))
24#define BROWSER_ACCESSIBILITY_CLASS(klass) \
25    (G_TYPE_CHECK_CLASS_CAST( \
26        (klass), BROWSER_ACCESSIBILITY_TYPE, BrowserAccessibilityAtkClass))
27#define IS_BROWSER_ACCESSIBILITY(obj) \
28    (G_TYPE_CHECK_INSTANCE_TYPE((obj), BROWSER_ACCESSIBILITY_TYPE))
29#define IS_BROWSER_ACCESSIBILITY_CLASS(klass) \
30    (G_TYPE_CHECK_CLASS_TYPE((klass), BROWSER_ACCESSIBILITY_TYPE))
31#define BROWSER_ACCESSIBILITY_GET_CLASS(obj) \
32    (G_TYPE_INSTANCE_GET_CLASS( \
33        (obj), BROWSER_ACCESSIBILITY_TYPE, BrowserAccessibilityAtkClass))
34
35typedef struct _BrowserAccessibilityAtk      BrowserAccessibilityAtk;
36typedef struct _BrowserAccessibilityAtkClass BrowserAccessibilityAtkClass;
37
38struct _BrowserAccessibilityAtk {
39  AtkObject parent;
40  BrowserAccessibilityGtk* m_object;
41};
42
43struct _BrowserAccessibilityAtkClass {
44  AtkObjectClass parent_class;
45};
46
47GType browser_accessibility_get_type (void) G_GNUC_CONST;
48
49BrowserAccessibilityAtk* browser_accessibility_new(
50    BrowserAccessibilityGtk* object);
51
52BrowserAccessibilityGtk* browser_accessibility_get_object(
53    BrowserAccessibilityAtk* atk_object);
54
55void browser_accessibility_detach (BrowserAccessibilityAtk* atk_object);
56
57AtkObject* browser_accessibility_get_focused_element(
58    BrowserAccessibilityAtk* atk_object);
59
60G_END_DECLS
61
62class BrowserAccessibilityGtk : public BrowserAccessibility {
63 public:
64  BrowserAccessibilityGtk();
65
66  virtual ~BrowserAccessibilityGtk();
67
68  AtkObject* GetAtkObject() const;
69
70  AtkRole atk_role() { return atk_role_; }
71
72  // BrowserAccessibility methods.
73  virtual void PreInitialize() OVERRIDE;
74  virtual bool IsNative() const OVERRIDE;
75
76 private:
77  virtual void InitRoleAndState();
78
79  // Give BrowserAccessibility::Create access to our constructor.
80  friend class BrowserAccessibility;
81
82  AtkObject* atk_object_;
83  AtkRole atk_role_;
84  int interface_mask_;
85
86 private:
87  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityGtk);
88};
89
90}  // namespace content
91
92#endif  // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_GTK_H_
93