[glade/glade-3-20] GladeDesignView: set selected layout state



commit e83dd1db9279229b4913ddaf79c8a40b2676e557
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Sat Jan 20 23:10:20 2018 -0300

    GladeDesignView: set selected layout state
    
    Update layout state in order to change border color with css

 gladeui/glade-design-layout.c   |    6 ---
 gladeui/glade-design-layout.css |   11 +++++-
 gladeui/glade-design-private.h  |    3 -
 gladeui/glade-design-view.c     |   82 +++++++++++++++++----------------------
 4 files changed, 46 insertions(+), 56 deletions(-)
---
diff --git a/gladeui/glade-design-layout.c b/gladeui/glade-design-layout.c
index ec97982..bb92ca5 100644
--- a/gladeui/glade-design-layout.c
+++ b/gladeui/glade-design-layout.c
@@ -703,9 +703,7 @@ glade_design_layout_button_press_event (GtkWidget *widget, GdkEventButton *ev)
       (!glade_project_is_toplevel_active (priv->project, child) ||
       ev->type == GDK_2BUTTON_PRESS))
     {
-      _glade_design_view_freeze (priv->view);
       glade_project_selection_set (priv->project, G_OBJECT (child), TRUE);
-      _glade_design_view_thaw (priv->view);
     }
 
   return (activity != ACTIVITY_NONE);
@@ -2512,8 +2510,6 @@ _glade_design_layout_do_event (GladeDesignLayout *layout, GdkEvent *event)
    */
   gdl_drag_source_check (layout, mode, event, gwidget, x, y);
 
-  _glade_design_view_freeze (priv->view);
-  
   /* Try the placeholder first */
   if (placeholder && gtk_widget_event (placeholder, event)) 
     retval = TRUE;
@@ -2522,7 +2518,5 @@ _glade_design_layout_do_event (GladeDesignLayout *layout, GdkEvent *event)
   else
     retval = FALSE;
 
-  _glade_design_view_thaw (priv->view);
-
   return retval;
 }
diff --git a/gladeui/glade-design-layout.css b/gladeui/glade-design-layout.css
index 9d2bf21..c609ac1 100644
--- a/gladeui/glade-design-layout.css
+++ b/gladeui/glade-design-layout.css
@@ -23,12 +23,21 @@
 
 glade-design-layout {
   background: none;
-  border: 4px solid @theme_selected_bg_color;
+  border: 4px solid @borders;
   color: @theme_selected_fg_color;
   border-radius: 4px 4px 0px 4px;
 }
 
+glade-design-layout:selected {
+  border: 4px solid @theme_selected_bg_color;
+}
+
 glade-design-layout.handle {
+  background-color: @borders;
+  border-radius: 0px 0px 4px 4px;
+}
+
+glade-design-layout:selected.handle {
   background-color: @theme_selected_bg_color;
   border-radius: 0px 0px 4px 4px;
 }
diff --git a/gladeui/glade-design-private.h b/gladeui/glade-design-private.h
index 8b61460..47a7148 100644
--- a/gladeui/glade-design-private.h
+++ b/gladeui/glade-design-private.h
@@ -31,9 +31,6 @@
 
 G_BEGIN_DECLS
 
-void _glade_design_view_freeze (GladeDesignView *view);
-void _glade_design_view_thaw   (GladeDesignView *view);
-
 void _glade_design_layout_get_colors (GdkRGBA *c1, GdkRGBA *c2,
                                       GdkRGBA *c3, GdkRGBA *c4);
 
diff --git a/gladeui/glade-design-view.c b/gladeui/glade-design-view.c
index e22996e..91e0040 100644
--- a/gladeui/glade-design-view.c
+++ b/gladeui/glade-design-view.c
@@ -106,38 +106,49 @@ on_layout_size_allocate (GtkWidget *widget, GtkAllocation *alloc, GladeDesignVie
 }
 
 static void
+glade_design_view_update_state (GList *objects, GtkStateFlags state)
+{
+  GList *l;
+
+  for (l = objects; l && l->data; l = g_list_next (l))
+    {
+      GtkWidget *view, *widget = l->data;
+
+      if (GTK_IS_WIDGET (widget) &&
+          gtk_widget_get_visible (widget) &&
+          (view = gtk_widget_get_ancestor (widget, GLADE_TYPE_DESIGN_LAYOUT)))
+        {
+          gtk_widget_set_state_flags (view, state, TRUE);
+        }
+    }
+}
+
+static void
 glade_design_view_selection_changed (GladeProject *project, GladeDesignView *view)
 {
+  GtkWidget *layout;
   GList *selection;
 
+  glade_design_view_update_state (glade_project_toplevels (project),
+                                  GTK_STATE_FLAG_NORMAL);
+
+  if (!(selection = glade_project_selection_get (project)))
+    return;
+
+  glade_design_view_update_state (selection, GTK_STATE_FLAG_SELECTED);
+
   /* Check if its only one widget selected and scroll viewport to show toplevel */
-  if ((selection = glade_project_selection_get (project)) &&
-      g_list_next (selection) == NULL &&
-      GTK_IS_WIDGET (selection->data))
+  if (g_list_next (selection) == NULL &&
+      GTK_IS_WIDGET (selection->data) &&
+      (layout = gtk_widget_get_ancestor (selection->data, GLADE_TYPE_DESIGN_LAYOUT)))
     {
-      GladeWidget *gwidget, *gtoplevel;
-      GObject *toplevel;
-      
-      if (!GLADE_IS_PLACEHOLDER (selection->data) &&
-          (gwidget = glade_widget_get_from_gobject (G_OBJECT (selection->data))) &&
-          (gtoplevel = glade_widget_get_toplevel (gwidget)) &&
-          (toplevel = glade_widget_get_object (gtoplevel)) &&
-          GTK_IS_WIDGET (toplevel))
-        {
-          GtkWidget *layout;
-
-          if ((layout = gtk_widget_get_parent (GTK_WIDGET (toplevel))) &&
-              GLADE_IS_DESIGN_LAYOUT (layout))
-            {
-              GtkAllocation alloc;
-              gtk_widget_get_allocation (layout, &alloc);
+      GtkAllocation alloc;
+      gtk_widget_get_allocation (layout, &alloc);
 
-              if (alloc.x < 0)
-                g_signal_connect (layout, "size-allocate", G_CALLBACK (on_layout_size_allocate), view);
-              else
-                glade_design_layout_scroll (view, alloc.x, alloc.y, alloc.width, alloc.height);
-            }
-        }
+      if (alloc.x < 0)
+        g_signal_connect (layout, "size-allocate", G_CALLBACK (on_layout_size_allocate), view);
+      else
+        glade_design_layout_scroll (view, alloc.x, alloc.y, alloc.width, alloc.height);
     }
 }
 
@@ -757,27 +768,6 @@ glade_design_view_class_init (GladeDesignViewClass *klass)
                                                         G_PARAM_CONSTRUCT_ONLY));
 }
 
-/* Private API */
-void
-_glade_design_view_freeze (GladeDesignView *view)
-{
-  g_return_if_fail (GLADE_IS_DESIGN_VIEW (view));
-  
-  g_signal_handlers_block_by_func (view->priv->project,
-                                   glade_design_view_selection_changed,
-                                   view);
-}
-
-void
-_glade_design_view_thaw   (GladeDesignView *view)
-{
-  g_return_if_fail (GLADE_IS_DESIGN_VIEW (view));
-  
-  g_signal_handlers_unblock_by_func (view->priv->project,
-                                     glade_design_view_selection_changed,
-                                     view);
-}
-
 /* Public API */
 
 GladeProject *


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