diff --git a/src/callbacks.c b/src/callbacks.c index 4cbd227..47d0ca0 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -27,16 +27,21 @@ /* constants */ static char const * _authors[] = { - "Pierre 'khorben' Pronchery", + "Pierre Pronchery ", NULL }; -static char const _license[] = "GPLv2"; +static char const _copyright[] = "Copyright (c) 2007 Pierre Pronchery"; +static char const _license[] = "GPL version 2"; /* window */ gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data) { - gtk_main_quit(); + Surfer * surfer = data; + + surfer_delete(surfer); + if(surfer_cnt == 0) + gtk_main_quit(); return FALSE; } @@ -44,36 +49,24 @@ gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data) /* file menu */ void on_file_close(GtkWidget * widget, gpointer data) { - gtk_main_quit(); + Surfer * surfer = data; + + surfer_delete(surfer); + if(surfer_cnt == 0) + gtk_main_quit(); } -static void _surfer_fork(Surfer * surfer, char const * url); void on_file_new_window(GtkWidget * widget, gpointer data) { Surfer * surfer = data; - char * url = gtk_moz_embed_get_location(GTK_MOZ_EMBED(surfer->view)); - - _surfer_fork(surfer, url); + char * url; + + url = gtk_moz_embed_get_location(GTK_MOZ_EMBED(surfer->view)); + surfer_new(url); free(url); } -static void _surfer_fork(Surfer * surfer, char const * url) -{ - pid_t pid; - - if((pid = fork()) == -1) - { - surfer_error(surfer, strerror(errno), 0); - return; - } - if(pid != 0) - return; - execlp("surfer", "surfer", url, NULL); - fprintf(stderr, "%s%s\n", "surfer: surfer: ", strerror(errno)); - exit(2); -} - void on_file_refresh(GtkWidget * widget, gpointer data) { @@ -112,7 +105,6 @@ void on_help_about(GtkWidget * widget, gpointer data) { Surfer * surfer = data; static GtkWidget * window = NULL; - char const copyright[] = "Copyright (c) 2006 khorben"; #if GTK_CHECK_VERSION(2, 6, 0) gsize cnt = 65536; gchar * buf; @@ -132,8 +124,8 @@ void on_help_about(GtkWidget * widget, gpointer data) surfer->window)); 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_copyright(GTK_ABOUT_DIALOG(window), _copyright); 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); @@ -167,7 +159,7 @@ void on_help_about(GtkWidget * widget, gpointer data) 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, + 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"); diff --git a/src/surfer.c b/src/surfer.c index 8f8cb9a..c0fa820 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -23,19 +23,22 @@ /* Surfer */ -static GtkWidget * _new_menubar(Surfer * surfer); +/* types */ struct _menu { char * name; GtkSignalFunc callback; char * stock; - unsigned int accel; /* FIXME don't work */ + unsigned int accel; /* FIXME doesn't work */ }; + struct _menubar { char * name; struct _menu * menu; }; + +/* variables */ static struct _menu _menu_file[] = { { "_New window", G_CALLBACK(on_file_new_window), NULL, GDK_N }, @@ -48,12 +51,14 @@ static struct _menu _menu_file[] = GDK_W }, { NULL, NULL, NULL, 0 } }; + static struct _menu _menu_edit[] = { { "_Preferences", G_CALLBACK(on_edit_preferences), GTK_STOCK_PREFERENCES, GDK_P }, { NULL, NULL, NULL, 0 } }; + static struct _menu _menu_help[] = { { "_About", G_CALLBACK(on_help_about), @@ -64,6 +69,7 @@ static struct _menu _menu_help[] = #endif { NULL, NULL, NULL, 0 } }; + static struct _menubar _menubar[] = { { "_File", _menu_file }, @@ -71,6 +77,12 @@ static struct _menubar _menubar[] = { "_Help", _menu_help }, { NULL, NULL } }; + +unsigned int surfer_cnt = 0; + +/* functions */ +static GtkWidget * _new_menubar(Surfer * surfer); + Surfer * surfer_new(char const * url) { Surfer * surfer; @@ -192,6 +204,7 @@ Surfer * surfer_new(char const * url) gtk_container_add(GTK_CONTAINER(surfer->window), vbox); gtk_widget_grab_focus(GTK_WIDGET(surfer->tb_path)); gtk_widget_show_all(surfer->window); + surfer_cnt++; return surfer; } @@ -248,6 +261,7 @@ void surfer_delete(Surfer * surfer) { /* config_delete(surfer->config); */ free(surfer); + surfer_cnt--; } diff --git a/src/surfer.h b/src/surfer.h index 0117e97..6d1756a 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -36,6 +36,7 @@ # define SURFER_GTKMOZEMBED_COMPPATH "/usr/pkg/lib/firefox" + /* types */ typedef struct _Surfer { @@ -54,6 +55,10 @@ typedef struct _Surfer } Surfer; +/* variables */ +extern unsigned int surfer_cnt; + + /* functions */ Surfer * surfer_new(char const * url); void surfer_delete(Surfer * surfer);