[glade] GladeDesignView: set selected layout state
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] GladeDesignView: set selected layout state
- Date: Tue, 30 Jan 2018 18:20:41 +0000 (UTC)
commit 0fd439fb6a45d9fde97d5ed012be9b01104aa693
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 61b731d..524e95d 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);
}
}
@@ -760,27 +771,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]