[gtk+] box gadget: Make it possible to draw focus



commit ebff86d6f69ba3af6c847eb254d230db9ddad347
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Feb 20 10:43:54 2016 -0500

    box gadget: Make it possible to draw focus
    
    There are widgets which use a box gadget and take focus,
    like GtkCheckButton.

 gtk/gtkboxgadget.c        |   25 ++++++++++++++++---------
 gtk/gtkboxgadgetprivate.h |    2 ++
 2 files changed, 18 insertions(+), 9 deletions(-)
---
diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c
index e16ddbd..c5657a9 100644
--- a/gtk/gtkboxgadget.c
+++ b/gtk/gtkboxgadget.c
@@ -36,6 +36,7 @@
 typedef struct _GtkBoxGadgetPrivate GtkBoxGadgetPrivate;
 struct _GtkBoxGadgetPrivate {
   GtkOrientation orientation;
+  gboolean draw_focus;
   GArray *children;
 };
 
@@ -448,6 +449,7 @@ gtk_box_gadget_draw (GtkCssGadget *gadget,
                      int           height)
 {
   GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (GTK_BOX_GADGET (gadget));
+  GtkWidget *owner = gtk_css_gadget_get_owner (gadget);
   guint i;
 
   for (i = 0 ; i < priv->children->len; i++)
@@ -455,18 +457,14 @@ gtk_box_gadget_draw (GtkCssGadget *gadget,
       GtkBoxGadgetChild *child = &g_array_index (priv->children, GtkBoxGadgetChild, i);
 
       if (GTK_IS_WIDGET (child->object))
-        {
-          gtk_container_propagate_draw (GTK_CONTAINER (gtk_css_gadget_get_owner (gadget)),
-                                        GTK_WIDGET (child->object),
-                                        cr);
-        }
+        gtk_container_propagate_draw (GTK_CONTAINER (owner), GTK_WIDGET (child->object), cr);
       else
-        {
-          gtk_css_gadget_draw (GTK_CSS_GADGET (child->object),
-                               cr);
-        }
+        gtk_css_gadget_draw (GTK_CSS_GADGET (child->object), cr);
     }
 
+  if (priv->draw_focus && gtk_widget_has_visible_focus (owner))
+    return TRUE;
+
   return FALSE;
 }
 
@@ -552,6 +550,15 @@ gtk_box_gadget_set_orientation (GtkBoxGadget   *gadget,
   priv->orientation = orientation;
 }
 
+void
+gtk_box_gadget_set_draw_focus (GtkBoxGadget *gadget,
+                               gboolean      draw_focus)
+{
+  GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget);
+
+  priv->draw_focus = draw_focus;
+}
+
 static GtkCssNode *
 get_css_node (GObject *child)
 {
diff --git a/gtk/gtkboxgadgetprivate.h b/gtk/gtkboxgadgetprivate.h
index 3662124..e59ab9a 100644
--- a/gtk/gtkboxgadgetprivate.h
+++ b/gtk/gtkboxgadgetprivate.h
@@ -56,6 +56,8 @@ GtkCssGadget *          gtk_box_gadget_new_for_node             (GtkCssNode
 
 void                    gtk_box_gadget_set_orientation          (GtkBoxGadget           *gadget,
                                                                  GtkOrientation          orientation);
+void                    gtk_box_gadget_set_draw_focus           (GtkBoxGadget           *gadget,
+                                                                 gboolean                draw_focus);
 
 void                    gtk_box_gadget_insert_widget            (GtkBoxGadget           *gadget,
                                                                  int                     pos,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]