diff options
author | Stefano Karapetsas <[email protected]> | 2012-09-03 15:46:25 +0200 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2012-09-03 15:46:25 +0200 |
commit | 591cfce33b69e95a0c3394c6e55179f95c09eeb1 (patch) | |
tree | 2274a68d05678de2e8d4b0aef9224a4876605d06 /mate-about/mate-about.c | |
parent | 060faa2203f81c7fd1ce719d4a5dcaff7813dadf (diff) | |
parent | 5f05216fc78ee1cff4b8fafa7ac1f9bb07a92796 (diff) | |
download | mate-desktop-591cfce33b69e95a0c3394c6e55179f95c09eeb1.tar.bz2 mate-desktop-591cfce33b69e95a0c3394c6e55179f95c09eeb1.tar.xz |
Merge branch 'master' of github.com:mate-desktop/mate-desktop
Diffstat (limited to 'mate-about/mate-about.c')
-rw-r--r-- | mate-about/mate-about.c | 85 |
1 files changed, 83 insertions, 2 deletions
diff --git a/mate-about/mate-about.c b/mate-about/mate-about.c index 9dea770..9626542 100644 --- a/mate-about/mate-about.c +++ b/mate-about/mate-about.c @@ -34,6 +34,37 @@ //class mate_about //{ + // what a mess! + #ifndef DISABLE_GNUCAT + + // Thanks! http://www.gtkforums.com/viewtopic.php?t=1639 + typedef struct _iter_arg { + GtkWidget* widget; + GdkPixbufAnimation* animation; + GdkPixbufAnimationIter* iter; + } iter_arg_t; + + gboolean on_animation_frame(iter_arg_t* object) + { + if (object->widget == NULL) + { + return FALSE; + } + + static gint frame = 1; + + if (gdk_pixbuf_animation_iter_advance(object->iter, NULL)) + { + frame++; + + gtk_about_dialog_set_logo((GtkAboutDialog*) object->widget, gdk_pixbuf_animation_iter_get_pixbuf(object->iter)); + } + + return TRUE; + } + + #endif + #if GTK_CHECK_VERSION(3, 0, 0) && !defined(UNIQUE) static void mate_about_on_activate(GtkApplication* app) @@ -76,8 +107,58 @@ gtk_window_set_default_icon_name(icon); - /* logo */ - #if GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 6, 0) + #ifndef DISABLE_GNUCAT + + /* hacemos una comprovacion de la fecha, para mostrar el gnucat + * version navideƱa. */ + gboolean christmas_is = FALSE; + + GDate* d = g_date_new(); + g_date_set_time_t(d, (time_t) time(NULL)); + + if (g_date_get_month(d) == G_DATE_DECEMBER) + { + GDateDay day = g_date_get_day(d); + + if (day >= 24 && day <=25) + { + christmas_is = TRUE; + } + } + + g_date_free(d); + + + if (christmas_is == TRUE) + { + GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "gnu-cat_navideno_v3.png", NULL); + gtk_about_dialog_set_logo(mate_about_dialog, pixbuf); + g_object_unref(pixbuf); + } + else + { + iter_arg_t animation_object; + GdkPixbufAnimation* animation; + GdkPixbufAnimationIter *iter; + GtkWidget* image; + + animation = gdk_pixbuf_animation_new_from_file(PIXMAPS_DIR "gnu-cat.gif", NULL); + + if (animation != NULL) + { + iter = gdk_pixbuf_animation_get_iter(animation, NULL); + + animation_object.animation = animation; + animation_object.iter = iter; + animation_object.widget = (GtkWidget*) mate_about_dialog; + + gtk_about_dialog_set_logo(mate_about_dialog, gdk_pixbuf_animation_iter_get_pixbuf(iter)); + + g_timeout_add(gdk_pixbuf_animation_iter_get_delay_time(iter), (GSourceFunc) on_animation_frame, (gpointer) &animation_object); + } + } + + #elif GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 6, 0) gtk_about_dialog_set_logo_icon_name(mate_about_dialog, icon); |