diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2018-01-20 23:10:20 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2018-01-30 15:22:36 -0300 |
commit | e83dd1db9279229b4913ddaf79c8a40b2676e557 (patch) | |
tree | 32eb25e994e7ce95cc4628ac2b044af733fabfb9 | |
parent | ae8827eac304d0f8ba24608b48539cff80887149 (diff) | |
download | glade-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.c | 6 | ||||
-rw-r--r-- | gladeui/glade-design-layout.css | 11 | ||||
-rw-r--r-- | gladeui/glade-design-private.h | 3 | ||||
-rw-r--r-- | 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 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 * |