remove all gtk3 conditionals
[claws.git] / src / gtk / gtkcmclist.c
index fe0c0716a5149754bcecffb224d906e652f8fe5d..d3bb3366bcd8416e548dd8e5ed5b34fa9ae86039 100644 (file)
@@ -175,13 +175,6 @@ enum {
   ARG_REORDERABLE,
   ARG_USE_DRAG_ICONS,
   ARG_SORT_TYPE
-#if GTK_CHECK_VERSION(3, 0, 0)
-  ,
-  ARG_HADJUSTMENT,
-  ARG_VADJUSTMENT,
-  ARG_HADJUSTMENT_POLICY,
-  ARG_VADJUSTMENT_POLICY
-#endif
 };
 
 /* GtkCMCList Methods */
@@ -192,11 +185,7 @@ static GObject* gtk_cmclist_constructor (GType                  type,
                                       GObjectConstructParam *construct_params);
 
 /* GtkObject Methods */
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static void gtk_cmclist_destroy  (GtkObject *object);
-#else
-static void gtk_cmclist_destroy  (GtkWidget *object);
-#endif
 static void gtk_cmclist_finalize (GObject   *object);
 static void gtk_cmclist_set_arg  (GObject *object,
                                guint      arg_id,
@@ -208,36 +197,21 @@ static void gtk_cmclist_get_arg  (GObject *object,
                                GParamSpec *spec);
 
 /* GtkWidget Methods */
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static void gtk_cmclist_set_scroll_adjustments (GtkCMCList      *clist,
                                              GtkAdjustment *hadjustment,
                                              GtkAdjustment *vadjustment);
-#endif
 static void gtk_cmclist_realize         (GtkWidget        *widget);
 static void gtk_cmclist_unrealize       (GtkWidget        *widget);
 static void gtk_cmclist_map             (GtkWidget        *widget);
 static void gtk_cmclist_unmap           (GtkWidget        *widget);
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static gint gtk_cmclist_expose          (GtkWidget        *widget,
                                          GdkEventExpose   *event);
-#else
-static gint gtk_cmclist_expose          (GtkWidget *widget,
-                                         cairo_t *event);
-#endif
 static gint gtk_cmclist_button_press    (GtkWidget        *widget,
                                       GdkEventButton   *event);
 static gint gtk_cmclist_button_release  (GtkWidget        *widget,
                                       GdkEventButton   *event);
 static gint gtk_cmclist_motion          (GtkWidget        *widget, 
                                       GdkEventMotion   *event);
-#if GTK_CHECK_VERSION(3, 0, 0)
-static void gtk_cmclist_get_preferred_height (GtkWidget *widget,
-                                 gint      *minimal_height,
-                                 gint      *natural_height);
-static void gtk_cmclist_get_preferred_width (GtkWidget *widget,
-                                 gint      *minimal_width,
-                                 gint      *natural_width);
-#endif
 static void gtk_cmclist_size_request    (GtkWidget        *widget,
                                       GtkRequisition   *requisition);
 static void gtk_cmclist_size_allocate   (GtkWidget        *widget,
@@ -480,7 +454,6 @@ static guint clist_signals[LAST_SIGNAL] = {0};
 
 static const GtkTargetEntry clist_target_table = { "gtk-clist-drag-reorder", 0, 0};
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static gpointer gtk_cmclist_parent_class = NULL;
 
 GType
@@ -504,47 +477,34 @@ gtk_cmclist_get_type (void)
                        sizeof (GtkCMCList),
                        0,      /* n_preallocs */
                        (GInstanceInitFunc) gtk_cmclist_init,
+
+                       (const GTypeValueTable *) NULL  /* value table */
        };
        clist_type = g_type_register_static (GTK_TYPE_CONTAINER, "GtkCMCList", &clist_info, (GTypeFlags)0);
     }
 
   return clist_type;
 }
-#else
-G_DEFINE_TYPE_WITH_CODE (GtkCMCList, gtk_cmclist, GTK_TYPE_CONTAINER,
-                         G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE,
-                         NULL))
-#endif
 
 static void
 gtk_cmclist_class_init (GtkCMCListClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-#if !GTK_CHECK_VERSION(3, 0, 0)
   GtkObjectClass *gtk_object_class;
-#endif
   GtkWidgetClass *widget_class;
   GtkContainerClass *container_class;
   GtkBindingSet *binding_set;
 
   object_class->constructor = gtk_cmclist_constructor;
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
   gtk_object_class = (GtkObjectClass *) klass;
-#endif
   widget_class = (GtkWidgetClass *) klass;
   container_class = (GtkContainerClass *) klass;
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
   gtk_cmclist_parent_class = g_type_class_peek (GTK_TYPE_CONTAINER);
-#endif
 
   object_class->finalize = gtk_cmclist_finalize;
-#if !GTK_CHECK_VERSION(3, 0, 0)
   gtk_object_class->destroy = gtk_cmclist_destroy;
-#else
-  widget_class->destroy = gtk_cmclist_destroy;
-#endif
   object_class->set_property = gtk_cmclist_set_arg;
   object_class->get_property = gtk_cmclist_get_arg;
   
@@ -556,17 +516,8 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
   widget_class->button_press_event = gtk_cmclist_button_press;
   widget_class->button_release_event = gtk_cmclist_button_release;
   widget_class->motion_notify_event = gtk_cmclist_motion;
-#if !GTK_CHECK_VERSION(3, 0, 0)
   widget_class->expose_event = gtk_cmclist_expose;
-#else
-  widget_class->draw = gtk_cmclist_expose;
-#endif
-#if !GTK_CHECK_VERSION(3, 0, 0)
   widget_class->size_request = gtk_cmclist_size_request;
-#else
-  widget_class->get_preferred_width = gtk_cmclist_get_preferred_width;
-  widget_class->get_preferred_height = gtk_cmclist_get_preferred_height;
-#endif
   widget_class->size_allocate = gtk_cmclist_size_allocate;
   widget_class->focus_in_event = gtk_cmclist_focus_in;
   widget_class->focus_out_event = gtk_cmclist_focus_out;
@@ -586,9 +537,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
   container_class->forall = gtk_cmclist_forall;
   container_class->set_focus_child = gtk_cmclist_set_focus_child;
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
   klass->set_scroll_adjustments = gtk_cmclist_set_scroll_adjustments;
-#endif
   klass->refresh = clist_refresh;
   klass->select_row = real_select_row;
   klass->unselect_row = real_unselect_row;
@@ -677,7 +626,6 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
                                "sort-type",
                                GTK_TYPE_SORT_TYPE, 0,
                                G_PARAM_READWRITE));
-#if !GTK_CHECK_VERSION(3, 0, 0)
   widget_class->set_scroll_adjustments_signal =
                g_signal_new ("set_scroll_adjustments",
                              G_TYPE_FROM_CLASS (object_class),
@@ -687,13 +635,6 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
                              claws_marshal_VOID__OBJECT_OBJECT,
                              G_TYPE_NONE, 2,
                              GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
-#else
-  /* Scrollable interface properties */
-  g_object_class_override_property (object_class, ARG_HADJUSTMENT, "hadjustment");
-  g_object_class_override_property (object_class, ARG_VADJUSTMENT, "vadjustment");
-  g_object_class_override_property (object_class, ARG_HADJUSTMENT_POLICY, "hscroll-policy");
-  g_object_class_override_property (object_class, ARG_VADJUSTMENT_POLICY, "vscroll-policy");
-#endif
 
   clist_signals[SELECT_ROW] =
                g_signal_new ("select_row",
@@ -1045,17 +986,6 @@ gtk_cmclist_set_arg (GObject *object,
     case ARG_SORT_TYPE:
       gtk_cmclist_set_sort_type (clist, g_value_get_enum (value));
       break;
-#if GTK_CHECK_VERSION(3, 0, 0)
-    case ARG_HADJUSTMENT:
-      gtk_cmclist_set_hadjustment (clist, g_value_get_object (value));
-      break;
-    case ARG_VADJUSTMENT:
-      gtk_cmclist_set_vadjustment (clist, g_value_get_object (value));
-      break;
-    case ARG_HADJUSTMENT_POLICY:
-    case ARG_VADJUSTMENT_POLICY:
-      break;
-#endif
     }
 }
 
@@ -1104,18 +1034,6 @@ gtk_cmclist_get_arg (GObject *object,
     case ARG_SORT_TYPE:
       g_value_set_enum(value, clist->sort_type);
       break;
-#if GTK_CHECK_VERSION(3, 0, 0)
-    case ARG_HADJUSTMENT:
-      g_value_set_object(value, gtk_cmclist_get_hadjustment(clist));
-      break;
-    case ARG_VADJUSTMENT:
-      g_value_set_object(value, gtk_cmclist_get_vadjustment(clist));
-      break;
-    case ARG_HADJUSTMENT_POLICY:
-    case ARG_VADJUSTMENT_POLICY:
-      g_value_set_enum(value, GTK_SCROLL_NATURAL);
-      break;
-#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, arg_id, spec);
       break;
@@ -1127,17 +1045,11 @@ gtk_cmclist_init (GtkCMCList *clist)
 {
   clist->flags = 0;
 
-  gtkut_widget_set_has_window (GTK_WIDGET(clist), TRUE);
-  gtkut_widget_set_can_focus (GTK_WIDGET(clist), TRUE);
+  gtk_widget_set_has_window (GTK_WIDGET(clist), TRUE);
+  gtk_widget_set_can_focus (GTK_WIDGET(clist), TRUE);
   GTK_CMCLIST_SET_FLAG (clist, CMCLIST_DRAW_DRAG_LINE);
   GTK_CMCLIST_SET_FLAG (clist, CMCLIST_USE_DRAG_ICONS);
 
-
-#if !GLIB_CHECK_VERSION(2,10,0)
-  clist->row_mem_chunk = NULL;
-  clist->cell_mem_chunk = NULL;
-#endif
-
   clist->freeze_count = 0;
 
   clist->rows = 0;
@@ -1210,22 +1122,6 @@ gtk_cmclist_constructor (GType                  type,
                                                                construct_properties);
   GtkCMCList *clist = GTK_CMCLIST (object);
   
-#if !GLIB_CHECK_VERSION(2,10,0)
-  if (!clist->row_mem_chunk)
-    clist->row_mem_chunk = g_mem_chunk_new ("clist row mem chunk",
-                                           sizeof (GtkCMCListRow),
-                                           sizeof (GtkCMCListRow) *
-                                           CMCLIST_OPTIMUM_SIZE, 
-                                           G_ALLOC_AND_FREE);
-  
-  if (!clist->cell_mem_chunk)
-    clist->cell_mem_chunk = g_mem_chunk_new ("clist cell mem chunk",
-                                            sizeof (GtkCMCell) * clist->columns,
-                                            sizeof (GtkCMCell) * clist->columns *
-                                            CMCLIST_OPTIMUM_SIZE, 
-                                            G_ALLOC_AND_FREE);
-#endif
-
   /* allocate memory for columns */
   clist->column = columns_new (clist);
   
@@ -1306,12 +1202,7 @@ gtk_cmclist_set_hadjustment (GtkCMCList      *clist,
 
   if (clist->hadjustment)
     {
-#if GLIB_CHECK_VERSION(2,10,0)
       g_object_ref_sink (clist->hadjustment);
-#else
-      gtk_object_ref (G_OBJECT (clist->hadjustment));
-      gtk_object_sink (G_OBJECT (clist->hadjustment));
-#endif
       g_signal_connect (G_OBJECT (clist->hadjustment), "value_changed",
                          G_CALLBACK( hadjustment_value_changed),
                          (gpointer) clist);
@@ -1355,12 +1246,7 @@ gtk_cmclist_set_vadjustment (GtkCMCList      *clist,
 
   if (clist->vadjustment)
     {
-#if GLIB_CHECK_VERSION(2,10,0)
       g_object_ref_sink (clist->vadjustment);
-#else
-      gtk_object_ref (G_OBJECT (clist->vadjustment));
-      gtk_object_sink (G_OBJECT (clist->vadjustment));
-#endif
 
       g_signal_connect (G_OBJECT (clist->vadjustment), "value_changed",
                          G_CALLBACK(vadjustment_value_changed),
@@ -1379,7 +1265,6 @@ gtk_cmclist_get_vadjustment (GtkCMCList *clist)
   return clist->vadjustment;
 }
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static void
 gtk_cmclist_set_scroll_adjustments (GtkCMCList      *clist,
                                  GtkAdjustment *hadjustment,
@@ -1390,7 +1275,6 @@ gtk_cmclist_set_scroll_adjustments (GtkCMCList      *clist,
   if (clist->vadjustment != vadjustment)
     gtk_cmclist_set_vadjustment (clist, vadjustment);
 }
-#endif
 
 void
 gtk_cmclist_set_shadow_type (GtkCMCList      *clist,
@@ -1522,7 +1406,7 @@ gtk_cmclist_column_title_active (GtkCMCList *clist,
   g_signal_handlers_disconnect_matched(G_OBJECT (clist->column[column].button), G_SIGNAL_MATCH_FUNC,
                    0, 0, 0, column_title_passive_func, 0);
 
-  gtkut_widget_set_can_focus (clist->column[column].button, TRUE);
+  gtk_widget_set_can_focus (clist->column[column].button, TRUE);
   if (gtk_widget_get_visible (GTK_WIDGET(clist)))
     gtk_widget_queue_draw (clist->column[column].button);
 }
@@ -1558,7 +1442,7 @@ gtk_cmclist_column_title_passive (GtkCMCList *clist,
   g_signal_connect (G_OBJECT (clist->column[column].button), "event",
                      G_CALLBACK(column_title_passive_func), NULL);
 
-  gtkut_widget_set_can_focus (clist->column[column].button, FALSE);
+  gtk_widget_set_can_focus (clist->column[column].button, FALSE);
   if (gtk_widget_get_visible (GTK_WIDGET(clist)))
     gtk_widget_queue_draw (clist->column[column].button);
 }
@@ -3342,6 +3226,42 @@ gtk_cmclist_row_is_visible (GtkCMCList *clist,
   return GTK_VISIBILITY_FULL;
 }
 
+gboolean
+gtk_cmclist_row_is_above_viewport (GtkCMCList *clist,
+                               gint row)
+{
+       cm_return_val_if_fail(GTK_IS_CMCLIST (clist), 0);
+
+       if (row < 0 || row >= clist->rows)
+               return FALSE;
+
+       if (clist->row_height == 0)
+               return FALSE;
+
+       if (row < ROW_FROM_YPIXEL (clist, 0))
+               return TRUE;
+
+       return FALSE;
+}
+
+gboolean
+gtk_cmclist_row_is_below_viewport (GtkCMCList *clist,
+                               gint row)
+{
+       cm_return_val_if_fail(GTK_IS_CMCLIST (clist), 0);
+
+       if (row < 0 || row >= clist->rows)
+               return FALSE;
+
+       if (clist->row_height == 0)
+               return FALSE;
+
+       if (row > ROW_FROM_YPIXEL (clist, clist->clist_window_height))
+               return TRUE;
+
+       return FALSE;
+}
+
 void
 gtk_cmclist_set_foreground (GtkCMCList       *clist,
                          gint            row,
@@ -3360,11 +3280,9 @@ gtk_cmclist_set_foreground (GtkCMCList       *clist,
     {
       clist_row->foreground = *color;
       clist_row->fg_set = TRUE;
-#if !GTK_CHECK_VERSION(3, 0, 0)
       if (gtk_widget_get_realized (GTK_WIDGET(clist)))
        gdk_colormap_alloc_color (gtk_widget_get_colormap (GTK_WIDGET (clist)),
                         &clist_row->foreground, TRUE, TRUE);
-#endif
     }
   else
     clist_row->fg_set = FALSE;
@@ -3391,11 +3309,9 @@ gtk_cmclist_set_background (GtkCMCList       *clist,
     {
       clist_row->background = *color;
       clist_row->bg_set = TRUE;
-#if !GTK_CHECK_VERSION(3, 0, 0)
       if (gtk_widget_get_realized (GTK_WIDGET(clist)))
        gdk_colormap_alloc_color (gtk_widget_get_colormap (GTK_WIDGET (clist)),
                         &clist_row->background, TRUE, TRUE);
-#endif
     }
   else
     clist_row->bg_set = FALSE;
@@ -3727,6 +3643,7 @@ toggle_row (GtkCMCList *clist,
                           row, column, event);
          return;
        }
+      break;
     case GTK_SELECTION_BROWSE:
       g_signal_emit (G_OBJECT (clist), clist_signals[SELECT_ROW], 0,
                       row, column, event);
@@ -4502,11 +4419,7 @@ sync_selection (GtkCMCList *clist,
  *   gtk_cmclist_finalize
  */
 static void
-#if !GTK_CHECK_VERSION(3, 0, 0)
 gtk_cmclist_destroy (GtkObject *object)
-#else
-gtk_cmclist_destroy (GtkWidget *object)
-#endif
 {
   gint i;
   GtkCMCList *clist;
@@ -4554,13 +4467,8 @@ gtk_cmclist_destroy (GtkWidget *object)
        clist->column[i].button = NULL;
       }
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
   if (GTK_OBJECT_CLASS (gtk_cmclist_parent_class)->destroy)
     (*GTK_OBJECT_CLASS (gtk_cmclist_parent_class)->destroy) (object);
-#else
-  if (GTK_WIDGET_CLASS (gtk_cmclist_parent_class)->destroy)
-    (*GTK_WIDGET_CLASS (gtk_cmclist_parent_class)->destroy) (object);
-#endif
 }
 
 static void
@@ -4574,10 +4482,6 @@ gtk_cmclist_finalize (GObject *object)
 
   columns_delete (clist);
 
-#if !GLIB_CHECK_VERSION(2,10,0)
-  g_mem_chunk_destroy (clist->cell_mem_chunk);
-  g_mem_chunk_destroy (clist->row_mem_chunk);
-#endif
   G_OBJECT_CLASS (gtk_cmclist_parent_class)->finalize (object);
 }
 
@@ -4613,7 +4517,7 @@ gtk_cmclist_realize (GtkWidget *widget)
 
   clist = GTK_CMCLIST (widget);
 
-  gtkut_widget_set_realized (widget, TRUE);
+  gtk_widget_set_realized (widget, TRUE);
 
   border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
 
@@ -4626,22 +4530,15 @@ gtk_cmclist_realize (GtkWidget *widget)
   attributes.height = allocation.height - border_width * 2;
   attributes.wclass = GDK_INPUT_OUTPUT;
   attributes.visual = gtk_widget_get_visual (widget);
-#if !GTK_CHECK_VERSION(3, 0, 0)
   attributes.colormap = gtk_widget_get_colormap (widget);
-#endif
   attributes.event_mask = gtk_widget_get_events (widget);
   attributes.event_mask |= (GDK_EXPOSURE_MASK |
                            GDK_BUTTON_PRESS_MASK |
                            GDK_BUTTON_RELEASE_MASK |
                            GDK_KEY_RELEASE_MASK);
-#if !GTK_CHECK_VERSION(3, 0, 0)
   attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-#else
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-#endif
 
   /* main window */
-  window = gtk_widget_get_window (widget);
   window = gdk_window_new (gtk_widget_get_parent_window (widget),
                                   &attributes, attributes_mask);
   gdk_window_set_user_data (window, clist);
@@ -4693,13 +4590,8 @@ gtk_cmclist_realize (GtkWidget *widget)
   gdk_window_set_background (clist->clist_window,
                             &style->base[GTK_STATE_NORMAL]);
   gdk_window_show (clist->clist_window);
-#if GTK_CHECK_VERSION(2,24,0)
   clist->clist_window_width = gdk_window_get_width(clist->clist_window);
   clist->clist_window_height = gdk_window_get_height(clist->clist_window);
-#else
-  gdk_drawable_get_size (clist->clist_window, &clist->clist_window_width,
-                      &clist->clist_window_height);
-#endif
 
   /* create resize windows */
   attributes.wclass = GDK_INPUT_ONLY;
@@ -4740,7 +4632,6 @@ gtk_cmclist_realize (GtkWidget *widget)
        clist_row->style = gtk_style_attach (clist_row->style,
                                             clist->clist_window);
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
       if (clist_row->fg_set || clist_row->bg_set)
        {
          GdkColormap *colormap;
@@ -4751,8 +4642,7 @@ gtk_cmclist_realize (GtkWidget *widget)
          if (clist_row->bg_set)
            gdk_colormap_alloc_color (colormap, &clist_row->background, TRUE, TRUE);
        }
-#endif
-      
+
       for (j = 0; j < clist->columns; j++)
        if  (clist_row->cell[j].style)
          clist_row->cell[j].style =
@@ -4776,7 +4666,7 @@ gtk_cmclist_unrealize (GtkWidget *widget)
   if (gtk_widget_get_mapped (widget))
     gtk_cmclist_unmap (widget);
 
-  gtkut_widget_set_mapped (widget, FALSE);
+  gtk_widget_set_mapped (widget, FALSE);
 
   /* detach optional row/cell styles */
   if (gtk_widget_get_realized (widget))
@@ -4839,7 +4729,7 @@ gtk_cmclist_map (GtkWidget *widget)
 
   if (!gtk_widget_get_mapped (widget))
     {
-      gtkut_widget_set_mapped (widget, TRUE);
+      gtk_widget_set_mapped (widget, TRUE);
 
       /* map column buttons */
       for (i = 0; i < clist->columns; i++)
@@ -4878,7 +4768,7 @@ gtk_cmclist_unmap (GtkWidget *widget)
 
   if (gtk_widget_get_mapped (widget))
     {
-      gtkut_widget_set_mapped (widget, FALSE);
+      gtk_widget_set_mapped (widget, FALSE);
 
       if (clist_has_grab (clist))
        {
@@ -4922,15 +4812,9 @@ gtk_cmclist_unmap (GtkWidget *widget)
     }
 }
 
-#if !GTK_CHECK_VERSION(3, 0, 0)
 static gint
 gtk_cmclist_expose (GtkWidget      *widget,
                  GdkEventExpose *event)
-#else
-static gint
-gtk_cmclist_expose (GtkWidget *widget,
-          cairo_t *event)
-#endif
 {
   GtkCMCList *clist;
 
@@ -4942,40 +4826,19 @@ gtk_cmclist_expose (GtkWidget *widget,
       clist = GTK_CMCLIST (widget);
 
       /* exposure events on the list */
-#if !GTK_CHECK_VERSION(3, 0, 0)
       if (event->window == clist->clist_window)
        draw_rows (clist, &event->area);
-#else
-      if (gtk_cairo_should_draw_window (event, clist->clist_window))
-        {
-       GdkRectangle area;
 
-       /* FIXME: get proper area */
-       if (gdk_cairo_get_clip_rectangle (event, &area))
-         draw_rows (clist, &area);
-        }
-#endif
-
-#if !GTK_CHECK_VERSION(3, 0, 0)
       if (event->window == clist->title_window)
-#else
-      if (gtk_cairo_should_draw_window (event, clist->title_window))
-#endif
        {
          gint i;
          
          for (i = 0; i < clist->columns; i++)
            {
              if (clist->column[i].button) {
-#if !GTK_CHECK_VERSION(3, 0, 0)
                gtk_container_propagate_expose (GTK_CONTAINER (clist),
                                                clist->column[i].button,
                                                event);
-#else
-               gtk_container_propagate_draw (GTK_CONTAINER (clist),
-                                               clist->column[i].button,
-                                               event);
-#endif
              }
            }
        }
@@ -5471,7 +5334,7 @@ gtk_cmclist_motion (GtkWidget      *widget,
 
   row = CLAMP (row, 0, clist->rows - 1);
 
-  if (button_actions & GTK_CMBUTTON_SELECTS &
+  if (button_actions & GTK_CMBUTTON_SELECTS &&
       !g_object_get_data (G_OBJECT (widget), "gtk-site-data"))
     {
       if (row == clist->focus_row)
@@ -5504,32 +5367,6 @@ gtk_cmclist_motion (GtkWidget      *widget,
   return FALSE;
 }
 
-#if GTK_CHECK_VERSION(3, 0, 0)
-static void
-gtk_cmclist_get_preferred_width (GtkWidget *widget,
-                                 gint      *minimal_width,
-                                 gint      *natural_width)
-{
-  GtkRequisition requisition;
-
-  gtk_cmclist_size_request (widget, &requisition);
-
-  *minimal_width = *natural_width = requisition.width;
-}
-
-static void
-gtk_cmclist_get_preferred_height (GtkWidget *widget,
-                                  gint      *minimal_height,
-                                  gint      *natural_height)
-{
-  GtkRequisition requisition;
-
-  gtk_cmclist_size_request (widget, &requisition);
-
-  *minimal_height = *natural_height = requisition.height;
-}
-#endif
-
 static void
 gtk_cmclist_size_request (GtkWidget      *widget,
                        GtkRequisition *requisition)
@@ -5792,13 +5629,14 @@ draw_row (GtkCMCList     *clist,
     return;
 
   widget = GTK_WIDGET (clist);
-  style = clist_row->style ? clist_row->style : gtk_widget_get_style (widget);
 
   /* if the function is passed the pointer to the row instead of null,
    * it avoids this expensive lookup */
   if (!clist_row)
     clist_row = ROW_ELEMENT (clist, row)->data;
 
+  style = clist_row->style ? clist_row->style : gtk_widget_get_style (widget);
+
   /* rectangle of the entire row */
   row_rectangle.x = 0;
   row_rectangle.y = ROW_TOP_YPIXEL (clist, row);
@@ -5980,7 +5818,7 @@ draw_row (GtkCMCList     *clist,
          if (layout)
            {
              gint row_center_offset = (clist->row_height - logical_rect.height - 1) / 2;
-             gdk_cairo_set_source_color(cr, clist_row->fg_set ? &clist_row->foreground : &style->fg[state]);
+             gdk_cairo_set_source_color(cr, clist_row->fg_set ? &clist_row->foreground : &style->text[state]);
              cairo_move_to(cr, offset, row_rectangle.y + row_center_offset + clist_row->cell[i].vertical);
              pango_cairo_show_layout(cr, layout);
               g_object_unref (G_OBJECT (layout));
@@ -6001,7 +5839,7 @@ draw_row (GtkCMCList     *clist,
       if (!area) {
        cairo_rectangle(cr, row_rectangle.x, row_rectangle.y,
                            row_rectangle.width + 1, row_rectangle.height);
-       gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]);
+       gdk_cairo_set_source_color(cr, &style->text[GTK_STATE_NORMAL]);
        cairo_stroke(cr);
       }
       else if (gdk_rectangle_intersect (area, &row_rectangle,
@@ -6009,7 +5847,7 @@ draw_row (GtkCMCList     *clist,
        {
          cairo_rectangle(cr, row_rectangle.x, row_rectangle.y,
                            row_rectangle.width + 1, row_rectangle.height);
-         gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]);
+         gdk_cairo_set_source_color(cr, &style->text[GTK_STATE_NORMAL]);
          cairo_stroke(cr);
        }
     }
@@ -6068,12 +5906,8 @@ draw_rows (GtkCMCList     *clist,
   if (!area) {
     int w, h, y;
     cairo_t *cr;
-#if GTK_CHECK_VERSION(2,24,0)
     w = gdk_window_get_width(clist->clist_window);
     h = gdk_window_get_height(clist->clist_window);
-#else
-    gdk_drawable_get_size(clist->clist_window, &w, &h);
-#endif
     cr = gdk_cairo_create(clist->clist_window);
     y = ROW_TOP_YPIXEL (clist, i);
     gdk_cairo_set_source_color(cr, &gtk_widget_get_style(GTK_WIDGET(clist))->base[GTK_STATE_NORMAL]);
@@ -6324,7 +6158,6 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
 {
   GtkCMCList *clist;
   GtkContainer *container;
-  GdkRectangle area;
   gint i;
   gint y = 0;
   gint value;
@@ -6385,7 +6218,7 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
          
               focus_row = clist->focus_row;
               clist->focus_row = -1;
-              draw_rows (clist, &area);
+              draw_rows (clist, NULL);
               clist->focus_row = focus_row;
          
              cairo_rectangle(cr, 0, y, clist->clist_window_width + 1,
@@ -6466,13 +6299,8 @@ row_new (GtkCMCList *clist)
   int i;
   GtkCMCListRow *clist_row;
 
-#if GLIB_CHECK_VERSION(2,10,0)
   clist_row = g_slice_new (GtkCMCListRow);
   clist_row->cell = g_slice_alloc (sizeof (GtkCMCell) * clist->columns);
-#else
-  clist_row = g_chunk_new (GtkCMCListRow, (GMemChunk *)clist->row_mem_chunk);
-  clist_row->cell = g_chunk_new (GtkCMCell, (GMemChunk *)clist->cell_mem_chunk);
-#endif
 
   for (i = 0; i < clist->columns; i++)
     {
@@ -6521,13 +6349,8 @@ row_delete (GtkCMCList    *clist,
   if (clist_row->destroy)
     clist_row->destroy (clist_row->data);
 
-#if GLIB_CHECK_VERSION(2,10,0)  
   g_slice_free1 (sizeof (GtkCMCell) * clist->columns, clist_row->cell);
   g_slice_free (GtkCMCListRow, clist_row);
-#else
-  g_mem_chunk_free ((GMemChunk *)clist->cell_mem_chunk, clist_row->cell);
-  g_mem_chunk_free ((GMemChunk *)clist->row_mem_chunk, clist_row);
-#endif
 }
 
 /* FOCUS FUNCTIONS
@@ -6656,9 +6479,9 @@ gtk_cmclist_draw_focus (GtkWidget *widget)
     cairo_dash_from_add_mode(clist, cr);
     cairo_set_line_width(cr, 1.0);
     cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
-    cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row),
+    cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row) + 0.5,
                        clist->clist_window_width + 1,
-                       clist->row_height);
+                       clist->row_height - 0.5);
     cairo_stroke(cr);
     cairo_destroy(cr);
   }
@@ -6685,9 +6508,9 @@ gtk_cmclist_undraw_focus (GtkWidget *widget)
     cairo_set_line_width(cr, 1.0);
     gdk_cairo_set_source_color(cr, &gtk_widget_get_style(widget)->base[GTK_STATE_NORMAL]);
     cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
-    cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row),
+    cairo_rectangle(cr, 0, ROW_TOP_YPIXEL(clist, clist->focus_row) + 0.5,
                        clist->clist_window_width + 1,
-                       clist->row_height);
+                       clist->row_height - 0.5);
     cairo_stroke(cr);
     cairo_destroy(cr);
   }
@@ -6972,8 +6795,13 @@ move_focus_row (GtkCMCList      *clist,
     case GTK_SCROLL_JUMP:
       if (position >= 0 && position <= 1)
        {
+         gint row = position * (clist->rows - 1);
+
+         if (row == clist->focus_row)
+           return;
+
          gtk_cmclist_undraw_focus (widget);
-         clist->focus_row = position * (clist->rows - 1);
+         clist->focus_row = row;
          gtk_cmclist_draw_focus (widget);
        }
       break;
@@ -7138,6 +6966,7 @@ scroll_vertical (GtkCMCList      *clist,
            default:
              break;
            }
+         /* fallback is intentional */ 
        default:
          if (old_focus_row != clist->focus_row &&
              !(clist->selection_mode == GTK_SELECTION_MULTIPLE &&
@@ -7420,6 +7249,9 @@ gtk_cmclist_merge (GtkCMCList *clist,
 
   c = &z;
 
+  if (!a && !b)
+       return NULL;
+
   while (a || b)
     {
       if (a && !b)
@@ -7442,8 +7274,7 @@ gtk_cmclist_merge (GtkCMCList *clist,
        {
          cmp = clist->compare (clist, GTK_CMCLIST_ROW (a), GTK_CMCLIST_ROW (b));
          if ((cmp >= 0 && clist->sort_type == GTK_SORT_DESCENDING) ||
-             (cmp <= 0 && clist->sort_type == GTK_SORT_ASCENDING) ||
-             (a && !b))
+             (cmp <= 0 && clist->sort_type == GTK_SORT_ASCENDING))
            {
              c->next = a;
              a->prev = c;
@@ -7460,7 +7291,9 @@ gtk_cmclist_merge (GtkCMCList *clist,
        }
     }
 
-  z.next->prev = NULL;
+  if (z.next)
+       z.next->prev = NULL;
+
   return z.next;
 }