Mercurial > pidgin
annotate finch/libgnt/gntbutton.c @ 21696:fded60f269bc
Don't advertise our presence in avahi on IPv6 or listen for sevices since we don't support receiving connections from or connecting to IPv6 buddies. If someone needs to do that, they can submit a patch. Fixes #4188.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 30 Nov 2007 21:29:18 +0000 |
parents | ebb46dea479a |
children | 0ba0f2804299 |
rev | line source |
---|---|
17928
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 |
19681
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 |
17928
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:
17928
diff
changeset
|
23 #include <stdlib.h> |
15817 | 24 #include <string.h> |
25 | |
26 #include "gntbutton.h" | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
27 #include "gntstyle.h" |
15817 | 28 #include "gntutils.h" |
29 | |
30 enum | |
31 { | |
32 SIGS = 1, | |
33 }; | |
34 | |
35 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:
17928
diff
changeset
|
36 static gboolean small_button = FALSE; |
15817 | 37 |
38 static void | |
39 gnt_button_draw(GntWidget *widget) | |
40 { | |
41 GntButton *button = GNT_BUTTON(widget); | |
42 GntColorType type; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
43 gboolean focus; |
15817 | 44 |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
45 if ((focus = gnt_widget_has_focus(widget))) |
15817 | 46 type = GNT_COLOR_HIGHLIGHT; |
47 else | |
48 type = GNT_COLOR_NORMAL; | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
49 |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
50 wbkgdset(widget->window, '\0' | gnt_color_pair(type)); |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
51 mvwaddstr(widget->window, (small_button) ? 0 : 1, 2, button->priv->text); |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
52 if (small_button) { |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
53 type = GNT_COLOR_HIGHLIGHT; |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
54 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:
17928
diff
changeset
|
55 } |
15817 | 56 |
57 GNTDEBUG; | |
58 } | |
59 | |
60 static void | |
61 gnt_button_size_request(GntWidget *widget) | |
62 { | |
63 GntButton *button = GNT_BUTTON(widget); | |
64 gnt_util_get_text_bound(button->priv->text, | |
65 &widget->priv.width, &widget->priv.height); | |
66 widget->priv.width += 4; | |
67 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) | |
68 widget->priv.height += 2; | |
69 } | |
70 | |
71 static void | |
72 gnt_button_map(GntWidget *widget) | |
73 { | |
74 if (widget->priv.width == 0 || widget->priv.height == 0) | |
75 gnt_widget_size_request(widget); | |
76 GNTDEBUG; | |
77 } | |
78 | |
79 static gboolean | |
80 gnt_button_key_pressed(GntWidget *widget, const char *key) | |
81 { | |
82 if (strcmp(key, GNT_KEY_ENTER) == 0) | |
83 { | |
84 gnt_widget_activate(widget); | |
85 return TRUE; | |
86 } | |
87 return FALSE; | |
88 } | |
89 | |
90 static gboolean | |
91 gnt_button_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) | |
92 { | |
93 if (event == GNT_LEFT_MOUSE_DOWN) { | |
94 gnt_widget_activate(widget); | |
95 return TRUE; | |
96 } | |
97 return FALSE; | |
98 } | |
99 | |
100 static void | |
21278
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
101 gnt_button_destroy(GntWidget *widget) |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
102 { |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
103 GntButton *button = GNT_BUTTON(widget); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
104 g_free(button->priv->text); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
105 g_free(button->priv); |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
106 } |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
107 |
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
108 static void |
15817 | 109 gnt_button_class_init(GntWidgetClass *klass) |
110 { | |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
111 char *style; |
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
112 |
15817 | 113 parent_class = GNT_WIDGET_CLASS(klass); |
114 parent_class->draw = gnt_button_draw; | |
115 parent_class->map = gnt_button_map; | |
116 parent_class->size_request = gnt_button_size_request; | |
117 parent_class->key_pressed = gnt_button_key_pressed; | |
118 parent_class->clicked = gnt_button_clicked; | |
21278
ebb46dea479a
Buttons were leaking all this time!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
119 parent_class->destroy = gnt_button_destroy; |
15817 | 120 |
18506
9f029b7208f1
Allow one-line high buttons. Specify 'small-button = true' under 'general',
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
121 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:
17928
diff
changeset
|
122 small_button = gnt_style_parse_bool(style); |
19295 | 123 g_free(style); |
15817 | 124 GNTDEBUG; |
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:
17928
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:
17928
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:
17928
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:
19681
diff
changeset
|
138 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_GROW_X | GNT_WIDGET_GROW_Y); |
15817 | 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 |