summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-01-20 23:10:20 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-01-30 15:22:36 -0300
commite83dd1db9279229b4913ddaf79c8a40b2676e557 (patch)
tree32eb25e994e7ce95cc4628ac2b044af733fabfb9
parentae8827eac304d0f8ba24608b48539cff80887149 (diff)
downloadglade-e83dd1db9279229b4913ddaf79c8a40b2676e557.tar.gz
GladeDesignView: set selected layout state
Update layout state in order to change border color with css
-rw-r--r--gladeui/glade-design-layout.c6
-rw-r--r--gladeui/glade-design-layout.css11
-rw-r--r--gladeui/glade-design-private.h3
-rw-r--r--gladeui/glade-design-view.c82
4 files changed, 46 insertions, 56 deletions
diff --git a/gladeui/glade-design-layout.c b/gladeui/glade-design-layout.c
index ec979822..bb92ca58 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 9d2bf214..c609ac19 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 8b61460c..47a7148c 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 e22996e1..91e0040d 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 *