role: new role ATK_ROLE_TITLE_BAR
[platform/upstream/atk.git] / atk / atkmisc.c
1 /* ATK -  Accessibility Toolkit
2  * Copyright 2007 Sun Microsystems Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #include "atkmisc.h"
21
22 static void atk_misc_class_init (AtkMiscClass *klass);
23
24 GType
25 atk_misc_get_type (void)
26 {
27   static GType type = 0;
28
29   if (!type)
30     {
31       static const GTypeInfo typeInfo =
32       {
33         sizeof (AtkMiscClass),
34         (GBaseInitFunc) NULL,
35         (GBaseFinalizeFunc) NULL,
36         (GClassInitFunc) atk_misc_class_init,
37         (GClassFinalizeFunc) NULL,
38         NULL,
39         sizeof (AtkMisc),
40         0,
41         (GInstanceInitFunc) NULL,
42       } ;
43       type = g_type_register_static (G_TYPE_OBJECT, "AtkMisc", &typeInfo, 0) ;
44     }
45   return type;
46 }
47
48 static void
49 atk_misc_class_init (AtkMiscClass *klass)
50 {
51   klass->threads_enter = NULL;
52   klass->threads_leave = NULL;
53 }
54
55 /**
56  * atk_misc_threads_enter:
57  * @misc: an AtkMisc instance for this application. 
58  *
59  * Take the thread mutex for the GUI toolkit, 
60  * if one exists. 
61  * (This method is implemented by the toolkit ATK implementation layer;
62  *  for instance, for GTK+, GAIL implements this via GDK_THREADS_ENTER).
63  *
64  * Since: 1.13
65  *
66  **/
67 void
68 atk_misc_threads_enter (AtkMisc *misc)
69 {
70   AtkMiscClass *klass;
71
72   if (misc == NULL)
73     return;
74
75   klass = ATK_MISC_GET_CLASS (misc);
76
77   if (klass->threads_enter)
78     {
79       klass->threads_enter (misc);
80     }
81 }
82
83 /**
84  * atk_misc_threads_leave:
85  * @misc: an AtkMisc instance for this application. 
86  *
87  * Release the thread mutex for the GUI toolkit, 
88  * if one exists. This method, and atk_misc_threads_enter, 
89  * are needed in some situations by threaded application code which 
90  * services ATK requests, since fulfilling ATK requests often
91  * requires calling into the GUI toolkit.  If a long-running or
92  * potentially blocking call takes place inside such a block, it should
93  * be bracketed by atk_misc_threads_leave/atk_misc_threads_enter calls.
94  * (This method is implemented by the toolkit ATK implementation layer;
95  *  for instance, for GTK+, GAIL implements this via GDK_THREADS_LEAVE).
96  *
97  * Since: 1.13
98  *
99  **/
100 void
101 atk_misc_threads_leave (AtkMisc *misc)
102 {
103   AtkMiscClass *klass;
104
105   if (misc == NULL)
106     return;
107
108   klass = ATK_MISC_GET_CLASS (misc);
109
110   if (klass->threads_leave)
111     {
112       klass->threads_leave (misc);
113     }
114 }
115
116 AtkMisc *atk_misc_instance = NULL;
117
118 /**
119  * atk_misc_get_instance:
120  *
121  * Obtain the singleton instance of AtkMisc for this application.
122  * 
123  * Since: 1.13
124  *
125  * Returns: The singleton instance of AtkMisc for this application.
126  *
127  **/
128 const AtkMisc *
129 atk_misc_get_instance (void)
130 {
131   return atk_misc_instance;
132 }