Not forking when creating new windows

This commit is contained in:
Pierre Pronchery 2007-06-25 16:20:30 +00:00
parent 0cdc71548c
commit faec6aaf53
3 changed files with 40 additions and 29 deletions

View File

@ -27,15 +27,20 @@
/* constants */ /* constants */
static char const * _authors[] = static char const * _authors[] =
{ {
"Pierre 'khorben' Pronchery", "Pierre Pronchery <khorben@defora.org>",
NULL NULL
}; };
static char const _license[] = "GPLv2"; static char const _copyright[] = "Copyright (c) 2007 Pierre Pronchery";
static char const _license[] = "GPL version 2";
/* window */ /* window */
gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data) gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data)
{ {
Surfer * surfer = data;
surfer_delete(surfer);
if(surfer_cnt == 0)
gtk_main_quit(); gtk_main_quit();
return FALSE; return FALSE;
} }
@ -44,36 +49,24 @@ gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data)
/* file menu */ /* file menu */
void on_file_close(GtkWidget * widget, gpointer data) void on_file_close(GtkWidget * widget, gpointer data)
{ {
Surfer * surfer = data;
surfer_delete(surfer);
if(surfer_cnt == 0)
gtk_main_quit(); gtk_main_quit();
} }
static void _surfer_fork(Surfer * surfer, char const * url);
void on_file_new_window(GtkWidget * widget, gpointer data) void on_file_new_window(GtkWidget * widget, gpointer data)
{ {
Surfer * surfer = data; Surfer * surfer = data;
char * url = gtk_moz_embed_get_location(GTK_MOZ_EMBED(surfer->view)); char * url;
_surfer_fork(surfer, url); url = gtk_moz_embed_get_location(GTK_MOZ_EMBED(surfer->view));
surfer_new(url);
free(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) void on_file_refresh(GtkWidget * widget, gpointer data)
{ {
@ -112,7 +105,6 @@ void on_help_about(GtkWidget * widget, gpointer data)
{ {
Surfer * surfer = data; Surfer * surfer = data;
static GtkWidget * window = NULL; static GtkWidget * window = NULL;
char const copyright[] = "Copyright (c) 2006 khorben";
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
gsize cnt = 65536; gsize cnt = 65536;
gchar * buf; gchar * buf;
@ -132,8 +124,8 @@ void on_help_about(GtkWidget * widget, gpointer data)
surfer->window)); surfer->window));
gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(window), PACKAGE); gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(window), PACKAGE);
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), VERSION); 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);
gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(window), _copyright);
if(g_file_get_contents("/usr/share/common-licenses/GPL-2", &buf, &cnt, if(g_file_get_contents("/usr/share/common-licenses/GPL-2", &buf, &cnt,
NULL) == TRUE) NULL) == TRUE)
gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), buf); 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); vbox = gtk_vbox_new(FALSE, 2);
gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(PACKAGE " " VERSION), gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(PACKAGE " " VERSION),
FALSE, FALSE, 2); 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); FALSE, 2);
hbox = gtk_hbox_new(TRUE, 4); hbox = gtk_hbox_new(TRUE, 4);
button = gtk_button_new_with_mnemonic("C_redits"); button = gtk_button_new_with_mnemonic("C_redits");

View File

@ -23,19 +23,22 @@
/* Surfer */ /* Surfer */
static GtkWidget * _new_menubar(Surfer * surfer); /* types */
struct _menu struct _menu
{ {
char * name; char * name;
GtkSignalFunc callback; GtkSignalFunc callback;
char * stock; char * stock;
unsigned int accel; /* FIXME don't work */ unsigned int accel; /* FIXME doesn't work */
}; };
struct _menubar struct _menubar
{ {
char * name; char * name;
struct _menu * menu; struct _menu * menu;
}; };
/* variables */
static struct _menu _menu_file[] = static struct _menu _menu_file[] =
{ {
{ "_New window", G_CALLBACK(on_file_new_window), NULL, GDK_N }, { "_New window", G_CALLBACK(on_file_new_window), NULL, GDK_N },
@ -48,12 +51,14 @@ static struct _menu _menu_file[] =
GDK_W }, GDK_W },
{ NULL, NULL, NULL, 0 } { NULL, NULL, NULL, 0 }
}; };
static struct _menu _menu_edit[] = static struct _menu _menu_edit[] =
{ {
{ "_Preferences", G_CALLBACK(on_edit_preferences), { "_Preferences", G_CALLBACK(on_edit_preferences),
GTK_STOCK_PREFERENCES, GDK_P }, GTK_STOCK_PREFERENCES, GDK_P },
{ NULL, NULL, NULL, 0 } { NULL, NULL, NULL, 0 }
}; };
static struct _menu _menu_help[] = static struct _menu _menu_help[] =
{ {
{ "_About", G_CALLBACK(on_help_about), { "_About", G_CALLBACK(on_help_about),
@ -64,6 +69,7 @@ static struct _menu _menu_help[] =
#endif #endif
{ NULL, NULL, NULL, 0 } { NULL, NULL, NULL, 0 }
}; };
static struct _menubar _menubar[] = static struct _menubar _menubar[] =
{ {
{ "_File", _menu_file }, { "_File", _menu_file },
@ -71,6 +77,12 @@ static struct _menubar _menubar[] =
{ "_Help", _menu_help }, { "_Help", _menu_help },
{ NULL, NULL } { NULL, NULL }
}; };
unsigned int surfer_cnt = 0;
/* functions */
static GtkWidget * _new_menubar(Surfer * surfer);
Surfer * surfer_new(char const * url) Surfer * surfer_new(char const * url)
{ {
Surfer * surfer; Surfer * surfer;
@ -192,6 +204,7 @@ Surfer * surfer_new(char const * url)
gtk_container_add(GTK_CONTAINER(surfer->window), vbox); gtk_container_add(GTK_CONTAINER(surfer->window), vbox);
gtk_widget_grab_focus(GTK_WIDGET(surfer->tb_path)); gtk_widget_grab_focus(GTK_WIDGET(surfer->tb_path));
gtk_widget_show_all(surfer->window); gtk_widget_show_all(surfer->window);
surfer_cnt++;
return surfer; return surfer;
} }
@ -248,6 +261,7 @@ void surfer_delete(Surfer * surfer)
{ {
/* config_delete(surfer->config); */ /* config_delete(surfer->config); */
free(surfer); free(surfer);
surfer_cnt--;
} }

View File

@ -36,6 +36,7 @@
# define SURFER_GTKMOZEMBED_COMPPATH "/usr/pkg/lib/firefox" # define SURFER_GTKMOZEMBED_COMPPATH "/usr/pkg/lib/firefox"
/* types */ /* types */
typedef struct _Surfer typedef struct _Surfer
{ {
@ -54,6 +55,10 @@ typedef struct _Surfer
} Surfer; } Surfer;
/* variables */
extern unsigned int surfer_cnt;
/* functions */ /* functions */
Surfer * surfer_new(char const * url); Surfer * surfer_new(char const * url);
void surfer_delete(Surfer * surfer); void surfer_delete(Surfer * surfer);