annotate Plugins/Visualization/paranormal/pn/pnoption.c @ 1672:600efc52c645 trunk

[svn] - be careful about referencing a NULL widget (e.g. headless/serveronly mode crashes on streams, bug #562)
author nenolod
date Tue, 12 Sep 2006 23:11:07 -0700
parents 0c5fdcf3f947
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1507
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
1 /* Paranormal - A highly customizable audio visualization library
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
2 * Copyright (C) 2001 Jamie Gennis <jgennis@mindspring.com>
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
3 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
4 * This library is free software; you can redistribute it and/or
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
5 * modify it under the terms of the GNU Library General Public
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
7 * version 2 of the License, or (at your option) any later version.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
8 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
9 * This library is distributed in the hope that it will be useful,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
12 * Library General Public License for more details.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
13 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
14 * You should have received a copy of the GNU Library General Public
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
15 * License along with this library; if not, write to the Free
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
17 */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
18
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
19 #include <config.h>
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
20
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
21 #include <glib.h>
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
22 #include "pnoption.h"
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
23
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
24 static void pn_option_class_init (PnOptionClass *class);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
25 static void pn_option_init (PnOption *option,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
26 PnOptionClass *class);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
27
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
28 /* GObject signals */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
29 static void pn_option_finalize (GObject *gobject);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
30
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
31 static PnUserObjectClass *parent_class = NULL;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
32
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
33 GType
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
34 pn_option_get_type (void)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
35 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
36 static GType option_type = 0;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
37
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
38 if (! option_type)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
39 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
40 static const GTypeInfo option_info =
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
41 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
42 sizeof (PnOptionClass),
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
43 NULL, /* base_init */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
44 NULL, /* base_finalize */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
45 (GClassInitFunc) pn_option_class_init,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
46 NULL, /* class_finalize */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
47 NULL, /* class_data */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
48 sizeof (PnOption),
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
49 0, /* n_preallocs */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
50 (GInstanceInitFunc) pn_option_init
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
51 };
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
52
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
53 /* FIXME: should this be dynamic? */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
54 option_type = g_type_register_static (PN_TYPE_USER_OBJECT,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
55 "PnOption",
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
56 &option_info,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
57 G_TYPE_FLAG_ABSTRACT);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
58 }
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
59 return option_type;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
60 }
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
61
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
62 static void
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
63 pn_option_class_init (PnOptionClass *class)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
64 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
65 GObjectClass *gobject_class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
66 PnObjectClass *object_class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
67 PnUserObjectClass *user_object_class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
68
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
69
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
70 parent_class = g_type_class_peek_parent (class);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
71
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
72 gobject_class = (GObjectClass *) class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
73 object_class = (PnObjectClass *) class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
74 user_object_class = (PnUserObjectClass *) class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
75
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
76 /* GObject signals */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
77 gobject_class->finalize = pn_option_finalize;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
78 }
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
79
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
80 static void
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
81 pn_option_init (PnOption *option, PnOptionClass *class)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
82 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
83 }
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
84
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
85 static void
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
86 pn_option_finalize (GObject *gobject)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
87 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
88 PnOption *option;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
89
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
90 option = (PnOption *) gobject;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
91
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
92 if (G_OBJECT_CLASS (parent_class)->finalize)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
93 (* G_OBJECT_CLASS (parent_class)->finalize) (gobject);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
94 }
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
95
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
96 PnOptionWidget*
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
97 pn_option_new_widget (PnOption *option)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
98 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
99 PnOptionClass *class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
100
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
101 g_return_val_if_fail (option != NULL, NULL);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
102 g_return_val_if_fail (PN_IS_OPTION (option), NULL);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
103
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
104 class = PN_OPTION_GET_CLASS (option);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
105
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
106 #ifndef PN_NO_GTK
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
107 if (class->widget_type)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
108 return PN_OPTION_WIDGET (g_object_new (class->widget_type, NULL));
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
109 #endif /* PN_NO_GTK */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
110
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
111 return NULL;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
112 }