Not forking when creating new windows
This commit is contained in:
parent
0cdc71548c
commit
faec6aaf53
@ -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");
|
||||
|
18
src/surfer.c
18
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--;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user