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/source.c | 281 ++++++++++++++++++++++++++------------------------- 1 file changed, 145 insertions(+), 136 deletions(-) (limited to 'gtk/dialogs/source.c') 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