Mercurial > pidgin.yaz
annotate finch/libgnt/gntbutton.c @ 31401:27c56e6b5fa6
Our certificate code is generally designed around no two CA
certificates having the same DN. Unfortunately this breaks when have
multiple distinct intermediate certificates with the same DN, such as
when we want to validate against MSN intermediate CAs. This change
allows us to verify against any one of multiple CA certificates with
the same DN, instead of relying on a) luck from reading from disk in
the "right" order or b) black magic from NSS reconstructing a valid
chain on connection attempts after CA pool initialization is complete.
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Tue, 23 Nov 2010 01:56:12 +0000 |
parents | a18f421696dc |
children |
rev | line source |
---|---|
17718
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19680
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19295
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
17718
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15970
diff
changeset
|
22 |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
23 #include <stdlib.h> |
15818 | 24 #include <string.h> |
25 | |
28984
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23397
diff
changeset
|
26 #include "gntinternal.h" |
15818 | 27 #include "gntbutton.h" |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
28 #include "gntstyle.h" |
15818 | 29 #include "gntutils.h" |
30 | |
31 enum | |
32 { | |
33 SIGS = 1, | |
34 }; | |
35 | |
36 static GntWidgetClass *parent_class = NULL; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
37 static gboolean small_button = FALSE; |
15818 | 38 |
39 static void | |
40 gnt_button_draw(GntWidget *widget) | |
41 { | |
42 GntButton *button = GNT_BUTTON(widget); | |
43 GntColorType type; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
44 gboolean focus; |
15818 | 45 |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
46 if ((focus = gnt_widget_has_focus(widget))) |
15818 | 47 type = GNT_COLOR_HIGHLIGHT; |
48 else | |
49 type = GNT_COLOR_NORMAL; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
50 |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19680
diff
changeset
|
51 wbkgdset(widget->window, '\0' | gnt_color_pair(type)); |
28984
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23397
diff
changeset
|
52 mvwaddstr(widget->window, (small_button) ? 0 : 1, 2, C_(button->priv->text)); |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
53 if (small_button) { |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
54 type = GNT_COLOR_HIGHLIGHT; |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
55 mvwchgat(widget->window, 0, 0, widget->priv.width, focus ? A_BOLD : A_REVERSE, type, NULL); |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
56 } |
15818 | 57 |
58 GNTDEBUG; | |
59 } | |
60 | |
61 static void | |
62 gnt_button_size_request(GntWidget *widget) | |
63 { | |
64 GntButton *button = GNT_BUTTON(widget); | |
65 gnt_util_get_text_bound(button->priv->text, | |
66 &widget->priv.width, &widget->priv.height); | |
67 widget->priv.width += 4; | |
68 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) | |
69 widget->priv.height += 2; | |
70 } | |
71 | |
72 static void | |
73 gnt_button_map(GntWidget *widget) | |
74 { | |
75 if (widget->priv.width == 0 || widget->priv.height == 0) | |
76 gnt_widget_size_request(widget); | |
77 GNTDEBUG; | |
78 } | |
79 | |
80 static gboolean | |
81 gnt_button_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) | |
82 { | |
83 if (event == GNT_LEFT_MOUSE_DOWN) { | |
84 gnt_widget_activate(widget); | |
85 return TRUE; | |
86 } | |
87 return FALSE; | |
88 } | |
89 | |
90 static void | |
21278
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
91 gnt_button_destroy(GntWidget *widget) |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
92 { |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
93 GntButton *button = GNT_BUTTON(widget); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
94 g_free(button->priv->text); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
95 g_free(button->priv); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
96 } |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
97 |
23397
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
98 static gboolean |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
99 button_activate(GntBindable *bind, GList *null) |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
100 { |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
101 gnt_widget_activate(GNT_WIDGET(bind)); |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
102 return TRUE; |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
103 } |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
104 |
21278
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
105 static void |
15818 | 106 gnt_button_class_init(GntWidgetClass *klass) |
107 { | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
108 char *style; |
23397
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
109 GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass); |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
110 |
15818 | 111 parent_class = GNT_WIDGET_CLASS(klass); |
112 parent_class->draw = gnt_button_draw; | |
113 parent_class->map = gnt_button_map; | |
114 parent_class->size_request = gnt_button_size_request; | |
115 parent_class->clicked = gnt_button_clicked; | |
21278
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
116 parent_class->destroy = gnt_button_destroy; |
15818 | 117 |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
118 style = gnt_style_get_from_name(NULL, "small-button"); |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
119 small_button = gnt_style_parse_bool(style); |
19295 | 120 g_free(style); |
23397
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
121 |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
122 gnt_bindable_class_register_action(bindable, "activate", button_activate, |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
123 GNT_KEY_ENTER, NULL); |
0119f73a76da
Allow rebinding button activations (e.g. to space).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
124 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); |
15818 | 125 } |
126 | |
127 static void | |
128 gnt_button_init(GTypeInstance *instance, gpointer class) | |
129 { | |
130 GntWidget *widget = GNT_WIDGET(instance); | |
131 GntButton *button = GNT_BUTTON(instance); | |
132 button->priv = g_new0(GntButtonPriv, 1); | |
133 | |
134 widget->priv.minw = 4; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
135 widget->priv.minh = small_button ? 1 : 3; |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
136 if (small_button) |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17718
diff
changeset
|
137 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19680
diff
changeset
|
138 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_GROW_X | GNT_WIDGET_GROW_Y); |
15818 | 139 GNTDEBUG; |
140 } | |
141 | |
142 /****************************************************************************** | |
143 * GntButton API | |
144 *****************************************************************************/ | |
145 GType | |
146 gnt_button_get_gtype(void) { | |
147 static GType type = 0; | |
148 | |
149 if(type == 0) { | |
150 static const GTypeInfo info = { | |
151 sizeof(GntButtonClass), | |
152 NULL, /* base_init */ | |
153 NULL, /* base_finalize */ | |
154 (GClassInitFunc)gnt_button_class_init, | |
155 NULL, /* class_finalize */ | |
156 NULL, /* class_data */ | |
157 sizeof(GntButton), | |
158 0, /* n_preallocs */ | |
159 gnt_button_init, /* instance_init */ | |
160 NULL /* value_table */ | |
161 }; | |
162 | |
163 type = g_type_register_static(GNT_TYPE_WIDGET, | |
164 "GntButton", | |
165 &info, 0); | |
166 } | |
167 | |
168 return type; | |
169 } | |
170 | |
171 GntWidget *gnt_button_new(const char *text) | |
172 { | |
173 GntWidget *widget = g_object_new(GNT_TYPE_BUTTON, NULL); | |
174 GntButton *button = GNT_BUTTON(widget); | |
175 | |
176 button->priv->text = gnt_util_onscreen_fit_string(text, -1); | |
177 gnt_widget_set_take_focus(widget, TRUE); | |
178 | |
179 return widget; | |
180 } | |
181 |