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,16 +27,21 @@
/* constants */
static char const * _authors[] =
{
"Pierre 'khorben' Pronchery",
"Pierre Pronchery <khorben@defora.org>",
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");

View File

@ -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--;
}

View File

@ -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);