diff pidgin/gtkcellrendererexpander.c @ 32672:3828a61c44da

A boring and large patch so I can merge heads.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 23 Dec 2011 08:21:58 +0000
parents 63181cbb941c
children
line wrap: on
line diff
--- a/pidgin/gtkcellrendererexpander.c	Mon Aug 22 22:46:08 2011 +0000
+++ b/pidgin/gtkcellrendererexpander.c	Fri Dec 23 08:21:58 2011 +0000
@@ -44,23 +44,24 @@
 static void pidgin_cell_renderer_expander_class_init (PidginCellRendererExpanderClass *class);
 static void pidgin_cell_renderer_expander_get_size   (GtkCellRenderer            *cell,
 						   GtkWidget                  *widget,
-						   const GdkRectangle         *cell_area,
+						   GdkRectangle               *cell_area,
 						   gint                       *x_offset,
 						   gint                       *y_offset,
 						   gint                       *width,
 						   gint                       *height);
 static void pidgin_cell_renderer_expander_render     (GtkCellRenderer            *cell,
-						   cairo_t                  *cr,
+						   GdkWindow                  *window,
 						   GtkWidget                  *widget,
-						   const GdkRectangle               *background_area,
-						   const GdkRectangle               *cell_area,
-						   GtkCellRendererState             flags);
+						   GdkRectangle               *background_area,
+						   GdkRectangle               *cell_area,
+						   GdkRectangle               *expose_area,
+						   guint                       flags);
 static gboolean pidgin_cell_renderer_expander_activate  (GtkCellRenderer            *r,
 						      GdkEvent                   *event,
 						      GtkWidget                  *widget,
 						      const gchar                *p,
-						      const GdkRectangle               *bg,
-						      const GdkRectangle               *cell,
+						      GdkRectangle               *bg,
+						      GdkRectangle               *cell,
 						      GtkCellRendererState        flags);
 static void  pidgin_cell_renderer_expander_finalize (GObject *gobject);
 
@@ -107,10 +108,9 @@
 
 static void pidgin_cell_renderer_expander_init (PidginCellRendererExpander *cellexpander)
 {
-  g_object_set(G_OBJECT(cellexpander), "mode",
-               GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
-	/*GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;*/
-  gtk_cell_renderer_set_padding(GTK_CELL_RENDERER(cellexpander), 0, 2);
+	GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;
+	GTK_CELL_RENDERER(cellexpander)->xpad = 0;
+	GTK_CELL_RENDERER(cellexpander)->ypad = 2;
 }
 
 static void pidgin_cell_renderer_expander_class_init (PidginCellRendererExpanderClass *class)
@@ -190,7 +190,7 @@
 
 static void pidgin_cell_renderer_expander_get_size (GtkCellRenderer *cell,
 						 GtkWidget       *widget,
-						 const GdkRectangle    *cell_area,
+						 GdkRectangle    *cell_area,
 						 gint            *x_offset,
 						 gint            *y_offset,
 						 gint            *width,
@@ -199,17 +199,11 @@
 	gint calc_width;
 	gint calc_height;
 	gint expander_size;
-  gint xpad;
-  gint ypad;
-  gfloat xalign;
-  gfloat yalign;
-    
+
 	gtk_widget_style_get(widget, "expander-size", &expander_size, NULL);
 
-  gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
-  gtk_cell_renderer_get_alignment(cell, &xalign, &yalign); 
-	calc_width = (gint) xpad * 2 + expander_size;
-	calc_height = (gint) ypad * 2 + expander_size;
+	calc_width = (gint) cell->xpad * 2 + expander_size;
+	calc_height = (gint) cell->ypad * 2 + expander_size;
 
 	if (width)
 		*width = calc_width;
@@ -221,12 +215,12 @@
 		{
 			if (x_offset)
 				{
-					*x_offset = xalign * (cell_area->width - calc_width);
+					*x_offset = cell->xalign * (cell_area->width - calc_width);
 					*x_offset = MAX (*x_offset, 0);
 				}
 			if (y_offset)
 				{
-					*y_offset = yalign * (cell_area->height - calc_height);
+					*y_offset = cell->yalign * (cell_area->height - calc_height);
 					*y_offset = MAX (*y_offset, 0);
 				}
 		}
@@ -234,64 +228,61 @@
 
 
 static void pidgin_cell_renderer_expander_render(GtkCellRenderer *cell,
-					       cairo_t         *cr,
+					       GdkWindow       *window,
 					       GtkWidget       *widget,
-					       const GdkRectangle    *background_area,
-					       const GdkRectangle    *cell_area,
-					       GtkCellRendererState  flags)
+					       GdkRectangle    *background_area,
+					       GdkRectangle    *cell_area,
+					       GdkRectangle    *expose_area,
+					       guint            flags)
 {
 	PidginCellRendererExpander *cellexpander = (PidginCellRendererExpander *) cell;
 	gboolean set;
 	gint width, height;
 	GtkStateType state;
-  gint xpad;
-  gint ypad;
-  gboolean is_expanded;
-  GtkAllocation allocation;
-    
-  gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
-  g_object_get(G_OBJECT(cell), "is-expanded", &is_expanded, NULL);
-    
+
 	if (!cellexpander->is_expander)
 		return;
 
 	width = cell_area->width;
 	height = cell_area->height;
 
-	if (!gtk_widget_get_sensitive(widget))
+	if (!cell->sensitive)
 		state = GTK_STATE_INSENSITIVE;
 	else if (flags & GTK_CELL_RENDERER_PRELIT)
 		state = GTK_STATE_PRELIGHT;
-	else if (gtk_widget_has_focus(widget) && flags & GTK_CELL_RENDERER_SELECTED)
+#if GTK_CHECK_VERSION(2,18,0)
+	else if (gtk_widget_has_focus (widget) && flags & GTK_CELL_RENDERER_SELECTED)
 		state = GTK_STATE_ACTIVE;
+#else
+	else if (GTK_WIDGET_HAS_FOCUS (widget) && flags & GTK_CELL_RENDERER_SELECTED)
+		state = GTK_STATE_ACTIVE;
+#endif
 	else
 		state = GTK_STATE_NORMAL;
 
-	width -= xpad*2;
-	height -= ypad*2;
+	width -= cell->xpad*2;
+	height -= cell->ypad*2;
 
-	gtk_paint_expander (gtk_widget_get_style(widget),
-			    cr, state,
-			    widget, "treeview",
-			    cell_area->x + xpad + (width / 2),
-			    cell_area->y + ypad + (height / 2),
-			    is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED);
+	gtk_paint_expander (widget->style,
+			    window, state,
+			    NULL, widget, "treeview",
+			    cell_area->x + cell->xpad + (width / 2),
+			    cell_area->y + cell->ypad + (height / 2),
+			    cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED);
 
 	/* only draw the line if the color isn't set - this prevents a bug where the hline appears only under the expander */
 	g_object_get(cellexpander, "cell-background-set", &set, NULL);
-  gtk_widget_get_allocation(widget, &allocation);
-
-  if (is_expanded && !set)
-		gtk_paint_hline (gtk_widget_get_style(widget), cr, state, widget, NULL, 0,
-				 allocation.width, cell_area->y + cell_area->height);
+	if (cell->is_expanded && !set)
+		gtk_paint_hline (widget->style, window, state, NULL, widget, NULL, 0,
+				 widget->allocation.width, cell_area->y + cell_area->height);
 }
 
 static gboolean pidgin_cell_renderer_expander_activate(GtkCellRenderer *r,
 						     GdkEvent *event,
 						     GtkWidget *widget,
 						     const gchar *p,
-						     const GdkRectangle *bg,
-						     const GdkRectangle *cell,
+						     GdkRectangle *bg,
+						     GdkRectangle *cell,
 						     GtkCellRendererState flags)
 {
 	GtkTreePath *path = gtk_tree_path_new_from_string(p);