]> Pileus Git - ~andy/gtk/blob - gtk/gtkfilechooserembed.c
Typo fix. (#388123, Murray Cumming)
[~andy/gtk] / gtk / gtkfilechooserembed.c
1 /* GTK - The GIMP Toolkit
2  * gtkfilechooserembed.h: Abstract sizing interface for file selector implementations
3  * Copyright (C) 2004, Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #include <config.h>
22 #include "gtkfilechooserembed.h"
23 #include "gtkmarshalers.h"
24 #include "gtkintl.h"
25 #include "gtkalias.h"
26
27 static void gtk_file_chooser_embed_class_init (gpointer g_iface);
28 static void delegate_get_default_size         (GtkFileChooserEmbed *chooser_embed,
29                                                gint                *default_width,
30                                                gint                *default_height);
31 static void delegate_get_resizable_hints      (GtkFileChooserEmbed *chooser_embed,
32                                                gboolean            *resize_horizontally,
33                                                gboolean            *resize_vertically);
34 static gboolean delegate_should_respond       (GtkFileChooserEmbed *chooser_embed);
35 static void delegate_initial_focus            (GtkFileChooserEmbed *chooser_embed);
36 static void delegate_default_size_changed     (GtkFileChooserEmbed *chooser_embed,
37                                                gpointer             data);
38 static void delegate_response_requested       (GtkFileChooserEmbed *chooser_embed,
39                                                gpointer             data);
40
41 static GtkFileChooserEmbed *
42 get_delegate (GtkFileChooserEmbed *receiver)
43 {
44   return g_object_get_data (G_OBJECT (receiver), "gtk-file-chooser-embed-delegate");
45 }
46
47 /**
48  * _gtk_file_chooser_embed_delegate_iface_init:
49  * @iface: a #GtkFileChoserEmbedIface structure
50  * 
51  * An interface-initialization function for use in cases where an object is
52  * simply delegating the methods, signals of the #GtkFileChooserEmbed interface
53  * to another object.  _gtk_file_chooser_embed_set_delegate() must be called on
54  * each instance of the object so that the delegate object can be found.
55  **/
56 void
57 _gtk_file_chooser_embed_delegate_iface_init (GtkFileChooserEmbedIface *iface)
58 {
59   iface->get_default_size = delegate_get_default_size;
60   iface->get_resizable_hints = delegate_get_resizable_hints;
61   iface->should_respond = delegate_should_respond;
62   iface->initial_focus = delegate_initial_focus;
63 }
64
65 /**
66  * _gtk_file_chooser_embed_set_delegate:
67  * @receiver: a GOobject implementing #GtkFileChooserEmbed
68  * @delegate: another GObject implementing #GtkFileChooserEmbed
69  *
70  * Establishes that calls on @receiver for #GtkFileChooser methods should be
71  * delegated to @delegate, and that #GtkFileChooser signals emitted on @delegate
72  * should be forwarded to @receiver. Must be used in conjunction with
73  * _gtk_file_chooser_embed_delegate_iface_init().
74  **/
75 void
76 _gtk_file_chooser_embed_set_delegate (GtkFileChooserEmbed *receiver,
77                                       GtkFileChooserEmbed *delegate)
78 {
79   g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (receiver));
80   g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (delegate));
81   
82   g_object_set_data (G_OBJECT (receiver), I_("gtk-file-chooser-embed-delegate"), delegate);
83
84   g_signal_connect (delegate, "default-size-changed",
85                     G_CALLBACK (delegate_default_size_changed), receiver);
86   g_signal_connect (delegate, "response-requested",
87                     G_CALLBACK (delegate_response_requested), receiver);
88 }
89
90
91
92 static void
93 delegate_get_default_size (GtkFileChooserEmbed *chooser_embed,
94                            gint                *default_width,
95                            gint                *default_height)
96 {
97   _gtk_file_chooser_embed_get_default_size (get_delegate (chooser_embed), default_width, default_height);
98 }
99      
100 static void
101 delegate_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
102                               gboolean            *resize_horizontally,
103                               gboolean            *resize_vertically)
104 {
105   _gtk_file_chooser_embed_get_resizable_hints (get_delegate (chooser_embed), resize_horizontally, resize_vertically);
106 }
107
108 static gboolean
109 delegate_should_respond (GtkFileChooserEmbed *chooser_embed)
110 {
111   return _gtk_file_chooser_embed_should_respond (get_delegate (chooser_embed));
112 }
113
114 static void
115 delegate_initial_focus (GtkFileChooserEmbed *chooser_embed)
116 {
117   _gtk_file_chooser_embed_initial_focus (get_delegate (chooser_embed));
118 }
119
120 static void
121 delegate_default_size_changed (GtkFileChooserEmbed *chooser_embed,
122                                gpointer             data)
123 {
124   g_signal_emit_by_name (data, "default-size-changed");
125 }
126
127 static void
128 delegate_response_requested (GtkFileChooserEmbed *chooser_embed,
129                              gpointer             data)
130 {
131   g_signal_emit_by_name (data, "response-requested");
132 }
133
134
135 /* publicly callable functions */
136
137 GType
138 _gtk_file_chooser_embed_get_type (void)
139 {
140   static GType file_chooser_embed_type = 0;
141
142   if (!file_chooser_embed_type)
143     {
144       const GTypeInfo file_chooser_embed_info =
145       {
146         sizeof (GtkFileChooserEmbedIface),  /* class_size */
147         NULL,                          /* base_init */
148         NULL,                          /* base_finalize */
149         (GClassInitFunc)gtk_file_chooser_embed_class_init, /* class_init */
150       };
151
152       file_chooser_embed_type = g_type_register_static (G_TYPE_INTERFACE,
153                                                         I_("GtkFileChooserEmbed"),
154                                                         &file_chooser_embed_info, 0);
155
156       g_type_interface_add_prerequisite (file_chooser_embed_type, GTK_TYPE_WIDGET);
157     }
158
159   return file_chooser_embed_type;
160 }
161
162 static void
163 gtk_file_chooser_embed_class_init (gpointer g_iface)
164 {
165   GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
166
167   g_signal_new (I_("default-size-changed"),
168                 iface_type,
169                 G_SIGNAL_RUN_LAST,
170                 G_STRUCT_OFFSET (GtkFileChooserEmbedIface, default_size_changed),
171                 NULL, NULL,
172                 _gtk_marshal_VOID__VOID,
173                 G_TYPE_NONE, 0);
174   g_signal_new (I_("response-requested"),
175                 iface_type,
176                 G_SIGNAL_RUN_LAST,
177                 G_STRUCT_OFFSET (GtkFileChooserEmbedIface, response_requested),
178                 NULL, NULL,
179                 _gtk_marshal_VOID__VOID,
180                 G_TYPE_NONE, 0);
181 }
182
183 void
184 _gtk_file_chooser_embed_get_default_size (GtkFileChooserEmbed *chooser_embed,
185                                          gint                *default_width,
186                                          gint                *default_height)
187 {
188   g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed));
189   g_return_if_fail (default_width != NULL);
190   g_return_if_fail (default_height != NULL);
191
192   GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->get_default_size (chooser_embed, default_width, default_height);
193 }
194
195 gboolean
196 _gtk_file_chooser_embed_should_respond (GtkFileChooserEmbed *chooser_embed)
197 {
198   g_return_val_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed), FALSE);
199
200   return GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->should_respond (chooser_embed);
201 }
202
203 void
204 _gtk_file_chooser_embed_initial_focus (GtkFileChooserEmbed *chooser_embed)
205 {
206   g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed));
207
208   GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->initial_focus (chooser_embed);
209 }
210
211 void
212 _gtk_file_chooser_embed_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
213                                              gboolean            *resize_horizontally,
214                                              gboolean            *resize_vertically)
215 {
216   g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed));
217   g_return_if_fail (resize_horizontally != NULL);
218   g_return_if_fail (resize_vertically != NULL);
219
220   GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->get_resizable_hints (chooser_embed, resize_horizontally, resize_vertically);
221 }