diff --git a/src/callbacks.c b/src/callbacks.c index 3d7ce68..e100a22 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -91,8 +91,86 @@ void on_file_open_url(GtkWidget * widget, gpointer data) /* edit menu */ /* on_edit_preferences */ +static void _preferences_set(Surfer * surfer); +/* callbacks */ +static gboolean _preferences_on_closex(GtkWidget * widget, GdkEvent * event, + gpointer data); +static void _preferences_on_cancel(GtkWidget * widget, gpointer data); +static void _preferences_on_ok(GtkWidget * widget, gpointer data); + void on_edit_preferences(GtkWidget * widget, gpointer data) { + Surfer * surfer = data; + GtkWidget * vbox; + GtkWidget * notebook; + GtkWidget * hbox; + + if(surfer->pr_window != NULL) + { + gtk_widget_show(surfer->pr_window); + return; + } + /* FIXME consider using gtk_dialog_new() */ + surfer->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_resizable(GTK_WINDOW(surfer->pr_window), FALSE); + gtk_window_set_title(GTK_WINDOW(surfer->pr_window), + "Web surfer preferences"); + gtk_window_set_transient_for(GTK_WINDOW(surfer->pr_window), GTK_WINDOW( + surfer->window)); + g_signal_connect(G_OBJECT(surfer->pr_window), "delete-event", + G_CALLBACK(_preferences_on_closex), surfer); + vbox = gtk_vbox_new(FALSE, 0); + /* notebook */ + notebook = gtk_notebook_new(); + gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 4); + /* separator */ + hbox = gtk_hbox_new(FALSE, 0); + widget = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 4); + /* dialog */ + hbox = gtk_hbox_new(TRUE, 0); + widget = gtk_button_new_from_stock(GTK_STOCK_OK); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _preferences_on_ok), surfer); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 4); + widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _preferences_on_cancel), surfer); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 4); + _preferences_set(surfer); + gtk_container_add(GTK_CONTAINER(surfer->pr_window), vbox); + gtk_widget_show_all(surfer->pr_window); +} + +static void _preferences_set(Surfer * surfer) +{ + /* FIXME implement */ +} + +static gboolean _preferences_on_closex(GtkWidget * widget, GdkEvent * event, + gpointer data) +{ + Surfer * surfer = data; + + _preferences_on_cancel(widget, surfer); + return TRUE; +} + +static void _preferences_on_cancel(GtkWidget * widget, gpointer data) +{ + Surfer * surfer = data; + + gtk_widget_hide(surfer->pr_window); + _preferences_set(surfer); +} + +static void _preferences_on_ok(GtkWidget * widget, gpointer data) +{ + Surfer * surfer = data; + + gtk_widget_hide(surfer->pr_window); /* FIXME implement */ } diff --git a/src/surfer.c b/src/surfer.c index c49fbf8..97cc638 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -235,6 +235,8 @@ 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); + /* preferences window */ + surfer->pr_window = NULL; /* hack to display the statusbar only if necessary */ gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0); surfer_set_status(surfer, NULL); diff --git a/src/surfer.h b/src/surfer.h index 05186e4..6a920c0 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -60,6 +60,9 @@ typedef struct _Surfer GtkWidget * statusbox; GtkWidget * statusbar; guint statusbar_id; + + /* preferences */ + GtkWidget * pr_window; } Surfer;