changeset 2471:e8e3bbdc4491

Bug Fix: Marks checkboxes in GTK 3.14 Make marks checkboxes visible in icon mode in GTK 3.14 and later
author Colin Clark <colin.clark@cclark.uk>
date Sat, 29 Apr 2017 19:24:33 +0100
parents 67c8cff1dc39
children 11455ee1aaf3
files src/cellrenderericon.c
diffstat 1 files changed, 34 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/cellrenderericon.c	Thu Apr 27 21:36:46 2017 +0100
+++ b/src/cellrenderericon.c	Sat Apr 29 19:24:33 2017 +0100
@@ -824,11 +824,17 @@
 			for (i = 0; i < cellicon->num_marks; i++)
 				{
 #if GTK_CHECK_VERSION(3,0,0)
+#if GTK_CHECK_VERSION(3,14,0)
+  				state &= ~(GTK_STATE_FLAG_CHECKED);
+
+				if ((cellicon->marks & (1 << i)))
+					state |= GTK_STATE_FLAG_CHECKED;
+#else
   				state &= ~(GTK_STATE_FLAG_ACTIVE);
 
 				if ((cellicon->marks & (1 << i)))
 					state |= GTK_STATE_FLAG_ACTIVE;
-
+#endif
 				cairo_save (cr);
 
 				cairo_rectangle(cr,
@@ -842,10 +848,35 @@
 
 				gtk_style_context_add_class(context, GTK_STYLE_CLASS_CHECK);
 
+				gtk_style_context_add_class(context, "marks");
+				GtkStyleProvider *provider;
+				provider = (GtkStyleProvider *)gtk_css_provider_new();
+				gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(provider),
+						".marks {\n"
+						"border-color: #808080;\n"
+						"border-style: solid;\n"
+						"border-width: 1px;\n"
+						"border-radius: 0px;\n"
+						"}\n"
+						,-1, NULL);
+				gtk_style_context_add_provider(context, provider,
+							GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
 				gtk_render_check(context, cr,
 					 pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
 					 pix_rect.y,
 					 TOGGLE_WIDTH, TOGGLE_WIDTH);
+				gtk_render_frame(context, cr,
+					 pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+					 pix_rect.y,
+					 TOGGLE_WIDTH, TOGGLE_WIDTH);
+
+				if (cellicon->focused && gtk_widget_has_focus(widget))
+					{
+					gtk_render_focus(context, cr,
+						pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+						pix_rect.y, TOGGLE_WIDTH, TOGGLE_WIDTH);
+					}
 				gtk_style_context_restore(context);
 				cairo_restore(cr);
 
@@ -859,21 +890,18 @@
 #endif
 				}
 			}
-                }
+		}
 
+#if !GTK_CHECK_VERSION(3,0,0)
 	if (cellicon->focused && gtk_widget_has_focus(widget))
 		{
-#if GTK_CHECK_VERSION(3,0,0)
-#else
 		gtk_paint_focus(gtk_widget_get_style(widget), window,
 				state,
 				cell_area, widget,
 				"cellrendererfocus",
 				cell_area->x, cell_area->y,
 				cell_area->width, cell_area->height);
-#endif
 		}
-#if !GTK_CHECK_VERSION(3,0,0)
 	cairo_destroy(cr);
 #endif
 }