From 2622adaa1fd3a6f24ed3ba527ee132148fd25beb Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 16 May 2012 19:57:43 +0000 Subject: allow netsurf to build with gtk3 svn path=/trunk/netsurf/; revision=13926 --- gtk/dialogs/about.c | 14 +-- gtk/dialogs/options.c | 36 ++++--- gtk/dialogs/source.c | 281 ++++++++++++++++++++++++++------------------------ 3 files changed, 172 insertions(+), 159 deletions(-) (limited to 'gtk/dialogs') diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c index 1f29103ad..c75a9787b 100644 --- a/gtk/dialogs/about.c +++ b/gtk/dialogs/about.c @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +#include + #include "gtk/compat.h" #include "gtk/gui.h" #include "gtk/dialogs/about.h" @@ -55,9 +57,9 @@ void nsgtk_about_dialog_init(GtkWindow *parent, GTK_DIALOG_DESTROY_WITH_PARENT, NULL); - vbox = gtk_vbox_new (FALSE, 8); + vbox = nsgtk_vbox_new(FALSE, 8); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox, TRUE, TRUE, 0); if (pixbufs != NULL) { GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf(GDK_PIXBUF(g_list_nth_data(pixbufs, 0))); @@ -101,16 +103,16 @@ void nsgtk_about_dialog_init(GtkWindow *parent, /* Add the credits button */ button = gtk_button_new_from_stock ("Credits"); - gtk_box_pack_end(GTK_BOX (GTK_DIALOG (dialog)->action_area), + gtk_box_pack_end(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, FALSE, TRUE, 0); - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area), button, TRUE); + gtk_button_box_set_child_secondary (GTK_BUTTON_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, TRUE); g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_credits), (gpointer)bw); /* Add the Licence button */ button = gtk_button_new_from_stock ("Licence"); - gtk_box_pack_end(GTK_BOX (GTK_DIALOG (dialog)->action_area), + gtk_box_pack_end(GTK_BOX (GTK_DIALOG(gtk_dialog_get_action_area(GTK_DIALOG(dialog)))), button, FALSE, TRUE, 0); - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area), button, TRUE); + gtk_button_box_set_child_secondary (GTK_BUTTON_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, TRUE); g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_licence), (gpointer)bw); diff --git a/gtk/dialogs/options.c b/gtk/dialogs/options.c index 8cf949b31..1d095af97 100644 --- a/gtk/dialogs/options.c +++ b/gtk/dialogs/options.c @@ -25,7 +25,6 @@ #include #include #include -#include #include "desktop/options.h" #include "desktop/print.h" @@ -42,7 +41,7 @@ #include "utils/messages.h" GtkDialog *wndPreferences = NULL; -static GladeXML *gladeFile; +static GtkBuilder *gladeFile; static struct browser_window *current_browser; @@ -128,7 +127,7 @@ DECLARE(setDefaultExportOptions); /* Used when the feature is not implemented yet */ #define FIND_WIDGET(wname) \ do { \ - (wname) = glade_xml_get_widget(gladeFile, #wname); \ + (wname) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #wname)); \ if ((wname) == NULL) \ LOG(("Unable to find widget '%s'!", #wname)); \ } while (0) @@ -140,14 +139,17 @@ DECLARE(setDefaultExportOptions); GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) { - gladeFile = glade_xml_new(glade_file_location->options, NULL, NULL); - if (gladeFile == NULL) + GError* error = NULL; + gladeFile = gtk_builder_new(); + if (!gtk_builder_add_from_file(gladeFile, glade_file_location->options, &error)) { + g_warning("Couldn't load builder file: %s", error->message); + g_error_free(error); return NULL; + } current_browser = bw; - wndPreferences = GTK_DIALOG(glade_xml_get_widget(gladeFile, - "dlgPreferences")); - gtk_window_set_transient_for (GTK_WINDOW(wndPreferences), parent); + wndPreferences = GTK_DIALOG(gtk_builder_get_object(gladeFile, "dlgPreferences")); + gtk_window_set_transient_for(GTK_WINDOW(wndPreferences), parent); FIND_WIDGET(sourceButtonTab); FIND_WIDGET(sourceButtonWindow); @@ -246,46 +248,46 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) #define SET_ENTRY(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_entry_set_text(GTK_ENTRY((widget)), (value)); \ } while (0) #define SET_SPIN(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_spin_button_set_value(GTK_SPIN_BUTTON((widget)), (value)); \ } while (0) #define SET_CHECK(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON((widget)), \ (value)); \ } while (0) #define SET_COMBO(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_combo_box_set_active(GTK_COMBO_BOX((widget)), (value)); \ } while (0) #define SET_FONT(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_font_button_set_font_name(GTK_FONT_BUTTON((widget)), \ (value)); \ } while (0) #define SET_FILE_CHOOSER(widget, value) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(\ (widget)), (value)); \ } while (0) #define SET_BUTTON(widget) \ do { \ - (widget) = glade_xml_get_widget(gladeFile, #widget); \ + (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ } while (0) @@ -329,7 +331,7 @@ void nsgtk_options_load(void) } /* Create combobox */ - box = GTK_BOX(glade_xml_get_widget(gladeFile, "combolanguagevbox")); + box = GTK_BOX(gtk_builder_get_object(gladeFile, "combolanguagevbox")); comboLanguage = nsgtk_combo_box_text_new(); /* Populate combobox from languages file */ @@ -477,7 +479,7 @@ static gboolean on_dialog_close (GtkDialog *dlg, gboolean stay_alive) static void nsgtk_options_theme_combo(void) { /* populate theme combo from themelist file */ - GtkBox *box = GTK_BOX(glade_xml_get_widget(gladeFile, "themehbox")); + GtkBox *box = GTK_BOX(gtk_builder_get_object(gladeFile, "themehbox")); char buf[50]; size_t len = SLEN("themelist") + strlen(res_dir_location) + 1; char themefile[len]; diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c index 5fbd9bcd5..a364b3804 100644 --- a/gtk/dialogs/source.c +++ b/gtk/dialogs/source.c @@ -16,13 +16,14 @@ * along with this program. If not, see . */ +#include #include #include #include #include #include -#include +#include "gtk/compat.h" #include "gtk/dialogs/source.h" #include "gtk/dialogs/about.h" #include "gtk/window.h" @@ -36,6 +37,7 @@ #include "utils/url.h" #include "utils/utils.h" #include "utils/utf8.h" +#include "render/html.h" #include "render/font.h" #include "content/content.h" #include "content/content_type.h" @@ -58,17 +60,11 @@ struct menu_events { GCallback handler; }; -static GladeXML *glade_File; +static GtkBuilder *glade_File; static struct nsgtk_source_window *nsgtk_source_list = 0; static char source_zoomlevel = 10; void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw); -static void nsgtk_attach_source_menu_handlers(GladeXML *xml, gpointer g); -static gboolean nsgtk_source_delete_event(GtkWindow *window, gpointer g); -static gboolean nsgtk_source_destroy_event(GtkWindow *window, gpointer g); -static void nsgtk_source_update_zoomlevel(gpointer g); -static void nsgtk_source_file_save(GtkWindow *parent, const char *filename, - const char *data); #define MENUEVENT(x) { #x, G_CALLBACK(nsgtk_on_##x##_activate) } #define MENUPROTO(x) static gboolean nsgtk_on_##x##_activate( \ @@ -103,9 +99,45 @@ MENUEVENT(source_about), {NULL, NULL} }; +static void nsgtk_attach_source_menu_handlers(GtkBuilder *xml, gpointer g) +{ + struct menu_events *event = source_menu_events; + + while (event->widget != NULL) + { + GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(xml, event->widget)); + g_signal_connect(G_OBJECT(w), "activate", event->handler, g); + event++; + } +} + +static gboolean nsgtk_source_destroy_event(GtkBuilder *window, gpointer g) +{ + struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; + + if (nsg->next != NULL) + nsg->next->prev = nsg->prev; + + if (nsg->prev != NULL) + nsg->prev->next = nsg->next; + else + nsgtk_source_list = nsg->next; + + free(nsg->data); + free(nsg->url); + free(g); + + return FALSE; +} + +static gboolean nsgtk_source_delete_event(GtkWindow * window, gpointer g) +{ + return FALSE; +} + void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw) { - char glade_Location[strlen(res_dir_location) + SLEN("source.glade") + char glade_Location[strlen(res_dir_location) + SLEN("source.gtk2.ui") + 1]; if (content_get_type(bw->current_content) != CONTENT_HTML) return; @@ -115,12 +147,18 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw) return; } - sprintf(glade_Location, "%ssource.glade", res_dir_location); - glade_File = glade_xml_new(glade_Location, NULL, NULL); - if (glade_File == NULL) { + sprintf(glade_Location, "%ssource.gtk2.ui", res_dir_location); + + GError* error = NULL; + glade_File = gtk_builder_new(); + if (!gtk_builder_add_from_file(glade_File, glade_Location, &error)) { + g_warning ("Couldn't load builder file: %s", error->message); + g_error_free (error); LOG(("error loading glade tree")); + return; } + const char *source_data; unsigned long source_size; char *data = NULL; @@ -141,16 +179,16 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw) return; } - GtkWindow *wndSource = GTK_WINDOW(glade_xml_get_widget( + GtkWindow *wndSource = GTK_WINDOW(gtk_builder_get_object( glade_File, "wndSource")); - GtkWidget *cutbutton = glade_xml_get_widget( - glade_File, "source_cut"); - GtkWidget *pastebutton = glade_xml_get_widget( - glade_File, "source_paste"); - GtkWidget *deletebutton = glade_xml_get_widget( - glade_File, "source_delete"); - GtkWidget *printbutton = glade_xml_get_widget( - glade_File, "source_print"); + GtkWidget *cutbutton = GTK_WIDGET(gtk_builder_get_object( + glade_File, "source_cut")); + GtkWidget *pastebutton = GTK_WIDGET(gtk_builder_get_object( + glade_File, "source_paste")); + GtkWidget *deletebutton = GTK_WIDGET(gtk_builder_get_object( + glade_File, "source_delete")); + GtkWidget *printbutton = GTK_WIDGET(gtk_builder_get_object( + glade_File, "source_print")); gtk_widget_set_sensitive(cutbutton, FALSE); gtk_widget_set_sensitive(pastebutton, FALSE); gtk_widget_set_sensitive(deletebutton, FALSE); @@ -200,13 +238,15 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw) thiswindow); GtkTextView *sourceview = GTK_TEXT_VIEW( - glade_xml_get_widget(glade_File, + gtk_builder_get_object(glade_File, "source_view")); + PangoFontDescription *fontdesc = pango_font_description_from_string("Monospace 8"); thiswindow->gv = sourceview; - gtk_widget_modify_font(GTK_WIDGET(sourceview), fontdesc); + nsgtk_widget_modify_font(GTK_WIDGET(sourceview), fontdesc); + GtkTextBuffer *tb = gtk_text_view_get_buffer(sourceview); gtk_text_buffer_set_text(tb, thiswindow->data, -1); @@ -262,59 +302,7 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw) free(fileurl); } - -void nsgtk_attach_source_menu_handlers(GladeXML *xml, gpointer g) -{ - struct menu_events *event = source_menu_events; - - while (event->widget != NULL) - { - GtkWidget *w = glade_xml_get_widget(xml, event->widget); - g_signal_connect(G_OBJECT(w), "activate", event->handler, g); - event++; - } -} - -gboolean nsgtk_on_source_save_as_activate(GtkMenuItem *widget, gpointer g) -{ - struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; - GtkWidget *fc = gtk_file_chooser_dialog_new( - messages_get("gtkSourceSave"), - nsg->sourcewindow, - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, - GTK_RESPONSE_ACCEPT, - NULL); - char *filename; - url_func_result res; - - res = url_nice(nsg->url, &filename, false); - if (res != URL_FUNC_OK) { - filename = strdup(messages_get("SaveSource")); - if (filename == NULL) { - warn_user("NoMemory", 0); - return FALSE; - } - } - - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), filename); - - free(filename); - - if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) { - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc)); - nsgtk_source_file_save(nsg->sourcewindow, filename, nsg->data); - g_free(filename); - } - - gtk_widget_destroy(fc); - - return TRUE; -} - -void nsgtk_source_file_save(GtkWindow *parent, const char *filename, +static void nsgtk_source_file_save(GtkWindow *parent, const char *filename, const char *data) { FILE *f; @@ -344,7 +332,7 @@ void nsgtk_source_file_save(GtkWindow *parent, const char *filename, warn[len] = '\0'; label = gtk_label_new(warn); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(confd)->vbox), + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(confd))), label); gtk_widget_show(label); if (gtk_dialog_run(GTK_DIALOG(confd)) == GTK_RESPONSE_ACCEPT) { @@ -372,10 +360,51 @@ void nsgtk_source_file_save(GtkWindow *parent, const char *filename, g_signal_connect_swapped(notif, "response", G_CALLBACK(gtk_widget_destroy), notif); label = gtk_label_new(temp); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(notif)->vbox), label); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(notif))), label); gtk_widget_show_all(notif); } + +gboolean nsgtk_on_source_save_as_activate(GtkMenuItem *widget, gpointer g) +{ + struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; + GtkWidget *fc = gtk_file_chooser_dialog_new( + messages_get("gtkSourceSave"), + nsg->sourcewindow, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, + GTK_RESPONSE_ACCEPT, + NULL); + char *filename; + url_func_result res; + + res = url_nice(nsg->url, &filename, false); + if (res != URL_FUNC_OK) { + filename = strdup(messages_get("SaveSource")); + if (filename == NULL) { + warn_user("NoMemory", 0); + return FALSE; + } + } + + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), filename); + + free(filename); + + if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) { + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc)); + nsgtk_source_file_save(nsg->sourcewindow, filename, nsg->data); + g_free(filename); + } + + gtk_widget_destroy(fc); + + return TRUE; +} + + gboolean nsgtk_on_source_print_activate( GtkMenuItem *widget, gpointer g) { /* correct printing */ @@ -392,29 +421,7 @@ gboolean nsgtk_on_source_close_activate( GtkMenuItem *widget, gpointer g) return TRUE; } -gboolean nsgtk_source_delete_event(GtkWindow * window, gpointer g) -{ - return FALSE; -} - -gboolean nsgtk_source_destroy_event(GtkWindow * window, gpointer g) -{ - struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; - - if (nsg->next != NULL) - nsg->next->prev = nsg->prev; - - if (nsg->prev != NULL) - nsg->prev->next = nsg->next; - else - nsgtk_source_list = nsg->next; - - free(nsg->data); - free(nsg->url); - free(g); - return FALSE; -} gboolean nsgtk_on_source_select_all_activate (GtkMenuItem *widget, gpointer g) { @@ -455,42 +462,7 @@ gboolean nsgtk_on_source_delete_activate(GtkMenuItem *widget, gpointer g) return TRUE; } -gboolean nsgtk_on_source_zoom_in_activate(GtkMenuItem *widget, gpointer g) -{ - source_zoomlevel++; - nsgtk_source_update_zoomlevel(g); - - return TRUE; -} - -gboolean nsgtk_on_source_zoom_out_activate(GtkMenuItem *widget, gpointer g) -{ - if (source_zoomlevel > 1) { - source_zoomlevel--; - nsgtk_source_update_zoomlevel(g); - } - - return TRUE; -} - -gboolean nsgtk_on_source_zoom_normal_activate(GtkMenuItem *widget, gpointer g) -{ - source_zoomlevel = 10; - nsgtk_source_update_zoomlevel(g); - - return TRUE; -} - -gboolean nsgtk_on_source_about_activate(GtkMenuItem *widget, gpointer g) -{ - struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; - - nsgtk_about_dialog_init(nsg->sourcewindow, nsg->bw, netsurf_version); - - return TRUE; -} - -void nsgtk_source_update_zoomlevel(gpointer g) +static void nsgtk_source_update_zoomlevel(gpointer g) { struct nsgtk_source_window *nsg; GtkTextBuffer *buf; @@ -527,3 +499,40 @@ void nsgtk_source_update_zoomlevel(gpointer g) nsg = nsg->next; } } + +gboolean nsgtk_on_source_zoom_in_activate(GtkMenuItem *widget, gpointer g) +{ + source_zoomlevel++; + nsgtk_source_update_zoomlevel(g); + + return TRUE; +} + +gboolean nsgtk_on_source_zoom_out_activate(GtkMenuItem *widget, gpointer g) +{ + if (source_zoomlevel > 1) { + source_zoomlevel--; + nsgtk_source_update_zoomlevel(g); + } + + return TRUE; +} + + +gboolean nsgtk_on_source_zoom_normal_activate(GtkMenuItem *widget, gpointer g) +{ + source_zoomlevel = 10; + nsgtk_source_update_zoomlevel(g); + + return TRUE; +} + +gboolean nsgtk_on_source_about_activate(GtkMenuItem *widget, gpointer g) +{ + struct nsgtk_source_window *nsg = (struct nsgtk_source_window *) g; + + nsgtk_about_dialog_init(nsg->sourcewindow, nsg->bw, netsurf_version); + + return TRUE; +} + -- cgit v1.2.3