diff options
Diffstat (limited to 'mate-about/mate-about.c')
-rw-r--r-- | mate-about/mate-about.c | 396 |
1 files changed, 205 insertions, 191 deletions
diff --git a/mate-about/mate-about.c b/mate-about/mate-about.c index ce74312..b777a9f 100644 --- a/mate-about/mate-about.c +++ b/mate-about/mate-about.c @@ -32,253 +32,267 @@ textdomain(package); #endif -// what a mess! -#ifndef DISABLE_NYANCAT - -// 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; - } +//class mate_about +//{ + // what a mess! + #ifndef DISABLE_NYANCAT - static gint frame = 1; + // Thanks! http://www.gtkforums.com/viewtopic.php?t=1639 + typedef struct _iter_arg { + GtkWidget* widget; + GdkPixbufAnimation* animation; + GdkPixbufAnimationIter* iter; + } iter_arg_t; - if (gdk_pixbuf_animation_iter_advance(object->iter, NULL)) + gboolean on_animation_frame(iter_arg_t* object) { - frame++; + if (object->widget == NULL) + { + return FALSE; + } - gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(object->widget), gdk_pixbuf_animation_iter_get_pixbuf(object->iter)); - } + static gint frame = 1; - return TRUE; -} + if (gdk_pixbuf_animation_iter_advance(object->iter, NULL)) + { + frame++; -#endif + gtk_about_dialog_set_logo((GtkAboutDialog*) object->widget, gdk_pixbuf_animation_iter_get_pixbuf(object->iter)); + } -#if GTK_CHECK_VERSION(3, 0, 0) && !defined(UNIQUE) + return TRUE; + } -static void mate_about_on_activate(GtkApplication* app) -{ - GList* list; - GtkWidget* window; + #endif - list = gtk_application_get_windows(app); + #if GTK_CHECK_VERSION(3, 0, 0) && !defined(UNIQUE) - if (list) + static void mate_about_on_activate(GtkApplication* app) { - gtk_window_present(GTK_WINDOW(list->data)); - } - else - { - mate_about_run(); + GList* list; + GtkWidget* window; + + list = gtk_application_get_windows(app); + + if (list) + { + gtk_window_present(GTK_WINDOW(list->data)); + } + else + { + mate_about_run(); + } } -} -#elif GLIB_CHECK_VERSION(2, 26, 0) && !defined(UNIQUE) -// es un callback -static void mate_about_on_activate(GApplication* app) -{ - if (!mate_about_dialog) + #elif GLIB_CHECK_VERSION(2, 26, 0) && !defined(UNIQUE) + // es un callback + static void mate_about_on_activate(GApplication* app) { - mate_about_run(); + if (!mate_about_dialog) + { + mate_about_run(); + } + else + { + gtk_window_present(GTK_WINDOW(mate_about_dialog)); + } } - else + + #endif + + void mate_about_run(void) { - gtk_window_present(GTK_WINDOW(mate_about_dialog)); - } -} + /* Es importante llamar gtk_init, si no, no se puede iniciar bien el dialogo */ + mate_about_dialog = (GtkAboutDialog*) gtk_about_dialog_new(); -#endif + gtk_window_set_default_icon_name(icon); -void mate_about_run(void) -{ - /** - * Es importante llamar gtk_init, si no, no se puede iniciar bien el dialogo - */ - mate_about_dialog = gtk_about_dialog_new(); + /* logo */ + #ifndef DISABLE_NYANCAT - gtk_window_set_default_icon_name(icon); + /* hacemos una comprovacion de la fecha, para mostrar el nyancat + * version navideƱa. */ + gboolean christmas_is = FALSE; - // logo - #ifndef DISABLE_NYANCAT - iter_arg_t animation_object; - GdkPixbufAnimation* animation; - GdkPixbufAnimationIter *iter; - GtkWidget* image; + GDate* d = g_date_new(); + g_date_set_time_t(d, (time_t) time(NULL)); - animation = gdk_pixbuf_animation_new_from_file(PIXMAPS_DIR "nyan-cat.gif", NULL); + if (g_date_get_month(d) == G_DATE_DECEMBER) + { + GDateDay day = g_date_get_day(d); - if (animation != NULL) - { - iter = gdk_pixbuf_animation_get_iter(animation, NULL); + if (day >= 24 && day <=25) + { + christmas_is = TRUE; + } + } - animation_object.animation = animation; - animation_object.iter = iter; - animation_object.widget = mate_about_dialog; + g_date_free(d); - gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(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); - } + if (christmas_is == TRUE) + { + GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "nyan-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; - #elif GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 6, 0) + animation = gdk_pixbuf_animation_new_from_file(PIXMAPS_DIR "nyan-cat.gif", NULL); - gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(mate_about_dialog), icon); + if (animation != NULL) + { + iter = gdk_pixbuf_animation_get_iter(animation, NULL); - #else + animation_object.animation = animation; + animation_object.iter = iter; + animation_object.widget = (GtkWidget*) mate_about_dialog; - GtkIconTheme* icon_theme = gtk_icon_theme_get_default(); + gtk_about_dialog_set_logo(mate_about_dialog, gdk_pixbuf_animation_iter_get_pixbuf(iter)); - if (gtk_icon_theme_has_icon(icon_theme, icon)) - { - GdkPixbuf* pixbuf = gtk_icon_theme_load_icon(icon_theme, icon, 64, 0, NULL); - gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(mate_about_dialog), pixbuf); - g_object_unref(pixbuf); - } + g_timeout_add(gdk_pixbuf_animation_iter_get_delay_time(iter), (GSourceFunc) on_animation_frame, (gpointer) &animation_object); + } + } - #endif + #elif GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 6, 0) - //name - #if GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 12, 0) - gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(mate_about_dialog), gettext(program_name)); - #else - gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(mate_about_dialog), gettext(program_name)); - #endif + gtk_about_dialog_set_logo_icon_name(mate_about_dialog, icon); - // version - gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(mate_about_dialog), version); + #else - // creditos y pagina web - gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(mate_about_dialog), copyright); - gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(mate_about_dialog), website); + GtkIconTheme* icon_theme = gtk_icon_theme_get_default(); - /** - * This generate a random message. - * The comments index must not be more than comments_count - 1 - */ - gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(mate_about_dialog), gettext(comments_array[g_random_int_range(0, comments_count - 1)])); + if (gtk_icon_theme_has_icon(icon_theme, icon)) + { + GdkPixbuf* pixbuf = gtk_icon_theme_load_icon(icon_theme, icon, 64, 0, NULL); + gtk_about_dialog_set_logo(mate_about_dialog, pixbuf); + g_object_unref(pixbuf); + } - // autores - gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(mate_about_dialog), authors); - // I comment this because the list is empty - gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(mate_about_dialog), artists); - gtk_about_dialog_set_documenters(GTK_ABOUT_DIALOG(mate_about_dialog), documenters); + #endif - #if GTK_CHECK_VERSION(3, 0, 0) - gtk_about_dialog_set_license_type(GTK_ABOUT_DIALOG(mate_about_dialog), GTK_LICENSE_GPL_3_0); - gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(mate_about_dialog), TRUE); - #endif + //name + #if GTK_CHECK_VERSION(3, 0, 0) || GTK_CHECK_VERSION(2, 12, 0) + gtk_about_dialog_set_program_name(mate_about_dialog, gettext(program_name)); + #else + gtk_about_dialog_set_name(mate_about_dialog, gettext(program_name)); + #endif - #ifdef USE_UNIQUE - unique_app_watch_window(mate_about_application, GTK_WINDOW(mate_about_dialog)); - #elif GTK_CHECK_VERSION(3, 0, 0) && !defined(UNIQUE) - gtk_window_set_application(GTK_WINDOW(mate_about_dialog), mate_about_application); - #endif + // version + gtk_about_dialog_set_version(mate_about_dialog, version); + + // creditos y pagina web + gtk_about_dialog_set_copyright(mate_about_dialog, copyright); + gtk_about_dialog_set_website(mate_about_dialog, website); - // start and destroy - gtk_dialog_run(GTK_DIALOG(mate_about_dialog)); - gtk_widget_destroy(mate_about_dialog); -} - -void mate_about_release_version(void) -{ - g_printf("%s %s\n", gettext(program_name), version); -} - -// ... -gint main(gint argc, gchar** argv) -{ - gint status = 0; - /** - * Solo utilizado para option parse - */ - GError* error = NULL; - - /* Con esto se inicia gettext - * GETTEXT_PACKAGE = mate-desktop-2.0 - * LOCALE_DIR = /usr/local/share/locale - **/ - mate_gettext(GETTEXT_PACKAGE, LOCALE_DIR, "UTF-8"); - - g_type_init(); - /** - * http://www.gtk.org/api/2.6/glib/glib-Commandline-option-parser.html - */ - GOptionContext* context = g_option_context_new(NULL); - g_option_context_add_main_entries(context, command_entries, GETTEXT_PACKAGE); - g_option_context_add_group(context, gtk_get_option_group(TRUE)); - g_option_context_parse(context, &argc, &argv, &error); - - /** - * Not necesary at all, program just run and die. - * But it free a little memory. - */ - g_option_context_free(context); - - gtk_init(&argc, &argv); - - if (mate_about_nogui == TRUE) - { - mate_about_release_version(); - } - else - { /** - * Ejemplos tomados de: - * http://developer.gnome.org/gtk3/3.0/gtk-migrating-GtkApplication.html + * This generate a random message. + * The comments index must not be more than comments_count - 1 */ - #if defined(UNIQUE) + gtk_about_dialog_set_comments(mate_about_dialog, gettext(comments_array[g_random_int_range(0, comments_count - 1)])); - mate_about_application = unique_app_new("org.mate.about", NULL); + // autores + gtk_about_dialog_set_authors(mate_about_dialog, authors); + // I comment this because the list is empty + gtk_about_dialog_set_artists(mate_about_dialog, artists); + gtk_about_dialog_set_documenters(mate_about_dialog, documenters); - if (unique_app_is_running(mate_about_application)) - { - UniqueResponse response = unique_app_send_message(mate_about_application, UNIQUE_ACTIVATE, NULL); + #if GTK_CHECK_VERSION(3, 0, 0) + gtk_about_dialog_set_license_type(mate_about_dialog, GTK_LICENSE_GPL_3_0); + gtk_about_dialog_set_wrap_license(mate_about_dialog, TRUE); + #endif + + #ifdef USE_UNIQUE + unique_app_watch_window(mate_about_application, (GtkWindow*) mate_about_dialog); + #elif GTK_CHECK_VERSION(3, 0, 0) && !defined(UNIQUE) + gtk_window_set_application(GTK_WINDOW(mate_about_dialog), mate_about_application); + #endif + + // start and destroy + gtk_dialog_run((GtkDialog*) mate_about_dialog); + gtk_widget_destroy((GtkWidget*) mate_about_dialog); + } + + int main(int argc, char** argv) + { + int status = 0; - if (response != UNIQUE_RESPONSE_OK) + /* Con esto se inicia gettext + * GETTEXT_PACKAGE = mate-desktop-2.0 + * LOCALE_DIR = /usr/local/share/locale */ + mate_gettext(GETTEXT_PACKAGE, LOCALE_DIR, "UTF-8"); + + g_type_init(); + /* http://www.gtk.org/api/2.6/glib/glib-Commandline-option-parser.html */ + GOptionContext* context = g_option_context_new(NULL); + g_option_context_add_main_entries(context, command_entries, GETTEXT_PACKAGE); + g_option_context_add_group(context, gtk_get_option_group(TRUE)); + g_option_context_parse(context, &argc, &argv, NULL); + + /* Not necesary at all, program just run and die. + * But it free a little memory. */ + g_option_context_free(context); + + if (mate_about_nogui == TRUE) + { + printf("%s %s\n", gettext(program_name), version); + } + else + { + gtk_init(&argc, &argv); + + /** + * Ejemplos tomados de: + * http://developer.gnome.org/gtk3/3.0/gtk-migrating-GtkApplication.html + */ + #ifdef USE_UNIQUE + + mate_about_application = unique_app_new("org.mate.about", NULL); + + if (unique_app_is_running(mate_about_application)) { - status = 1; + UniqueResponse response = unique_app_send_message(mate_about_application, UNIQUE_ACTIVATE, NULL); + + if (response != UNIQUE_RESPONSE_OK) + { + status = 1; + } + } + else + { + mate_about_run(); } - } - else - { - mate_about_run(); - } - //g_object_unref(mate_about_application); + #elif GTK_CHECK_VERSION(3, 0, 0) && !defined(USE_UNIQUE) - #elif GTK_CHECK_VERSION(3, 0, 0) && !defined(USE_UNIQUE) + mate_about_application = gtk_application_new("org.mate.about", 0); + g_signal_connect(mate_about_application, "activate", G_CALLBACK(mate_about_on_activate), NULL); - mate_about_application = gtk_application_new("org.mate.about", 0); - g_signal_connect(mate_about_application, "activate", G_CALLBACK(mate_about_on_activate), NULL); + status = g_application_run(G_APPLICATION(mate_about_application), argc, argv); - status = g_application_run(G_APPLICATION(mate_about_application), argc, argv); + g_object_unref(mate_about_application); - g_object_unref(mate_about_application); + #elif GLIB_CHECK_VERSION(2, 26, 0) && !defined(USE_UNIQUE) - #elif GLIB_CHECK_VERSION(2, 26, 0) && !defined(USE_UNIQUE) + mate_about_application = g_application_new("org.mate.about", G_APPLICATION_FLAGS_NONE); + g_signal_connect(mate_about_application, "activate", G_CALLBACK(mate_about_on_activate), NULL); - mate_about_application = g_application_new("org.mate.about", G_APPLICATION_FLAGS_NONE); - g_signal_connect(mate_about_application, "activate", G_CALLBACK(mate_about_on_activate), NULL); + status = g_application_run(G_APPLICATION(mate_about_application), argc, argv); - status = g_application_run(G_APPLICATION(mate_about_application), argc, argv); + g_object_unref(mate_about_application); - g_object_unref(mate_about_application); + #else + mate_about_run(); + #endif + } - #else - mate_about_run(); - #endif + return status; } - - return status; -} +//} #endif |