Not forking when creating new windows
This commit is contained in:
parent
0cdc71548c
commit
faec6aaf53
@ -27,16 +27,21 @@
|
|||||||
/* 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)
|
||||||
{
|
{
|
||||||
gtk_main_quit();
|
Surfer * surfer = data;
|
||||||
|
|
||||||
|
surfer_delete(surfer);
|
||||||
|
if(surfer_cnt == 0)
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
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)
|
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");
|
||||||
|
18
src/surfer.c
18
src/surfer.c
@ -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--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user