diff options
author | Matt Watson <mattdangerw@gmail.com> | 2013-06-12 17:26:57 -0700 |
---|---|---|
committer | Matt Watson <mattdangerw@gmail.com> | 2013-06-18 17:15:59 -0700 |
commit | 5182ef75db8ce57672c5665a780f9ef14f7e84f2 (patch) | |
tree | 9c6602df554e0c91ae771732f9775c2c2b96e427 | |
parent | 55071af8e3832099575398819f8cda5d10ea37f5 (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.c | 46 |
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)); |