diff --git a/src/editor.c b/src/editor.c index 1e624b1..90cd167 100644 --- a/src/editor.c +++ b/src/editor.c @@ -3,10 +3,19 @@ #include +#include #include "editor.h" #include "../config.h" +/* constants */ +static char const * _authors[] = +{ + "Pierre 'khorben' Pronchery", + NULL +}; +static char const _license[] = "GPLv2"; + /* Editor */ static GtkWidget * _new_menubar(Editor * editor); /* callbacks */ @@ -298,11 +307,15 @@ static void _on_file_save_as(GtkWidget * widget, gpointer data) /* callbacks */ static gboolean _about_on_closex(GtkWidget * widget, GdkEvent * event, gpointer data); +#if !GTK_CHECK_VERSION(2, 6, 0) +static void _about_on_close(GtkWidget * widget, gpointer data); +static void _about_on_credits(GtkWidget * widget, gpointer data); +static void _about_on_license(GtkWidget * widget, gpointer data); +#endif static void _on_help_about(GtkWidget * widget, gpointer data) { Editor * editor = data; static GtkWidget * window = NULL; - char const * authors[] = { "Pierre 'khorben' Pronchery", NULL }; char const copyright[] = "Copyright (c) 2006 khorben"; #if GTK_CHECK_VERSION(2, 6, 0) gsize cnt = 65536; @@ -326,27 +339,57 @@ static void _on_help_about(GtkWidget * widget, gpointer data) gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(window), PACKAGE); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), VERSION); gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(window), copyright); - gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(window), authors); + gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(window), _authors); if(g_file_get_contents("/usr/share/common-licenses/GPL-2", &buf, &cnt, NULL) == TRUE) gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), buf); else - gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), "GPLv2"); + gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), + _license); free(buf); gtk_widget_show(window); +} #else + GtkWidget * vbox; + GtkWidget * hbox; + GtkWidget * button; + if(window != NULL) { gtk_widget_show(window); return; } window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_transient(GTK_WINDOW(window), - GTK_WINDOW(editor->window)); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); gtk_window_set_title(GTK_WINDOW(window), "About Editor"); + gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW( + editor->window)); + g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK( + _about_on_closex), window); + vbox = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(PACKAGE " " VERSION), + FALSE, FALSE, 2); + gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(copyright), FALSE, + FALSE, 2); + hbox = gtk_hbox_new(TRUE, 4); + button = gtk_button_new_with_mnemonic("C_redits"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK( + _about_on_credits), window); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 4); + button = gtk_button_new_with_mnemonic("_License"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK( + _about_on_license), window); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 4); + button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK( + _about_on_close), window); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 4); + gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show_all(window); -#endif } +#endif /* !GTK_CHECK_VERSION(2, 6, 0) */ + static gboolean _about_on_closex(GtkWidget * widget, GdkEvent * event, gpointer data) { @@ -354,6 +397,113 @@ static gboolean _about_on_closex(GtkWidget * widget, GdkEvent * event, return TRUE; } +#if !GTK_CHECK_VERSION(2, 6, 0) +static void _about_on_close(GtkWidget * widget, gpointer data) +{ + GtkWidget * window = data; + + gtk_widget_hide(window); +} + +static void _about_on_credits(GtkWidget * widget, gpointer data) +{ + static GtkWidget * window = NULL; + GtkWidget * about = data; + GtkWidget * vbox; + GtkWidget * notebook; + GtkWidget * textview; + GtkTextBuffer * tbuf; + GtkTextIter iter; + GtkWidget * hbox; + size_t i; + + if(window != NULL) + { + gtk_widget_show(window); + return; + } + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); + gtk_window_set_title(GTK_WINDOW(window), "Credits"); + gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(about)); + g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK( + _about_on_closex), NULL); + vbox = gtk_vbox_new(FALSE, 0); + textview = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE); + tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); + gtk_text_buffer_set_text(tbuf, "", 0); + for(i = 0; _authors[i] != NULL; i++) + { + gtk_text_buffer_get_end_iter(tbuf, &iter); + gtk_text_buffer_insert(tbuf, &iter, _authors[i], strlen( + _authors[i])); + } + widget = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget), + GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(widget), textview); + notebook = gtk_notebook_new(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), widget, + gtk_label_new("Written by")); + gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 4); + hbox = gtk_hbox_new(FALSE, 0); + widget = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _about_on_close), window); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 4); + gtk_container_add(GTK_CONTAINER(window), vbox); + gtk_widget_show_all(window); +} + +static void _about_on_license(GtkWidget * widget, gpointer data) +{ + static GtkWidget * window = NULL; + GtkWidget * about = data; + GtkWidget * vbox; + GtkWidget * textview; + GtkTextBuffer * tbuf; + GtkWidget * hbox; + + if(window != NULL) + { + gtk_widget_show(window); + return; + } + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); + gtk_window_set_title(GTK_WINDOW(window), "License"); + gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(about)); + g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK( + _about_on_closex), NULL); + vbox = gtk_vbox_new(FALSE, 0); + textview = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE); + tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); + gtk_text_buffer_set_text(tbuf, _license, strlen(_license)); + widget = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget), + GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(widget), textview); + gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 4); + hbox = gtk_hbox_new(FALSE, 0); + widget = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect(G_OBJECT(widget), "clicked", + G_CALLBACK(_about_on_close), window); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 4); + gtk_container_add(GTK_CONTAINER(window), vbox); + gtk_widget_show_all(window); +} +#endif /* !GTK_CHECK_VERSION(2, 6, 0) */ + static void _on_new(GtkWidget * widget, gpointer data) { Editor * editor = data;