annotate src/gtkexpander.c @ 11735:8d7c99f20e4c

[gaim-migrate @ 14026] Switch from using our old GaimGtkDisclosure widget to using the official GtkExpander widget. It works better and should make us look more uniform with other gtk apps. To maintain compatability with gtk < 2.4, I grabbed the gtkexpander.c and gtkexpander.h files from gtk+ CVS. I haven't tested compiling on a computer with gtk < 2.4 yet, so it's possible we'll need to get more stuff from gtk+ CVS. For future reference, gtkexpander.h was not modified, and gtkexpander.c was only modified to check if version is > 2.4 then do nothing. I also changed the #includes to use <> instead of "" committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 23 Oct 2005 03:24:53 +0000
parents
children 0b4923aee31d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11735
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /* GTK - The GIMP Toolkit
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 * Copyright (C) 2003 Sun Microsystems, Inc.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * modify it under the terms of the GNU Library General Public
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13 * Library General Public License for more details.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
14 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 * You should have received a copy of the GNU Library General Public
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
16 * License along with this library; if not, write to the
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
18 * Boston, MA 02111-1307, USA.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
19 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 * Authors:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 * Mark McLoughlin <mark@skynet.ie>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 /*
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25 #include <config.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26 */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28 #include <gtk/gtkversion.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29 #if !GTK_CHECK_VERSION(2,4,0)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30 #include "gtkexpander.h"
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
31
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 #include <gtk/gtklabel.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
33 #include <gtk/gtkcontainer.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
34 #include <gtk/gtkmarshalers.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
35 #include <gtk/gtkmain.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
36 #include <gtk/gtkintl.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
37 #include <gtk/gtkprivate.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
38 #include <gdk/gdkkeysyms.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
39 #include <gtk/gtkalias.h>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
40
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
41 #define GTK_EXPANDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_EXPANDER, GtkExpanderPrivate))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
42
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
43 #define DEFAULT_EXPANDER_SIZE 10
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
44 #define DEFAULT_EXPANDER_SPACING 2
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
45
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
46 enum
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
47 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
48 PROP_0,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
49 PROP_EXPANDED,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
50 PROP_LABEL,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
51 PROP_USE_UNDERLINE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
52 PROP_USE_MARKUP,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
53 PROP_SPACING,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
54 PROP_LABEL_WIDGET
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
55 };
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
56
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
57 struct _GtkExpanderPrivate
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
58 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
59 GtkWidget *label_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
60 GdkWindow *event_window;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61 gint spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
62
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
63 GtkExpanderStyle expander_style;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 guint animation_timeout;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
65
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66 guint expanded : 1;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
67 guint use_underline : 1;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
68 guint use_markup : 1;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69 guint button_down : 1;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
70 guint prelight : 1;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 };
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 static void gtk_expander_class_init (GtkExpanderClass *klass);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 static void gtk_expander_init (GtkExpander *expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
75
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 static void gtk_expander_set_property (GObject *object,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
77 guint prop_id,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
78 const GValue *value,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 GParamSpec *pspec);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 static void gtk_expander_get_property (GObject *object,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81 guint prop_id,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 GValue *value,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
83 GParamSpec *pspec);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85 static void gtk_expander_destroy (GtkObject *object);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 static void gtk_expander_realize (GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
88 static void gtk_expander_unrealize (GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
89 static void gtk_expander_size_request (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
90 GtkRequisition *requisition);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
91 static void gtk_expander_size_allocate (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
92 GtkAllocation *allocation);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93 static void gtk_expander_map (GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
94 static void gtk_expander_unmap (GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 static gboolean gtk_expander_expose (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96 GdkEventExpose *event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
97 static gboolean gtk_expander_button_press (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 GdkEventButton *event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99 static gboolean gtk_expander_button_release (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100 GdkEventButton *event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101 static gboolean gtk_expander_enter_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 GdkEventCrossing *event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 static gboolean gtk_expander_leave_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
104 GdkEventCrossing *event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
105 static gboolean gtk_expander_focus (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
106 GtkDirectionType direction);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
107 static void gtk_expander_grab_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
108 gboolean was_grabbed);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
109 static void gtk_expander_state_changed (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
110 GtkStateType previous_state);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
111
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
112 static void gtk_expander_add (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
113 GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
114 static void gtk_expander_remove (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
115 GtkWidget *widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
116 static void gtk_expander_forall (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
117 gboolean include_internals,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
118 GtkCallback callback,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
119 gpointer callback_data);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
120
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
121 static void gtk_expander_activate (GtkExpander *expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
122
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
123 static void get_expander_bounds (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
124 GdkRectangle *rect);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
125
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
126 static GtkBinClass *parent_class = NULL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
127
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
128 GType
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
129 gtk_expander_get_type (void)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
130 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
131 static GType expander_type = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
132
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
133 if (!expander_type)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
134 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
135 static const GTypeInfo expander_info =
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
136 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
137 sizeof (GtkExpanderClass),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
138 NULL, /* base_init */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
139 NULL, /* base_finalize */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
140 (GClassInitFunc) gtk_expander_class_init,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
141 NULL, /* class_finalize */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
142 NULL, /* class_data */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
143 sizeof (GtkExpander),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
144 0, /* n_preallocs */
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
145 (GInstanceInitFunc) gtk_expander_init,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
146 };
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
147
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
148 expander_type = g_type_register_static (GTK_TYPE_BIN,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
149 "GtkExpander",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
150 &expander_info, 0);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
151 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
152
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
153 return expander_type;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
154 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
155
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
156 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
157 gtk_expander_class_init (GtkExpanderClass *klass)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
158 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
159 GObjectClass *gobject_class;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
160 GtkObjectClass *object_class;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
161 GtkWidgetClass *widget_class;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
162 GtkContainerClass *container_class;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
163
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
164 parent_class = g_type_class_peek_parent (klass);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
165
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
166 gobject_class = (GObjectClass *) klass;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
167 object_class = (GtkObjectClass *) klass;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
168 widget_class = (GtkWidgetClass *) klass;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
169 container_class = (GtkContainerClass *) klass;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
170
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
171 gobject_class->set_property = gtk_expander_set_property;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
172 gobject_class->get_property = gtk_expander_get_property;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
173
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
174 object_class->destroy = gtk_expander_destroy;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
175
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
176 widget_class->realize = gtk_expander_realize;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
177 widget_class->unrealize = gtk_expander_unrealize;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
178 widget_class->size_request = gtk_expander_size_request;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
179 widget_class->size_allocate = gtk_expander_size_allocate;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
180 widget_class->map = gtk_expander_map;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
181 widget_class->unmap = gtk_expander_unmap;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
182 widget_class->expose_event = gtk_expander_expose;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
183 widget_class->button_press_event = gtk_expander_button_press;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
184 widget_class->button_release_event = gtk_expander_button_release;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
185 widget_class->enter_notify_event = gtk_expander_enter_notify;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
186 widget_class->leave_notify_event = gtk_expander_leave_notify;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
187 widget_class->focus = gtk_expander_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
188 widget_class->grab_notify = gtk_expander_grab_notify;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
189 widget_class->state_changed = gtk_expander_state_changed;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
190
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
191 container_class->add = gtk_expander_add;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
192 container_class->remove = gtk_expander_remove;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
193 container_class->forall = gtk_expander_forall;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
194
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
195 klass->activate = gtk_expander_activate;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
196
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
197 g_type_class_add_private (klass, sizeof (GtkExpanderPrivate));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
198
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
199 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
200 PROP_EXPANDED,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
201 g_param_spec_boolean ("expanded",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
202 P_("Expanded"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
203 P_("Whether the expander has been opened to reveal the child widget"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
204 FALSE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
205 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
206
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
207 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
208 PROP_LABEL,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
209 g_param_spec_string ("label",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
210 P_("Label"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
211 P_("Text of the expander's label"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
212 NULL,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
213 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
214
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
215 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
216 PROP_USE_UNDERLINE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
217 g_param_spec_boolean ("use_underline",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
218 P_("Use underline"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
219 P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
220 FALSE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
221 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
222
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
223 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
224 PROP_USE_MARKUP,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
225 g_param_spec_boolean ("use_markup",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
226 P_("Use markup"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
227 P_("The text of the label includes XML markup. See pango_parse_markup()"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
228 FALSE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
229 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
230
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
231 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
232 PROP_SPACING,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
233 g_param_spec_int ("spacing",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
234 P_("Spacing"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
235 P_("Space to put between the label and the child"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
236 0,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
237 G_MAXINT,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
238 0,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
239 G_PARAM_READWRITE));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
240
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
241 g_object_class_install_property (gobject_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
242 PROP_LABEL_WIDGET,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
243 g_param_spec_object ("label_widget",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
244 P_("Label widget"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
245 P_("A widget to display in place of the usual expander label"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
246 GTK_TYPE_WIDGET,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
247 G_PARAM_READWRITE));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
248
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
249 gtk_widget_class_install_style_property (widget_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
250 g_param_spec_int ("expander-size",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
251 P_("Expander Size"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
252 P_("Size of the expander arrow"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
253 0,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
254 G_MAXINT,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
255 DEFAULT_EXPANDER_SIZE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
256 G_PARAM_READABLE));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
257
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
258 gtk_widget_class_install_style_property (widget_class,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
259 g_param_spec_int ("expander-spacing",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
260 P_("Indicator Spacing"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
261 P_("Spacing around expander arrow"),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
262 0,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
263 G_MAXINT,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
264 DEFAULT_EXPANDER_SPACING,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
265 G_PARAM_READABLE));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
266
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
267 widget_class->activate_signal =
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
268 g_signal_new ("activate",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
269 G_TYPE_FROM_CLASS (gobject_class),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
270 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
271 G_STRUCT_OFFSET (GtkExpanderClass, activate),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
272 NULL, NULL,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
273 _gtk_marshal_VOID__VOID,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
274 G_TYPE_NONE, 0);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
275 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
276
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
277 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
278 gtk_expander_init (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
279 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
280 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
281
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
282 expander->priv = priv = GTK_EXPANDER_GET_PRIVATE (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
283
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
284 GTK_WIDGET_SET_FLAGS (expander, GTK_CAN_FOCUS);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
285 GTK_WIDGET_SET_FLAGS (expander, GTK_NO_WINDOW);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
286
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
287 priv->label_widget = NULL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
288 priv->event_window = NULL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
289 priv->spacing = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
290
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
291 priv->expander_style = GTK_EXPANDER_COLLAPSED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
292 priv->animation_timeout = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
293
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
294 priv->expanded = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
295 priv->use_underline = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
296 priv->use_markup = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
297 priv->button_down = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
298 priv->prelight = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
299 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
300
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
301 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
302 gtk_expander_set_property (GObject *object,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
303 guint prop_id,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
304 const GValue *value,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
305 GParamSpec *pspec)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
306 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
307 GtkExpander *expander = GTK_EXPANDER (object);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
308
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
309 switch (prop_id)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
310 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
311 case PROP_EXPANDED:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
312 gtk_expander_set_expanded (expander, g_value_get_boolean (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
313 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
314 case PROP_LABEL:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
315 gtk_expander_set_label (expander, g_value_get_string (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
316 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
317 case PROP_USE_UNDERLINE:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
318 gtk_expander_set_use_underline (expander, g_value_get_boolean (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
319 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
320 case PROP_USE_MARKUP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
321 gtk_expander_set_use_markup (expander, g_value_get_boolean (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
322 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
323 case PROP_SPACING:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
324 gtk_expander_set_spacing (expander, g_value_get_int (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
325 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
326 case PROP_LABEL_WIDGET:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
327 gtk_expander_set_label_widget (expander, g_value_get_object (value));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
328 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
329 default:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
330 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
331 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
332 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
333 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
334
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
335 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
336 gtk_expander_get_property (GObject *object,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
337 guint prop_id,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
338 GValue *value,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
339 GParamSpec *pspec)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
340 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
341 GtkExpander *expander = GTK_EXPANDER (object);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
342 GtkExpanderPrivate *priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
343
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
344 switch (prop_id)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
345 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
346 case PROP_EXPANDED:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
347 g_value_set_boolean (value, priv->expanded);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
348 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
349 case PROP_LABEL:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
350 g_value_set_string (value, gtk_expander_get_label (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
351 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
352 case PROP_USE_UNDERLINE:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
353 g_value_set_boolean (value, priv->use_underline);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
354 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
355 case PROP_USE_MARKUP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
356 g_value_set_boolean (value, priv->use_markup);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
357 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
358 case PROP_SPACING:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
359 g_value_set_int (value, priv->spacing);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
360 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
361 case PROP_LABEL_WIDGET:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
362 g_value_set_object (value,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
363 priv->label_widget ?
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
364 G_OBJECT (priv->label_widget) : NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
365 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
366 default:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
367 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
368 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
369 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
370 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
371
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
372 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
373 gtk_expander_destroy (GtkObject *object)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
374 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
375 GtkExpanderPrivate *priv = GTK_EXPANDER (object)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
376
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
377 if (priv->animation_timeout)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
378 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
379 g_source_remove (priv->animation_timeout);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
380 priv->animation_timeout = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
381 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
382
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
383 GTK_OBJECT_CLASS (parent_class)->destroy (object);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
384 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
385
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
386 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
387 gtk_expander_realize (GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
388 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
389 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
390 GdkWindowAttr attributes;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
391 gint attributes_mask;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
392 gint border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
393 GdkRectangle expander_rect;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
394
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
395 priv = GTK_EXPANDER (widget)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
396 GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
397
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
398 border_width = GTK_CONTAINER (widget)->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
399
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
400 get_expander_bounds (GTK_EXPANDER (widget), &expander_rect);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
401
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
402 attributes.window_type = GDK_WINDOW_CHILD;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
403 attributes.x = widget->allocation.x + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
404 attributes.y = expander_rect.y;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
405 attributes.width = MAX (widget->allocation.width - 2 * border_width, 1);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
406 attributes.height = expander_rect.width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
407 attributes.wclass = GDK_INPUT_ONLY;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
408 attributes.event_mask = gtk_widget_get_events (widget) |
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
409 GDK_BUTTON_PRESS_MASK |
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
410 GDK_BUTTON_RELEASE_MASK |
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
411 GDK_ENTER_NOTIFY_MASK |
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
412 GDK_LEAVE_NOTIFY_MASK;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
413
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
414 attributes_mask = GDK_WA_X | GDK_WA_Y;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
415
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
416 widget->window = gtk_widget_get_parent_window (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
417 g_object_ref (widget->window);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
418
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
419 priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
420 &attributes, attributes_mask);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
421 gdk_window_set_user_data (priv->event_window, widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
422
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
423 widget->style = gtk_style_attach (widget->style, widget->window);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
424 gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
425 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
426
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
427 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
428 gtk_expander_unrealize (GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
429 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
430 GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
431
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
432 if (priv->event_window)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
433 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
434 gdk_window_set_user_data (priv->event_window, NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
435 gdk_window_destroy (priv->event_window);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
436 priv->event_window = NULL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
437 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
438
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
439 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
440 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
441
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
442 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
443 gtk_expander_size_request (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
444 GtkRequisition *requisition)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
445 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
446 GtkExpander *expander;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
447 GtkBin *bin;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
448 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
449 gint border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
450 gint expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
451 gint expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
452 gboolean interior_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
453 gint focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
454 gint focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
455
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
456 bin = GTK_BIN (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
457 expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
458 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
459
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
460 border_width = GTK_CONTAINER (widget)->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
461
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
462 gtk_widget_style_get (widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
463 "interior-focus", &interior_focus,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
464 "focus-line-width", &focus_width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
465 "focus-padding", &focus_pad,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
466 "expander-size", &expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
467 "expander-spacing", &expander_spacing,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
468 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
469
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
470 requisition->width = expander_size + 2 * expander_spacing +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
471 2 * focus_width + 2 * focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
472 requisition->height = interior_focus ? (2 * focus_width + 2 * focus_pad) : 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
473
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
474 if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
475 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
476 GtkRequisition label_requisition;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
477
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
478 gtk_widget_size_request (priv->label_widget, &label_requisition);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
479
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
480 requisition->width += label_requisition.width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
481 requisition->height += label_requisition.height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
482 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
483
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
484 requisition->height = MAX (expander_size + 2 * expander_spacing, requisition->height);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
485
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
486 if (!interior_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
487 requisition->height += 2 * focus_width + 2 * focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
488
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
489 if (bin->child && GTK_WIDGET_CHILD_VISIBLE (bin->child))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
490 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
491 GtkRequisition child_requisition;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
492
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
493 gtk_widget_size_request (bin->child, &child_requisition);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
494
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
495 requisition->width = MAX (requisition->width, child_requisition.width);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
496 requisition->height += child_requisition.height + priv->spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
497 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
498
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
499 requisition->width += 2 * border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
500 requisition->height += 2 * border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
501 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
502
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
503 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
504 get_expander_bounds (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
505 GdkRectangle *rect)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
506 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
507 GtkWidget *widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
508 GtkBin *bin;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
509 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
510 gint border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
511 gint expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
512 gint expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
513 gboolean interior_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
514 gint focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
515 gint focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
516 gboolean ltr;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
517
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
518 widget = GTK_WIDGET (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
519 bin = GTK_BIN (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
520 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
521
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
522 border_width = GTK_CONTAINER (expander)->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
523
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
524 gtk_widget_style_get (widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
525 "interior-focus", &interior_focus,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
526 "focus-line-width", &focus_width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
527 "focus-padding", &focus_pad,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
528 "expander-size", &expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
529 "expander-spacing", &expander_spacing,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
530 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
531
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
532 ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
533
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
534 rect->x = widget->allocation.x + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
535 rect->y = widget->allocation.y + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
536
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
537 if (ltr)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
538 rect->x += expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
539 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
540 rect->x += widget->allocation.width - 2 * border_width -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
541 expander_spacing - expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
542
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
543 if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
544 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
545 GtkAllocation label_allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
546
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
547 label_allocation = priv->label_widget->allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
548
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
549 if (expander_size < label_allocation.height)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
550 rect->y += focus_width + focus_pad + (label_allocation.height - expander_size) / 2;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
551 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
552 rect->y += expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
553 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
554 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
555 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
556 rect->y += expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
557 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
558
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
559 if (!interior_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
560 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
561 if (ltr)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
562 rect->x += focus_width + focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
563 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
564 rect->x -= focus_width + focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
565 rect->y += focus_width + focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
566 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
567
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
568 rect->width = rect->height = expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
569 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
570
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
571 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
572 gtk_expander_size_allocate (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
573 GtkAllocation *allocation)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
574 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
575 GtkExpander *expander;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
576 GtkBin *bin;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
577 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
578 GtkRequisition child_requisition;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
579 gboolean child_visible = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
580 gint border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
581 gint expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
582 gint expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
583 gboolean interior_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
584 gint focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
585 gint focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
586 gint label_height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
587
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
588 expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
589 bin = GTK_BIN (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
590 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
591
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
592 border_width = GTK_CONTAINER (widget)->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
593
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
594 gtk_widget_style_get (widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
595 "interior-focus", &interior_focus,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
596 "focus-line-width", &focus_width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
597 "focus-padding", &focus_pad,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
598 "expander-size", &expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
599 "expander-spacing", &expander_spacing,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
600 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
601
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
602 child_requisition.width = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
603 child_requisition.height = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
604 if (bin->child && GTK_WIDGET_CHILD_VISIBLE (bin->child))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
605 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
606 child_visible = TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
607 gtk_widget_get_child_requisition (bin->child, &child_requisition);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
608 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
609
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
610 widget->allocation = *allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
611
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
612 if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
613 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
614 GtkAllocation label_allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
615 GtkRequisition label_requisition;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
616 gboolean ltr;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
617
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
618 gtk_widget_get_child_requisition (priv->label_widget, &label_requisition);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
619
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
620 ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
621
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
622 if (ltr)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
623 label_allocation.x = (widget->allocation.x +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
624 border_width + focus_width + focus_pad +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
625 expander_size + 2 * expander_spacing);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
626 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
627 label_allocation.x = (widget->allocation.x + widget->allocation.width -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
628 (label_requisition.width +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
629 border_width + focus_width + focus_pad +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
630 expander_size + 2 * expander_spacing));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
631
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
632 label_allocation.y = widget->allocation.y + border_width + focus_width + focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
633
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
634 label_allocation.width = MIN (label_requisition.width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
635 allocation->width - 2 * border_width -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
636 expander_size - 2 * expander_spacing -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
637 2 * focus_width - 2 * focus_pad);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
638 label_allocation.width = MAX (label_allocation.width, 1);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
639
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
640 label_allocation.height = MIN (label_requisition.height,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
641 allocation->height - 2 * border_width -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
642 2 * focus_width - 2 * focus_pad -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
643 (child_visible ? priv->spacing : 0));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
644 label_allocation.height = MAX (label_allocation.height, 1);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
645
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
646 gtk_widget_size_allocate (priv->label_widget, &label_allocation);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
647
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
648 label_height = label_allocation.height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
649 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
650 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
651 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
652 label_height = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
653 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
654
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
655 if (GTK_WIDGET_REALIZED (widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
656 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
657 GdkRectangle rect;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
658
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
659 get_expander_bounds (expander, &rect);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
660
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
661 gdk_window_move_resize (priv->event_window,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
662 allocation->x + border_width, rect.y,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
663 MAX (allocation->width - 2 * border_width, 1), rect.width);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
664 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
665
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
666 if (child_visible)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
667 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
668 GtkAllocation child_allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
669 gint top_height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
670
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
671 top_height = MAX (2 * expander_spacing + expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
672 label_height +
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
673 (interior_focus ? 2 * focus_width + 2 * focus_pad : 0));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
674
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
675 child_allocation.x = widget->allocation.x + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
676 child_allocation.y = widget->allocation.y + border_width + top_height + priv->spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
677
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
678 if (!interior_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
679 child_allocation.y += 2 * focus_width + 2 * focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
680
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
681 child_allocation.width = MAX (allocation->width - 2 * border_width, 1);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
682
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
683 child_allocation.height = allocation->height - top_height -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
684 2 * border_width - priv->spacing -
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
685 (!interior_focus ? 2 * focus_width + 2 * focus_pad : 0);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
686 child_allocation.height = MAX (child_allocation.height, 1);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
687
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
688 gtk_widget_size_allocate (bin->child, &child_allocation);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
689 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
690 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
691
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
692 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
693 gtk_expander_map (GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
694 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
695 GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
696
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
697 if (priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
698 gtk_widget_map (priv->label_widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
699
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
700 GTK_WIDGET_CLASS (parent_class)->map (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
701
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
702 if (priv->event_window)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
703 gdk_window_show (priv->event_window);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
704 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
705
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
706 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
707 gtk_expander_unmap (GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
708 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
709 GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
710
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
711 if (priv->event_window)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
712 gdk_window_hide (priv->event_window);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
713
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
714 GTK_WIDGET_CLASS (parent_class)->unmap (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
715
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
716 if (priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
717 gtk_widget_unmap (priv->label_widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
718 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
719
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
720 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
721 gtk_expander_paint_prelight (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
722 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
723 GtkWidget *widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
724 GtkContainer *container;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
725 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
726 GdkRectangle area;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
727 gboolean interior_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
728 int focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
729 int focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
730 int expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
731 int expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
732
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
733 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
734 widget = GTK_WIDGET (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
735 container = GTK_CONTAINER (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
736
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
737 gtk_widget_style_get (widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
738 "interior-focus", &interior_focus,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
739 "focus-line-width", &focus_width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
740 "focus-padding", &focus_pad,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
741 "expander-size", &expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
742 "expander-spacing", &expander_spacing,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
743 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
744
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
745 area.x = widget->allocation.x + container->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
746 area.y = widget->allocation.y + container->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
747 area.width = widget->allocation.width - (2 * container->border_width);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
748
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
749 if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
750 area.height = priv->label_widget->allocation.height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
751 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
752 area.height = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
753
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
754 area.height += interior_focus ? (focus_width + focus_pad) * 2 : 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
755 area.height = MAX (area.height, expander_size + 2 * expander_spacing);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
756 area.height += !interior_focus ? (focus_width + focus_pad) * 2 : 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
757
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
758 gtk_paint_flat_box (widget->style, widget->window,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
759 GTK_STATE_PRELIGHT,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
760 GTK_SHADOW_ETCHED_OUT,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
761 &area, widget, "expander",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
762 area.x, area.y,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
763 area.width, area.height);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
764 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
765
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
766 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
767 gtk_expander_paint (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
768 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
769 GtkWidget *widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
770 GdkRectangle clip;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
771 GtkStateType state;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
772
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
773 widget = GTK_WIDGET (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
774
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
775 get_expander_bounds (expander, &clip);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
776
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
777 state = widget->state;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
778 if (expander->priv->prelight)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
779 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
780 state = GTK_STATE_PRELIGHT;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
781
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
782 gtk_expander_paint_prelight (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
783 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
784
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
785 gtk_paint_expander (widget->style,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
786 widget->window,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
787 state,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
788 &clip,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
789 widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
790 "expander",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
791 clip.x + clip.width / 2,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
792 clip.y + clip.height / 2,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
793 expander->priv->expander_style);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
794 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
795
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
796 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
797 gtk_expander_paint_focus (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
798 GdkRectangle *area)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
799 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
800 GtkWidget *widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
801 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
802 gint x, y, width, height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
803 gboolean interior_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
804 gint border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
805 gint focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
806 gint focus_pad;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
807 gint expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
808 gint expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
809 gboolean ltr;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
810
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
811 widget = GTK_WIDGET (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
812 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
813
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
814 border_width = GTK_CONTAINER (widget)->border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
815
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
816 gtk_widget_style_get (widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
817 "interior-focus", &interior_focus,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
818 "focus-line-width", &focus_width,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
819 "focus-padding", &focus_pad,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
820 "expander-size", &expander_size,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
821 "expander-spacing", &expander_spacing,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
822 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
823
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
824 ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
825
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
826 x = widget->allocation.x + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
827 y = widget->allocation.y + border_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
828
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
829 if (ltr && interior_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
830 x += expander_spacing * 2 + expander_size;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
831
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
832 width = height = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
833
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
834 if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
835 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
836 GtkAllocation label_allocation = priv->label_widget->allocation;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
837
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
838 width = label_allocation.width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
839 height = label_allocation.height;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
840 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
841
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
842 if (!interior_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
843 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
844 width += expander_size + 2 * expander_spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
845 height = MAX (height, expander_size + 2 * expander_spacing);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
846 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
847
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
848 width += 2 * focus_pad + 2 * focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
849 height += 2 * focus_pad + 2 * focus_width;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
850
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
851 gtk_paint_focus (widget->style, widget->window, GTK_WIDGET_STATE (widget),
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
852 area, widget, "expander",
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
853 x, y, width, height);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
854 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
855
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
856 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
857 gtk_expander_expose (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
858 GdkEventExpose *event)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
859 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
860 if (GTK_WIDGET_DRAWABLE (widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
861 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
862 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
863
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
864 gtk_expander_paint (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
865
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
866 if (GTK_WIDGET_HAS_FOCUS (expander))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
867 gtk_expander_paint_focus (expander, &event->area);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
868
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
869 GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
870 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
871
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
872 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
873 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
874
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
875 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
876 gtk_expander_button_press (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
877 GdkEventButton *event)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
878 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
879 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
880
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
881 if (event->button == 1 && event->window == expander->priv->event_window)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
882 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
883 expander->priv->button_down = TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
884 return TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
885 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
886
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
887 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
888 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
889
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
890 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
891 gtk_expander_button_release (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
892 GdkEventButton *event)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
893 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
894 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
895
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
896 if (event->button == 1 && expander->priv->button_down)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
897 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
898 gtk_widget_activate (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
899 expander->priv->button_down = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
900 return TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
901 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
902
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
903 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
904 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
905
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
906 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
907 gtk_expander_grab_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
908 gboolean was_grabbed)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
909 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
910 if (!was_grabbed)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
911 GTK_EXPANDER (widget)->priv->button_down = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
912 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
913
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
914 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
915 gtk_expander_state_changed (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
916 GtkStateType previous_state)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
917 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
918 if (!GTK_WIDGET_IS_SENSITIVE (widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
919 GTK_EXPANDER (widget)->priv->button_down = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
920 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
921
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
922 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
923 gtk_expander_redraw_expander (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
924 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
925 GtkWidget *widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
926
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
927 widget = GTK_WIDGET (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
928
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
929 if (GTK_WIDGET_REALIZED (widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
930 gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
931 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
932
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
933 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
934 gtk_expander_enter_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
935 GdkEventCrossing *event)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
936 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
937 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
938 GtkWidget *event_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
939
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
940 event_widget = gtk_get_event_widget ((GdkEvent *) event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
941
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
942 if (event_widget == widget &&
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
943 event->detail != GDK_NOTIFY_INFERIOR)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
944 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
945 expander->priv->prelight = TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
946
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
947 if (expander->priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
948 gtk_widget_set_state (expander->priv->label_widget, GTK_STATE_PRELIGHT);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
949
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
950 gtk_expander_redraw_expander (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
951 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
952
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
953 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
954 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
955
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
956 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
957 gtk_expander_leave_notify (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
958 GdkEventCrossing *event)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
959 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
960 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
961 GtkWidget *event_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
962
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
963 event_widget = gtk_get_event_widget ((GdkEvent *) event);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
964
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
965 if (event_widget == widget &&
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
966 event->detail != GDK_NOTIFY_INFERIOR)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
967 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
968 expander->priv->prelight = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
969
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
970 if (expander->priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
971 gtk_widget_set_state (expander->priv->label_widget, GTK_STATE_NORMAL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
972
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
973 gtk_expander_redraw_expander (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
974 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
975
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
976 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
977 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
978
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
979 typedef enum
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
980 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
981 FOCUS_NONE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
982 FOCUS_WIDGET,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
983 FOCUS_LABEL,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
984 FOCUS_CHILD
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
985 } FocusSite;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
986
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
987 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
988 focus_current_site (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
989 GtkDirectionType direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
990 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
991 GtkWidget *current_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
992
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
993 current_focus = GTK_CONTAINER (expander)->focus_child;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
994
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
995 if (!current_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
996 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
997
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
998 return gtk_widget_child_focus (current_focus, direction);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
999 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1000
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1001 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1002 focus_in_site (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1003 FocusSite site,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1004 GtkDirectionType direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1005 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1006 switch (site)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1007 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1008 case FOCUS_WIDGET:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1009 gtk_widget_grab_focus (GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1010 return TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1011 case FOCUS_LABEL:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1012 if (expander->priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1013 return gtk_widget_child_focus (expander->priv->label_widget, direction);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1014 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1015 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1016 case FOCUS_CHILD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1017 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1018 GtkWidget *child = gtk_bin_get_child (GTK_BIN (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1019
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1020 if (child && GTK_WIDGET_CHILD_VISIBLE (child))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1021 return gtk_widget_child_focus (child, direction);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1022 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1023 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1024 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1025 case FOCUS_NONE:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1026 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1027 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1028
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1029 g_assert_not_reached ();
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1030 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1031 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1032
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1033 static FocusSite
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1034 get_next_site (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1035 FocusSite site,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1036 GtkDirectionType direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1037 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1038 gboolean ltr;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1039
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1040 ltr = gtk_widget_get_direction (GTK_WIDGET (expander)) != GTK_TEXT_DIR_RTL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1041
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1042 switch (site)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1043 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1044 case FOCUS_NONE:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1045 switch (direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1046 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1047 case GTK_DIR_TAB_BACKWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1048 case GTK_DIR_LEFT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1049 case GTK_DIR_UP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1050 return FOCUS_CHILD;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1051 case GTK_DIR_TAB_FORWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1052 case GTK_DIR_DOWN:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1053 case GTK_DIR_RIGHT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1054 return FOCUS_WIDGET;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1055 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1056 case FOCUS_WIDGET:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1057 switch (direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1058 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1059 case GTK_DIR_TAB_BACKWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1060 case GTK_DIR_UP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1061 return FOCUS_NONE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1062 case GTK_DIR_LEFT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1063 return ltr ? FOCUS_NONE : FOCUS_LABEL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1064 case GTK_DIR_TAB_FORWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1065 case GTK_DIR_DOWN:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1066 return FOCUS_LABEL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1067 case GTK_DIR_RIGHT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1068 return ltr ? FOCUS_LABEL : FOCUS_NONE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1069 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1070 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1071 case FOCUS_LABEL:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1072 switch (direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1073 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1074 case GTK_DIR_TAB_BACKWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1075 case GTK_DIR_UP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1076 return FOCUS_WIDGET;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1077 case GTK_DIR_LEFT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1078 return ltr ? FOCUS_WIDGET : FOCUS_CHILD;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1079 case GTK_DIR_TAB_FORWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1080 case GTK_DIR_DOWN:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1081 return FOCUS_CHILD;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1082 case GTK_DIR_RIGHT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1083 return ltr ? FOCUS_CHILD : FOCUS_WIDGET;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1084 break;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1085 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1086 case FOCUS_CHILD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1087 switch (direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1088 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1089 case GTK_DIR_TAB_BACKWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1090 case GTK_DIR_LEFT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1091 case GTK_DIR_UP:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1092 return FOCUS_LABEL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1093 case GTK_DIR_TAB_FORWARD:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1094 case GTK_DIR_DOWN:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1095 case GTK_DIR_RIGHT:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1096 return FOCUS_NONE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1097 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1098 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1099
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1100 g_assert_not_reached ();
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1101 return FOCUS_NONE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1102 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1103
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1104 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1105 gtk_expander_focus (GtkWidget *widget,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1106 GtkDirectionType direction)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1107 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1108 GtkExpander *expander = GTK_EXPANDER (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1109
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1110 if (!focus_current_site (expander, direction))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1111 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1112 GtkWidget *old_focus_child;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1113 gboolean widget_is_focus;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1114 FocusSite site = FOCUS_NONE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1115
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1116 widget_is_focus = gtk_widget_is_focus (widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1117 old_focus_child = GTK_CONTAINER (widget)->focus_child;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1118
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1119 if (old_focus_child && old_focus_child == expander->priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1120 site = FOCUS_LABEL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1121 else if (old_focus_child)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1122 site = FOCUS_CHILD;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1123 else if (widget_is_focus)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1124 site = FOCUS_WIDGET;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1125
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1126 while ((site = get_next_site (expander, site, direction)) != FOCUS_NONE)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1127 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1128 if (focus_in_site (expander, site, direction))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1129 return TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1130 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1131
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1132 return FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1133 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1134
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1135 return TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1136 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1137
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1138 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1139 gtk_expander_add (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1140 GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1141 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1142 GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1143
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1144 gtk_widget_set_child_visible (widget, GTK_EXPANDER (container)->priv->expanded);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1145 gtk_widget_queue_resize (GTK_WIDGET (container));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1146 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1147
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1148 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1149 gtk_expander_remove (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1150 GtkWidget *widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1151 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1152 GtkExpander *expander = GTK_EXPANDER (container);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1153
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1154 if (GTK_EXPANDER (expander)->priv->label_widget == widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1155 gtk_expander_set_label_widget (expander, NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1156 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1157 GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1158 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1159
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1160 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1161 gtk_expander_forall (GtkContainer *container,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1162 gboolean include_internals,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1163 GtkCallback callback,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1164 gpointer callback_data)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1165 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1166 GtkBin *bin = GTK_BIN (container);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1167 GtkExpanderPrivate *priv = GTK_EXPANDER (container)->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1168
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1169 if (bin->child)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1170 (* callback) (bin->child, callback_data);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1171
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1172 if (priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1173 (* callback) (priv->label_widget, callback_data);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1174 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1175
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1176 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1177 gtk_expander_activate (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1178 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1179 gtk_expander_set_expanded (expander, !expander->priv->expanded);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1180 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1181
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1182
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1183 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1184 * gtk_expander_new:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1185 * @label: the text of the label
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1186 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1187 * Creates a new expander using @label as the text of the label.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1188 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1189 * Return value: a new #GtkExpander widget.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1190 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1191 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1192 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1193 GtkWidget *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1194 gtk_expander_new (const gchar *label)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1195 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1196 return g_object_new (GTK_TYPE_EXPANDER, "label", label, NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1197 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1198
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1199 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1200 * gtk_expander_new_with_mnemonic:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1201 * @label: the text of the label with an underscore in front of the
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1202 * mnemonic character
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1203 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1204 * Creates a new expander using @label as the text of the label.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1205 * If characters in @label are preceded by an underscore, they are underlined.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1206 * If you need a literal underscore character in a label, use '__' (two
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1207 * underscores). The first underlined character represents a keyboard
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1208 * accelerator called a mnemonic.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1209 * Pressing Alt and that key activates the button.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1210 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1211 * Return value: a new #GtkExpander widget.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1212 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1213 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1214 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1215 GtkWidget *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1216 gtk_expander_new_with_mnemonic (const gchar *label)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1217 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1218 return g_object_new (GTK_TYPE_EXPANDER,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1219 "label", label,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1220 "use_underline", TRUE,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1221 NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1222 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1223
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1224 static gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1225 gtk_expander_animation_timeout (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1226 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1227 GtkExpanderPrivate *priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1228 GdkRectangle area;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1229 gboolean finish = FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1230
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1231 GDK_THREADS_ENTER();
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1232
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1233 if (GTK_WIDGET_REALIZED (expander))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1234 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1235 get_expander_bounds (expander, &area);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1236 gdk_window_invalidate_rect (GTK_WIDGET (expander)->window, &area, TRUE);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1237 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1238
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1239 if (priv->expanded)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1240 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1241 if (priv->expander_style == GTK_EXPANDER_COLLAPSED)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1242 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1243 priv->expander_style = GTK_EXPANDER_SEMI_EXPANDED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1244 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1245 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1246 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1247 priv->expander_style = GTK_EXPANDER_EXPANDED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1248 finish = TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1249 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1250 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1251 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1252 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1253 if (priv->expander_style == GTK_EXPANDER_EXPANDED)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1254 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1255 priv->expander_style = GTK_EXPANDER_SEMI_COLLAPSED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1256 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1257 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1258 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1259 priv->expander_style = GTK_EXPANDER_COLLAPSED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1260 finish = TRUE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1261 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1262 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1263
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1264 if (finish)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1265 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1266 priv->animation_timeout = 0;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1267 if (GTK_BIN (expander)->child)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1268 gtk_widget_set_child_visible (GTK_BIN (expander)->child, priv->expanded);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1269 gtk_widget_queue_resize (GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1270 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1271
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1272 GDK_THREADS_LEAVE();
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1273
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1274 return !finish;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1275 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1276
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1277 static void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1278 gtk_expander_start_animation (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1279 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1280 GtkExpanderPrivate *priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1281
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1282 if (priv->animation_timeout)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1283 g_source_remove (priv->animation_timeout);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1284
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1285 priv->animation_timeout =
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1286 g_timeout_add (50,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1287 (GSourceFunc) gtk_expander_animation_timeout,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1288 expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1289 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1290
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1291 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1292 * gtk_expander_set_expanded:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1293 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1294 * @expanded: whether the child widget is revealed
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1295 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1296 * Sets the state of the expander. Set to %TRUE, if you want
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1297 * the child widget to be revealed, and %FALSE if you want the
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1298 * child widget to be hidden.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1299 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1300 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1301 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1302 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1303 gtk_expander_set_expanded (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1304 gboolean expanded)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1305 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1306 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1307
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1308 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1309
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1310 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1311
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1312 expanded = expanded != FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1313
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1314 if (priv->expanded != expanded)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1315 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1316 priv->expanded = expanded;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1317
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1318 if (GTK_WIDGET_REALIZED (expander))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1319 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1320 gtk_expander_start_animation (expander);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1321 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1322 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1323 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1324 priv->expander_style = expanded ? GTK_EXPANDER_EXPANDED :
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1325 GTK_EXPANDER_COLLAPSED;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1326
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1327 if (GTK_BIN (expander)->child)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1328 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1329 gtk_widget_set_child_visible (GTK_BIN (expander)->child, priv->expanded);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1330 gtk_widget_queue_resize (GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1331 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1332 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1333
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1334 g_object_notify (G_OBJECT (expander), "expanded");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1335 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1336 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1337
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1338 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1339 * gtk_expander_get_expanded:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1340 * @expander:a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1341 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1342 * Queries a #GtkExpander and returns its current state. Returns %TRUE
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1343 * if the child widget is revealed.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1344 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1345 * See gtk_expander_set_expanded().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1346 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1347 * Return value: the current state of the expander.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1348 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1349 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1350 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1351 gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1352 gtk_expander_get_expanded (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1353 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1354 g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1355
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1356 return expander->priv->expanded;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1357 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1358
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1359 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1360 * gtk_expander_set_spacing:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1361 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1362 * @spacing: distance between the expander and child in pixels.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1363 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1364 * Sets the spacing field of @expander, which is the number of pixels to
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1365 * place between expander and the child.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1366 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1367 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1368 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1369 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1370 gtk_expander_set_spacing (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1371 gint spacing)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1372 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1373 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1374 g_return_if_fail (spacing >= 0);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1375
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1376 if (expander->priv->spacing != spacing)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1377 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1378 expander->priv->spacing = spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1379
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1380 gtk_widget_queue_resize (GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1381
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1382 g_object_notify (G_OBJECT (expander), "spacing");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1383 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1384 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1385
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1386 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1387 * gtk_expander_get_spacing:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1388 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1389 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1390 * Gets the value set by gtk_expander_set_spacing().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1391 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1392 * Return value: spacing between the expander and child.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1393 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1394 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1395 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1396 gint
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1397 gtk_expander_get_spacing (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1398 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1399 g_return_val_if_fail (GTK_IS_EXPANDER (expander), 0);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1400
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1401 return expander->priv->spacing;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1402 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1403
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1404 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1405 * gtk_expander_set_label:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1406 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1407 * @label: a string
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1408 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1409 * Sets the text of the label of the expander to @label.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1410 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1411 * This will also clear any previously set labels.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1412 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1413 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1414 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1415 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1416 gtk_expander_set_label (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1417 const gchar *label)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1418 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1419 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1420
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1421 if (!label)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1422 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1423 gtk_expander_set_label_widget (expander, NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1424 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1425 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1426 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1427 GtkWidget *child;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1428
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1429 child = gtk_label_new (label);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1430 gtk_label_set_use_underline (GTK_LABEL (child), expander->priv->use_underline);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1431 gtk_label_set_use_markup (GTK_LABEL (child), expander->priv->use_markup);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1432 gtk_widget_show (child);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1433
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1434 gtk_expander_set_label_widget (expander, child);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1435 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1436
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1437 g_object_notify (G_OBJECT (expander), "label");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1438 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1439
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1440 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1441 * gtk_expander_get_label:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1442 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1443 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1444 * Fetches the text from the label of the expander, as set by
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1445 * gtk_expander_set_label(). If the label text has not
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1446 * been set the return value will be %NULL. This will be the
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1447 * case if you create an empty button with gtk_button_new() to
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1448 * use as a container.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1449 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1450 * Return value: The text of the label widget. This string is owned
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1451 * by the widget and must not be modified or freed.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1452 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1453 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1454 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1455 G_CONST_RETURN char *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1456 gtk_expander_get_label (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1457 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1458 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1459
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1460 g_return_val_if_fail (GTK_IS_EXPANDER (expander), NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1461
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1462 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1463
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1464 if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1465 return gtk_label_get_text (GTK_LABEL (priv->label_widget));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1466 else
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1467 return NULL;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1468 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1469
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1470 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1471 * gtk_expander_set_use_underline:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1472 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1473 * @use_underline: %TRUE if underlines in the text indicate mnemonics
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1474 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1475 * If true, an underline in the text of the expander label indicates
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1476 * the next character should be used for the mnemonic accelerator key.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1477 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1478 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1479 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1480 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1481 gtk_expander_set_use_underline (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1482 gboolean use_underline)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1483 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1484 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1485
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1486 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1487
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1488 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1489
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1490 use_underline = use_underline != FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1491
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1492 if (priv->use_underline != use_underline)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1493 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1494 priv->use_underline = use_underline;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1495
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1496 if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1497 gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1498
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1499 g_object_notify (G_OBJECT (expander), "use-underline");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1500 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1501 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1502
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1503 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1504 * gtk_expander_get_use_underline:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1505 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1506 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1507 * Returns whether an embedded underline in the expander label indicates a
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1508 * mnemonic. See gtk_expander_set_use_underline().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1509 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1510 * Return value: %TRUE if an embedded underline in the expander label
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1511 * indicates the mnemonic accelerator keys.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1512 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1513 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1514 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1515 gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1516 gtk_expander_get_use_underline (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1517 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1518 g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1519
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1520 return expander->priv->use_underline;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1521 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1522
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1523 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1524 * gtk_expander_set_use_markup:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1525 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1526 * @use_markup: %TRUE if the label's text should be parsed for markup
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1527 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1528 * Sets whether the text of the label contains markup in <link
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1529 * linkend="PangoMarkupFormat">Pango's text markup
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1530 * language</link>. See gtk_label_set_markup().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1531 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1532 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1533 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1534 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1535 gtk_expander_set_use_markup (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1536 gboolean use_markup)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1537 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1538 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1539
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1540 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1541
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1542 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1543
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1544 use_markup = use_markup != FALSE;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1545
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1546 if (priv->use_markup != use_markup)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1547 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1548 priv->use_markup = use_markup;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1549
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1550 if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1551 gtk_label_set_use_markup (GTK_LABEL (priv->label_widget), use_markup);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1552
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1553 g_object_notify (G_OBJECT (expander), "use-markup");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1554 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1555 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1556
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1557 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1558 * gtk_expander_get_use_markup:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1559 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1560 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1561 * Returns whether the label's text is interpreted as marked up with
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1562 * the <link linkend="PangoMarkupFormat">Pango text markup
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1563 * language</link>. See gtk_expander_set_use_markup ().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1564 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1565 * Return value: %TRUE if the label's text will be parsed for markup
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1566 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1567 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1568 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1569 gboolean
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1570 gtk_expander_get_use_markup (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1571 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1572 g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1573
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1574 return expander->priv->use_markup;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1575 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1576
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1577 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1578 * gtk_expander_set_label_widget:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1579 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1580 * @label_widget: the new label widget
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1581 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1582 * Set the label widget for the expander. This is the widget
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1583 * that will appear embedded alongside the expander arrow.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1584 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1585 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1586 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1587 void
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1588 gtk_expander_set_label_widget (GtkExpander *expander,
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1589 GtkWidget *label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1590 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1591 GtkExpanderPrivate *priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1592
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1593 g_return_if_fail (GTK_IS_EXPANDER (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1594 g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1595 g_return_if_fail (label_widget == NULL || label_widget->parent == NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1596
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1597 priv = expander->priv;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1598
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1599 if (priv->label_widget == label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1600 return;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1601
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1602 if (priv->label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1603 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1604 gtk_widget_set_state (priv->label_widget, GTK_STATE_NORMAL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1605 gtk_widget_unparent (priv->label_widget);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1606 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1607
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1608 priv->label_widget = label_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1609
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1610 if (label_widget)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1611 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1612 priv->label_widget = label_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1613
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1614 gtk_widget_set_parent (label_widget, GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1615
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1616 if (priv->prelight)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1617 gtk_widget_set_state (label_widget, GTK_STATE_PRELIGHT);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1618 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1619
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1620 if (GTK_WIDGET_VISIBLE (expander))
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1621 gtk_widget_queue_resize (GTK_WIDGET (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1622
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1623 g_object_freeze_notify (G_OBJECT (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1624 g_object_notify (G_OBJECT (expander), "label-widget");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1625 g_object_notify (G_OBJECT (expander), "label");
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1626 g_object_thaw_notify (G_OBJECT (expander));
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1627 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1628
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1629 /**
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1630 * gtk_expander_get_label_widget:
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1631 * @expander: a #GtkExpander
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1632 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1633 * Retrieves the label widget for the frame. See
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1634 * gtk_expander_set_label_widget().
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1635 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1636 * Return value: the label widget, or %NULL if there is none.
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1637 *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1638 * Since: 2.4
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1639 **/
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1640 GtkWidget *
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1641 gtk_expander_get_label_widget (GtkExpander *expander)
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1642 {
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1643 g_return_val_if_fail (GTK_IS_EXPANDER (expander), NULL);
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1644
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1645 return expander->priv->label_widget;
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1646 }
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1647
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1648 #define __GTK_EXPANDER_C__
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1649 #include <gtk/gtkaliasdef.c>
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1650
8d7c99f20e4c [gaim-migrate @ 14026]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1651 #endif /* Gtk 2.4 */