pidgin/pidgincellrendererexpander.c

Fri, 05 Mar 2021 03:31:29 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 05 Mar 2021 03:31:29 -0600
changeset 40810
28d50eece92d
parent 40580
fdf04534e7d1
permissions
-rw-r--r--

Create a PidginAvatar widget.

This does everything the existing code does, but trying to integrate right now
is kind of difficult. The plan is to use this in a new PidginInfoPane I have
started, but that change got very large so I just packed it into the end of
the existing info pane.

The only things that are not implement right now, are making menu items
insensitive and that's because we need to figure out a better want to handle
custom avatars for users.

Testing Done:
Ran locally.

Reviewed at https://reviews.imfreedom.org/r/528/

40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
1 /*
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
2 * Pidgin - Internet Messenger
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
4 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 * source distribution.
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
8 *
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
12 * (at your option) any later version.
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 *
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 * GNU General Public License for more details.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
18 *
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21 */
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
22
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
23 #include "pidgin/pidgincellrendererexpander.h"
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24
39553
5f6c287230d1 Use GObject macros for PidginCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38009
diff changeset
25 struct _PidginCellRendererExpander {
5f6c287230d1 Use GObject macros for PidginCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38009
diff changeset
26 GtkCellRenderer parent;
5f6c287230d1 Use GObject macros for PidginCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38009
diff changeset
27 };
5f6c287230d1 Use GObject macros for PidginCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38009
diff changeset
28
5f6c287230d1 Use GObject macros for PidginCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38009
diff changeset
29 G_DEFINE_TYPE(PidginCellRendererExpander, pidgin_cell_renderer_expander,
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
30 GTK_TYPE_CELL_RENDERER)
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
31
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
32 /******************************************************************************
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
33 * GtkCellRenderer Implementation
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
34 *****************************************************************************/
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
35 static void
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
36 pidgin_cell_renderer_expander_get_size(GtkCellRenderer *renderer,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
37 GtkWidget *widget,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
38 const GdkRectangle *cell_area,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
39 gint *x_offset, gint *y_offset,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
40 gint *width, gint *height)
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
41 {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
42 gint calc_width = 0, calc_height = 0;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
43 gint xpad = 0, ypad = 0;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
44 gint expander_size = 0;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
45
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
46 gtk_widget_style_get(widget, "expander-size", &expander_size, NULL);
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
47
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
48 gtk_cell_renderer_get_padding(renderer, &xpad, &ypad);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
49 calc_width = (xpad * 2) + expander_size;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
50 calc_height = (ypad * 2) + expander_size;
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
52 if(width) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
53 *width = calc_width;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
54 }
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
56 if(height) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
57 *height = calc_height;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
58 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
59
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
60 if(cell_area) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
61 gfloat xalign = 0.0f, yalign = 0.0f;
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
62
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
63 gtk_cell_renderer_get_alignment(renderer, &xalign, &yalign);
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
65 if(x_offset) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
66 *x_offset = (gint)(xalign * (cell_area->width - calc_width));
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
67 *x_offset = MAX (*x_offset, 0);
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
68 }
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
69
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
70 if(y_offset) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
71 *y_offset = (gint)(yalign * (cell_area->height - calc_height));
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
72 *y_offset = MAX (*y_offset, 0);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
73 }
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
74 }
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
75 }
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
76
33170
ce4447562d64 Add checks for old GTK+2 stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33158
diff changeset
77 static void
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
78 pidgin_cell_renderer_expander_render(GtkCellRenderer *renderer, cairo_t *cr,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
79 GtkWidget *widget,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
80 const GdkRectangle *background_area,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
81 const GdkRectangle *cell_area,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
82 GtkCellRendererState flags)
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83 {
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
84 GtkStateFlags state;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
85 GtkStyleContext *context = NULL;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
86 gboolean is_expanded = FALSE, is_expander = FALSE;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
87 gint xpad = 0, ypad = 0;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
88 gint width = cell_area->width, height = cell_area->height;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
89
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
90 /* if the row doesn't have children, bail out. */
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
91 g_object_get(G_OBJECT(renderer), "is-expander", &is_expander, NULL);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
92 if(!is_expander) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
93 return;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
94 }
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
95
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
96 /* Figure out the state of the renderer. */
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
97 if(!gtk_widget_get_sensitive(widget)) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
98 state = GTK_STATE_FLAG_INSENSITIVE;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
99 } else if(flags & GTK_CELL_RENDERER_PRELIT) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
100 state = GTK_STATE_FLAG_PRELIGHT;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
101 } else if(gtk_widget_has_focus(widget) && flags & GTK_CELL_RENDERER_SELECTED) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
102 state = GTK_STATE_FLAG_ACTIVE;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
103 } else {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
104 state = GTK_STATE_FLAG_NORMAL;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
105 }
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
106
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
107 g_object_get(G_OBJECT(renderer), "is-expanded", &is_expanded, NULL);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
108 if(is_expanded) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
109 state |= GTK_STATE_FLAG_CHECKED;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
110 } else {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
111 state &= ~GTK_STATE_FLAG_CHECKED;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
112 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24379
diff changeset
113
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
114 /* Build our style context */
33271
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
115 context = gtk_widget_get_style_context(widget);
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
116 gtk_style_context_add_class(context, GTK_STYLE_CLASS_VIEW);
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
117 gtk_style_context_add_class(context, GTK_STYLE_CLASS_EXPANDER);
38005
1fe9aba16440 Fix state flags used to draw GtkCellRendererExpander.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37989
diff changeset
118 gtk_style_context_set_state(context, state);
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
119
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
120 /* Adjust the width and height according to the padding. */
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
121 gtk_cell_renderer_get_padding(renderer, &xpad, &ypad);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
122 width -= xpad * 2;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
123 height -= ypad * 2;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
124
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
125 /* Render the arrow. */
33271
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
126 gtk_render_expander(context, cr,
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
127 cell_area->x + xpad, cell_area->y + ypad,
53bf180b9eb1 Use GtkStyleContext instead of GtkStyle on GTK+3.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
128 width, height);
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
129 }
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130
33170
ce4447562d64 Add checks for old GTK+2 stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33158
diff changeset
131 static gboolean
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
132 pidgin_cell_renderer_expander_activate(GtkCellRenderer *r, GdkEvent *event,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
133 GtkWidget *widget, const gchar *p,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
134 const GdkRectangle *bg,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
135 const GdkRectangle *cell,
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
136 GtkCellRendererState flags)
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 {
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 GtkTreePath *path = gtk_tree_path_new_from_string(p);
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
139
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
140 if(gtk_tree_view_row_expanded(GTK_TREE_VIEW(widget), path)) {
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
141 gtk_tree_view_collapse_row(GTK_TREE_VIEW(widget), path);
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
142 } else {
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
143 gtk_tree_view_expand_row(GTK_TREE_VIEW(widget),path,FALSE);
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
144 }
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
145
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
146 gtk_tree_path_free(path);
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
147
14626
964677efbddf [gaim-migrate @ 17287]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14623
diff changeset
148 return FALSE;
14623
046a118a3b04 [gaim-migrate @ 17284]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
149 }
40580
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
150
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
151 /******************************************************************************
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
152 * GObject Implementation
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
153 *****************************************************************************/
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
154 static void
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
155 pidgin_cell_renderer_expander_init (PidginCellRendererExpander *renderer) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
156 /* there's no accessor for setting the mode, so we have to set the property
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
157 * explicitly.
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
158 */
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
159 g_object_set(G_OBJECT(renderer), "mode",
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
160 GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
161
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
162 gtk_cell_renderer_set_padding(GTK_CELL_RENDERER(renderer), 0, 2);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
163 }
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
164
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
165 static void
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
166 pidgin_cell_renderer_expander_class_init(PidginCellRendererExpanderClass *klass)
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
167 {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
168 GtkCellRendererClass *renderer_class = GTK_CELL_RENDERER_CLASS(klass);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
169
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
170 renderer_class->get_size = pidgin_cell_renderer_expander_get_size;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
171 renderer_class->render = pidgin_cell_renderer_expander_render;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
172 renderer_class->activate = pidgin_cell_renderer_expander_activate;
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
173 }
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
174
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
175 /******************************************************************************
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
176 * Public API
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
177 *****************************************************************************/
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
178 GtkCellRenderer *
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
179 pidgin_cell_renderer_expander_new(void) {
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
180 return g_object_new(PIDGIN_TYPE_CELL_RENDERER_EXPANDER, NULL);
fdf04534e7d1 clean up PidginCellRendererExpander
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
181 }

mercurial