1 /* Copyright (c) 2009, Igalia
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include <glib/gi18n.h>
31 #include "modest-find-toolbar.h"
33 typedef struct _ModestFindToolbarPrivate ModestFindToolbarPrivate;
34 struct _ModestFindToolbarPrivate {
40 static void modest_find_toolbar_class_init (ModestFindToolbarClass *klass);
41 static void modest_find_toolbar_init (ModestFindToolbar *self);
42 static void modest_isearch_toolbar_iface_init (gpointer g, gpointer iface_data);
44 /* GObject interface */
45 static void modest_find_toolbar_finalize (GObject *obj);
47 /* ModestISearchToolbar interface */
48 static void modest_find_toolbar_highlight_entry (ModestISearchToolbar *self, gboolean focus);
49 static void modest_find_toolbar_highlight_entry_default (ModestISearchToolbar *self, gboolean focus);
50 static void modest_find_toolbar_set_label (ModestISearchToolbar *self, const gchar *label);
51 static void modest_find_toolbar_set_label_default (ModestISearchToolbar *self, const gchar *label);
52 static const gchar *modest_find_toolbar_get_search (ModestISearchToolbar *self);
53 static const gchar *modest_find_toolbar_get_search_default (ModestISearchToolbar *self);
56 static void on_entry_activate (GtkEntry *entry, gpointer userdata);
57 static void on_close_clicked (GtkToolButton *button, gpointer userdata);
59 #define MODEST_FIND_TOOLBAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
60 MODEST_TYPE_FIND_TOOLBAR, \
61 ModestFindToolbarPrivate))
63 static GtkToolbarClass *parent_class = NULL;
65 G_DEFINE_TYPE_EXTENDED (ModestFindToolbar,
70 G_IMPLEMENT_INTERFACE (MODEST_TYPE_ISEARCH_TOOLBAR, modest_isearch_toolbar_iface_init);
75 modest_find_toolbar_new (const gchar *label)
77 GtkWidget *toolbar = g_object_new (MODEST_TYPE_FIND_TOOLBAR, NULL);
78 modest_isearch_toolbar_set_label (MODEST_ISEARCH_TOOLBAR (toolbar), label);
84 modest_find_toolbar_class_init (ModestFindToolbarClass *klass)
86 GObjectClass *gobject_class;
88 parent_class = g_type_class_peek_parent (klass);
89 gobject_class = (GObjectClass *) klass;
90 gobject_class->finalize = modest_find_toolbar_finalize;
92 klass->highlight_entry_func = modest_find_toolbar_highlight_entry_default;
93 klass->set_label_func = modest_find_toolbar_set_label_default;
94 klass->get_search_func = modest_find_toolbar_get_search_default;
96 g_type_class_add_private (gobject_class, sizeof(ModestFindToolbarPrivate));
100 modest_find_toolbar_init (ModestFindToolbar *self)
102 ModestFindToolbarPrivate *priv;
103 GtkToolItem *label_tool_item;
104 GtkToolItem *entry_tool_item;
105 GtkToolItem *close_tool_button;
107 priv = MODEST_FIND_TOOLBAR_GET_PRIVATE (self);
109 gtk_widget_set_no_show_all (GTK_WIDGET (self), TRUE);
111 label_tool_item = gtk_tool_item_new ();
112 priv->label = gtk_label_new (NULL);
113 gtk_container_add (GTK_CONTAINER (label_tool_item), priv->label);
115 gtk_toolbar_insert (GTK_TOOLBAR (self), label_tool_item, -1);
116 gtk_container_child_set (GTK_CONTAINER (self), GTK_WIDGET (label_tool_item), "expand", FALSE, NULL);
117 g_object_set (GTK_TOOL_ITEM (label_tool_item), "is-important", TRUE, NULL);
119 entry_tool_item = gtk_tool_item_new ();
120 priv->entry = gtk_entry_new ();
121 gtk_container_add (GTK_CONTAINER (entry_tool_item), priv->entry);
123 gtk_toolbar_insert (GTK_TOOLBAR (self), entry_tool_item, -1);
124 gtk_container_child_set (GTK_CONTAINER (self), GTK_WIDGET (entry_tool_item), "expand", TRUE, NULL);
125 g_object_set (GTK_TOOL_ITEM (entry_tool_item), "is-important", TRUE, NULL);
127 close_tool_button = gtk_tool_button_new_from_stock (GTK_STOCK_CLOSE);
129 gtk_toolbar_insert (GTK_TOOLBAR (self), close_tool_button, -1);
130 gtk_container_child_set (GTK_CONTAINER (self), GTK_WIDGET (close_tool_button), "expand", FALSE, NULL);
131 g_object_set (GTK_TOOL_ITEM (close_tool_button), "is-important", TRUE, NULL);
133 g_signal_connect (G_OBJECT (priv->entry), "activate", G_CALLBACK (on_entry_activate), self);
134 g_signal_connect (G_OBJECT (close_tool_button), "clicked", G_CALLBACK (on_close_clicked), self);
138 modest_isearch_toolbar_iface_init (gpointer g, gpointer iface_data)
140 ModestISearchToolbarIface *iface = (ModestISearchToolbarIface *) g;
142 iface->highlight_entry = modest_find_toolbar_highlight_entry;
143 iface->set_label = modest_find_toolbar_set_label;
144 iface->get_search = modest_find_toolbar_get_search;
148 modest_find_toolbar_finalize (GObject *obj)
150 G_OBJECT_CLASS(parent_class)->finalize (obj);
154 modest_find_toolbar_highlight_entry (ModestISearchToolbar *self,
157 MODEST_FIND_TOOLBAR_GET_CLASS (self)->highlight_entry_func (self, get_focus);
161 modest_find_toolbar_highlight_entry_default (ModestISearchToolbar *self,
164 ModestFindToolbarPrivate *priv;
166 priv = MODEST_FIND_TOOLBAR_GET_PRIVATE (self);
168 gtk_widget_grab_focus (priv->entry);
172 modest_find_toolbar_set_label (ModestISearchToolbar *self,
175 MODEST_FIND_TOOLBAR_GET_CLASS (self)->set_label_func (self, label);
179 modest_find_toolbar_set_label_default (ModestISearchToolbar *self,
182 ModestFindToolbarPrivate *priv;
184 priv = MODEST_FIND_TOOLBAR_GET_PRIVATE (self);
185 gtk_label_set_text (GTK_LABEL (priv->label), label);
189 modest_find_toolbar_get_search (ModestISearchToolbar *self)
191 return MODEST_FIND_TOOLBAR_GET_CLASS (self)->get_search_func (self);
195 modest_find_toolbar_get_search_default (ModestISearchToolbar *self)
197 ModestFindToolbarPrivate *priv;
199 priv = MODEST_FIND_TOOLBAR_GET_PRIVATE (self);
201 return gtk_entry_get_text (GTK_ENTRY (priv->entry));
205 on_entry_activate (GtkEntry *entry, gpointer userdata)
207 g_signal_emit_by_name (G_OBJECT (userdata), "isearch-search");
211 on_close_clicked (GtkToolButton *button, gpointer userdata)
213 g_signal_emit_by_name (G_OBJECT (userdata), "isearch-close");