Mercurial > pidgin
annotate finch/libgnt/gntcheckbox.c @ 20039:1846fd2da2b4
Fix proxy settings to be loaded correctly when libpurple is initialized. This was broken because it relied on the prefs being loaded after proxy initialization so that the pref callbacks would be triggered and I changed the prefs loading to happen right at the beginning to fix other issues. Fixes #3092.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 14 Sep 2007 17:55:05 +0000 |
parents | 44b4e8bd759b |
children | 9187d331aebe |
rev | line source |
---|---|
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
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:
15817
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:
15817
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
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:
15817
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:
15817
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:
15817
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
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:
15817
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
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:
15817
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18873
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
22 |
15817 | 23 #include "gntcheckbox.h" |
24 | |
25 enum | |
26 { | |
27 SIG_TOGGLED = 1, | |
28 SIGS, | |
29 }; | |
30 | |
31 static GntButtonClass *parent_class = NULL; | |
32 static guint signals[SIGS] = { 0 }; | |
33 | |
34 static void | |
35 gnt_check_box_draw(GntWidget *widget) | |
36 { | |
37 GntCheckBox *cb = GNT_CHECK_BOX(widget); | |
38 GntColorType type; | |
39 char *text; | |
40 | |
41 if (gnt_widget_has_focus(widget)) | |
42 type = GNT_COLOR_HIGHLIGHT; | |
43 else | |
44 type = GNT_COLOR_NORMAL; | |
45 | |
46 wbkgdset(widget->window, '\0' | COLOR_PAIR(type)); | |
47 | |
48 text = g_strdup_printf("[%c]", cb->checked ? 'X' : ' '); | |
49 mvwaddstr(widget->window, 0, 0, text); | |
50 g_free(text); | |
51 | |
52 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); | |
53 mvwaddstr(widget->window, 0, 4, GNT_BUTTON(cb)->priv->text); | |
54 | |
55 GNTDEBUG; | |
56 } | |
57 | |
58 static void | |
59 toggle_selection(GntWidget *widget) | |
60 { | |
61 GNT_CHECK_BOX(widget)->checked = !GNT_CHECK_BOX(widget)->checked; | |
62 g_signal_emit(widget, signals[SIG_TOGGLED], 0); | |
63 gnt_widget_draw(widget); | |
64 } | |
65 | |
66 static gboolean | |
67 gnt_check_box_key_pressed(GntWidget *widget, const char *text) | |
68 { | |
69 if (text[0] == ' ' && text[1] == '\0') | |
70 { | |
71 toggle_selection(widget); | |
72 return TRUE; | |
73 } | |
74 | |
75 return FALSE; | |
76 } | |
77 | |
78 static gboolean | |
79 gnt_check_box_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) | |
80 { | |
81 if (event == GNT_LEFT_MOUSE_DOWN) { | |
82 toggle_selection(widget); | |
83 return TRUE; | |
84 } | |
85 return FALSE; | |
86 } | |
87 | |
88 static void | |
89 gnt_check_box_class_init(GntCheckBoxClass *klass) | |
90 { | |
91 GntWidgetClass *wclass = GNT_WIDGET_CLASS(klass); | |
92 | |
93 parent_class = GNT_BUTTON_CLASS(klass); | |
94 /*parent_class->destroy = gnt_check_box_destroy;*/ | |
95 wclass->draw = gnt_check_box_draw; | |
96 /*parent_class->map = gnt_check_box_map;*/ | |
97 /*parent_class->size_request = gnt_check_box_size_request;*/ | |
98 wclass->key_pressed = gnt_check_box_key_pressed; | |
99 wclass->clicked = gnt_check_box_clicked; | |
100 | |
101 signals[SIG_TOGGLED] = | |
102 g_signal_new("toggled", | |
103 G_TYPE_FROM_CLASS(klass), | |
104 G_SIGNAL_RUN_LAST, | |
105 G_STRUCT_OFFSET(GntCheckBoxClass, toggled), | |
106 NULL, NULL, | |
107 g_cclosure_marshal_VOID__VOID, | |
108 G_TYPE_NONE, 0); | |
109 GNTDEBUG; | |
110 } | |
111 | |
112 static void | |
113 gnt_check_box_init(GTypeInstance *instance, gpointer class) | |
114 { | |
115 GntWidget *widget = GNT_WIDGET(instance); | |
116 widget->priv.minh = 1; | |
117 widget->priv.minw = 4; | |
118 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); | |
119 GNTDEBUG; | |
120 } | |
121 | |
122 /****************************************************************************** | |
123 * GntCheckBox API | |
124 *****************************************************************************/ | |
125 GType | |
126 gnt_check_box_get_gtype(void) | |
127 { | |
128 static GType type = 0; | |
129 | |
130 if(type == 0) | |
131 { | |
132 static const GTypeInfo info = { | |
133 sizeof(GntCheckBoxClass), | |
134 NULL, /* base_init */ | |
135 NULL, /* base_finalize */ | |
136 (GClassInitFunc)gnt_check_box_class_init, | |
137 NULL, /* class_finalize */ | |
138 NULL, /* class_data */ | |
139 sizeof(GntCheckBox), | |
140 0, /* n_preallocs */ | |
141 gnt_check_box_init, /* instance_init */ | |
142 NULL /* value_table */ | |
143 }; | |
144 | |
145 type = g_type_register_static(GNT_TYPE_BUTTON, | |
146 "GntCheckBox", | |
147 &info, 0); | |
148 } | |
149 | |
150 return type; | |
151 } | |
152 | |
153 GntWidget *gnt_check_box_new(const char *text) | |
154 { | |
155 GntWidget *widget = g_object_new(GNT_TYPE_CHECK_BOX, NULL); | |
156 | |
157 GNT_BUTTON(widget)->priv->text = g_strdup(text); | |
158 gnt_widget_set_take_focus(widget, TRUE); | |
159 | |
160 return widget; | |
161 } | |
162 | |
163 void gnt_check_box_set_checked(GntCheckBox *box, gboolean set) | |
164 { | |
165 if (set != box->checked) | |
166 { | |
167 box->checked = set; | |
168 g_signal_emit(box, signals[SIG_TOGGLED], 0); | |
169 } | |
170 } | |
171 | |
172 gboolean gnt_check_box_get_checked(GntCheckBox *box) | |
173 { | |
174 return box->checked; | |
175 } | |
176 | |
177 | |
178 |