summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Watson <mattdangerw@gmail.com>2013-06-12 17:26:57 -0700
committerMatt Watson <mattdangerw@gmail.com>2013-06-18 17:15:59 -0700
commit5182ef75db8ce57672c5665a780f9ef14f7e84f2 (patch)
tree9c6602df554e0c91ae771732f9775c2c2b96e427
parent55071af8e3832099575398819f8cda5d10ea37f5 (diff)
Bug fix. Window detects properly when two backgrounds the same
And does not transtion between them if they are equal. [endlessm/eos-sdk#102]
-rw-r--r--endless/eoswindow.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/endless/eoswindow.c b/endless/eoswindow.c
index e4eb132..8e30f94 100644
--- a/endless/eoswindow.c
+++ b/endless/eoswindow.c
@@ -38,15 +38,17 @@
#define BACKGROUND_FRAME_NAME_TEMPLATE "_eos-window-background-%d"
-#define TRANSPARENT_FRAME_CSS_TEMPLATE "#%s { background-image: none;\n" \
- " background-color: transparent\n;" \
- " border-width: 0px; }\n"
+#define TRANSPARENT_FRAME_CSS_PROPERTIES "{ background-image: none;\n" \
+ " background-color: transparent\n;" \
+ " border-width: 0px; }\n"
-#define BACKGROUND_FRAME_CSS_TEMPLATE "#%s { background-image: url(\"%s\");\n" \
- " background-size: %s;\n" \
- " background-position: %s;\n" \
- " background-repeat: %s;\n" \
- " border-width: 0px; }\n"
+#define BACKGROUND_FRAME_CSS_PROPERTIES_TEMPLATE "{ background-image: url(\"%s\");\n" \
+ " background-size: %s;\n" \
+ " background-position: %s;\n" \
+ " background-repeat: %s;\n" \
+ " border-width: 0px; }\n"
+
+#define CSS_TEMPLATE "#%s %s #%s %s"
G_DEFINE_TYPE (EosWindow, eos_window, GTK_TYPE_APPLICATION_WINDOW)
@@ -70,7 +72,7 @@ struct _EosWindowPrivate
GtkWidget *current_page;
gulong visible_page_property_handler;
GtkCssProvider *background_provider;
- gchar *current_background_css;
+ gchar *current_background_css_props;
};
enum
@@ -200,10 +202,8 @@ sync_stack_animation (EosWindow *self)
// Helper to generate frame css override
static gchar *
format_background_css (EosPageManager *pm,
- GtkWidget *background_frame,
GtkWidget *page)
{
- const gchar *frame_name = gtk_widget_get_name (background_frame);
const gchar *background_uri = eos_page_manager_get_page_background_uri (pm, page);
const gchar *background_size = eos_page_manager_get_page_background_size (pm, page);
const gchar *background_position = eos_page_manager_get_page_background_position (pm, page);
@@ -214,10 +214,8 @@ format_background_css (EosPageManager *pm,
// transparent. So any css styling of EosWindow will "show through" the
// pages.
if (background_uri == NULL)
- return g_strdup_printf (TRANSPARENT_FRAME_CSS_TEMPLATE,
- frame_name);
- return g_strdup_printf (BACKGROUND_FRAME_CSS_TEMPLATE,
- frame_name,
+ return TRANSPARENT_FRAME_CSS_PROPERTIES;
+ return g_strdup_printf (BACKGROUND_FRAME_CSS_PROPERTIES_TEMPLATE,
background_uri,
background_size,
background_position,
@@ -240,15 +238,16 @@ update_page_background (EosWindow *self)
if (page == NULL)
return;
// Set up css override for transition background...
- gchar *next_background_css = format_background_css (pm,
- self->priv->next_background,
- page);
+ gchar *next_background_css_props = format_background_css (pm,
+ page);
// If page background are exactly the same, do not transition
- if (g_strcmp0 (self->priv->current_background_css, next_background_css) == 0)
+ if (g_strcmp0 (self->priv->current_background_css_props, next_background_css_props) == 0)
return;
- gchar *background_css = g_strconcat(next_background_css,
- self->priv->current_background_css,
- NULL);
+ gchar *background_css = g_strdup_printf(CSS_TEMPLATE,
+ gtk_widget_get_name (self->priv->current_background),
+ self->priv->current_background_css_props,
+ gtk_widget_get_name (self->priv->next_background),
+ next_background_css_props);
// Override the css
GtkStyleProvider *provider =
GTK_STYLE_PROVIDER (self->priv->background_provider);
@@ -265,7 +264,7 @@ update_page_background (EosWindow *self)
GtkWidget *temp = self->priv->next_background;
self->priv->next_background = self->priv->current_background;
self->priv->current_background = temp;
- self->priv->current_background_css = next_background_css;
+ self->priv->current_background_css_props = next_background_css_props;
}
/*
@@ -568,6 +567,7 @@ eos_window_init (EosWindow *self)
self->priv = WINDOW_PRIVATE (self);
self->priv->background_provider = gtk_css_provider_new ();
+ self->priv->current_background_css_props = TRANSPARENT_FRAME_CSS_PROPERTIES;
self->priv->top_bar = eos_top_bar_new ();
gtk_widget_set_parent (self->priv->top_bar, GTK_WIDGET (self));