netsurf: branch master updated. release/3.3-70-gde09dc8
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/de09dc8efdfdb4ce27c85...
...commit http://git.netsurf-browser.org/netsurf.git/commit/de09dc8efdfdb4ce27c8573...
...tree http://git.netsurf-browser.org/netsurf.git/tree/de09dc8efdfdb4ce27c85733c...
The branch, master has been updated
via de09dc8efdfdb4ce27c85733cfec139a52d70776 (commit)
from d513d6261a83c6bde07be1ae8e30ea303c780d47 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=de09dc8efdfdb4ce27c...
commit de09dc8efdfdb4ce27c85733cfec139a52d70776
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
clean up gtk gui header usage and includes
diff --git a/gtk/about.c b/gtk/about.c
index dcc151f..b2f5a52 100644
--- a/gtk/about.c
+++ b/gtk/about.c
@@ -27,11 +27,11 @@
#include "utils/utils.h"
#include "utils/messages.h"
#include "utils/nsoption.h"
+#include "utils/nsurl.h"
#include "desktop/browser.h"
#include "desktop/version.h"
#include "gtk/compat.h"
-#include "gtk/gui.h"
#include "gtk/about.h"
#define ABOUT_RESPONSE_ID_LICENCE 1
diff --git a/gtk/cookies.c b/gtk/cookies.c
index 3251e17..ee72387 100644
--- a/gtk/cookies.c
+++ b/gtk/cookies.c
@@ -20,13 +20,14 @@
* Cookies (implementation).
*/
+#include <gtk/gtk.h>
+#include "utils/log.h"
#include "desktop/cookie_manager.h"
#include "desktop/plotters.h"
#include "desktop/tree.h"
#include "desktop/textinput.h"
-#include "utils/log.h"
-#include "gtk/gui.h"
+
#include "gtk/cookies.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/download.c b/gtk/download.c
index 8f79166..74b49f6 100644
--- a/gtk/download.c
+++ b/gtk/download.c
@@ -31,7 +31,6 @@
#include "desktop/download.h"
#include "desktop/gui_download.h"
-#include "gtk/gui.h"
#include "gtk/scaffolding.h"
#include "gtk/download.h"
#include "gtk/window.h"
diff --git a/gtk/fetch.c b/gtk/fetch.c
index 817e9c9..f56e99d 100644
--- a/gtk/fetch.c
+++ b/gtk/fetch.c
@@ -24,11 +24,13 @@
#include <ctype.h>
#include <string.h>
#include <strings.h>
+#include <gtk/gtk.h>
#include "utils/hashtable.h"
#include "utils/log.h"
#include "utils/filepath.h"
#include "utils/file.h"
+#include "utils/nsurl.h"
#include "desktop/gui_fetch.h"
#include "gtk/gui.h"
diff --git a/gtk/gui.h b/gtk/gui.h
index 26f51ee..63832f8 100644
--- a/gtk/gui.h
+++ b/gtk/gui.h
@@ -19,11 +19,7 @@
#ifndef GTK_GUI_H
#define GTK_GUI_H
-#include <inttypes.h>
-#include <stdbool.h>
-#include <gtk/gtk.h>
-
-#include "utils/nsurl.h"
+struct nsurl;
/** glade file paths. */
struct glade_file_location_s {
@@ -70,7 +66,7 @@ extern char **respaths;
uint32_t gtk_gui_gdkkey_to_nskey(GdkEventKey *eventkey);
/** login window request. */
-extern void gui_401login_open(nsurl *url, const char *realm, nserror (*cb)(bool proceed, void *pw), void *cbpw);
+extern void gui_401login_open(struct nsurl *url, const char *realm, nserror (*cb)(bool proceed, void *pw), void *cbpw);
/** set when no windows remain open. */
extern bool nsgtk_complete;
diff --git a/gtk/history.c b/gtk/history.c
index e24794b..9a507ef 100644
--- a/gtk/history.c
+++ b/gtk/history.c
@@ -17,6 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <gtk/gtk.h>
#include "utils/log.h"
#include "utils/utils.h"
@@ -25,7 +26,6 @@
#include "desktop/tree.h"
#include "desktop/textinput.h"
-#include "gtk/gui.h"
#include "gtk/history.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/hotlist.c b/gtk/hotlist.c
index 551a2d0..3f2515e 100644
--- a/gtk/hotlist.c
+++ b/gtk/hotlist.c
@@ -17,6 +17,7 @@
*/
#include <stdlib.h>
+#include <gtk/gtk.h>
#include "utils/log.h"
#include "utils/nsoption.h"
@@ -24,7 +25,6 @@
#include "desktop/plotters.h"
#include "desktop/tree.h"
-#include "gtk/gui.h"
#include "gtk/hotlist.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/preferences.c b/gtk/preferences.c
index ec09fe7..4467326 100644
--- a/gtk/preferences.c
+++ b/gtk/preferences.c
@@ -25,6 +25,7 @@
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/log.h"
+#include "utils/nsurl.h"
#include "desktop/browser.h"
#include "desktop/searchweb.h"
diff --git a/gtk/tabs.c b/gtk/tabs.c
index f892fa6..c50c114 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -28,7 +28,6 @@
#include "gtk/compat.h"
#include "gtk/window.h"
-#include "gtk/gui.h"
#include "gtk/search.h"
#include "gtk/tabs.h"
-----------------------------------------------------------------------
Summary of changes:
gtk/about.c | 2 +-
gtk/cookies.c | 5 +++--
gtk/download.c | 1 -
gtk/fetch.c | 2 ++
gtk/gui.h | 8 ++------
gtk/history.c | 2 +-
gtk/hotlist.c | 2 +-
gtk/preferences.c | 1 +
gtk/tabs.c | 1 -
9 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/gtk/about.c b/gtk/about.c
index dcc151f..b2f5a52 100644
--- a/gtk/about.c
+++ b/gtk/about.c
@@ -27,11 +27,11 @@
#include "utils/utils.h"
#include "utils/messages.h"
#include "utils/nsoption.h"
+#include "utils/nsurl.h"
#include "desktop/browser.h"
#include "desktop/version.h"
#include "gtk/compat.h"
-#include "gtk/gui.h"
#include "gtk/about.h"
#define ABOUT_RESPONSE_ID_LICENCE 1
diff --git a/gtk/cookies.c b/gtk/cookies.c
index 3251e17..ee72387 100644
--- a/gtk/cookies.c
+++ b/gtk/cookies.c
@@ -20,13 +20,14 @@
* Cookies (implementation).
*/
+#include <gtk/gtk.h>
+#include "utils/log.h"
#include "desktop/cookie_manager.h"
#include "desktop/plotters.h"
#include "desktop/tree.h"
#include "desktop/textinput.h"
-#include "utils/log.h"
-#include "gtk/gui.h"
+
#include "gtk/cookies.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/download.c b/gtk/download.c
index 8f79166..74b49f6 100644
--- a/gtk/download.c
+++ b/gtk/download.c
@@ -31,7 +31,6 @@
#include "desktop/download.h"
#include "desktop/gui_download.h"
-#include "gtk/gui.h"
#include "gtk/scaffolding.h"
#include "gtk/download.h"
#include "gtk/window.h"
diff --git a/gtk/fetch.c b/gtk/fetch.c
index 817e9c9..f56e99d 100644
--- a/gtk/fetch.c
+++ b/gtk/fetch.c
@@ -24,11 +24,13 @@
#include <ctype.h>
#include <string.h>
#include <strings.h>
+#include <gtk/gtk.h>
#include "utils/hashtable.h"
#include "utils/log.h"
#include "utils/filepath.h"
#include "utils/file.h"
+#include "utils/nsurl.h"
#include "desktop/gui_fetch.h"
#include "gtk/gui.h"
diff --git a/gtk/gui.h b/gtk/gui.h
index 26f51ee..63832f8 100644
--- a/gtk/gui.h
+++ b/gtk/gui.h
@@ -19,11 +19,7 @@
#ifndef GTK_GUI_H
#define GTK_GUI_H
-#include <inttypes.h>
-#include <stdbool.h>
-#include <gtk/gtk.h>
-
-#include "utils/nsurl.h"
+struct nsurl;
/** glade file paths. */
struct glade_file_location_s {
@@ -70,7 +66,7 @@ extern char **respaths;
uint32_t gtk_gui_gdkkey_to_nskey(GdkEventKey *eventkey);
/** login window request. */
-extern void gui_401login_open(nsurl *url, const char *realm, nserror (*cb)(bool proceed, void *pw), void *cbpw);
+extern void gui_401login_open(struct nsurl *url, const char *realm, nserror (*cb)(bool proceed, void *pw), void *cbpw);
/** set when no windows remain open. */
extern bool nsgtk_complete;
diff --git a/gtk/history.c b/gtk/history.c
index e24794b..9a507ef 100644
--- a/gtk/history.c
+++ b/gtk/history.c
@@ -17,6 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <gtk/gtk.h>
#include "utils/log.h"
#include "utils/utils.h"
@@ -25,7 +26,6 @@
#include "desktop/tree.h"
#include "desktop/textinput.h"
-#include "gtk/gui.h"
#include "gtk/history.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/hotlist.c b/gtk/hotlist.c
index 551a2d0..3f2515e 100644
--- a/gtk/hotlist.c
+++ b/gtk/hotlist.c
@@ -17,6 +17,7 @@
*/
#include <stdlib.h>
+#include <gtk/gtk.h>
#include "utils/log.h"
#include "utils/nsoption.h"
@@ -24,7 +25,6 @@
#include "desktop/plotters.h"
#include "desktop/tree.h"
-#include "gtk/gui.h"
#include "gtk/hotlist.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
diff --git a/gtk/preferences.c b/gtk/preferences.c
index ec09fe7..4467326 100644
--- a/gtk/preferences.c
+++ b/gtk/preferences.c
@@ -25,6 +25,7 @@
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/log.h"
+#include "utils/nsurl.h"
#include "desktop/browser.h"
#include "desktop/searchweb.h"
diff --git a/gtk/tabs.c b/gtk/tabs.c
index f892fa6..c50c114 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -28,7 +28,6 @@
#include "gtk/compat.h"
#include "gtk/window.h"
-#include "gtk/gui.h"
#include "gtk/search.h"
#include "gtk/tabs.h"
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-69-gd513d62
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/d513d6261a83c6bde07be...
...commit http://git.netsurf-browser.org/netsurf.git/commit/d513d6261a83c6bde07be1a...
...tree http://git.netsurf-browser.org/netsurf.git/tree/d513d6261a83c6bde07be1ae8...
The branch, master has been updated
via d513d6261a83c6bde07be1ae8e30ea303c780d47 (commit)
from c134750575d8f1bf05b97162ee7fb138058c40d9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=d513d6261a83c6bde07...
commit d513d6261a83c6bde07be1ae8e30ea303c780d47
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
actually add the files from the previous gtk ssl rework commit
diff --git a/gtk/ssl_cert.c b/gtk/ssl_cert.c
new file mode 100644
index 0000000..3c00d71
--- /dev/null
+++ b/gtk/ssl_cert.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2015 Vincent Sanders <vince(a)netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+#include "utils/errors.h"
+#include "utils/nsurl.h"
+#include "desktop/tree.h"
+#include "desktop/sslcert_viewer.h"
+
+#include "gtk/gui.h"
+#include "gtk/treeview.h"
+#include "gtk/scaffolding.h"
+#include "gtk/ssl_cert.h"
+
+
+static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_accept(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_reject(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+ nsgtk_ssl_reject(w, data);
+ return FALSE;
+}
+
+void gtk_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
+ unsigned long num, nserror (*cb)(bool proceed, void *pw),
+ void *cbpw)
+{
+ static struct nsgtk_treeview *ssl_window;
+ struct sslcert_session_data *data;
+ GtkButton *accept, *reject;
+ void **session;
+ GtkDialog *dlg;
+ GtkScrolledWindow *scrolled;
+ GtkDrawingArea *drawing_area;
+ GError *error = NULL;
+ GtkBuilder *builder;
+ GtkWindow *gtk_parent;
+
+ /* state while dlg is open */
+ session = calloc(sizeof(void *), 3);
+ if (session == NULL) {
+ return;
+ }
+
+ builder = gtk_builder_new();
+ if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
+ g_warning("Couldn't load builder file: %s", error->message);
+ g_error_free(error);
+
+ free(session);
+ return;
+ }
+
+ sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
+ ssl_current_session = data;
+
+ dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
+
+ /* set parent for transient dialog */
+ gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
+ gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
+
+ scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
+ drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
+
+
+ ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
+ drawing_area);
+
+ if (ssl_window == NULL) {
+ free(session);
+ g_object_unref(G_OBJECT(dlg));
+ return;
+ }
+
+ accept = GTK_BUTTON(gtk_builder_get_object(builder, "sslaccept"));
+ reject = GTK_BUTTON(gtk_builder_get_object(builder, "sslreject"));
+
+ session[0] = builder;
+ session[1] = ssl_window;
+ session[2] = data;
+
+#define CONNECT(obj, sig, callback, ptr) \
+ g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
+
+ CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
+ CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
+ CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
+ (gpointer)session);
+
+ gtk_widget_show(GTK_WIDGET(dlg));
+}
diff --git a/gtk/ssl_cert.h b/gtk/ssl_cert.h
new file mode 100644
index 0000000..48937d4
--- /dev/null
+++ b/gtk/ssl_cert.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 James Bursa <bursa(a)users.sourceforge.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NETSURF_GTK_SSL_CERT_H
+#define NETSURF_GTK_SSL_CERT_H 1
+
+struct nsurl;
+struct ssl_cert_info;
+
+/**
+ * Prompt the user to verify a certificate with issuse.
+ *
+ * \param url The URL being verified.
+ * \param certs The certificate to be verified
+ * \param num The number of certificates to be verified.
+ * \param cb Callback upon user decision.
+ * \param cbpw Context pointer passed to cb
+ */
+void gtk_cert_verify(struct nsurl *url, const struct ssl_cert_info *certs, unsigned long num, nserror (*cb)(bool proceed, void *pw), void *cbpw);
+
+#endif
-----------------------------------------------------------------------
Summary of changes:
gtk/ssl_cert.c | 135 ++++++++++++++++++++++++++++++++++++++
gtk/{font_pango.h => ssl_cert.h} | 29 ++++----
2 files changed, 149 insertions(+), 15 deletions(-)
create mode 100644 gtk/ssl_cert.c
copy gtk/{font_pango.h => ssl_cert.h} (57%)
diff --git a/gtk/ssl_cert.c b/gtk/ssl_cert.c
new file mode 100644
index 0000000..3c00d71
--- /dev/null
+++ b/gtk/ssl_cert.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2015 Vincent Sanders <vince(a)netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+#include "utils/errors.h"
+#include "utils/nsurl.h"
+#include "desktop/tree.h"
+#include "desktop/sslcert_viewer.h"
+
+#include "gtk/gui.h"
+#include "gtk/treeview.h"
+#include "gtk/scaffolding.h"
+#include "gtk/ssl_cert.h"
+
+
+static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_accept(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_reject(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+ nsgtk_ssl_reject(w, data);
+ return FALSE;
+}
+
+void gtk_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
+ unsigned long num, nserror (*cb)(bool proceed, void *pw),
+ void *cbpw)
+{
+ static struct nsgtk_treeview *ssl_window;
+ struct sslcert_session_data *data;
+ GtkButton *accept, *reject;
+ void **session;
+ GtkDialog *dlg;
+ GtkScrolledWindow *scrolled;
+ GtkDrawingArea *drawing_area;
+ GError *error = NULL;
+ GtkBuilder *builder;
+ GtkWindow *gtk_parent;
+
+ /* state while dlg is open */
+ session = calloc(sizeof(void *), 3);
+ if (session == NULL) {
+ return;
+ }
+
+ builder = gtk_builder_new();
+ if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
+ g_warning("Couldn't load builder file: %s", error->message);
+ g_error_free(error);
+
+ free(session);
+ return;
+ }
+
+ sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
+ ssl_current_session = data;
+
+ dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
+
+ /* set parent for transient dialog */
+ gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
+ gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
+
+ scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
+ drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
+
+
+ ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
+ drawing_area);
+
+ if (ssl_window == NULL) {
+ free(session);
+ g_object_unref(G_OBJECT(dlg));
+ return;
+ }
+
+ accept = GTK_BUTTON(gtk_builder_get_object(builder, "sslaccept"));
+ reject = GTK_BUTTON(gtk_builder_get_object(builder, "sslreject"));
+
+ session[0] = builder;
+ session[1] = ssl_window;
+ session[2] = data;
+
+#define CONNECT(obj, sig, callback, ptr) \
+ g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
+
+ CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
+ CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
+ CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
+ (gpointer)session);
+
+ gtk_widget_show(GTK_WIDGET(dlg));
+}
diff --git a/gtk/font_pango.h b/gtk/ssl_cert.h
similarity index 57%
copy from gtk/font_pango.h
copy to gtk/ssl_cert.h
index edcd19b..48937d4 100644
--- a/gtk/font_pango.h
+++ b/gtk/ssl_cert.h
@@ -16,22 +16,21 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * Font handling (GTK interface).
- */
-
-#ifndef _NETSURF_GTK_FONT_PANGO_H_
-#define _NETSURF_GTK_FONT_PANGO_H_
-
-#include <stdbool.h>
+#ifndef NETSURF_GTK_SSL_CERT_H
+#define NETSURF_GTK_SSL_CERT_H 1
-#include "desktop/plot_style.h"
+struct nsurl;
+struct ssl_cert_info;
-bool nsfont_paint(int x, int y, const char *string, size_t length,
- const plot_font_style_t *fstyle);
+/**
+ * Prompt the user to verify a certificate with issuse.
+ *
+ * \param url The URL being verified.
+ * \param certs The certificate to be verified
+ * \param num The number of certificates to be verified.
+ * \param cb Callback upon user decision.
+ * \param cbpw Context pointer passed to cb
+ */
+void gtk_cert_verify(struct nsurl *url, const struct ssl_cert_info *certs, unsigned long num, nserror (*cb)(bool proceed, void *pw), void *cbpw);
-PangoFontDescription *nsfont_style_to_description(
- const plot_font_style_t *fstyle);
-
-
#endif
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-68-gc134750
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/c134750575d8f1bf05b97...
...commit http://git.netsurf-browser.org/netsurf.git/commit/c134750575d8f1bf05b9716...
...tree http://git.netsurf-browser.org/netsurf.git/tree/c134750575d8f1bf05b97162e...
The branch, master has been updated
via c134750575d8f1bf05b97162ee7fb138058c40d9 (commit)
from fb73ff80eddbe52b240d1e8cd023199a5d2059f3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=c134750575d8f1bf05b...
commit c134750575d8f1bf05b97162ee7fb138058c40d9
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
split out gtk SSL certificate verification dialog impementation.
diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h
index 33ad3f2..92f402f 100644
--- a/desktop/sslcert_viewer.h
+++ b/desktop/sslcert_viewer.h
@@ -21,16 +21,13 @@
#ifndef _NETSURF_DESKTOP_SSLCERT_VIEWER_H_
#define _NETSURF_DESKTOP_SSLCERT_VIEWER_H_
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "desktop/core_window.h"
-#include "desktop/textinput.h"
-#include "utils/errors.h"
+#include "content/llcache.h"
+#include "desktop/mouse.h"
struct sslcert_session_data;
struct redraw_context;
-
+struct core_window_callback_table;
+struct rect;
/**
* Create ssl certificate viewer session data.
diff --git a/gtk/Makefile.target b/gtk/Makefile.target
index b22da97..904c4d5 100644
--- a/gtk/Makefile.target
+++ b/gtk/Makefile.target
@@ -117,7 +117,7 @@ S_GTK := font_pango.c bitmap.c gui.c schedule.c thumbnail.c plotters.c \
selection.c history.c window.c fetch.c download.c menu.c \
print.c search.c tabs.c theme.c toolbar.c gettext.c \
compat.c cookies.c hotlist.c viewdata.c viewsource.c \
- preferences.c about.c
+ preferences.c about.c ssl_cert.c
S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c)
# code in utils/container.ch is non-universal it seems
diff --git a/gtk/gui.c b/gtk/gui.c
index 27d4038..3bcb33c 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -46,7 +46,7 @@
#include "desktop/save_complete.h"
#include "desktop/save_pdf.h"
#include "desktop/searchweb.h"
-#include "desktop/sslcert_viewer.h"
+#include "desktop/textinput.h"
#include "desktop/tree.h"
#include "desktop/gui_misc.h"
#include "desktop/netsurf.h"
@@ -65,6 +65,7 @@
#include "gtk/schedule.h"
#include "gtk/selection.h"
#include "gtk/search.h"
+#include "gtk/ssl_cert.h"
bool nsgtk_complete = false;
@@ -578,111 +579,6 @@ void warn_user(const char *warning, const char *detail)
}
-static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_accept(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_reject(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
-{
- nsgtk_ssl_reject(w, data);
- return FALSE;
-}
-
-static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
- unsigned long num, nserror (*cb)(bool proceed, void *pw),
- void *cbpw)
-{
- static struct nsgtk_treeview *ssl_window;
- struct sslcert_session_data *data;
- GtkButton *accept, *reject;
- void **session;
- GtkDialog *dlg;
- GtkScrolledWindow *scrolled;
- GtkDrawingArea *drawing_area;
- GError *error = NULL;
- GtkBuilder *builder;
- GtkWindow *gtk_parent;
-
- /* state while dlg is open */
- session = calloc(sizeof(void *), 3);
- if (session == NULL) {
- return;
- }
-
- builder = gtk_builder_new();
- if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
- g_warning("Couldn't load builder file: %s", error->message);
- g_error_free(error);
-
- free(session);
- return;
- }
-
- sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
- ssl_current_session = data;
-
- dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
-
- /* set parent for transient dialog */
- gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
- gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
-
- scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
- drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
-
-
- ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
- drawing_area);
-
- if (ssl_window == NULL) {
- free(session);
- g_object_unref(G_OBJECT(dlg));
- return;
- }
-
- accept = GTK_BUTTON(gtk_builder_get_object(builder, "sslaccept"));
- reject = GTK_BUTTON(gtk_builder_get_object(builder, "sslreject"));
-
- session[0] = builder;
- session[1] = ssl_window;
- session[2] = data;
-
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
-
- CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
- CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
- CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
- (gpointer)session);
-
- gtk_widget_show(GTK_WIDGET(dlg));
-}
-
-
static void nsgtk_PDF_set_pass(GtkButton *w, gpointer data)
{
char **owner_pass = ((void **)data)[0];
@@ -1194,7 +1090,7 @@ static struct gui_browser_table nsgtk_browser_table = {
.quit = gui_quit,
.launch_url = gui_launch_url,
- .cert_verify = gui_cert_verify,
+ .cert_verify = gtk_cert_verify,
.login = gui_401login_open,
.pdf_password = nsgtk_pdf_password,
};
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 3fbad59..e1fd9bf 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -128,7 +128,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
*/
struct nsgtk_scaffolding *nsgtk_current_scaffolding(void);
-/* acessors for gtk elements withing a scaffold */
+/* acessors for gtk elements within a scaffold */
/**
* Get the gtk window for a scaffolding.
-----------------------------------------------------------------------
Summary of changes:
desktop/sslcert_viewer.h | 11 ++---
gtk/Makefile.target | 2 +-
gtk/gui.c | 110 ++--------------------------------------------
gtk/scaffolding.h | 2 +-
4 files changed, 9 insertions(+), 116 deletions(-)
diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h
index 33ad3f2..92f402f 100644
--- a/desktop/sslcert_viewer.h
+++ b/desktop/sslcert_viewer.h
@@ -21,16 +21,13 @@
#ifndef _NETSURF_DESKTOP_SSLCERT_VIEWER_H_
#define _NETSURF_DESKTOP_SSLCERT_VIEWER_H_
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "desktop/core_window.h"
-#include "desktop/textinput.h"
-#include "utils/errors.h"
+#include "content/llcache.h"
+#include "desktop/mouse.h"
struct sslcert_session_data;
struct redraw_context;
-
+struct core_window_callback_table;
+struct rect;
/**
* Create ssl certificate viewer session data.
diff --git a/gtk/Makefile.target b/gtk/Makefile.target
index b22da97..904c4d5 100644
--- a/gtk/Makefile.target
+++ b/gtk/Makefile.target
@@ -117,7 +117,7 @@ S_GTK := font_pango.c bitmap.c gui.c schedule.c thumbnail.c plotters.c \
selection.c history.c window.c fetch.c download.c menu.c \
print.c search.c tabs.c theme.c toolbar.c gettext.c \
compat.c cookies.c hotlist.c viewdata.c viewsource.c \
- preferences.c about.c
+ preferences.c about.c ssl_cert.c
S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c)
# code in utils/container.ch is non-universal it seems
diff --git a/gtk/gui.c b/gtk/gui.c
index 27d4038..3bcb33c 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -46,7 +46,7 @@
#include "desktop/save_complete.h"
#include "desktop/save_pdf.h"
#include "desktop/searchweb.h"
-#include "desktop/sslcert_viewer.h"
+#include "desktop/textinput.h"
#include "desktop/tree.h"
#include "desktop/gui_misc.h"
#include "desktop/netsurf.h"
@@ -65,6 +65,7 @@
#include "gtk/schedule.h"
#include "gtk/selection.h"
#include "gtk/search.h"
+#include "gtk/ssl_cert.h"
bool nsgtk_complete = false;
@@ -578,111 +579,6 @@ void warn_user(const char *warning, const char *detail)
}
-static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_accept(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_reject(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
-{
- nsgtk_ssl_reject(w, data);
- return FALSE;
-}
-
-static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
- unsigned long num, nserror (*cb)(bool proceed, void *pw),
- void *cbpw)
-{
- static struct nsgtk_treeview *ssl_window;
- struct sslcert_session_data *data;
- GtkButton *accept, *reject;
- void **session;
- GtkDialog *dlg;
- GtkScrolledWindow *scrolled;
- GtkDrawingArea *drawing_area;
- GError *error = NULL;
- GtkBuilder *builder;
- GtkWindow *gtk_parent;
-
- /* state while dlg is open */
- session = calloc(sizeof(void *), 3);
- if (session == NULL) {
- return;
- }
-
- builder = gtk_builder_new();
- if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
- g_warning("Couldn't load builder file: %s", error->message);
- g_error_free(error);
-
- free(session);
- return;
- }
-
- sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
- ssl_current_session = data;
-
- dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
-
- /* set parent for transient dialog */
- gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
- gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
-
- scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
- drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
-
-
- ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
- drawing_area);
-
- if (ssl_window == NULL) {
- free(session);
- g_object_unref(G_OBJECT(dlg));
- return;
- }
-
- accept = GTK_BUTTON(gtk_builder_get_object(builder, "sslaccept"));
- reject = GTK_BUTTON(gtk_builder_get_object(builder, "sslreject"));
-
- session[0] = builder;
- session[1] = ssl_window;
- session[2] = data;
-
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
-
- CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
- CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
- CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
- (gpointer)session);
-
- gtk_widget_show(GTK_WIDGET(dlg));
-}
-
-
static void nsgtk_PDF_set_pass(GtkButton *w, gpointer data)
{
char **owner_pass = ((void **)data)[0];
@@ -1194,7 +1090,7 @@ static struct gui_browser_table nsgtk_browser_table = {
.quit = gui_quit,
.launch_url = gui_launch_url,
- .cert_verify = gui_cert_verify,
+ .cert_verify = gtk_cert_verify,
.login = gui_401login_open,
.pdf_password = nsgtk_pdf_password,
};
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 3fbad59..e1fd9bf 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -128,7 +128,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
*/
struct nsgtk_scaffolding *nsgtk_current_scaffolding(void);
-/* acessors for gtk elements withing a scaffold */
+/* acessors for gtk elements within a scaffold */
/**
* Get the gtk window for a scaffolding.
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-67-gfb73ff8
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/fb73ff80eddbe52b240d1...
...commit http://git.netsurf-browser.org/netsurf.git/commit/fb73ff80eddbe52b240d1e8...
...tree http://git.netsurf-browser.org/netsurf.git/tree/fb73ff80eddbe52b240d1e8cd...
The branch, master has been updated
via fb73ff80eddbe52b240d1e8cd023199a5d2059f3 (commit)
from 997e8999d5a3a496a81d45b37f723d5bc539f5c4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=fb73ff80eddbe52b240...
commit fb73ff80eddbe52b240d1e8cd023199a5d2059f3
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Fixup gtk3 ssl certificate dialog and ensure its parent is set.
diff --git a/gtk/gui.c b/gtk/gui.c
index c3fe6bb..27d4038 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -82,11 +82,6 @@ struct glade_file_location_s *glade_file_location;
static GtkWindow *nsgtk_warning_window;
GtkWidget *widWarning;
-static void nsgtk_ssl_accept(GtkButton *w, gpointer data);
-static void nsgtk_ssl_reject(GtkWidget *w, gpointer data);
-static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event,
- gpointer data);
-
#define THROBBER_FRAMES 9
char **respaths; /** resource search path vector */
@@ -583,6 +578,39 @@ void warn_user(const char *warning, const char *detail)
}
+static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_accept(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_reject(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+ nsgtk_ssl_reject(w, data);
+ return FALSE;
+}
static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
unsigned long num, nserror (*cb)(bool proceed, void *pw),
@@ -592,19 +620,20 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
struct sslcert_session_data *data;
GtkButton *accept, *reject;
void **session;
- GtkWindow *window;
+ GtkDialog *dlg;
GtkScrolledWindow *scrolled;
GtkDrawingArea *drawing_area;
- GError* error = NULL;
- GtkBuilder* builder;
+ GError *error = NULL;
+ GtkBuilder *builder;
+ GtkWindow *gtk_parent;
- /* state while window is open */
+ /* state while dlg is open */
session = calloc(sizeof(void *), 3);
if (session == NULL) {
return;
}
- builder = gtk_builder_new ();
+ builder = gtk_builder_new();
if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
g_warning("Couldn't load builder file: %s", error->message);
g_error_free(error);
@@ -616,16 +645,22 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
ssl_current_session = data;
- window = GTK_WINDOW(gtk_builder_get_object(builder, "wndSSLProblem"));
+ dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
+
+ /* set parent for transient dialog */
+ gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
+ gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
+
scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
- ssl_window = nsgtk_treeview_create(TREE_SSLCERT, window, scrolled,
+ ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
drawing_area);
if (ssl_window == NULL) {
free(session);
+ g_object_unref(G_OBJECT(dlg));
return;
}
@@ -641,44 +676,10 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
- CONNECT(window, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
+ CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
(gpointer)session);
- gtk_widget_show(GTK_WIDGET(window));
-}
-
-void nsgtk_ssl_accept(GtkButton *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_accept(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_reject(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
-{
- nsgtk_ssl_reject(w, data);
- return FALSE;
+ gtk_widget_show(GTK_WIDGET(dlg));
}
diff --git a/gtk/res/ssl.gtk3.ui b/gtk/res/ssl.gtk3.ui
index 90f449d..dace2a4 100644
--- a/gtk/res/ssl.gtk3.ui
+++ b/gtk/res/ssl.gtk3.ui
@@ -1,195 +1,174 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-apply</property>
+ </object>
+ <object class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-cancel</property>
+ </object>
<object class="GtkDialog" id="wndSSLProblem">
- <property name="border_width">1</property>
- <property name="title" translatable="yes">SSL certificate problem</property>
- <property name="modal">True</property>
- <property name="default_width">500</property>
- <property name="default_height">250</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="default_width">440</property>
+ <property name="default_height">260</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
<child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <child>
- <object class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
<child>
- <object class="GtkImage" id="image6">
+ <object class="GtkButton" id="sslreject">
+ <property name="label" translatable="yes">_Reject</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
- <property name="yalign">0</property>
- <property name="icon_size">6</property>
- <property name="icon_name">gtk-dialog-warning</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image3</property>
+ <property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox13">
+ <object class="GtkButton" id="sslaccept">
+ <property name="label" translatable="yes">_Accept</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image2</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
<child>
- <object class="GtkLabel" id="label62">
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
- <property name="label" translatable="yes">NetSurf failed to verify the authenticity of an SSL certificate. Please verify the details presented below.</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_right">8</property>
+ <property name="stock">gtk-dialog-warning</property>
+ <property name="icon-size">6</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame13">
+ <object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="border_width">5</property>
- <property name="label_xalign">0</property>
- <child>
- <object class="GtkAlignment" id="alignment17">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkScrolledWindow" id="SSLScrolled">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <object class="GtkViewport" id="SSLViewport">
- <property name="visible">True</property>
- <property name="resize_mode">GTK_RESIZE_QUEUE</property>
- <child>
- <object class="GtkDrawingArea" id="SSLDrawingArea">
- <property name="visible">True</property>
- <property name="app_paintable">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label63">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Certificate chain</b></property>
- <property name="use_markup">True</property>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">NetSurf failed to verify the authenticity of an SSL certificate. Please verify the details presented below.</property>
+ <property name="wrap">True</property>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <object class="GtkButton" id="sslreject">
+ <object class="GtkFrame" id="frame1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment16">
+ <object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
<child>
- <object class="GtkHBox" id="hbox14">
+ <object class="GtkScrolledWindow" id="SSLScrolled">
<property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage" id="image5">
- <property name="visible">True</property>
- <property name="stock">gtk-cancel</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
<child>
- <object class="GtkLabel" id="label61">
+ <object class="GtkViewport" id="SSLViewport">
<property name="visible">True</property>
- <property name="label" translatable="yes">Reject</property>
- <property name="use_underline">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkDrawingArea" id="SSLDrawingArea">
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="sslaccept">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <child>
- <object class="GtkAlignment" id="alignment15">
+ <child type="label">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage" id="image4">
- <property name="visible">True</property>
- <property name="stock">gtk-apply</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label60">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Accept</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Certificate Chain</b></property>
+ <property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
-----------------------------------------------------------------------
Summary of changes:
gtk/gui.c | 97 ++++++++++----------
gtk/res/ssl.gtk3.ui | 253 +++++++++++++++++++++++----------------------------
2 files changed, 165 insertions(+), 185 deletions(-)
diff --git a/gtk/gui.c b/gtk/gui.c
index c3fe6bb..27d4038 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -82,11 +82,6 @@ struct glade_file_location_s *glade_file_location;
static GtkWindow *nsgtk_warning_window;
GtkWidget *widWarning;
-static void nsgtk_ssl_accept(GtkButton *w, gpointer data);
-static void nsgtk_ssl_reject(GtkWidget *w, gpointer data);
-static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event,
- gpointer data);
-
#define THROBBER_FRAMES 9
char **respaths; /** resource search path vector */
@@ -583,6 +578,39 @@ void warn_user(const char *warning, const char *detail)
}
+static void nsgtk_ssl_accept(GtkButton *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_accept(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
+{
+ void **session = data;
+ GtkBuilder *x = session[0];
+ struct nsgtk_treeview *wnd = session[1];
+ struct sslcert_session_data *ssl_data = session[2];
+
+ sslcert_viewer_reject(ssl_data);
+
+ nsgtk_treeview_destroy(wnd);
+ g_object_unref(G_OBJECT(x));
+ free(session);
+}
+
+static gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+ nsgtk_ssl_reject(w, data);
+ return FALSE;
+}
static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
unsigned long num, nserror (*cb)(bool proceed, void *pw),
@@ -592,19 +620,20 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
struct sslcert_session_data *data;
GtkButton *accept, *reject;
void **session;
- GtkWindow *window;
+ GtkDialog *dlg;
GtkScrolledWindow *scrolled;
GtkDrawingArea *drawing_area;
- GError* error = NULL;
- GtkBuilder* builder;
+ GError *error = NULL;
+ GtkBuilder *builder;
+ GtkWindow *gtk_parent;
- /* state while window is open */
+ /* state while dlg is open */
session = calloc(sizeof(void *), 3);
if (session == NULL) {
return;
}
- builder = gtk_builder_new ();
+ builder = gtk_builder_new();
if (!gtk_builder_add_from_file(builder, glade_file_location->ssl, &error)) {
g_warning("Couldn't load builder file: %s", error->message);
g_error_free(error);
@@ -616,16 +645,22 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
sslcert_viewer_create_session_data(num, url, cb, cbpw, certs, &data);
ssl_current_session = data;
- window = GTK_WINDOW(gtk_builder_get_object(builder, "wndSSLProblem"));
+ dlg = GTK_DIALOG(gtk_builder_get_object(builder, "wndSSLProblem"));
+
+ /* set parent for transient dialog */
+ gtk_parent = nsgtk_scaffolding_window(nsgtk_current_scaffolding());
+ gtk_window_set_transient_for(GTK_WINDOW(dlg), gtk_parent);
+
scrolled = GTK_SCROLLED_WINDOW(gtk_builder_get_object(builder, "SSLScrolled"));
drawing_area = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "SSLDrawingArea"));
- ssl_window = nsgtk_treeview_create(TREE_SSLCERT, window, scrolled,
+ ssl_window = nsgtk_treeview_create(TREE_SSLCERT, GTK_WINDOW(dlg), scrolled,
drawing_area);
if (ssl_window == NULL) {
free(session);
+ g_object_unref(G_OBJECT(dlg));
return;
}
@@ -641,44 +676,10 @@ static void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
CONNECT(accept, "clicked", nsgtk_ssl_accept, session);
CONNECT(reject, "clicked", nsgtk_ssl_reject, session);
- CONNECT(window, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
+ CONNECT(dlg, "delete_event", G_CALLBACK(nsgtk_ssl_delete_event),
(gpointer)session);
- gtk_widget_show(GTK_WIDGET(window));
-}
-
-void nsgtk_ssl_accept(GtkButton *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_accept(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-void nsgtk_ssl_reject(GtkWidget *w, gpointer data)
-{
- void **session = data;
- GtkBuilder *x = session[0];
- struct nsgtk_treeview *wnd = session[1];
- struct sslcert_session_data *ssl_data = session[2];
-
- sslcert_viewer_reject(ssl_data);
-
- nsgtk_treeview_destroy(wnd);
- g_object_unref(G_OBJECT(x));
- free(session);
-}
-
-gboolean nsgtk_ssl_delete_event(GtkWidget *w, GdkEvent *event, gpointer data)
-{
- nsgtk_ssl_reject(w, data);
- return FALSE;
+ gtk_widget_show(GTK_WIDGET(dlg));
}
diff --git a/gtk/res/ssl.gtk3.ui b/gtk/res/ssl.gtk3.ui
index 90f449d..dace2a4 100644
--- a/gtk/res/ssl.gtk3.ui
+++ b/gtk/res/ssl.gtk3.ui
@@ -1,195 +1,174 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-apply</property>
+ </object>
+ <object class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-cancel</property>
+ </object>
<object class="GtkDialog" id="wndSSLProblem">
- <property name="border_width">1</property>
- <property name="title" translatable="yes">SSL certificate problem</property>
- <property name="modal">True</property>
- <property name="default_width">500</property>
- <property name="default_height">250</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="default_width">440</property>
+ <property name="default_height">260</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
<child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <child>
- <object class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
<child>
- <object class="GtkImage" id="image6">
+ <object class="GtkButton" id="sslreject">
+ <property name="label" translatable="yes">_Reject</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
- <property name="yalign">0</property>
- <property name="icon_size">6</property>
- <property name="icon_name">gtk-dialog-warning</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image3</property>
+ <property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox13">
+ <object class="GtkButton" id="sslaccept">
+ <property name="label" translatable="yes">_Accept</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image2</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
<child>
- <object class="GtkLabel" id="label62">
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
- <property name="label" translatable="yes">NetSurf failed to verify the authenticity of an SSL certificate. Please verify the details presented below.</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_right">8</property>
+ <property name="stock">gtk-dialog-warning</property>
+ <property name="icon-size">6</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame13">
+ <object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="border_width">5</property>
- <property name="label_xalign">0</property>
- <child>
- <object class="GtkAlignment" id="alignment17">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkScrolledWindow" id="SSLScrolled">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <object class="GtkViewport" id="SSLViewport">
- <property name="visible">True</property>
- <property name="resize_mode">GTK_RESIZE_QUEUE</property>
- <child>
- <object class="GtkDrawingArea" id="SSLDrawingArea">
- <property name="visible">True</property>
- <property name="app_paintable">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label63">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Certificate chain</b></property>
- <property name="use_markup">True</property>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">NetSurf failed to verify the authenticity of an SSL certificate. Please verify the details presented below.</property>
+ <property name="wrap">True</property>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <object class="GtkButton" id="sslreject">
+ <object class="GtkFrame" id="frame1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment16">
+ <object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
<child>
- <object class="GtkHBox" id="hbox14">
+ <object class="GtkScrolledWindow" id="SSLScrolled">
<property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage" id="image5">
- <property name="visible">True</property>
- <property name="stock">gtk-cancel</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
<child>
- <object class="GtkLabel" id="label61">
+ <object class="GtkViewport" id="SSLViewport">
<property name="visible">True</property>
- <property name="label" translatable="yes">Reject</property>
- <property name="use_underline">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkDrawingArea" id="SSLDrawingArea">
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="sslaccept">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <child>
- <object class="GtkAlignment" id="alignment15">
+ <child type="label">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage" id="image4">
- <property name="visible">True</property>
- <property name="stock">gtk-apply</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label60">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Accept</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Certificate Chain</b></property>
+ <property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-66-g997e899
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/997e8999d5a3a496a81d4...
...commit http://git.netsurf-browser.org/netsurf.git/commit/997e8999d5a3a496a81d45b...
...tree http://git.netsurf-browser.org/netsurf.git/tree/997e8999d5a3a496a81d45b37...
The branch, master has been updated
via 997e8999d5a3a496a81d45b37f723d5bc539f5c4 (commit)
from f3158f79b6357558e3a0083039857bba21c6ca5b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=997e8999d5a3a496a81...
commit 997e8999d5a3a496a81d45b37f723d5bc539f5c4
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Refactor GTK toolbar handling to correctly cope with text labels
diff --git a/gtk/preferences.c b/gtk/preferences.c
index 7348afd..ec09fe7 100644
--- a/gtk/preferences.c
+++ b/gtk/preferences.c
@@ -861,39 +861,9 @@ nsgtk_preferences_comboButtonType_changed(GtkComboBox *widget,
current = nsgtk_scaffolding_iterate(NULL);
while (current != NULL) {
nsgtk_scaffolding_reset_offset(current);
- switch(nsoption_int(button_type)) {
- /* value of 0 is reserved for 'unset' */
- case 1:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- break;
- case 2:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 3:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_BOTH);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 4:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_TEXT);
- default:
- break;
- }
+
+ nsgtk_scaffolding_toolbars(current, nsoption_int(button_type));
+
current = nsgtk_scaffolding_iterate(current);
}
}
diff --git a/gtk/res/tabcontents.gtk3.ui b/gtk/res/tabcontents.gtk3.ui
index 02de1bf..23328b3 100644
--- a/gtk/res/tabcontents.gtk3.ui
+++ b/gtk/res/tabcontents.gtk3.ui
@@ -48,19 +48,6 @@
</packing>
</child>
<child>
- <object class="GtkStatusbar" id="resizer">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
<object class="GtkPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -98,5 +85,8 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</interface>
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 2b30a3e..51f0424 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -1969,6 +1969,61 @@ static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
gtk_widget_set_sensitive(GTK_WIDGET(g->menu_bar->view_submenu->images_menuitem), FALSE);
}
+
+void nsgtk_scaffolding_toolbars(struct nsgtk_scaffolding *g, int tbi)
+{
+ switch (tbi) {
+ /* case 0 is 'unset' [from fresh install / clearing options]
+ * see above */
+
+ case 1: /* Small icons */
+ /* main toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
+ break;
+
+ case 2: /* Large icons */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ break;
+
+ case 3: /* Large icons with text */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ break;
+
+ case 4: /* Text icons only */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_TEXT);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_TEXT);
+ default:
+ break;
+ }
+}
+
/* exported interface documented in gtk/scaffolding.h */
struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
{
@@ -2104,34 +2159,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
}
}
- switch (nsoption_int(button_type)) {
- /* case 0 is 'unset' [from fresh install / clearing options]
- * see above */
-
- case 1: /* Small icons */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- break;
- case 2: /* Large icons */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 3: /* Large icons with text */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_BOTH);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 4: /* Text icons only */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_TEXT);
- default:
- break;
- }
+ nsgtk_scaffolding_toolbars(g, nsoption_int(button_type));
gtk_toolbar_set_show_arrow(g->tool_bar, TRUE);
gtk_widget_show_all(GTK_WIDGET(g->tool_bar));
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 730d4fc..3fbad59 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -247,5 +247,6 @@ nserror gui_window_set_url(struct gui_window *g, struct nsurl *url);
void gui_window_start_throbber(struct gui_window *g);
void gui_window_stop_throbber(struct gui_window *g);
+void nsgtk_scaffolding_toolbars(struct nsgtk_scaffolding *g, int tbi);
#endif /* NETSURF_GTK_SCAFFOLDING_H */
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index 0a518a5..b6bf8d9 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -67,333 +67,405 @@ possible into the store */
static struct nsgtk_toolbar_custom_store store;
static struct nsgtk_toolbar_custom_store *window = &store;
-static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i, struct nsgtk_theme *theme);
-static bool nsgtk_toolbar_add_store_widget(GtkWidget *widget);
-static gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc, gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext
- *drag_context, gint x, gint y, guint time, gpointer data);
-gboolean nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
- gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_move_complete(GtkWidget *widget, GdkDragContext
- *gdc, gint x, gint y, GtkSelectionData *selection, guint info,
- guint time, gpointer data);
-static void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint
- time, gpointer data);
-static gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
- gpointer data);
-static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data);
-static gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data);
-static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data);
-static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g);
-static GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i, struct nsgtk_theme *theme);
-static void nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i);
+/**
+ * callback function to iterate toolbar's widgets
+ */
+static void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ gtk_container_remove(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ widget);
+}
+
+/**
+ * connect temporary handler for toolbar edit events
+ *
+ * \param g The scaffolding
+ * \param bi The button index
+ */
static void nsgtk_toolbar_temp_connect(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i);
-static void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data);
-static nsgtk_toolbar_button nsgtk_toolbar_get_id_at_location(
- struct nsgtk_scaffolding *g, int i);
+ nsgtk_toolbar_button bi)
+{
+ struct nsgtk_button_connect *bc;
+
+ if (bi != URL_BAR_ITEM) {
+ bc = nsgtk_scaffolding_button(g, bi);
+ if ((bc->button != NULL) && (bc->dataminus != NULL)) {
+ g_signal_connect(bc->button,
+ "drag-data-get",
+ G_CALLBACK(bc->dataminus),
+ g);
+ }
+ }
+}
/**
- * change behaviour of scaffoldings while editing toolbar
+ * get scaffolding button index of button at location
*
- * All buttons as well as window clicks are desensitized; then buttons
- * in the front window are changed to movable buttons
+ * \return toolbar item id from location when there is an item at that logical
+ * location; else -1
*/
-void nsgtk_toolbar_customization_init(struct nsgtk_scaffolding *g)
+static nsgtk_toolbar_button
+nsgtk_toolbar_get_id_at_location(struct nsgtk_scaffolding *g, int i)
{
- int i;
- struct nsgtk_scaffolding *list;
- edit_mode = true;
+ int q;
+ for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++) {
+ if (nsgtk_scaffolding_button(g, q)->location == i) {
+ return q;
+ }
+ }
+ return -1;
+}
- list = nsgtk_scaffolding_iterate(NULL);
- while (list) {
- g_signal_handler_block(GTK_WIDGET(
- nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- nsgtk_window_get_signalhandler(
- nsgtk_scaffolding_top_level(list),
- NSGTK_WINDOW_SIGNAL_CLICK));
- g_signal_handler_block(GTK_WIDGET(
- nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- nsgtk_window_get_signalhandler(
- nsgtk_scaffolding_top_level(list),
- NSGTK_WINDOW_SIGNAL_REDRAW));
- nsgtk_widget_override_background_color(
- GTK_WIDGET(nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- GTK_STATE_NORMAL, 0, 0xEEEE, 0xEEEE, 0xEEEE);
+/**
+ * widget factory for creation of toolbar item widgets
+ * \param g the reference scaffolding
+ * \param i the id of the widget
+ * \param theme the theme to make the widgets from
+ */
+static GtkWidget *
+nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
+ nsgtk_toolbar_button i,
+ struct nsgtk_theme *theme)
+{
+ GtkWidget *w = NULL;
- if (list == g) {
- list = nsgtk_scaffolding_iterate(list);
- continue;
+ switch(i) {
+
+/* gtk_tool_button_new() accepts NULL args */
+#define MAKE_STOCKBUTTON(p, q) \
+ case p##_BUTTON: { \
+ GtkStockItem item; \
+ char *label = NULL; \
+ if (nsgtk_stock_lookup(q, &item) && \
+ (item.label != NULL) && \
+ ((label = remove_underscores(item.label, false)) != NULL)) { \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ free(label); \
+ } else { \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), q)); \
+ } \
+ break; \
+ }
+
+ MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
+ MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK)
+ MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD)
+ MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
+ MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
+#undef MAKE_STOCKBUTTON
+
+ case HISTORY_BUTTON:
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ theme->image[HISTORY_BUTTON]), "H"));
+ break;
+
+ case URL_BAR_ITEM: {
+ GtkWidget *entry = nsgtk_entry_new();
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ if ((entry == NULL) || (w == NULL)) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
}
- /* set sensitive for all gui_windows save g */
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_window(
- list)), FALSE);
- list = nsgtk_scaffolding_iterate(list);
+
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ favicon_pixbuf);
+
+ gtk_container_add(GTK_CONTAINER(w), entry);
+ gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
+ break;
}
- /* set sensitive for all of g save toolbar */
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)),
- FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)),
- FALSE);
- /* set editable aspect for toolbar */
- gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
- nsgtk_toolbar_clear_toolbar, g);
- nsgtk_toolbar_set_physical(g);
- /* memorize button locations, set editable */
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- window->buttonlocations[i] = nsgtk_scaffolding_button(g, i)
- ->location;
- if ((window->buttonlocations[i] == -1) || (i == URL_BAR_ITEM))
- continue;
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g, i)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(nsgtk_scaffolding_button(
- g, i)->button), GDK_BUTTON1_MASK, &entry, 1,
- GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, i);
+ case THROBBER_ITEM: {
+ if ((nsgtk_throbber == NULL) ||
+ (nsgtk_throbber->framedata == NULL) ||
+ (nsgtk_throbber->framedata[0] == NULL)) {
+ return NULL;
+ }
+
+ if (edit_mode) {
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ gtk_image_new_from_pixbuf(
+ nsgtk_throbber->framedata[0])),
+ "[throbber]"));
+ } else {
+ GtkWidget *image;
+
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
+ if (image != NULL) {
+ nsgtk_widget_set_alignment(image,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(image, 3, 0);
+
+ gtk_container_add(GTK_CONTAINER(w), image);
+ }
+ }
+ break;
}
- /* add move button listeners */
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-drop", G_CALLBACK(nsgtk_toolbar_data), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-data-received", G_CALLBACK(
- nsgtk_toolbar_move_complete), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-motion", G_CALLBACK(nsgtk_toolbar_action), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-leave", G_CALLBACK(
- nsgtk_toolbar_clear), g);
+ case WEBSEARCH_ITEM: {
+ if (edit_mode)
+ return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ nsgtk_image_new_from_stock(NSGTK_STOCK_FIND,
+ GTK_ICON_SIZE_LARGE_TOOLBAR)),
+ "[websearch]"));
- /* set data types */
- gtk_drag_dest_set(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
- &entry, 1, GDK_ACTION_COPY);
+ GtkWidget *entry = nsgtk_entry_new();
- /* open toolbar window */
- nsgtk_toolbar_window_open(g);
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ if ((entry == NULL) || (w == NULL)) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
+
+ gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
+
+ nsgtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+
+ gtk_container_add(GTK_CONTAINER(w), entry);
+ break;
+ }
+
+/* gtk_tool_button_new accepts NULL args */
+#define MAKE_MENUBUTTON(p, q) \
+ case p##_BUTTON: { \
+ char *label = NULL; \
+ label = remove_underscores(messages_get(#q), false); \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ if (label != NULL) \
+ free(label); \
+ break; \
+ }
+
+ MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
+ MAKE_MENUBUTTON(NEWTAB, gtkNewTab)
+ MAKE_MENUBUTTON(OPENFILE, gtkOpenFile)
+ MAKE_MENUBUTTON(CLOSETAB, gtkCloseTab)
+ MAKE_MENUBUTTON(CLOSEWINDOW, gtkCloseWindow)
+ MAKE_MENUBUTTON(SAVEPAGE, gtkSavePage)
+ MAKE_MENUBUTTON(PRINTPREVIEW, gtkPrintPreview)
+ MAKE_MENUBUTTON(PRINT, gtkPrint)
+ MAKE_MENUBUTTON(QUIT, gtkQuitMenu)
+ MAKE_MENUBUTTON(CUT, gtkCut)
+ MAKE_MENUBUTTON(COPY, gtkCopy)
+ MAKE_MENUBUTTON(PASTE, gtkPaste)
+ MAKE_MENUBUTTON(DELETE, gtkDelete)
+ MAKE_MENUBUTTON(SELECTALL, gtkSelectAll)
+ MAKE_MENUBUTTON(PREFERENCES, gtkPreferences)
+ MAKE_MENUBUTTON(ZOOMPLUS, gtkZoomPlus)
+ MAKE_MENUBUTTON(ZOOMMINUS, gtkZoomMinus)
+ MAKE_MENUBUTTON(ZOOMNORMAL, gtkZoomNormal)
+ MAKE_MENUBUTTON(FULLSCREEN, gtkFullScreen)
+ MAKE_MENUBUTTON(VIEWSOURCE, gtkViewSource)
+ MAKE_MENUBUTTON(CONTENTS, gtkContents)
+ MAKE_MENUBUTTON(ABOUT, gtkAbout)
+ MAKE_MENUBUTTON(PDF, gtkPDF)
+ MAKE_MENUBUTTON(PLAINTEXT, gtkPlainText)
+ MAKE_MENUBUTTON(DRAWFILE, gtkDrawFile)
+ MAKE_MENUBUTTON(POSTSCRIPT, gtkPostScript)
+ MAKE_MENUBUTTON(FIND, gtkFind)
+ MAKE_MENUBUTTON(DOWNLOADS, gtkDownloads)
+ MAKE_MENUBUTTON(SAVEWINDOWSIZE, gtkSaveWindowSize)
+ MAKE_MENUBUTTON(TOGGLEDEBUGGING, gtkToggleDebugging)
+ MAKE_MENUBUTTON(SAVEBOXTREE, gtkDebugBoxTree)
+ MAKE_MENUBUTTON(SAVEDOMTREE, gtkDebugDomTree)
+ MAKE_MENUBUTTON(LOCALHISTORY, gtkLocalHistory)
+ MAKE_MENUBUTTON(GLOBALHISTORY, gtkGlobalHistory)
+ MAKE_MENUBUTTON(ADDBOOKMARKS, gtkAddBookMarks)
+ MAKE_MENUBUTTON(SHOWBOOKMARKS, gtkShowBookMarks)
+ MAKE_MENUBUTTON(SHOWCOOKIES, gtkShowCookies)
+ MAKE_MENUBUTTON(OPENLOCATION, gtkOpenLocation)
+ MAKE_MENUBUTTON(NEXTTAB, gtkNextTab)
+ MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
+ MAKE_MENUBUTTON(GUIDE, gtkGuide)
+ MAKE_MENUBUTTON(INFO, gtkUserInformation)
+#undef MAKE_MENUBUTTON
+
+ default:
+ break;
+
+ }
+ return w;
}
/**
- * create store window
+ * called when a widget is dropped onto the toolbar
*/
-void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g)
+static gboolean
+nsgtk_toolbar_data(GtkWidget *widget,
+ GdkDragContext *gdc,
+ gint x,
+ gint y,
+ guint time,
+ gpointer data)
{
- int x = 0, y = 0;
- GError* error = NULL;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ int ind = gtk_toolbar_get_drop_index(nsgtk_scaffolding_toolbar(g),
+ x, y);
+ int q, i;
+ if (window->currentbutton == -1)
+ return TRUE;
struct nsgtk_theme *theme =
nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
if (theme == NULL) {
warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- return;
- }
-
- window->glade = gtk_builder_new();
- if (!gtk_builder_add_from_file(window->glade,
- glade_file_location->toolbar,
- &error)) {
- g_warning ("Couldn't load builder file: %s", error->message);
- g_error_free (error);
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ return TRUE;
}
-
- gtk_builder_connect_signals(window->glade, NULL);
-
- window->window = GTK_WIDGET(gtk_builder_get_object(window->glade, "toolbarwindow"));
- if (window->window == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->location
+ != -1) {
+ /* widget was already in the toolbar; so replace */
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->
+ location < ind)
+ ind--;
+ gtk_container_remove(GTK_CONTAINER(
+ nsgtk_scaffolding_toolbar(g)), GTK_WIDGET(
+ nsgtk_scaffolding_button(g,
+ window->currentbutton)->button));
+ /* 'move' all widgets further right than the original location,
+ * one place to the left in logical schema */
+ for (i = nsgtk_scaffolding_button(g, window->currentbutton)->
+ location + 1; i < PLACEHOLDER_BUTTON; i++) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
+ continue;
+ nsgtk_scaffolding_button(g, q)->location--;
+ }
+ nsgtk_scaffolding_button(g, window->currentbutton)->
+ location = -1;
}
-
- window->widgetvbox = GTK_WIDGET(gtk_builder_get_object(window->glade, "widgetvbox"));
- if (window->widgetvbox == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ nsgtk_scaffolding_button(g, window->currentbutton)->button =
+ GTK_TOOL_ITEM(nsgtk_toolbar_make_widget(g,
+ window->currentbutton, theme));
+ free(theme);
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->button
+ == NULL) {
+ warn_user("NoMemory", 0);
+ return TRUE;
}
-
- window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */
- /* store to cause creation of a new toolbar */
- window->currentbutton = -1;
- /* load toolbuttons */
- /* add toolbuttons to window */
- /* set event handlers */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (i == URL_BAR_ITEM)
- continue;
- window->store_buttons[i] =
- nsgtk_toolbar_make_widget(g, i, theme);
- if (window->store_buttons[i] == NULL) {
- warn_user(messages_get("NoMemory"), 0);
+ /* update logical schema */
+ nsgtk_scaffolding_reset_offset(g);
+ /* 'move' all widgets further right than the new location, one place to
+ * the right in logical schema */
+ for (i = PLACEHOLDER_BUTTON - 1; i >= ind; i--) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
continue;
- }
- nsgtk_toolbar_add_store_widget(window->store_buttons[i]);
- g_signal_connect(window->store_buttons[i], "drag-data-get",
- G_CALLBACK(
- nsgtk_scaffolding_button(g, i)->dataplus), g);
+ nsgtk_scaffolding_button(g, q)->location++;
}
- free(theme);
- gtk_window_set_transient_for(GTK_WINDOW(window->window),
- nsgtk_scaffolding_window(g));
- gtk_window_set_title(GTK_WINDOW(window->window), messages_get(
- "gtkToolBarTitle"));
- gtk_window_set_accept_focus(GTK_WINDOW(window->window), FALSE);
- gtk_drag_dest_set(GTK_WIDGET(window->window), GTK_DEST_DEFAULT_MOTION |
- GTK_DEST_DEFAULT_DROP, &entry, 1, GDK_ACTION_COPY);
- gtk_widget_show_all(window->window);
- gtk_window_set_position(GTK_WINDOW(window->window),
- GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_window_get_position(nsgtk_scaffolding_window(g), &x, &y);
- gtk_window_move(GTK_WINDOW(window->window), x, y + 100);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "cancelbutton")),
- "clicked",
- G_CALLBACK(nsgtk_toolbar_cancel_clicked),
- g);
+ nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
+
+ /* complete action */
+ GtkToolItem *current_button;
+
+ current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
+
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "okbutton")),
- "clicked", G_CALLBACK(nsgtk_toolbar_persist), g);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "resetbutton")),
- "clicked", G_CALLBACK(nsgtk_toolbar_reset), g);
- g_signal_connect(window->window, "delete-event",
- G_CALLBACK(nsgtk_toolbar_delete), g);
- g_signal_connect(window->window, "drag-drop",
- G_CALLBACK(nsgtk_toolbar_store_return), g);
- g_signal_connect(window->window, "drag-motion",
- G_CALLBACK(nsgtk_toolbar_store_action), g);
-}
+ gtk_tool_item_set_use_drag_window(current_button, TRUE);
+ gtk_drag_source_set(GTK_WIDGET(current_button),
+ GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, window->currentbutton);
+ gtk_widget_show_all(GTK_WIDGET(current_button));
+
+
+ window->currentbutton = -1;
-/**
- * when titlebar / alt-F4 window close event happens
- */
-gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
- gpointer data)
-{
- edit_mode = false;
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* reset g->buttons->location */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- nsgtk_scaffolding_button(g, i)->location =
- window->buttonlocations[i];
- }
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_connect_all(g);
- nsgtk_toolbar_close(g);
- nsgtk_scaffolding_set_sensitivity(g);
- gtk_widget_destroy(window->window);
return TRUE;
}
/**
- * when cancel button is clicked
+ * connected to toolbutton drop; perhaps one day it'll work properly so it may
+ * replace the global current_button
*/
-gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data)
+static gboolean
+nsgtk_toolbar_move_complete(GtkWidget *widget,
+ GdkDragContext *gdc,
+ gint x,
+ gint y,
+ GtkSelectionData *selection,
+ guint info,
+ guint time,
+ gpointer data)
{
- edit_mode = false;
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* reset g->buttons->location */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- nsgtk_scaffolding_button(g, i)->location =
- window->buttonlocations[i];
- }
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_connect_all(g);
- nsgtk_toolbar_close(g);
- nsgtk_scaffolding_set_sensitivity(g);
- gtk_widget_destroy(window->window);
- return TRUE;
+ return FALSE;
}
/**
- * when 'save settings' button is clicked
+ * called when hovering an item above the toolbar
*/
-gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data)
+static gboolean
+nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext *gdc, gint x,
+ gint y, guint time, gpointer data)
{
- edit_mode = false;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* save state to file, update toolbars for all windows */
- nsgtk_toolbar_customization_save(g);
- nsgtk_toolbar_cast(g);
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_close(g);
- gtk_widget_destroy(window->window);
- return TRUE;
+ GtkToolItem *item = gtk_tool_button_new(NULL, NULL);
+ if (item != NULL)
+ gtk_toolbar_set_drop_highlight_item(
+ nsgtk_scaffolding_toolbar(g),
+ GTK_TOOL_ITEM(item),
+ gtk_toolbar_get_drop_index(
+ nsgtk_scaffolding_toolbar(g), x, y));
+ return FALSE;
}
/**
- * when 'reload defaults' button is clicked
+ * called when hovering stops
*/
-gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data)
+static void
+nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
+ gpointer data)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int i;
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_scaffolding_button(g, i)->location =
- (i <= THROBBER_ITEM) ? i : -1;
- nsgtk_toolbar_set_physical(g);
- for (i = BACK_BUTTON; i <= THROBBER_ITEM; i++) {
- if (i == URL_BAR_ITEM)
- continue;
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g, i)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(
- nsgtk_scaffolding_button(g, i)->button),
- GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, i);
- }
- return TRUE;
+ gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
}
/**
- * set toolbar logical -> physical; physically visible toolbar buttons are made
- * to correspond to the logically stored schema in terms of location
- * visibility etc
+ * add item to toolbar.
+ *
+ * the function should be called, when multiple items are being added,
+ * in ascending order.
+ *
+ * \param g the scaffolding whose toolbar an item is added to.
+ * \param i the location in the toolbar.
+ * \param theme The theme in use.
*/
-void nsgtk_toolbar_set_physical(struct nsgtk_scaffolding *g)
+static void
+nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i,
+ struct nsgtk_theme *theme)
{
- int i;
- struct nsgtk_theme *theme =
- nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
- if (theme == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return;
- }
- /* simplest is to clear the toolbar then reload it from memory */
- gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
- nsgtk_toolbar_clear_toolbar, g);
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_toolbar_add_item_to_toolbar(g, i, theme);
- gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)));
- free(theme);
+ int q;
+ for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
+ if (nsgtk_scaffolding_button(g, q)->location == i) {
+ nsgtk_scaffolding_button(g, q)->button = GTK_TOOL_ITEM(
+ nsgtk_toolbar_make_widget(g, q,
+ theme));
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
+ nsgtk_scaffolding_button(g, q)->button,
+ i);
+ break;
+ }
}
/**
* cleanup code physical update of all toolbars; resensitize
* \param g the 'front' scaffolding that called customize
*/
-void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
+static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
{
int i;
struct nsgtk_scaffolding *list;
- struct nsgtk_theme *theme;
+ struct nsgtk_theme *theme;
list = nsgtk_scaffolding_iterate(NULL);
while (list) {
@@ -447,44 +519,29 @@ void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
}
/**
- * callback function to iterate toolbar's widgets
+ * when cancel button is clicked
*/
-void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data)
+static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data)
{
+ edit_mode = false;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- gtk_container_remove(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)), widget);
-}
-
-/**
- * add item to toolbar.
- *
- * the function should be called, when multiple items are being added,
- * in ascending order.
- *
- * \param g the scaffolding whose toolbar an item is added to.
- * \param i the location in the toolbar.
- * \param theme The theme in use.
- */
-void nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i,
- struct nsgtk_theme *theme)
-{
- int q;
- for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
- if (nsgtk_scaffolding_button(g, q)->location == i) {
- nsgtk_scaffolding_button(g, q)->button = GTK_TOOL_ITEM(
- nsgtk_toolbar_make_widget(g, q,
- theme));
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
- nsgtk_scaffolding_button(g, q)->button,
- i);
- break;
- }
+ /* reset g->buttons->location */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ nsgtk_scaffolding_button(g, i)->location =
+ window->buttonlocations[i];
+ }
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_connect_all(g);
+ nsgtk_toolbar_close(g);
+ nsgtk_scaffolding_set_sensitivity(g);
+ gtk_widget_destroy(window->window);
+ return TRUE;
}
/**
* physically add widgets to store window
*/
-bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
+static bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
{
if (window->numberh >= NSGTK_STORE_WIDTH) {
window->currentbar = gtk_toolbar_new();
@@ -512,102 +569,116 @@ bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
}
/**
- * called when a widget is dropped onto the toolbar
+ * save toolbar settings to file
*/
-gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *gdc, gint x,
- gint y, guint time, gpointer data)
+static void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int ind = gtk_toolbar_get_drop_index(nsgtk_scaffolding_toolbar(g),
- x, y);
- int q, i;
- if (window->currentbutton == -1)
- return TRUE;
- struct nsgtk_theme *theme =
- nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
- if (theme == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return TRUE;
- }
- if (nsgtk_scaffolding_button(g, window->currentbutton)->location
- != -1) {
- /* widget was already in the toolbar; so replace */
- if (nsgtk_scaffolding_button(g, window->currentbutton)->
- location < ind)
- ind--;
- gtk_container_remove(GTK_CONTAINER(
- nsgtk_scaffolding_toolbar(g)), GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button));
- /* 'move' all widgets further right than the original location,
- * one place to the left in logical schema */
- for (i = nsgtk_scaffolding_button(g, window->currentbutton)->
- location + 1; i < PLACEHOLDER_BUTTON; i++) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- nsgtk_scaffolding_button(g, q)->location--;
- }
- nsgtk_scaffolding_button(g, window->currentbutton)->
- location = -1;
- }
- nsgtk_scaffolding_button(g, window->currentbutton)->button =
- GTK_TOOL_ITEM(nsgtk_toolbar_make_widget(g,
- window->currentbutton, theme));
- free(theme);
- if (nsgtk_scaffolding_button(g, window->currentbutton)->button
- == NULL) {
- warn_user("NoMemory", 0);
- return TRUE;
+ int i;
+ FILE *f = fopen(toolbar_indices_file_location, "w");
+ if (f == NULL){
+ warn_user("gtkFileError", toolbar_indices_file_location);
+ return;
}
- /* update logical schema */
- nsgtk_scaffolding_reset_offset(g);
- /* 'move' all widgets further right than the new location, one place to
- * the right in logical schema */
- for (i = PLACEHOLDER_BUTTON - 1; i >= ind; i--) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- nsgtk_scaffolding_button(g, q)->location++;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ fprintf(f, "%d;%d|", i, nsgtk_scaffolding_button(g, i)->location);
}
- nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
-
- /* complete action */
- GtkToolItem *current_button;
-
- current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
-
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
+ fclose(f);
+}
- gtk_tool_item_set_use_drag_window(current_button, TRUE);
- gtk_drag_source_set(GTK_WIDGET(current_button),
- GDK_BUTTON1_MASK, &entry, 1,
- GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, window->currentbutton);
- gtk_widget_show_all(GTK_WIDGET(current_button));
+/**
+ * cast toolbar settings to all scaffoldings referenced from the global linked
+ * list of gui_windows
+ */
+static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_scaffolding *list;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ window->buttonlocations[i] =
+ ((nsgtk_scaffolding_button(g, i)->location
+ >= -1) &&
+ (nsgtk_scaffolding_button(g, i)->location
+ < PLACEHOLDER_BUTTON)) ?
+ nsgtk_scaffolding_button(g, i)->location : -1;
+ }
- window->currentbutton = -1;
+ list = nsgtk_scaffolding_iterate(NULL);
+ while (list) {
+ if (list != g)
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_scaffolding_button(list, i)->location =
+ window->buttonlocations[i];
+ list = nsgtk_scaffolding_iterate(list);
+ }
+}
+/**
+ * when 'save settings' button is clicked
+ */
+static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data)
+{
+ edit_mode = false;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ /* save state to file, update toolbars for all windows */
+ nsgtk_toolbar_customization_save(g);
+ nsgtk_toolbar_cast(g);
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_close(g);
+ gtk_widget_destroy(window->window);
return TRUE;
}
/**
- * connected to toolbutton drop; perhaps one day it'll work properly so it may
- * replace the global current_button
+ * when 'reload defaults' button is clicked
*/
+static gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ int i;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_scaffolding_button(g, i)->location =
+ (i <= THROBBER_ITEM) ? i : -1;
+ nsgtk_toolbar_set_physical(g);
+ for (i = BACK_BUTTON; i <= THROBBER_ITEM; i++) {
+ if (i == URL_BAR_ITEM)
+ continue;
+ gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
+ nsgtk_scaffolding_button(g, i)->button), TRUE);
+ gtk_drag_source_set(GTK_WIDGET(
+ nsgtk_scaffolding_button(g, i)->button),
+ GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, i);
+ }
+ return TRUE;
+}
-gboolean nsgtk_toolbar_move_complete(GtkWidget *widget, GdkDragContext *gdc,
- gint x, gint y, GtkSelectionData *selection, guint info,
- guint time, gpointer data)
+/**
+ * when titlebar / alt-F4 window close event happens
+ */
+static gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
+ gpointer data)
{
- return FALSE;
+ edit_mode = false;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ /* reset g->buttons->location */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ nsgtk_scaffolding_button(g, i)->location =
+ window->buttonlocations[i];
+ }
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_connect_all(g);
+ nsgtk_toolbar_close(g);
+ nsgtk_scaffolding_set_sensitivity(g);
+ gtk_widget_destroy(window->window);
+ return TRUE;
}
/**
* called when a widget is dropped onto the store window
*/
-gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
+static gboolean
+nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
gint x, gint y, guint time, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -639,225 +710,226 @@ gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
gtk_drag_finish(gdc, TRUE, TRUE, time);
return FALSE;
}
-/**
- * called when hovering an item above the toolbar
- */
-gboolean nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext *gdc, gint x,
- gint y, guint time, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- GtkToolItem *item = gtk_tool_button_new(NULL, NULL);
- if (item != NULL)
- gtk_toolbar_set_drop_highlight_item(
- nsgtk_scaffolding_toolbar(g),
- GTK_TOOL_ITEM(item),
- gtk_toolbar_get_drop_index(
- nsgtk_scaffolding_toolbar(g), x, y));
- return FALSE;
-}
/**
* called when hovering above the store
*/
-gboolean nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
+static gboolean
+nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
gint x, gint y, guint time, gpointer data)
{
return FALSE;
}
-/**
- * called when hovering stops
- */
-void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
- gpointer data)
-{
- gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
-}
/**
- * widget factory for creation of toolbar item widgets
- * \param g the reference scaffolding
- * \param i the id of the widget
- * \param theme the theme to make the widgets from
+ * create store window
*/
-GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i, struct nsgtk_theme *theme)
+static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g)
{
- GtkWidget *w = NULL;
-
- switch(i) {
-
-/* gtk_tool_button_new() accepts NULL args */
-#define MAKE_STOCKBUTTON(p, q) \
- case p##_BUTTON: { \
- GtkStockItem item; \
- if (nsgtk_stock_lookup(q, &item) && \
- (item.label != NULL)) { \
- char *label = NULL; \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), label)); \
- label = remove_underscores(item.label, false); \
- free(label); \
- label = NULL; \
- } else { \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), q)); \
- } \
- break; \
+ int x = 0, y = 0;
+ GError* error = NULL;
+ struct nsgtk_theme *theme =
+ nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
+ if (theme == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ return;
}
- MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
- MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK)
- MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD)
- MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
- MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
-#undef MAKE_STOCKBUTTON
-
- case HISTORY_BUTTON:
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- theme->image[HISTORY_BUTTON]), ""));
- break;
-
- case URL_BAR_ITEM: {
- GtkWidget *entry = nsgtk_entry_new();
- w = GTK_WIDGET(gtk_tool_item_new());
-
- if ((entry == NULL) || (w == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
- }
-
- nsgtk_entry_set_icon_from_pixbuf(entry,
- GTK_ENTRY_ICON_PRIMARY,
- favicon_pixbuf);
-
- gtk_container_add(GTK_CONTAINER(w), entry);
- gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
- break;
+ window->glade = gtk_builder_new();
+ if (!gtk_builder_add_from_file(window->glade,
+ glade_file_location->toolbar,
+ &error)) {
+ g_warning ("Couldn't load builder file: %s", error->message);
+ g_error_free (error);
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
}
- case THROBBER_ITEM: {
- if ((nsgtk_throbber == NULL) ||
- (nsgtk_throbber->framedata == NULL) ||
- (nsgtk_throbber->framedata[0] == NULL)) {
- return NULL;
- }
-
- if (edit_mode) {
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- gtk_image_new_from_pixbuf(
- nsgtk_throbber->framedata[0])),
- "[throbber]"));
- } else {
- GtkWidget *image;
+ gtk_builder_connect_signals(window->glade, NULL);
- w = GTK_WIDGET(gtk_tool_item_new());
+ window->window = GTK_WIDGET(gtk_builder_get_object(window->glade, "toolbarwindow"));
+ if (window->window == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
- image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
- if (image != NULL) {
- nsgtk_widget_set_alignment(image,
- GTK_ALIGN_CENTER,
- GTK_ALIGN_CENTER);
- nsgtk_widget_set_margins(image, 3, 0);
+ window->widgetvbox = GTK_WIDGET(gtk_builder_get_object(window->glade, "widgetvbox"));
+ if (window->widgetvbox == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
- gtk_container_add(GTK_CONTAINER(w), image);
- }
+ window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */
+ /* store to cause creation of a new toolbar */
+ window->currentbutton = -1;
+ /* load toolbuttons */
+ /* add toolbuttons to window */
+ /* set event handlers */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ if (i == URL_BAR_ITEM)
+ continue;
+ window->store_buttons[i] =
+ nsgtk_toolbar_make_widget(g, i, theme);
+ if (window->store_buttons[i] == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ continue;
}
- break;
+ nsgtk_toolbar_add_store_widget(window->store_buttons[i]);
+ g_signal_connect(window->store_buttons[i], "drag-data-get",
+ G_CALLBACK(
+ nsgtk_scaffolding_button(g, i)->dataplus), g);
}
+ free(theme);
+ gtk_window_set_transient_for(GTK_WINDOW(window->window),
+ nsgtk_scaffolding_window(g));
+ gtk_window_set_title(GTK_WINDOW(window->window), messages_get(
+ "gtkToolBarTitle"));
+ gtk_window_set_accept_focus(GTK_WINDOW(window->window), FALSE);
+ gtk_drag_dest_set(GTK_WIDGET(window->window), GTK_DEST_DEFAULT_MOTION |
+ GTK_DEST_DEFAULT_DROP, &entry, 1, GDK_ACTION_COPY);
+ gtk_widget_show_all(window->window);
+ gtk_window_set_position(GTK_WINDOW(window->window),
+ GTK_WIN_POS_CENTER_ON_PARENT);
+ gtk_window_get_position(nsgtk_scaffolding_window(g), &x, &y);
+ gtk_window_move(GTK_WINDOW(window->window), x, y + 100);
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "cancelbutton")),
+ "clicked",
+ G_CALLBACK(nsgtk_toolbar_cancel_clicked),
+ g);
- case WEBSEARCH_ITEM: {
- if (edit_mode)
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- nsgtk_image_new_from_stock(NSGTK_STOCK_FIND,
- GTK_ICON_SIZE_LARGE_TOOLBAR)),
- "[websearch]"));
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "okbutton")),
+ "clicked", G_CALLBACK(nsgtk_toolbar_persist), g);
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "resetbutton")),
+ "clicked", G_CALLBACK(nsgtk_toolbar_reset), g);
+ g_signal_connect(window->window, "delete-event",
+ G_CALLBACK(nsgtk_toolbar_delete), g);
+ g_signal_connect(window->window, "drag-drop",
+ G_CALLBACK(nsgtk_toolbar_store_return), g);
+ g_signal_connect(window->window, "drag-motion",
+ G_CALLBACK(nsgtk_toolbar_store_action), g);
+}
- GtkWidget *entry = nsgtk_entry_new();
+/**
+ * change behaviour of scaffoldings while editing toolbar
+ *
+ * All buttons as well as window clicks are desensitized; then buttons
+ * in the front window are changed to movable buttons
+ */
+void nsgtk_toolbar_customization_init(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_scaffolding *list;
+ edit_mode = true;
- w = GTK_WIDGET(gtk_tool_item_new());
+ list = nsgtk_scaffolding_iterate(NULL);
+ while (list) {
+ g_signal_handler_block(GTK_WIDGET(
+ nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ nsgtk_window_get_signalhandler(
+ nsgtk_scaffolding_top_level(list),
+ NSGTK_WINDOW_SIGNAL_CLICK));
+ g_signal_handler_block(GTK_WIDGET(
+ nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ nsgtk_window_get_signalhandler(
+ nsgtk_scaffolding_top_level(list),
+ NSGTK_WINDOW_SIGNAL_REDRAW));
+ nsgtk_widget_override_background_color(
+ GTK_WIDGET(nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ GTK_STATE_NORMAL, 0, 0xEEEE, 0xEEEE, 0xEEEE);
- if ((entry == NULL) || (w == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
+ if (list == g) {
+ list = nsgtk_scaffolding_iterate(list);
+ continue;
}
-
- gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
-
- nsgtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_INFO);
-
- gtk_container_add(GTK_CONTAINER(w), entry);
- break;
+ /* set sensitive for all gui_windows save g */
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_window(
+ list)), FALSE);
+ list = nsgtk_scaffolding_iterate(list);
}
+ /* set sensitive for all of g save toolbar */
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)),
+ FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)),
+ FALSE);
-/* gtk_tool_button_new accepts NULL args */
-#define MAKE_MENUBUTTON(p, q) \
- case p##_BUTTON: { \
- char *label = NULL; \
- label = remove_underscores(messages_get(#q), false); \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), label)); \
- if (label != NULL) \
- free(label); \
- break; \
+ /* set editable aspect for toolbar */
+ gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ nsgtk_toolbar_clear_toolbar, g);
+ nsgtk_toolbar_set_physical(g);
+ /* memorize button locations, set editable */
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ window->buttonlocations[i] = nsgtk_scaffolding_button(g, i)
+ ->location;
+ if ((window->buttonlocations[i] == -1) || (i == URL_BAR_ITEM))
+ continue;
+ gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
+ nsgtk_scaffolding_button(g, i)->button), TRUE);
+ gtk_drag_source_set(GTK_WIDGET(nsgtk_scaffolding_button(
+ g, i)->button), GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, i);
}
- MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
- MAKE_MENUBUTTON(NEWTAB, gtkNewTab)
- MAKE_MENUBUTTON(OPENFILE, gtkOpenFile)
- MAKE_MENUBUTTON(CLOSETAB, gtkCloseTab)
- MAKE_MENUBUTTON(CLOSEWINDOW, gtkCloseWindow)
- MAKE_MENUBUTTON(SAVEPAGE, gtkSavePage)
- MAKE_MENUBUTTON(PRINTPREVIEW, gtkPrintPreview)
- MAKE_MENUBUTTON(PRINT, gtkPrint)
- MAKE_MENUBUTTON(QUIT, gtkQuitMenu)
- MAKE_MENUBUTTON(CUT, gtkCut)
- MAKE_MENUBUTTON(COPY, gtkCopy)
- MAKE_MENUBUTTON(PASTE, gtkPaste)
- MAKE_MENUBUTTON(DELETE, gtkDelete)
- MAKE_MENUBUTTON(SELECTALL, gtkSelectAll)
- MAKE_MENUBUTTON(PREFERENCES, gtkPreferences)
- MAKE_MENUBUTTON(ZOOMPLUS, gtkZoomPlus)
- MAKE_MENUBUTTON(ZOOMMINUS, gtkZoomMinus)
- MAKE_MENUBUTTON(ZOOMNORMAL, gtkZoomNormal)
- MAKE_MENUBUTTON(FULLSCREEN, gtkFullScreen)
- MAKE_MENUBUTTON(VIEWSOURCE, gtkViewSource)
- MAKE_MENUBUTTON(CONTENTS, gtkContents)
- MAKE_MENUBUTTON(ABOUT, gtkAbout)
- MAKE_MENUBUTTON(PDF, gtkPDF)
- MAKE_MENUBUTTON(PLAINTEXT, gtkPlainText)
- MAKE_MENUBUTTON(DRAWFILE, gtkDrawFile)
- MAKE_MENUBUTTON(POSTSCRIPT, gtkPostScript)
- MAKE_MENUBUTTON(FIND, gtkFind)
- MAKE_MENUBUTTON(DOWNLOADS, gtkDownloads)
- MAKE_MENUBUTTON(SAVEWINDOWSIZE, gtkSaveWindowSize)
- MAKE_MENUBUTTON(TOGGLEDEBUGGING, gtkToggleDebugging)
- MAKE_MENUBUTTON(SAVEBOXTREE, gtkDebugBoxTree)
- MAKE_MENUBUTTON(SAVEDOMTREE, gtkDebugDomTree)
- MAKE_MENUBUTTON(LOCALHISTORY, gtkLocalHistory)
- MAKE_MENUBUTTON(GLOBALHISTORY, gtkGlobalHistory)
- MAKE_MENUBUTTON(ADDBOOKMARKS, gtkAddBookMarks)
- MAKE_MENUBUTTON(SHOWBOOKMARKS, gtkShowBookMarks)
- MAKE_MENUBUTTON(SHOWCOOKIES, gtkShowCookies)
- MAKE_MENUBUTTON(OPENLOCATION, gtkOpenLocation)
- MAKE_MENUBUTTON(NEXTTAB, gtkNextTab)
- MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
- MAKE_MENUBUTTON(GUIDE, gtkGuide)
- MAKE_MENUBUTTON(INFO, gtkUserInformation)
-#undef MAKE_MENUBUTTON
+ /* add move button listeners */
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-drop", G_CALLBACK(nsgtk_toolbar_data), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-data-received", G_CALLBACK(
+ nsgtk_toolbar_move_complete), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-motion", G_CALLBACK(nsgtk_toolbar_action), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-leave", G_CALLBACK(
+ nsgtk_toolbar_clear), g);
- default:
- break;
+ /* set data types */
+ gtk_drag_dest_set(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+ &entry, 1, GDK_ACTION_COPY);
+ /* open toolbar window */
+ nsgtk_toolbar_window_open(g);
+}
+
+/**
+ * set toolbar logical -> physical; physically visible toolbar buttons are made
+ * to correspond to the logically stored schema in terms of location
+ * visibility etc
+ */
+void nsgtk_toolbar_set_physical(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_theme *theme =
+ nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
+ if (theme == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return;
}
- return w;
+ /* simplest is to clear the toolbar then reload it from memory */
+ gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ nsgtk_toolbar_clear_toolbar, g);
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_toolbar_add_item_to_toolbar(g, i, theme);
+ gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)));
+ free(theme);
}
/**
* \return toolbar item id when a widget is an element of the scaffolding
* else -1
*/
-int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, struct nsgtk_scaffolding *g)
+int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget,
+ struct nsgtk_scaffolding *g)
{
int i;
for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
@@ -870,47 +942,13 @@ int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, struct nsgtk_scaffolding
return -1;
}
-/**
- * \return toolbar item id from location when there is an item at that logical
- * location; else -1
- */
-nsgtk_toolbar_button
-nsgtk_toolbar_get_id_at_location(struct nsgtk_scaffolding *g, int i)
-{
- int q;
- for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
- if (nsgtk_scaffolding_button(g, q)->location == i)
- return q;
- return -1;
-}
-
-/**
- * connect 'normal' handlers to toolbar buttons
- */
-
-void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
-{
- int q, i;
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- if (nsgtk_scaffolding_button(g, q)->button != NULL)
- g_signal_connect(
- nsgtk_scaffolding_button(g, q)->button,
- "size-allocate", G_CALLBACK(
- nsgtk_scaffolding_toolbar_size_allocate
- ), g);
- nsgtk_toolbar_set_handler(g, q);
- }
-}
/**
* add handlers to factory widgets
* \param g the scaffolding to attach handlers to
* \param i the toolbar item id
*/
-void
+static void
nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
{
switch(i){
@@ -947,6 +985,27 @@ nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
}
}
+/**
+ * connect 'normal' handlers to toolbar buttons
+ */
+void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
+{
+ int q, i;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
+ continue;
+ if (nsgtk_scaffolding_button(g, q)->button != NULL)
+ g_signal_connect(
+ nsgtk_scaffolding_button(g, q)->button,
+ "size-allocate", G_CALLBACK(
+ nsgtk_scaffolding_toolbar_size_allocate
+ ), g);
+ nsgtk_toolbar_set_handler(g, q);
+ }
+}
+
+
#define DATAHANDLER(p, q, r)\
gboolean nsgtk_toolbar_##p##_button_data(GtkWidget *widget, GdkDragContext\
*cont, GtkSelectionData *selection, guint info, guint time,\
@@ -1036,19 +1095,6 @@ DATAHANDLER(throbber, THROBBER, window)
DATAHANDLER(websearch, WEBSEARCH, window)
#undef DATAHANDLER
-/**
- * connect temporary handler for toolbar edit events
- */
-void nsgtk_toolbar_temp_connect(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
-{
- if ((i == URL_BAR_ITEM) ||
- (nsgtk_scaffolding_button(g, i)->button == NULL) ||
- (nsgtk_scaffolding_button(g, i)->dataminus == NULL))
- return;
- g_signal_connect(nsgtk_scaffolding_button(g, i)->button,
- "drag-data-get", G_CALLBACK(nsgtk_scaffolding_button(
- g, i)->dataminus), g);
-}
/**
* load toolbar settings from file; file is a set of fields arranged as
@@ -1090,49 +1136,3 @@ void nsgtk_toolbar_customization_load(struct nsgtk_scaffolding *g)
buffer1 = strtok_r(NULL, "|", &ptr);
}
}
-
-/**
- * cast toolbar settings to all scaffoldings referenced from the global linked
- * list of gui_windows
- */
-void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g)
-{
- int i;
- struct nsgtk_scaffolding *list;
-
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- window->buttonlocations[i] =
- ((nsgtk_scaffolding_button(g, i)->location
- >= -1) &&
- (nsgtk_scaffolding_button(g, i)->location
- < PLACEHOLDER_BUTTON)) ?
- nsgtk_scaffolding_button(g, i)->location : -1;
- }
-
- list = nsgtk_scaffolding_iterate(NULL);
- while (list) {
- if (list != g)
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_scaffolding_button(list, i)->location =
- window->buttonlocations[i];
- list = nsgtk_scaffolding_iterate(list);
- }
-}
-
-/**
- * save toolbar settings to file
- */
-void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g)
-{
- int i;
- FILE *f = fopen(toolbar_indices_file_location, "w");
- if (f == NULL){
- warn_user("gtkFileError", toolbar_indices_file_location);
- return;
- }
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- fprintf(f, "%d;%d|", i, nsgtk_scaffolding_button(g, i)->location);
- }
- fclose(f);
-}
-
-----------------------------------------------------------------------
Summary of changes:
gtk/preferences.c | 36 +-
gtk/res/tabcontents.gtk3.ui | 16 +-
gtk/scaffolding.c | 84 ++-
gtk/scaffolding.h | 1 +
gtk/toolbar.c | 1288 +++++++++++++++++++++----------------------
5 files changed, 707 insertions(+), 718 deletions(-)
diff --git a/gtk/preferences.c b/gtk/preferences.c
index 7348afd..ec09fe7 100644
--- a/gtk/preferences.c
+++ b/gtk/preferences.c
@@ -861,39 +861,9 @@ nsgtk_preferences_comboButtonType_changed(GtkComboBox *widget,
current = nsgtk_scaffolding_iterate(NULL);
while (current != NULL) {
nsgtk_scaffolding_reset_offset(current);
- switch(nsoption_int(button_type)) {
- /* value of 0 is reserved for 'unset' */
- case 1:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- break;
- case 2:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 3:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_BOTH);
- gtk_toolbar_set_icon_size(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 4:
- gtk_toolbar_set_style(
- GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
- GTK_TOOLBAR_TEXT);
- default:
- break;
- }
+
+ nsgtk_scaffolding_toolbars(current, nsoption_int(button_type));
+
current = nsgtk_scaffolding_iterate(current);
}
}
diff --git a/gtk/res/tabcontents.gtk3.ui b/gtk/res/tabcontents.gtk3.ui
index 02de1bf..23328b3 100644
--- a/gtk/res/tabcontents.gtk3.ui
+++ b/gtk/res/tabcontents.gtk3.ui
@@ -48,19 +48,6 @@
</packing>
</child>
<child>
- <object class="GtkStatusbar" id="resizer">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
<object class="GtkPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -98,5 +85,8 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</interface>
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 2b30a3e..51f0424 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -1969,6 +1969,61 @@ static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
gtk_widget_set_sensitive(GTK_WIDGET(g->menu_bar->view_submenu->images_menuitem), FALSE);
}
+
+void nsgtk_scaffolding_toolbars(struct nsgtk_scaffolding *g, int tbi)
+{
+ switch (tbi) {
+ /* case 0 is 'unset' [from fresh install / clearing options]
+ * see above */
+
+ case 1: /* Small icons */
+ /* main toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
+ break;
+
+ case 2: /* Large icons */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ break;
+
+ case 3: /* Large icons with text */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_BOTH);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->search->bar),
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ break;
+
+ case 4: /* Text icons only */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
+ GTK_TOOLBAR_TEXT);
+ /* search toolbar */
+ gtk_toolbar_set_style(GTK_TOOLBAR(g->search->bar),
+ GTK_TOOLBAR_TEXT);
+ default:
+ break;
+ }
+}
+
/* exported interface documented in gtk/scaffolding.h */
struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
{
@@ -2104,34 +2159,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
}
}
- switch (nsoption_int(button_type)) {
- /* case 0 is 'unset' [from fresh install / clearing options]
- * see above */
-
- case 1: /* Small icons */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- break;
- case 2: /* Large icons */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 3: /* Large icons with text */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_BOTH);
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(g->tool_bar),
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- break;
- case 4: /* Text icons only */
- gtk_toolbar_set_style(GTK_TOOLBAR(g->tool_bar),
- GTK_TOOLBAR_TEXT);
- default:
- break;
- }
+ nsgtk_scaffolding_toolbars(g, nsoption_int(button_type));
gtk_toolbar_set_show_arrow(g->tool_bar, TRUE);
gtk_widget_show_all(GTK_WIDGET(g->tool_bar));
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 730d4fc..3fbad59 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -247,5 +247,6 @@ nserror gui_window_set_url(struct gui_window *g, struct nsurl *url);
void gui_window_start_throbber(struct gui_window *g);
void gui_window_stop_throbber(struct gui_window *g);
+void nsgtk_scaffolding_toolbars(struct nsgtk_scaffolding *g, int tbi);
#endif /* NETSURF_GTK_SCAFFOLDING_H */
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index 0a518a5..b6bf8d9 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -67,333 +67,405 @@ possible into the store */
static struct nsgtk_toolbar_custom_store store;
static struct nsgtk_toolbar_custom_store *window = &store;
-static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g);
-static void nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i, struct nsgtk_theme *theme);
-static bool nsgtk_toolbar_add_store_widget(GtkWidget *widget);
-static gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc, gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext
- *drag_context, gint x, gint y, guint time, gpointer data);
-gboolean nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
- gint x, gint y, guint time, gpointer data);
-static gboolean nsgtk_toolbar_move_complete(GtkWidget *widget, GdkDragContext
- *gdc, gint x, gint y, GtkSelectionData *selection, guint info,
- guint time, gpointer data);
-static void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint
- time, gpointer data);
-static gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
- gpointer data);
-static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data);
-static gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data);
-static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data);
-static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g);
-static GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i, struct nsgtk_theme *theme);
-static void nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i);
+/**
+ * callback function to iterate toolbar's widgets
+ */
+static void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ gtk_container_remove(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ widget);
+}
+
+/**
+ * connect temporary handler for toolbar edit events
+ *
+ * \param g The scaffolding
+ * \param bi The button index
+ */
static void nsgtk_toolbar_temp_connect(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i);
-static void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data);
-static nsgtk_toolbar_button nsgtk_toolbar_get_id_at_location(
- struct nsgtk_scaffolding *g, int i);
+ nsgtk_toolbar_button bi)
+{
+ struct nsgtk_button_connect *bc;
+
+ if (bi != URL_BAR_ITEM) {
+ bc = nsgtk_scaffolding_button(g, bi);
+ if ((bc->button != NULL) && (bc->dataminus != NULL)) {
+ g_signal_connect(bc->button,
+ "drag-data-get",
+ G_CALLBACK(bc->dataminus),
+ g);
+ }
+ }
+}
/**
- * change behaviour of scaffoldings while editing toolbar
+ * get scaffolding button index of button at location
*
- * All buttons as well as window clicks are desensitized; then buttons
- * in the front window are changed to movable buttons
+ * \return toolbar item id from location when there is an item at that logical
+ * location; else -1
*/
-void nsgtk_toolbar_customization_init(struct nsgtk_scaffolding *g)
+static nsgtk_toolbar_button
+nsgtk_toolbar_get_id_at_location(struct nsgtk_scaffolding *g, int i)
{
- int i;
- struct nsgtk_scaffolding *list;
- edit_mode = true;
+ int q;
+ for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++) {
+ if (nsgtk_scaffolding_button(g, q)->location == i) {
+ return q;
+ }
+ }
+ return -1;
+}
- list = nsgtk_scaffolding_iterate(NULL);
- while (list) {
- g_signal_handler_block(GTK_WIDGET(
- nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- nsgtk_window_get_signalhandler(
- nsgtk_scaffolding_top_level(list),
- NSGTK_WINDOW_SIGNAL_CLICK));
- g_signal_handler_block(GTK_WIDGET(
- nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- nsgtk_window_get_signalhandler(
- nsgtk_scaffolding_top_level(list),
- NSGTK_WINDOW_SIGNAL_REDRAW));
- nsgtk_widget_override_background_color(
- GTK_WIDGET(nsgtk_window_get_layout(
- nsgtk_scaffolding_top_level(list))),
- GTK_STATE_NORMAL, 0, 0xEEEE, 0xEEEE, 0xEEEE);
+/**
+ * widget factory for creation of toolbar item widgets
+ * \param g the reference scaffolding
+ * \param i the id of the widget
+ * \param theme the theme to make the widgets from
+ */
+static GtkWidget *
+nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
+ nsgtk_toolbar_button i,
+ struct nsgtk_theme *theme)
+{
+ GtkWidget *w = NULL;
- if (list == g) {
- list = nsgtk_scaffolding_iterate(list);
- continue;
+ switch(i) {
+
+/* gtk_tool_button_new() accepts NULL args */
+#define MAKE_STOCKBUTTON(p, q) \
+ case p##_BUTTON: { \
+ GtkStockItem item; \
+ char *label = NULL; \
+ if (nsgtk_stock_lookup(q, &item) && \
+ (item.label != NULL) && \
+ ((label = remove_underscores(item.label, false)) != NULL)) { \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ free(label); \
+ } else { \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), q)); \
+ } \
+ break; \
+ }
+
+ MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
+ MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK)
+ MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD)
+ MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
+ MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
+#undef MAKE_STOCKBUTTON
+
+ case HISTORY_BUTTON:
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ theme->image[HISTORY_BUTTON]), "H"));
+ break;
+
+ case URL_BAR_ITEM: {
+ GtkWidget *entry = nsgtk_entry_new();
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ if ((entry == NULL) || (w == NULL)) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
}
- /* set sensitive for all gui_windows save g */
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_window(
- list)), FALSE);
- list = nsgtk_scaffolding_iterate(list);
+
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ favicon_pixbuf);
+
+ gtk_container_add(GTK_CONTAINER(w), entry);
+ gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
+ break;
}
- /* set sensitive for all of g save toolbar */
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)),
- FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)),
- FALSE);
- /* set editable aspect for toolbar */
- gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
- nsgtk_toolbar_clear_toolbar, g);
- nsgtk_toolbar_set_physical(g);
- /* memorize button locations, set editable */
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- window->buttonlocations[i] = nsgtk_scaffolding_button(g, i)
- ->location;
- if ((window->buttonlocations[i] == -1) || (i == URL_BAR_ITEM))
- continue;
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g, i)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(nsgtk_scaffolding_button(
- g, i)->button), GDK_BUTTON1_MASK, &entry, 1,
- GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, i);
+ case THROBBER_ITEM: {
+ if ((nsgtk_throbber == NULL) ||
+ (nsgtk_throbber->framedata == NULL) ||
+ (nsgtk_throbber->framedata[0] == NULL)) {
+ return NULL;
+ }
+
+ if (edit_mode) {
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ gtk_image_new_from_pixbuf(
+ nsgtk_throbber->framedata[0])),
+ "[throbber]"));
+ } else {
+ GtkWidget *image;
+
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
+ if (image != NULL) {
+ nsgtk_widget_set_alignment(image,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(image, 3, 0);
+
+ gtk_container_add(GTK_CONTAINER(w), image);
+ }
+ }
+ break;
}
- /* add move button listeners */
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-drop", G_CALLBACK(nsgtk_toolbar_data), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-data-received", G_CALLBACK(
- nsgtk_toolbar_move_complete), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-motion", G_CALLBACK(nsgtk_toolbar_action), g);
- g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- "drag-leave", G_CALLBACK(
- nsgtk_toolbar_clear), g);
+ case WEBSEARCH_ITEM: {
+ if (edit_mode)
+ return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ nsgtk_image_new_from_stock(NSGTK_STOCK_FIND,
+ GTK_ICON_SIZE_LARGE_TOOLBAR)),
+ "[websearch]"));
- /* set data types */
- gtk_drag_dest_set(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
- GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
- &entry, 1, GDK_ACTION_COPY);
+ GtkWidget *entry = nsgtk_entry_new();
- /* open toolbar window */
- nsgtk_toolbar_window_open(g);
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ if ((entry == NULL) || (w == NULL)) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
+
+ gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
+
+ nsgtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+
+ gtk_container_add(GTK_CONTAINER(w), entry);
+ break;
+ }
+
+/* gtk_tool_button_new accepts NULL args */
+#define MAKE_MENUBUTTON(p, q) \
+ case p##_BUTTON: { \
+ char *label = NULL; \
+ label = remove_underscores(messages_get(#q), false); \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ if (label != NULL) \
+ free(label); \
+ break; \
+ }
+
+ MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
+ MAKE_MENUBUTTON(NEWTAB, gtkNewTab)
+ MAKE_MENUBUTTON(OPENFILE, gtkOpenFile)
+ MAKE_MENUBUTTON(CLOSETAB, gtkCloseTab)
+ MAKE_MENUBUTTON(CLOSEWINDOW, gtkCloseWindow)
+ MAKE_MENUBUTTON(SAVEPAGE, gtkSavePage)
+ MAKE_MENUBUTTON(PRINTPREVIEW, gtkPrintPreview)
+ MAKE_MENUBUTTON(PRINT, gtkPrint)
+ MAKE_MENUBUTTON(QUIT, gtkQuitMenu)
+ MAKE_MENUBUTTON(CUT, gtkCut)
+ MAKE_MENUBUTTON(COPY, gtkCopy)
+ MAKE_MENUBUTTON(PASTE, gtkPaste)
+ MAKE_MENUBUTTON(DELETE, gtkDelete)
+ MAKE_MENUBUTTON(SELECTALL, gtkSelectAll)
+ MAKE_MENUBUTTON(PREFERENCES, gtkPreferences)
+ MAKE_MENUBUTTON(ZOOMPLUS, gtkZoomPlus)
+ MAKE_MENUBUTTON(ZOOMMINUS, gtkZoomMinus)
+ MAKE_MENUBUTTON(ZOOMNORMAL, gtkZoomNormal)
+ MAKE_MENUBUTTON(FULLSCREEN, gtkFullScreen)
+ MAKE_MENUBUTTON(VIEWSOURCE, gtkViewSource)
+ MAKE_MENUBUTTON(CONTENTS, gtkContents)
+ MAKE_MENUBUTTON(ABOUT, gtkAbout)
+ MAKE_MENUBUTTON(PDF, gtkPDF)
+ MAKE_MENUBUTTON(PLAINTEXT, gtkPlainText)
+ MAKE_MENUBUTTON(DRAWFILE, gtkDrawFile)
+ MAKE_MENUBUTTON(POSTSCRIPT, gtkPostScript)
+ MAKE_MENUBUTTON(FIND, gtkFind)
+ MAKE_MENUBUTTON(DOWNLOADS, gtkDownloads)
+ MAKE_MENUBUTTON(SAVEWINDOWSIZE, gtkSaveWindowSize)
+ MAKE_MENUBUTTON(TOGGLEDEBUGGING, gtkToggleDebugging)
+ MAKE_MENUBUTTON(SAVEBOXTREE, gtkDebugBoxTree)
+ MAKE_MENUBUTTON(SAVEDOMTREE, gtkDebugDomTree)
+ MAKE_MENUBUTTON(LOCALHISTORY, gtkLocalHistory)
+ MAKE_MENUBUTTON(GLOBALHISTORY, gtkGlobalHistory)
+ MAKE_MENUBUTTON(ADDBOOKMARKS, gtkAddBookMarks)
+ MAKE_MENUBUTTON(SHOWBOOKMARKS, gtkShowBookMarks)
+ MAKE_MENUBUTTON(SHOWCOOKIES, gtkShowCookies)
+ MAKE_MENUBUTTON(OPENLOCATION, gtkOpenLocation)
+ MAKE_MENUBUTTON(NEXTTAB, gtkNextTab)
+ MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
+ MAKE_MENUBUTTON(GUIDE, gtkGuide)
+ MAKE_MENUBUTTON(INFO, gtkUserInformation)
+#undef MAKE_MENUBUTTON
+
+ default:
+ break;
+
+ }
+ return w;
}
/**
- * create store window
+ * called when a widget is dropped onto the toolbar
*/
-void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g)
+static gboolean
+nsgtk_toolbar_data(GtkWidget *widget,
+ GdkDragContext *gdc,
+ gint x,
+ gint y,
+ guint time,
+ gpointer data)
{
- int x = 0, y = 0;
- GError* error = NULL;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ int ind = gtk_toolbar_get_drop_index(nsgtk_scaffolding_toolbar(g),
+ x, y);
+ int q, i;
+ if (window->currentbutton == -1)
+ return TRUE;
struct nsgtk_theme *theme =
nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
if (theme == NULL) {
warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- return;
- }
-
- window->glade = gtk_builder_new();
- if (!gtk_builder_add_from_file(window->glade,
- glade_file_location->toolbar,
- &error)) {
- g_warning ("Couldn't load builder file: %s", error->message);
- g_error_free (error);
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ return TRUE;
}
-
- gtk_builder_connect_signals(window->glade, NULL);
-
- window->window = GTK_WIDGET(gtk_builder_get_object(window->glade, "toolbarwindow"));
- if (window->window == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->location
+ != -1) {
+ /* widget was already in the toolbar; so replace */
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->
+ location < ind)
+ ind--;
+ gtk_container_remove(GTK_CONTAINER(
+ nsgtk_scaffolding_toolbar(g)), GTK_WIDGET(
+ nsgtk_scaffolding_button(g,
+ window->currentbutton)->button));
+ /* 'move' all widgets further right than the original location,
+ * one place to the left in logical schema */
+ for (i = nsgtk_scaffolding_button(g, window->currentbutton)->
+ location + 1; i < PLACEHOLDER_BUTTON; i++) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
+ continue;
+ nsgtk_scaffolding_button(g, q)->location--;
+ }
+ nsgtk_scaffolding_button(g, window->currentbutton)->
+ location = -1;
}
-
- window->widgetvbox = GTK_WIDGET(gtk_builder_get_object(window->glade, "widgetvbox"));
- if (window->widgetvbox == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- nsgtk_toolbar_cancel_clicked(NULL, g);
- free(theme);
- return;
+ nsgtk_scaffolding_button(g, window->currentbutton)->button =
+ GTK_TOOL_ITEM(nsgtk_toolbar_make_widget(g,
+ window->currentbutton, theme));
+ free(theme);
+ if (nsgtk_scaffolding_button(g, window->currentbutton)->button
+ == NULL) {
+ warn_user("NoMemory", 0);
+ return TRUE;
}
-
- window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */
- /* store to cause creation of a new toolbar */
- window->currentbutton = -1;
- /* load toolbuttons */
- /* add toolbuttons to window */
- /* set event handlers */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (i == URL_BAR_ITEM)
- continue;
- window->store_buttons[i] =
- nsgtk_toolbar_make_widget(g, i, theme);
- if (window->store_buttons[i] == NULL) {
- warn_user(messages_get("NoMemory"), 0);
+ /* update logical schema */
+ nsgtk_scaffolding_reset_offset(g);
+ /* 'move' all widgets further right than the new location, one place to
+ * the right in logical schema */
+ for (i = PLACEHOLDER_BUTTON - 1; i >= ind; i--) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
continue;
- }
- nsgtk_toolbar_add_store_widget(window->store_buttons[i]);
- g_signal_connect(window->store_buttons[i], "drag-data-get",
- G_CALLBACK(
- nsgtk_scaffolding_button(g, i)->dataplus), g);
+ nsgtk_scaffolding_button(g, q)->location++;
}
- free(theme);
- gtk_window_set_transient_for(GTK_WINDOW(window->window),
- nsgtk_scaffolding_window(g));
- gtk_window_set_title(GTK_WINDOW(window->window), messages_get(
- "gtkToolBarTitle"));
- gtk_window_set_accept_focus(GTK_WINDOW(window->window), FALSE);
- gtk_drag_dest_set(GTK_WIDGET(window->window), GTK_DEST_DEFAULT_MOTION |
- GTK_DEST_DEFAULT_DROP, &entry, 1, GDK_ACTION_COPY);
- gtk_widget_show_all(window->window);
- gtk_window_set_position(GTK_WINDOW(window->window),
- GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_window_get_position(nsgtk_scaffolding_window(g), &x, &y);
- gtk_window_move(GTK_WINDOW(window->window), x, y + 100);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "cancelbutton")),
- "clicked",
- G_CALLBACK(nsgtk_toolbar_cancel_clicked),
- g);
+ nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
+
+ /* complete action */
+ GtkToolItem *current_button;
+
+ current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
+
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "okbutton")),
- "clicked", G_CALLBACK(nsgtk_toolbar_persist), g);
- g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "resetbutton")),
- "clicked", G_CALLBACK(nsgtk_toolbar_reset), g);
- g_signal_connect(window->window, "delete-event",
- G_CALLBACK(nsgtk_toolbar_delete), g);
- g_signal_connect(window->window, "drag-drop",
- G_CALLBACK(nsgtk_toolbar_store_return), g);
- g_signal_connect(window->window, "drag-motion",
- G_CALLBACK(nsgtk_toolbar_store_action), g);
-}
+ gtk_tool_item_set_use_drag_window(current_button, TRUE);
+ gtk_drag_source_set(GTK_WIDGET(current_button),
+ GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, window->currentbutton);
+ gtk_widget_show_all(GTK_WIDGET(current_button));
+
+
+ window->currentbutton = -1;
-/**
- * when titlebar / alt-F4 window close event happens
- */
-gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
- gpointer data)
-{
- edit_mode = false;
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* reset g->buttons->location */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- nsgtk_scaffolding_button(g, i)->location =
- window->buttonlocations[i];
- }
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_connect_all(g);
- nsgtk_toolbar_close(g);
- nsgtk_scaffolding_set_sensitivity(g);
- gtk_widget_destroy(window->window);
return TRUE;
}
/**
- * when cancel button is clicked
+ * connected to toolbutton drop; perhaps one day it'll work properly so it may
+ * replace the global current_button
*/
-gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data)
+static gboolean
+nsgtk_toolbar_move_complete(GtkWidget *widget,
+ GdkDragContext *gdc,
+ gint x,
+ gint y,
+ GtkSelectionData *selection,
+ guint info,
+ guint time,
+ gpointer data)
{
- edit_mode = false;
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* reset g->buttons->location */
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- nsgtk_scaffolding_button(g, i)->location =
- window->buttonlocations[i];
- }
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_connect_all(g);
- nsgtk_toolbar_close(g);
- nsgtk_scaffolding_set_sensitivity(g);
- gtk_widget_destroy(window->window);
- return TRUE;
+ return FALSE;
}
/**
- * when 'save settings' button is clicked
+ * called when hovering an item above the toolbar
*/
-gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data)
+static gboolean
+nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext *gdc, gint x,
+ gint y, guint time, gpointer data)
{
- edit_mode = false;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- /* save state to file, update toolbars for all windows */
- nsgtk_toolbar_customization_save(g);
- nsgtk_toolbar_cast(g);
- nsgtk_toolbar_set_physical(g);
- nsgtk_toolbar_close(g);
- gtk_widget_destroy(window->window);
- return TRUE;
+ GtkToolItem *item = gtk_tool_button_new(NULL, NULL);
+ if (item != NULL)
+ gtk_toolbar_set_drop_highlight_item(
+ nsgtk_scaffolding_toolbar(g),
+ GTK_TOOL_ITEM(item),
+ gtk_toolbar_get_drop_index(
+ nsgtk_scaffolding_toolbar(g), x, y));
+ return FALSE;
}
/**
- * when 'reload defaults' button is clicked
+ * called when hovering stops
*/
-gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data)
+static void
+nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
+ gpointer data)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int i;
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_scaffolding_button(g, i)->location =
- (i <= THROBBER_ITEM) ? i : -1;
- nsgtk_toolbar_set_physical(g);
- for (i = BACK_BUTTON; i <= THROBBER_ITEM; i++) {
- if (i == URL_BAR_ITEM)
- continue;
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g, i)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(
- nsgtk_scaffolding_button(g, i)->button),
- GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, i);
- }
- return TRUE;
+ gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
}
/**
- * set toolbar logical -> physical; physically visible toolbar buttons are made
- * to correspond to the logically stored schema in terms of location
- * visibility etc
+ * add item to toolbar.
+ *
+ * the function should be called, when multiple items are being added,
+ * in ascending order.
+ *
+ * \param g the scaffolding whose toolbar an item is added to.
+ * \param i the location in the toolbar.
+ * \param theme The theme in use.
*/
-void nsgtk_toolbar_set_physical(struct nsgtk_scaffolding *g)
+static void
+nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i,
+ struct nsgtk_theme *theme)
{
- int i;
- struct nsgtk_theme *theme =
- nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
- if (theme == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return;
- }
- /* simplest is to clear the toolbar then reload it from memory */
- gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
- nsgtk_toolbar_clear_toolbar, g);
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_toolbar_add_item_to_toolbar(g, i, theme);
- gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)));
- free(theme);
+ int q;
+ for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
+ if (nsgtk_scaffolding_button(g, q)->location == i) {
+ nsgtk_scaffolding_button(g, q)->button = GTK_TOOL_ITEM(
+ nsgtk_toolbar_make_widget(g, q,
+ theme));
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
+ nsgtk_scaffolding_button(g, q)->button,
+ i);
+ break;
+ }
}
/**
* cleanup code physical update of all toolbars; resensitize
* \param g the 'front' scaffolding that called customize
*/
-void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
+static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
{
int i;
struct nsgtk_scaffolding *list;
- struct nsgtk_theme *theme;
+ struct nsgtk_theme *theme;
list = nsgtk_scaffolding_iterate(NULL);
while (list) {
@@ -447,44 +519,29 @@ void nsgtk_toolbar_close(struct nsgtk_scaffolding *g)
}
/**
- * callback function to iterate toolbar's widgets
+ * when cancel button is clicked
*/
-void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data)
+static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data)
{
+ edit_mode = false;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- gtk_container_remove(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)), widget);
-}
-
-/**
- * add item to toolbar.
- *
- * the function should be called, when multiple items are being added,
- * in ascending order.
- *
- * \param g the scaffolding whose toolbar an item is added to.
- * \param i the location in the toolbar.
- * \param theme The theme in use.
- */
-void nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i,
- struct nsgtk_theme *theme)
-{
- int q;
- for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
- if (nsgtk_scaffolding_button(g, q)->location == i) {
- nsgtk_scaffolding_button(g, q)->button = GTK_TOOL_ITEM(
- nsgtk_toolbar_make_widget(g, q,
- theme));
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
- nsgtk_scaffolding_button(g, q)->button,
- i);
- break;
- }
+ /* reset g->buttons->location */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ nsgtk_scaffolding_button(g, i)->location =
+ window->buttonlocations[i];
+ }
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_connect_all(g);
+ nsgtk_toolbar_close(g);
+ nsgtk_scaffolding_set_sensitivity(g);
+ gtk_widget_destroy(window->window);
+ return TRUE;
}
/**
* physically add widgets to store window
*/
-bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
+static bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
{
if (window->numberh >= NSGTK_STORE_WIDTH) {
window->currentbar = gtk_toolbar_new();
@@ -512,102 +569,116 @@ bool nsgtk_toolbar_add_store_widget(GtkWidget *widget)
}
/**
- * called when a widget is dropped onto the toolbar
+ * save toolbar settings to file
*/
-gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *gdc, gint x,
- gint y, guint time, gpointer data)
+static void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int ind = gtk_toolbar_get_drop_index(nsgtk_scaffolding_toolbar(g),
- x, y);
- int q, i;
- if (window->currentbutton == -1)
- return TRUE;
- struct nsgtk_theme *theme =
- nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
- if (theme == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return TRUE;
- }
- if (nsgtk_scaffolding_button(g, window->currentbutton)->location
- != -1) {
- /* widget was already in the toolbar; so replace */
- if (nsgtk_scaffolding_button(g, window->currentbutton)->
- location < ind)
- ind--;
- gtk_container_remove(GTK_CONTAINER(
- nsgtk_scaffolding_toolbar(g)), GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button));
- /* 'move' all widgets further right than the original location,
- * one place to the left in logical schema */
- for (i = nsgtk_scaffolding_button(g, window->currentbutton)->
- location + 1; i < PLACEHOLDER_BUTTON; i++) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- nsgtk_scaffolding_button(g, q)->location--;
- }
- nsgtk_scaffolding_button(g, window->currentbutton)->
- location = -1;
- }
- nsgtk_scaffolding_button(g, window->currentbutton)->button =
- GTK_TOOL_ITEM(nsgtk_toolbar_make_widget(g,
- window->currentbutton, theme));
- free(theme);
- if (nsgtk_scaffolding_button(g, window->currentbutton)->button
- == NULL) {
- warn_user("NoMemory", 0);
- return TRUE;
+ int i;
+ FILE *f = fopen(toolbar_indices_file_location, "w");
+ if (f == NULL){
+ warn_user("gtkFileError", toolbar_indices_file_location);
+ return;
}
- /* update logical schema */
- nsgtk_scaffolding_reset_offset(g);
- /* 'move' all widgets further right than the new location, one place to
- * the right in logical schema */
- for (i = PLACEHOLDER_BUTTON - 1; i >= ind; i--) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- nsgtk_scaffolding_button(g, q)->location++;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ fprintf(f, "%d;%d|", i, nsgtk_scaffolding_button(g, i)->location);
}
- nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
-
- /* complete action */
- GtkToolItem *current_button;
-
- current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
-
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
+ fclose(f);
+}
- gtk_tool_item_set_use_drag_window(current_button, TRUE);
- gtk_drag_source_set(GTK_WIDGET(current_button),
- GDK_BUTTON1_MASK, &entry, 1,
- GDK_ACTION_COPY);
- nsgtk_toolbar_temp_connect(g, window->currentbutton);
- gtk_widget_show_all(GTK_WIDGET(current_button));
+/**
+ * cast toolbar settings to all scaffoldings referenced from the global linked
+ * list of gui_windows
+ */
+static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_scaffolding *list;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ window->buttonlocations[i] =
+ ((nsgtk_scaffolding_button(g, i)->location
+ >= -1) &&
+ (nsgtk_scaffolding_button(g, i)->location
+ < PLACEHOLDER_BUTTON)) ?
+ nsgtk_scaffolding_button(g, i)->location : -1;
+ }
- window->currentbutton = -1;
+ list = nsgtk_scaffolding_iterate(NULL);
+ while (list) {
+ if (list != g)
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_scaffolding_button(list, i)->location =
+ window->buttonlocations[i];
+ list = nsgtk_scaffolding_iterate(list);
+ }
+}
+/**
+ * when 'save settings' button is clicked
+ */
+static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data)
+{
+ edit_mode = false;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ /* save state to file, update toolbars for all windows */
+ nsgtk_toolbar_customization_save(g);
+ nsgtk_toolbar_cast(g);
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_close(g);
+ gtk_widget_destroy(window->window);
return TRUE;
}
/**
- * connected to toolbutton drop; perhaps one day it'll work properly so it may
- * replace the global current_button
+ * when 'reload defaults' button is clicked
*/
+static gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ int i;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_scaffolding_button(g, i)->location =
+ (i <= THROBBER_ITEM) ? i : -1;
+ nsgtk_toolbar_set_physical(g);
+ for (i = BACK_BUTTON; i <= THROBBER_ITEM; i++) {
+ if (i == URL_BAR_ITEM)
+ continue;
+ gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
+ nsgtk_scaffolding_button(g, i)->button), TRUE);
+ gtk_drag_source_set(GTK_WIDGET(
+ nsgtk_scaffolding_button(g, i)->button),
+ GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, i);
+ }
+ return TRUE;
+}
-gboolean nsgtk_toolbar_move_complete(GtkWidget *widget, GdkDragContext *gdc,
- gint x, gint y, GtkSelectionData *selection, guint info,
- guint time, gpointer data)
+/**
+ * when titlebar / alt-F4 window close event happens
+ */
+static gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event,
+ gpointer data)
{
- return FALSE;
+ edit_mode = false;
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ /* reset g->buttons->location */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ nsgtk_scaffolding_button(g, i)->location =
+ window->buttonlocations[i];
+ }
+ nsgtk_toolbar_set_physical(g);
+ nsgtk_toolbar_connect_all(g);
+ nsgtk_toolbar_close(g);
+ nsgtk_scaffolding_set_sensitivity(g);
+ gtk_widget_destroy(window->window);
+ return TRUE;
}
/**
* called when a widget is dropped onto the store window
*/
-gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
+static gboolean
+nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
gint x, gint y, guint time, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -639,225 +710,226 @@ gboolean nsgtk_toolbar_store_return(GtkWidget *widget, GdkDragContext *gdc,
gtk_drag_finish(gdc, TRUE, TRUE, time);
return FALSE;
}
-/**
- * called when hovering an item above the toolbar
- */
-gboolean nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext *gdc, gint x,
- gint y, guint time, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- GtkToolItem *item = gtk_tool_button_new(NULL, NULL);
- if (item != NULL)
- gtk_toolbar_set_drop_highlight_item(
- nsgtk_scaffolding_toolbar(g),
- GTK_TOOL_ITEM(item),
- gtk_toolbar_get_drop_index(
- nsgtk_scaffolding_toolbar(g), x, y));
- return FALSE;
-}
/**
* called when hovering above the store
*/
-gboolean nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
+static gboolean
+nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc,
gint x, gint y, guint time, gpointer data)
{
return FALSE;
}
-/**
- * called when hovering stops
- */
-void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
- gpointer data)
-{
- gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
-}
/**
- * widget factory for creation of toolbar item widgets
- * \param g the reference scaffolding
- * \param i the id of the widget
- * \param theme the theme to make the widgets from
+ * create store window
*/
-GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
- nsgtk_toolbar_button i, struct nsgtk_theme *theme)
+static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g)
{
- GtkWidget *w = NULL;
-
- switch(i) {
-
-/* gtk_tool_button_new() accepts NULL args */
-#define MAKE_STOCKBUTTON(p, q) \
- case p##_BUTTON: { \
- GtkStockItem item; \
- if (nsgtk_stock_lookup(q, &item) && \
- (item.label != NULL)) { \
- char *label = NULL; \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), label)); \
- label = remove_underscores(item.label, false); \
- free(label); \
- label = NULL; \
- } else { \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), q)); \
- } \
- break; \
+ int x = 0, y = 0;
+ GError* error = NULL;
+ struct nsgtk_theme *theme =
+ nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
+ if (theme == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ return;
}
- MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
- MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK)
- MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD)
- MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
- MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
-#undef MAKE_STOCKBUTTON
-
- case HISTORY_BUTTON:
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- theme->image[HISTORY_BUTTON]), ""));
- break;
-
- case URL_BAR_ITEM: {
- GtkWidget *entry = nsgtk_entry_new();
- w = GTK_WIDGET(gtk_tool_item_new());
-
- if ((entry == NULL) || (w == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
- }
-
- nsgtk_entry_set_icon_from_pixbuf(entry,
- GTK_ENTRY_ICON_PRIMARY,
- favicon_pixbuf);
-
- gtk_container_add(GTK_CONTAINER(w), entry);
- gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
- break;
+ window->glade = gtk_builder_new();
+ if (!gtk_builder_add_from_file(window->glade,
+ glade_file_location->toolbar,
+ &error)) {
+ g_warning ("Couldn't load builder file: %s", error->message);
+ g_error_free (error);
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
}
- case THROBBER_ITEM: {
- if ((nsgtk_throbber == NULL) ||
- (nsgtk_throbber->framedata == NULL) ||
- (nsgtk_throbber->framedata[0] == NULL)) {
- return NULL;
- }
-
- if (edit_mode) {
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- gtk_image_new_from_pixbuf(
- nsgtk_throbber->framedata[0])),
- "[throbber]"));
- } else {
- GtkWidget *image;
+ gtk_builder_connect_signals(window->glade, NULL);
- w = GTK_WIDGET(gtk_tool_item_new());
+ window->window = GTK_WIDGET(gtk_builder_get_object(window->glade, "toolbarwindow"));
+ if (window->window == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
- image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
- if (image != NULL) {
- nsgtk_widget_set_alignment(image,
- GTK_ALIGN_CENTER,
- GTK_ALIGN_CENTER);
- nsgtk_widget_set_margins(image, 3, 0);
+ window->widgetvbox = GTK_WIDGET(gtk_builder_get_object(window->glade, "widgetvbox"));
+ if (window->widgetvbox == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
- gtk_container_add(GTK_CONTAINER(w), image);
- }
+ window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */
+ /* store to cause creation of a new toolbar */
+ window->currentbutton = -1;
+ /* load toolbuttons */
+ /* add toolbuttons to window */
+ /* set event handlers */
+ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ if (i == URL_BAR_ITEM)
+ continue;
+ window->store_buttons[i] =
+ nsgtk_toolbar_make_widget(g, i, theme);
+ if (window->store_buttons[i] == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ continue;
}
- break;
+ nsgtk_toolbar_add_store_widget(window->store_buttons[i]);
+ g_signal_connect(window->store_buttons[i], "drag-data-get",
+ G_CALLBACK(
+ nsgtk_scaffolding_button(g, i)->dataplus), g);
}
+ free(theme);
+ gtk_window_set_transient_for(GTK_WINDOW(window->window),
+ nsgtk_scaffolding_window(g));
+ gtk_window_set_title(GTK_WINDOW(window->window), messages_get(
+ "gtkToolBarTitle"));
+ gtk_window_set_accept_focus(GTK_WINDOW(window->window), FALSE);
+ gtk_drag_dest_set(GTK_WIDGET(window->window), GTK_DEST_DEFAULT_MOTION |
+ GTK_DEST_DEFAULT_DROP, &entry, 1, GDK_ACTION_COPY);
+ gtk_widget_show_all(window->window);
+ gtk_window_set_position(GTK_WINDOW(window->window),
+ GTK_WIN_POS_CENTER_ON_PARENT);
+ gtk_window_get_position(nsgtk_scaffolding_window(g), &x, &y);
+ gtk_window_move(GTK_WINDOW(window->window), x, y + 100);
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "cancelbutton")),
+ "clicked",
+ G_CALLBACK(nsgtk_toolbar_cancel_clicked),
+ g);
- case WEBSEARCH_ITEM: {
- if (edit_mode)
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- nsgtk_image_new_from_stock(NSGTK_STOCK_FIND,
- GTK_ICON_SIZE_LARGE_TOOLBAR)),
- "[websearch]"));
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "okbutton")),
+ "clicked", G_CALLBACK(nsgtk_toolbar_persist), g);
+ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->glade, "resetbutton")),
+ "clicked", G_CALLBACK(nsgtk_toolbar_reset), g);
+ g_signal_connect(window->window, "delete-event",
+ G_CALLBACK(nsgtk_toolbar_delete), g);
+ g_signal_connect(window->window, "drag-drop",
+ G_CALLBACK(nsgtk_toolbar_store_return), g);
+ g_signal_connect(window->window, "drag-motion",
+ G_CALLBACK(nsgtk_toolbar_store_action), g);
+}
- GtkWidget *entry = nsgtk_entry_new();
+/**
+ * change behaviour of scaffoldings while editing toolbar
+ *
+ * All buttons as well as window clicks are desensitized; then buttons
+ * in the front window are changed to movable buttons
+ */
+void nsgtk_toolbar_customization_init(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_scaffolding *list;
+ edit_mode = true;
- w = GTK_WIDGET(gtk_tool_item_new());
+ list = nsgtk_scaffolding_iterate(NULL);
+ while (list) {
+ g_signal_handler_block(GTK_WIDGET(
+ nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ nsgtk_window_get_signalhandler(
+ nsgtk_scaffolding_top_level(list),
+ NSGTK_WINDOW_SIGNAL_CLICK));
+ g_signal_handler_block(GTK_WIDGET(
+ nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ nsgtk_window_get_signalhandler(
+ nsgtk_scaffolding_top_level(list),
+ NSGTK_WINDOW_SIGNAL_REDRAW));
+ nsgtk_widget_override_background_color(
+ GTK_WIDGET(nsgtk_window_get_layout(
+ nsgtk_scaffolding_top_level(list))),
+ GTK_STATE_NORMAL, 0, 0xEEEE, 0xEEEE, 0xEEEE);
- if ((entry == NULL) || (w == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
+ if (list == g) {
+ list = nsgtk_scaffolding_iterate(list);
+ continue;
}
-
- gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
-
- nsgtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_INFO);
-
- gtk_container_add(GTK_CONTAINER(w), entry);
- break;
+ /* set sensitive for all gui_windows save g */
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_window(
+ list)), FALSE);
+ list = nsgtk_scaffolding_iterate(list);
}
+ /* set sensitive for all of g save toolbar */
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)),
+ FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)),
+ FALSE);
-/* gtk_tool_button_new accepts NULL args */
-#define MAKE_MENUBUTTON(p, q) \
- case p##_BUTTON: { \
- char *label = NULL; \
- label = remove_underscores(messages_get(#q), false); \
- w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
- theme->image[p##_BUTTON]), label)); \
- if (label != NULL) \
- free(label); \
- break; \
+ /* set editable aspect for toolbar */
+ gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ nsgtk_toolbar_clear_toolbar, g);
+ nsgtk_toolbar_set_physical(g);
+ /* memorize button locations, set editable */
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ window->buttonlocations[i] = nsgtk_scaffolding_button(g, i)
+ ->location;
+ if ((window->buttonlocations[i] == -1) || (i == URL_BAR_ITEM))
+ continue;
+ gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
+ nsgtk_scaffolding_button(g, i)->button), TRUE);
+ gtk_drag_source_set(GTK_WIDGET(nsgtk_scaffolding_button(
+ g, i)->button), GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
+ nsgtk_toolbar_temp_connect(g, i);
}
- MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
- MAKE_MENUBUTTON(NEWTAB, gtkNewTab)
- MAKE_MENUBUTTON(OPENFILE, gtkOpenFile)
- MAKE_MENUBUTTON(CLOSETAB, gtkCloseTab)
- MAKE_MENUBUTTON(CLOSEWINDOW, gtkCloseWindow)
- MAKE_MENUBUTTON(SAVEPAGE, gtkSavePage)
- MAKE_MENUBUTTON(PRINTPREVIEW, gtkPrintPreview)
- MAKE_MENUBUTTON(PRINT, gtkPrint)
- MAKE_MENUBUTTON(QUIT, gtkQuitMenu)
- MAKE_MENUBUTTON(CUT, gtkCut)
- MAKE_MENUBUTTON(COPY, gtkCopy)
- MAKE_MENUBUTTON(PASTE, gtkPaste)
- MAKE_MENUBUTTON(DELETE, gtkDelete)
- MAKE_MENUBUTTON(SELECTALL, gtkSelectAll)
- MAKE_MENUBUTTON(PREFERENCES, gtkPreferences)
- MAKE_MENUBUTTON(ZOOMPLUS, gtkZoomPlus)
- MAKE_MENUBUTTON(ZOOMMINUS, gtkZoomMinus)
- MAKE_MENUBUTTON(ZOOMNORMAL, gtkZoomNormal)
- MAKE_MENUBUTTON(FULLSCREEN, gtkFullScreen)
- MAKE_MENUBUTTON(VIEWSOURCE, gtkViewSource)
- MAKE_MENUBUTTON(CONTENTS, gtkContents)
- MAKE_MENUBUTTON(ABOUT, gtkAbout)
- MAKE_MENUBUTTON(PDF, gtkPDF)
- MAKE_MENUBUTTON(PLAINTEXT, gtkPlainText)
- MAKE_MENUBUTTON(DRAWFILE, gtkDrawFile)
- MAKE_MENUBUTTON(POSTSCRIPT, gtkPostScript)
- MAKE_MENUBUTTON(FIND, gtkFind)
- MAKE_MENUBUTTON(DOWNLOADS, gtkDownloads)
- MAKE_MENUBUTTON(SAVEWINDOWSIZE, gtkSaveWindowSize)
- MAKE_MENUBUTTON(TOGGLEDEBUGGING, gtkToggleDebugging)
- MAKE_MENUBUTTON(SAVEBOXTREE, gtkDebugBoxTree)
- MAKE_MENUBUTTON(SAVEDOMTREE, gtkDebugDomTree)
- MAKE_MENUBUTTON(LOCALHISTORY, gtkLocalHistory)
- MAKE_MENUBUTTON(GLOBALHISTORY, gtkGlobalHistory)
- MAKE_MENUBUTTON(ADDBOOKMARKS, gtkAddBookMarks)
- MAKE_MENUBUTTON(SHOWBOOKMARKS, gtkShowBookMarks)
- MAKE_MENUBUTTON(SHOWCOOKIES, gtkShowCookies)
- MAKE_MENUBUTTON(OPENLOCATION, gtkOpenLocation)
- MAKE_MENUBUTTON(NEXTTAB, gtkNextTab)
- MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
- MAKE_MENUBUTTON(GUIDE, gtkGuide)
- MAKE_MENUBUTTON(INFO, gtkUserInformation)
-#undef MAKE_MENUBUTTON
+ /* add move button listeners */
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-drop", G_CALLBACK(nsgtk_toolbar_data), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-data-received", G_CALLBACK(
+ nsgtk_toolbar_move_complete), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-motion", G_CALLBACK(nsgtk_toolbar_action), g);
+ g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ "drag-leave", G_CALLBACK(
+ nsgtk_toolbar_clear), g);
- default:
- break;
+ /* set data types */
+ gtk_drag_dest_set(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)),
+ GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+ &entry, 1, GDK_ACTION_COPY);
+ /* open toolbar window */
+ nsgtk_toolbar_window_open(g);
+}
+
+/**
+ * set toolbar logical -> physical; physically visible toolbar buttons are made
+ * to correspond to the logically stored schema in terms of location
+ * visibility etc
+ */
+void nsgtk_toolbar_set_physical(struct nsgtk_scaffolding *g)
+{
+ int i;
+ struct nsgtk_theme *theme =
+ nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
+ if (theme == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return;
}
- return w;
+ /* simplest is to clear the toolbar then reload it from memory */
+ gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)),
+ nsgtk_toolbar_clear_toolbar, g);
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
+ nsgtk_toolbar_add_item_to_toolbar(g, i, theme);
+ gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)));
+ free(theme);
}
/**
* \return toolbar item id when a widget is an element of the scaffolding
* else -1
*/
-int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, struct nsgtk_scaffolding *g)
+int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget,
+ struct nsgtk_scaffolding *g)
{
int i;
for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
@@ -870,47 +942,13 @@ int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, struct nsgtk_scaffolding
return -1;
}
-/**
- * \return toolbar item id from location when there is an item at that logical
- * location; else -1
- */
-nsgtk_toolbar_button
-nsgtk_toolbar_get_id_at_location(struct nsgtk_scaffolding *g, int i)
-{
- int q;
- for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++)
- if (nsgtk_scaffolding_button(g, q)->location == i)
- return q;
- return -1;
-}
-
-/**
- * connect 'normal' handlers to toolbar buttons
- */
-
-void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
-{
- int q, i;
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- q = nsgtk_toolbar_get_id_at_location(g, i);
- if (q == -1)
- continue;
- if (nsgtk_scaffolding_button(g, q)->button != NULL)
- g_signal_connect(
- nsgtk_scaffolding_button(g, q)->button,
- "size-allocate", G_CALLBACK(
- nsgtk_scaffolding_toolbar_size_allocate
- ), g);
- nsgtk_toolbar_set_handler(g, q);
- }
-}
/**
* add handlers to factory widgets
* \param g the scaffolding to attach handlers to
* \param i the toolbar item id
*/
-void
+static void
nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
{
switch(i){
@@ -947,6 +985,27 @@ nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
}
}
+/**
+ * connect 'normal' handlers to toolbar buttons
+ */
+void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
+{
+ int q, i;
+ for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
+ q = nsgtk_toolbar_get_id_at_location(g, i);
+ if (q == -1)
+ continue;
+ if (nsgtk_scaffolding_button(g, q)->button != NULL)
+ g_signal_connect(
+ nsgtk_scaffolding_button(g, q)->button,
+ "size-allocate", G_CALLBACK(
+ nsgtk_scaffolding_toolbar_size_allocate
+ ), g);
+ nsgtk_toolbar_set_handler(g, q);
+ }
+}
+
+
#define DATAHANDLER(p, q, r)\
gboolean nsgtk_toolbar_##p##_button_data(GtkWidget *widget, GdkDragContext\
*cont, GtkSelectionData *selection, guint info, guint time,\
@@ -1036,19 +1095,6 @@ DATAHANDLER(throbber, THROBBER, window)
DATAHANDLER(websearch, WEBSEARCH, window)
#undef DATAHANDLER
-/**
- * connect temporary handler for toolbar edit events
- */
-void nsgtk_toolbar_temp_connect(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i)
-{
- if ((i == URL_BAR_ITEM) ||
- (nsgtk_scaffolding_button(g, i)->button == NULL) ||
- (nsgtk_scaffolding_button(g, i)->dataminus == NULL))
- return;
- g_signal_connect(nsgtk_scaffolding_button(g, i)->button,
- "drag-data-get", G_CALLBACK(nsgtk_scaffolding_button(
- g, i)->dataminus), g);
-}
/**
* load toolbar settings from file; file is a set of fields arranged as
@@ -1090,49 +1136,3 @@ void nsgtk_toolbar_customization_load(struct nsgtk_scaffolding *g)
buffer1 = strtok_r(NULL, "|", &ptr);
}
}
-
-/**
- * cast toolbar settings to all scaffoldings referenced from the global linked
- * list of gui_windows
- */
-void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g)
-{
- int i;
- struct nsgtk_scaffolding *list;
-
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- window->buttonlocations[i] =
- ((nsgtk_scaffolding_button(g, i)->location
- >= -1) &&
- (nsgtk_scaffolding_button(g, i)->location
- < PLACEHOLDER_BUTTON)) ?
- nsgtk_scaffolding_button(g, i)->location : -1;
- }
-
- list = nsgtk_scaffolding_iterate(NULL);
- while (list) {
- if (list != g)
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++)
- nsgtk_scaffolding_button(list, i)->location =
- window->buttonlocations[i];
- list = nsgtk_scaffolding_iterate(list);
- }
-}
-
-/**
- * save toolbar settings to file
- */
-void nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g)
-{
- int i;
- FILE *f = fopen(toolbar_indices_file_location, "w");
- if (f == NULL){
- warn_user("gtkFileError", toolbar_indices_file_location);
- return;
- }
- for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- fprintf(f, "%d;%d|", i, nsgtk_scaffolding_button(g, i)->location);
- }
- fclose(f);
-}
-
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-65-gf3158f7
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/f3158f79b6357558e3a00...
...commit http://git.netsurf-browser.org/netsurf.git/commit/f3158f79b6357558e3a0083...
...tree http://git.netsurf-browser.org/netsurf.git/tree/f3158f79b6357558e3a008303...
The branch, master has been updated
via f3158f79b6357558e3a0083039857bba21c6ca5b (commit)
from 5e51600cfe713fa320734291ec15a7a584c1c25b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=f3158f79b6357558e3a...
commit f3158f79b6357558e3a0083039857bba21c6ca5b
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
remove usage of deprecated gtk alignment interface
diff --git a/gtk/compat.c b/gtk/compat.c
index 0717f52..51469b2 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -588,8 +588,13 @@ void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign val
void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin)
{
#if GTK_CHECK_VERSION(3,0,0)
+#if GTK_CHECK_VERSION(3,12,0)
+ gtk_widget_set_margin_start(widget, hmargin);
+ gtk_widget_set_margin_end(widget, hmargin);
+#else
gtk_widget_set_margin_left(widget, hmargin);
gtk_widget_set_margin_right(widget, hmargin);
+#endif
gtk_widget_set_margin_top(widget, vmargin);
gtk_widget_set_margin_bottom(widget, vmargin);
#else
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index d7569f1..2b30a3e 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -2572,8 +2572,8 @@ void nsgtk_scaffolding_update_url_bar_ref(struct nsgtk_scaffolding *g)
/* exported interface documented in gtk/scaffolding.h */
void nsgtk_scaffolding_update_throbber_ref(struct nsgtk_scaffolding *g)
{
- g->throbber = GTK_IMAGE(gtk_bin_get_child(GTK_BIN(gtk_bin_get_child(
- GTK_BIN(g->buttons[THROBBER_ITEM]->button)))));
+ g->throbber = GTK_IMAGE(gtk_bin_get_child(
+ GTK_BIN(g->buttons[THROBBER_ITEM]->button)));
}
/* exported interface documented in gtk/scaffolding.h */
diff --git a/gtk/theme.h b/gtk/theme.h
index 175757b..b3059ee 100644
--- a/gtk/theme.h
+++ b/gtk/theme.h
@@ -30,8 +30,8 @@ typedef enum search_buttons {
} nsgtk_search_buttons;
struct nsgtk_theme {
- GtkImage *image[PLACEHOLDER_BUTTON];
- GtkImage *searchimage[SEARCH_BUTTONS_COUNT];
+ GtkImage *image[PLACEHOLDER_BUTTON];
+ GtkImage *searchimage[SEARCH_BUTTONS_COUNT];
/* apng throbber element */
};
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index dd542d7..0a518a5 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -573,21 +573,22 @@ gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *gdc, gint x,
nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
/* complete action */
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button, ind);
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button),
- GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
+ GtkToolItem *current_button;
+
+ current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
+
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
+
+ gtk_tool_item_set_use_drag_window(current_button, TRUE);
+ gtk_drag_source_set(GTK_WIDGET(current_button),
+ GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
nsgtk_toolbar_temp_connect(g, window->currentbutton);
- gtk_widget_show_all(GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button));
+ gtk_widget_show_all(GTK_WIDGET(current_button));
+
+
window->currentbutton = -1;
+
return TRUE;
}
@@ -681,13 +682,14 @@ void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
nsgtk_toolbar_button i, struct nsgtk_theme *theme)
{
+ GtkWidget *w = NULL;
+
switch(i) {
/* gtk_tool_button_new() accepts NULL args */
-#define MAKE_STOCKBUTTON(p, q) \
+#define MAKE_STOCKBUTTON(p, q) \
case p##_BUTTON: { \
GtkStockItem item; \
- GtkWidget *w; \
if (nsgtk_stock_lookup(q, &item) && \
(item.label != NULL)) { \
char *label = NULL; \
@@ -700,7 +702,7 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
theme->image[p##_BUTTON]), q)); \
} \
- return w; \
+ break; \
}
MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
@@ -709,12 +711,15 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
#undef MAKE_STOCKBUTTON
+
case HISTORY_BUTTON:
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
theme->image[HISTORY_BUTTON]), ""));
+ break;
+
case URL_BAR_ITEM: {
GtkWidget *entry = nsgtk_entry_new();
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
+ w = GTK_WIDGET(gtk_tool_item_new());
if ((entry == NULL) || (w == NULL)) {
warn_user(messages_get("NoMemory"), 0);
@@ -727,32 +732,39 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
gtk_container_add(GTK_CONTAINER(w), entry);
gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
- return w;
+ break;
}
+
case THROBBER_ITEM: {
- if (edit_mode)
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ if ((nsgtk_throbber == NULL) ||
+ (nsgtk_throbber->framedata == NULL) ||
+ (nsgtk_throbber->framedata[0] == NULL)) {
+ return NULL;
+ }
+
+ if (edit_mode) {
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
gtk_image_new_from_pixbuf(
nsgtk_throbber->framedata[0])),
- "[throbber]"));
- if ((nsgtk_throbber == NULL) || (nsgtk_throbber->framedata ==
- NULL) || (nsgtk_throbber->framedata[0] ==
- NULL))
- return NULL;
- GtkWidget *image = GTK_WIDGET(gtk_image_new_from_pixbuf(
- nsgtk_throbber->framedata[0]));
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
- GtkWidget *al = GTK_WIDGET(gtk_alignment_new(0.5, 0.5, 1, 1));
- if ((w == NULL) || (al == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
+ "[throbber]"));
+ } else {
+ GtkWidget *image;
+
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
+ if (image != NULL) {
+ nsgtk_widget_set_alignment(image,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(image, 3, 0);
+
+ gtk_container_add(GTK_CONTAINER(w), image);
+ }
}
- gtk_alignment_set_padding(GTK_ALIGNMENT(al), 0, 0, 3, 3);
- if (image != NULL)
- gtk_container_add(GTK_CONTAINER(al), image);
- gtk_container_add(GTK_CONTAINER(w), al);
- return w;
+ break;
}
+
case WEBSEARCH_ITEM: {
if (edit_mode)
return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
@@ -762,7 +774,7 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
GtkWidget *entry = nsgtk_entry_new();
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
+ w = GTK_WIDGET(gtk_tool_item_new());
if ((entry == NULL) || (w == NULL)) {
warn_user(messages_get("NoMemory"), 0);
@@ -775,18 +787,19 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
NSGTK_STOCK_INFO);
gtk_container_add(GTK_CONTAINER(w), entry);
- return w;
+ break;
}
/* gtk_tool_button_new accepts NULL args */
-#define MAKE_MENUBUTTON(p, q) case p##_BUTTON: {\
- char *label = NULL;\
- label = remove_underscores(messages_get(#q), false);\
- GtkWidget *w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(\
- theme->image[p##_BUTTON]), label));\
- if (label != NULL)\
- free(label);\
- return w;\
+#define MAKE_MENUBUTTON(p, q) \
+ case p##_BUTTON: { \
+ char *label = NULL; \
+ label = remove_underscores(messages_get(#q), false); \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ if (label != NULL) \
+ free(label); \
+ break; \
}
MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
@@ -831,10 +844,13 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
MAKE_MENUBUTTON(GUIDE, gtkGuide)
MAKE_MENUBUTTON(INFO, gtkUserInformation)
- default:
- return NULL;
#undef MAKE_MENUBUTTON
+
+ default:
+ break;
+
}
+ return w;
}
/**
diff --git a/gtk/window.c b/gtk/window.c
index 00d9692..685ff91 100644
--- a/gtk/window.c
+++ b/gtk/window.c
@@ -50,9 +50,6 @@
#include "gtk/bitmap.h"
#include "gtk/gdk.h"
-/* helper macro to conenct signals to callbacks */
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
extern const GdkPixdata menu_cursor_pixdata;
@@ -812,8 +809,13 @@ gui_window_create(struct browser_window *bw,
GTK_STATE_NORMAL,
0, 0xffff, 0xffff, 0xffff);
- nsgtk_connect_draw_event(GTK_WIDGET(g->layout),
- G_CALLBACK(nsgtk_window_draw_event), g);
+ g->signalhandler[NSGTK_WINDOW_SIGNAL_REDRAW] =
+ nsgtk_connect_draw_event(GTK_WIDGET(g->layout),
+ G_CALLBACK(nsgtk_window_draw_event), g);
+
+ /* helper macro to conect signals to callbacks */
+#define CONNECT(obj, sig, callback, ptr) \
+ g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
/* layout signals */
CONNECT(g->layout, "motion-notify-event",
-----------------------------------------------------------------------
Summary of changes:
gtk/compat.c | 5 +++
gtk/scaffolding.c | 4 +-
gtk/theme.h | 4 +-
gtk/toolbar.c | 116 ++++++++++++++++++++++++++++++-----------------------
gtk/window.c | 12 +++---
5 files changed, 82 insertions(+), 59 deletions(-)
diff --git a/gtk/compat.c b/gtk/compat.c
index 0717f52..51469b2 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -588,8 +588,13 @@ void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign val
void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin)
{
#if GTK_CHECK_VERSION(3,0,0)
+#if GTK_CHECK_VERSION(3,12,0)
+ gtk_widget_set_margin_start(widget, hmargin);
+ gtk_widget_set_margin_end(widget, hmargin);
+#else
gtk_widget_set_margin_left(widget, hmargin);
gtk_widget_set_margin_right(widget, hmargin);
+#endif
gtk_widget_set_margin_top(widget, vmargin);
gtk_widget_set_margin_bottom(widget, vmargin);
#else
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index d7569f1..2b30a3e 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -2572,8 +2572,8 @@ void nsgtk_scaffolding_update_url_bar_ref(struct nsgtk_scaffolding *g)
/* exported interface documented in gtk/scaffolding.h */
void nsgtk_scaffolding_update_throbber_ref(struct nsgtk_scaffolding *g)
{
- g->throbber = GTK_IMAGE(gtk_bin_get_child(GTK_BIN(gtk_bin_get_child(
- GTK_BIN(g->buttons[THROBBER_ITEM]->button)))));
+ g->throbber = GTK_IMAGE(gtk_bin_get_child(
+ GTK_BIN(g->buttons[THROBBER_ITEM]->button)));
}
/* exported interface documented in gtk/scaffolding.h */
diff --git a/gtk/theme.h b/gtk/theme.h
index 175757b..b3059ee 100644
--- a/gtk/theme.h
+++ b/gtk/theme.h
@@ -30,8 +30,8 @@ typedef enum search_buttons {
} nsgtk_search_buttons;
struct nsgtk_theme {
- GtkImage *image[PLACEHOLDER_BUTTON];
- GtkImage *searchimage[SEARCH_BUTTONS_COUNT];
+ GtkImage *image[PLACEHOLDER_BUTTON];
+ GtkImage *searchimage[SEARCH_BUTTONS_COUNT];
/* apng throbber element */
};
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index dd542d7..0a518a5 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -573,21 +573,22 @@ gboolean nsgtk_toolbar_data(GtkWidget *widget, GdkDragContext *gdc, gint x,
nsgtk_scaffolding_button(g, window->currentbutton)->location = ind;
/* complete action */
- gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g),
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button, ind);
- gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button), TRUE);
- gtk_drag_source_set(GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button),
- GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY);
+ GtkToolItem *current_button;
+
+ current_button = GTK_TOOL_ITEM(nsgtk_scaffolding_button(g, window->currentbutton)->button);
+
+ gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), current_button, ind);
+
+ gtk_tool_item_set_use_drag_window(current_button, TRUE);
+ gtk_drag_source_set(GTK_WIDGET(current_button),
+ GDK_BUTTON1_MASK, &entry, 1,
+ GDK_ACTION_COPY);
nsgtk_toolbar_temp_connect(g, window->currentbutton);
- gtk_widget_show_all(GTK_WIDGET(
- nsgtk_scaffolding_button(g,
- window->currentbutton)->button));
+ gtk_widget_show_all(GTK_WIDGET(current_button));
+
+
window->currentbutton = -1;
+
return TRUE;
}
@@ -681,13 +682,14 @@ void nsgtk_toolbar_clear(GtkWidget *widget, GdkDragContext *gdc, guint time,
GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
nsgtk_toolbar_button i, struct nsgtk_theme *theme)
{
+ GtkWidget *w = NULL;
+
switch(i) {
/* gtk_tool_button_new() accepts NULL args */
-#define MAKE_STOCKBUTTON(p, q) \
+#define MAKE_STOCKBUTTON(p, q) \
case p##_BUTTON: { \
GtkStockItem item; \
- GtkWidget *w; \
if (nsgtk_stock_lookup(q, &item) && \
(item.label != NULL)) { \
char *label = NULL; \
@@ -700,7 +702,7 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
theme->image[p##_BUTTON]), q)); \
} \
- return w; \
+ break; \
}
MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME)
@@ -709,12 +711,15 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP)
MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH)
#undef MAKE_STOCKBUTTON
+
case HISTORY_BUTTON:
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
theme->image[HISTORY_BUTTON]), ""));
+ break;
+
case URL_BAR_ITEM: {
GtkWidget *entry = nsgtk_entry_new();
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
+ w = GTK_WIDGET(gtk_tool_item_new());
if ((entry == NULL) || (w == NULL)) {
warn_user(messages_get("NoMemory"), 0);
@@ -727,32 +732,39 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
gtk_container_add(GTK_CONTAINER(w), entry);
gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
- return w;
+ break;
}
+
case THROBBER_ITEM: {
- if (edit_mode)
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
+ if ((nsgtk_throbber == NULL) ||
+ (nsgtk_throbber->framedata == NULL) ||
+ (nsgtk_throbber->framedata[0] == NULL)) {
+ return NULL;
+ }
+
+ if (edit_mode) {
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
gtk_image_new_from_pixbuf(
nsgtk_throbber->framedata[0])),
- "[throbber]"));
- if ((nsgtk_throbber == NULL) || (nsgtk_throbber->framedata ==
- NULL) || (nsgtk_throbber->framedata[0] ==
- NULL))
- return NULL;
- GtkWidget *image = GTK_WIDGET(gtk_image_new_from_pixbuf(
- nsgtk_throbber->framedata[0]));
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
- GtkWidget *al = GTK_WIDGET(gtk_alignment_new(0.5, 0.5, 1, 1));
- if ((w == NULL) || (al == NULL)) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
+ "[throbber]"));
+ } else {
+ GtkWidget *image;
+
+ w = GTK_WIDGET(gtk_tool_item_new());
+
+ image = gtk_image_new_from_pixbuf(nsgtk_throbber->framedata[0]);
+ if (image != NULL) {
+ nsgtk_widget_set_alignment(image,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(image, 3, 0);
+
+ gtk_container_add(GTK_CONTAINER(w), image);
+ }
}
- gtk_alignment_set_padding(GTK_ALIGNMENT(al), 0, 0, 3, 3);
- if (image != NULL)
- gtk_container_add(GTK_CONTAINER(al), image);
- gtk_container_add(GTK_CONTAINER(w), al);
- return w;
+ break;
}
+
case WEBSEARCH_ITEM: {
if (edit_mode)
return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
@@ -762,7 +774,7 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
GtkWidget *entry = nsgtk_entry_new();
- GtkWidget *w = GTK_WIDGET(gtk_tool_item_new());
+ w = GTK_WIDGET(gtk_tool_item_new());
if ((entry == NULL) || (w == NULL)) {
warn_user(messages_get("NoMemory"), 0);
@@ -775,18 +787,19 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
NSGTK_STOCK_INFO);
gtk_container_add(GTK_CONTAINER(w), entry);
- return w;
+ break;
}
/* gtk_tool_button_new accepts NULL args */
-#define MAKE_MENUBUTTON(p, q) case p##_BUTTON: {\
- char *label = NULL;\
- label = remove_underscores(messages_get(#q), false);\
- GtkWidget *w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(\
- theme->image[p##_BUTTON]), label));\
- if (label != NULL)\
- free(label);\
- return w;\
+#define MAKE_MENUBUTTON(p, q) \
+ case p##_BUTTON: { \
+ char *label = NULL; \
+ label = remove_underscores(messages_get(#q), false); \
+ w = GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET( \
+ theme->image[p##_BUTTON]), label)); \
+ if (label != NULL) \
+ free(label); \
+ break; \
}
MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow)
@@ -831,10 +844,13 @@ GtkWidget *nsgtk_toolbar_make_widget(struct nsgtk_scaffolding *g,
MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
MAKE_MENUBUTTON(GUIDE, gtkGuide)
MAKE_MENUBUTTON(INFO, gtkUserInformation)
- default:
- return NULL;
#undef MAKE_MENUBUTTON
+
+ default:
+ break;
+
}
+ return w;
}
/**
diff --git a/gtk/window.c b/gtk/window.c
index 00d9692..685ff91 100644
--- a/gtk/window.c
+++ b/gtk/window.c
@@ -50,9 +50,6 @@
#include "gtk/bitmap.h"
#include "gtk/gdk.h"
-/* helper macro to conenct signals to callbacks */
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
extern const GdkPixdata menu_cursor_pixdata;
@@ -812,8 +809,13 @@ gui_window_create(struct browser_window *bw,
GTK_STATE_NORMAL,
0, 0xffff, 0xffff, 0xffff);
- nsgtk_connect_draw_event(GTK_WIDGET(g->layout),
- G_CALLBACK(nsgtk_window_draw_event), g);
+ g->signalhandler[NSGTK_WINDOW_SIGNAL_REDRAW] =
+ nsgtk_connect_draw_event(GTK_WIDGET(g->layout),
+ G_CALLBACK(nsgtk_window_draw_event), g);
+
+ /* helper macro to conect signals to callbacks */
+#define CONNECT(obj, sig, callback, ptr) \
+ g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
/* layout signals */
CONNECT(g->layout, "motion-notify-event",
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-64-g5e51600
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/5e51600cfe713fa320734...
...commit http://git.netsurf-browser.org/netsurf.git/commit/5e51600cfe713fa32073429...
...tree http://git.netsurf-browser.org/netsurf.git/tree/5e51600cfe713fa320734291e...
The branch, master has been updated
via 5e51600cfe713fa320734291ec15a7a584c1c25b (commit)
via df4e9e322dc8c64af1fc8aabc26c8d4ddab32574 (commit)
from e193566de41d65e055db306b9ca28b35daa8bc43 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=5e51600cfe713fa3207...
commit 5e51600cfe713fa320734291ec15a7a584c1c25b
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Add gtk compatability for margin setting.
diff --git a/gtk/compat.c b/gtk/compat.c
index 8484c02..0717f52 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -583,3 +583,16 @@ void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign val
gtk_misc_set_alignment(GTK_MISC(widget), x, y);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin)
+{
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(widget, hmargin);
+ gtk_widget_set_margin_right(widget, hmargin);
+ gtk_widget_set_margin_top(widget, vmargin);
+ gtk_widget_set_margin_bottom(widget, vmargin);
+#else
+ gtk_misc_set_padding(GTK_MISC(widget), hmargin, vmargin);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index d35c5d7..e90cdc6 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -94,6 +94,20 @@ typedef enum {
*/
void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign valign);
+/**
+ * Set the margins of a widget
+ *
+ * Sets the margin all round a widget.
+ *
+ * @note this type of margin was not available prior to GTK 3.0 so
+ * we emulate it using gtk_misc_set_padding.
+ *
+ * \param widget The widget to set alignent on.
+ * \param hmargin The horizontal margin.
+ * \param vmargin The vertical margin.
+ */
+void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin);
+
void nsgtk_widget_set_can_focus(GtkWidget *widget, gboolean can_focus);
gboolean nsgtk_widget_has_focus(GtkWidget *widget);
gboolean nsgtk_widget_get_visible(GtkWidget *widget);
diff --git a/gtk/tabs.c b/gtk/tabs.c
index cf2941d..f892fa6 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -76,7 +76,7 @@ static GtkWidget *nsgtk_tab_label_setup(struct gui_window *window)
gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
nsgtk_widget_set_alignment(label, GTK_ALIGN_START, GTK_ALIGN_CENTER);
- gtk_misc_set_padding(GTK_MISC(label), 0, 0);
+ nsgtk_widget_set_margins(label, 0, 0);
gtk_widget_show(label);
button = gtk_button_new();
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=df4e9e322dc8c64af1f...
commit df4e9e322dc8c64af1fc8aabc26c8d4ddab32574
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Add widget alignment gtk compatability interface.
diff --git a/gtk/compat.c b/gtk/compat.c
index 14284fc..8484c02 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -543,3 +543,43 @@ gboolean nsgtk_icon_size_lookup_for_settings(GtkSettings *settings,
return gtk_icon_size_lookup_for_settings(settings, size, width, height);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign valign)
+{
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_halign(widget, halign);
+ gtk_widget_set_valign(widget, valign);
+#else
+ gfloat x, y;
+ switch(halign) {
+ case GTK_ALIGN_START:
+ x = 0.0;
+ break;
+
+ case GTK_ALIGN_END:
+ x = 1.0;
+ break;
+
+ default:
+ x = 0.5;
+ break;
+ }
+
+ switch(valign) {
+ case GTK_ALIGN_START:
+ y = 0.0;
+ break;
+
+ case GTK_ALIGN_END:
+ y = 1.0;
+ break;
+
+ default:
+ y = 0.5;
+ break;
+ }
+
+ gtk_misc_set_alignment(GTK_MISC(widget), x, y);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index 52d10f3..d35c5d7 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -69,6 +69,31 @@
#define NSGTK_STOCK_OPEN GTK_STOCK_OPEN
#endif
+/* widget alignment only available since 3.0 */
+#if !GTK_CHECK_VERSION(3,0,0)
+typedef enum {
+ GTK_ALIGN_FILL,
+ GTK_ALIGN_START,
+ GTK_ALIGN_END,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_BASELINE
+} GtkAlign;
+#endif
+
+/**
+ * Set the alignment of a widget.
+ *
+ * sets both the horizontal and vertical alignement of a widget
+ *
+ * @note this type of alignemnt was not available prior to GTK 3.0 so
+ * we emulate it using gtk_misc_set_alignment.
+ *
+ * \param widget The widget to set alignent on.
+ * \param halign The horizontal alignment to set.
+ * \param valign The vertical alignment to set
+ */
+void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign valign);
+
void nsgtk_widget_set_can_focus(GtkWidget *widget, gboolean can_focus);
gboolean nsgtk_widget_has_focus(GtkWidget *widget);
gboolean nsgtk_widget_get_visible(GtkWidget *widget);
diff --git a/gtk/tabs.c b/gtk/tabs.c
index f69966c..cf2941d 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -19,14 +19,16 @@
#include <stdint.h>
#include <string.h>
-#include "gtk/compat.h"
-#include "gtk/window.h"
-#include "gtk/gui.h"
+#include "utils/nsoption.h"
+#include "utils/utils.h"
+#include "utils/messages.h"
#include "desktop/browser.h"
#include "content/content.h"
-#include "utils/nsoption.h"
#include "desktop/search.h"
-#include "utils/utils.h"
+
+#include "gtk/compat.h"
+#include "gtk/window.h"
+#include "gtk/gui.h"
#include "gtk/search.h"
#include "gtk/tabs.h"
@@ -70,13 +72,10 @@ static GtkWidget *nsgtk_tab_label_setup(struct gui_window *window)
hbox = nsgtk_hbox_new(FALSE, 2);
- if (nsoption_bool(new_blank) == true)
- label = gtk_label_new("New Tab");
- else
- label = gtk_label_new("Loading...");
+ label = gtk_label_new(messages_get("NewTab"));
gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ nsgtk_widget_set_alignment(label, GTK_ALIGN_START, GTK_ALIGN_CENTER);
gtk_misc_set_padding(GTK_MISC(label), 0, 0);
gtk_widget_show(label);
diff --git a/resources/FatMessages b/resources/FatMessages
index 50bc7df..8a795fb 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -709,7 +709,7 @@ de.all.NewWindowNS:Neues Fenster
fr.all.NewWindowNS:Nouvelle fenêtre
it.all.NewWindowNS:Nuova finestra
nl.all.NewWindowNS:Nieuw venster
-en.all.NewTab:New tab
+en.all.NewTab:New Tab
de.all.NewTab:Neuer Tab
fr.all.NewTab:Nouvel onglet
it.all.NewTab:Nuova scheda
-----------------------------------------------------------------------
Summary of changes:
gtk/compat.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++
gtk/compat.h | 39 ++++++++++++++++++++++++++++++++++++
gtk/tabs.c | 21 ++++++++++----------
resources/FatMessages | 2 +-
4 files changed, 103 insertions(+), 12 deletions(-)
diff --git a/gtk/compat.c b/gtk/compat.c
index 14284fc..0717f52 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -543,3 +543,56 @@ gboolean nsgtk_icon_size_lookup_for_settings(GtkSettings *settings,
return gtk_icon_size_lookup_for_settings(settings, size, width, height);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign valign)
+{
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_halign(widget, halign);
+ gtk_widget_set_valign(widget, valign);
+#else
+ gfloat x, y;
+ switch(halign) {
+ case GTK_ALIGN_START:
+ x = 0.0;
+ break;
+
+ case GTK_ALIGN_END:
+ x = 1.0;
+ break;
+
+ default:
+ x = 0.5;
+ break;
+ }
+
+ switch(valign) {
+ case GTK_ALIGN_START:
+ y = 0.0;
+ break;
+
+ case GTK_ALIGN_END:
+ y = 1.0;
+ break;
+
+ default:
+ y = 0.5;
+ break;
+ }
+
+ gtk_misc_set_alignment(GTK_MISC(widget), x, y);
+#endif
+}
+
+/* exported interface documented in gtk/compat.h */
+void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin)
+{
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(widget, hmargin);
+ gtk_widget_set_margin_right(widget, hmargin);
+ gtk_widget_set_margin_top(widget, vmargin);
+ gtk_widget_set_margin_bottom(widget, vmargin);
+#else
+ gtk_misc_set_padding(GTK_MISC(widget), hmargin, vmargin);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index 52d10f3..e90cdc6 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -69,6 +69,45 @@
#define NSGTK_STOCK_OPEN GTK_STOCK_OPEN
#endif
+/* widget alignment only available since 3.0 */
+#if !GTK_CHECK_VERSION(3,0,0)
+typedef enum {
+ GTK_ALIGN_FILL,
+ GTK_ALIGN_START,
+ GTK_ALIGN_END,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_BASELINE
+} GtkAlign;
+#endif
+
+/**
+ * Set the alignment of a widget.
+ *
+ * sets both the horizontal and vertical alignement of a widget
+ *
+ * @note this type of alignemnt was not available prior to GTK 3.0 so
+ * we emulate it using gtk_misc_set_alignment.
+ *
+ * \param widget The widget to set alignent on.
+ * \param halign The horizontal alignment to set.
+ * \param valign The vertical alignment to set
+ */
+void nsgtk_widget_set_alignment(GtkWidget *widget, GtkAlign halign, GtkAlign valign);
+
+/**
+ * Set the margins of a widget
+ *
+ * Sets the margin all round a widget.
+ *
+ * @note this type of margin was not available prior to GTK 3.0 so
+ * we emulate it using gtk_misc_set_padding.
+ *
+ * \param widget The widget to set alignent on.
+ * \param hmargin The horizontal margin.
+ * \param vmargin The vertical margin.
+ */
+void nsgtk_widget_set_margins(GtkWidget *widget, gint hmargin, gint vmargin);
+
void nsgtk_widget_set_can_focus(GtkWidget *widget, gboolean can_focus);
gboolean nsgtk_widget_has_focus(GtkWidget *widget);
gboolean nsgtk_widget_get_visible(GtkWidget *widget);
diff --git a/gtk/tabs.c b/gtk/tabs.c
index f69966c..f892fa6 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -19,14 +19,16 @@
#include <stdint.h>
#include <string.h>
-#include "gtk/compat.h"
-#include "gtk/window.h"
-#include "gtk/gui.h"
+#include "utils/nsoption.h"
+#include "utils/utils.h"
+#include "utils/messages.h"
#include "desktop/browser.h"
#include "content/content.h"
-#include "utils/nsoption.h"
#include "desktop/search.h"
-#include "utils/utils.h"
+
+#include "gtk/compat.h"
+#include "gtk/window.h"
+#include "gtk/gui.h"
#include "gtk/search.h"
#include "gtk/tabs.h"
@@ -70,14 +72,11 @@ static GtkWidget *nsgtk_tab_label_setup(struct gui_window *window)
hbox = nsgtk_hbox_new(FALSE, 2);
- if (nsoption_bool(new_blank) == true)
- label = gtk_label_new("New Tab");
- else
- label = gtk_label_new("Loading...");
+ label = gtk_label_new(messages_get("NewTab"));
gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_misc_set_padding(GTK_MISC(label), 0, 0);
+ nsgtk_widget_set_alignment(label, GTK_ALIGN_START, GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(label, 0, 0);
gtk_widget_show(label);
button = gtk_button_new();
diff --git a/resources/FatMessages b/resources/FatMessages
index 50bc7df..8a795fb 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -709,7 +709,7 @@ de.all.NewWindowNS:Neues Fenster
fr.all.NewWindowNS:Nouvelle fenêtre
it.all.NewWindowNS:Nuova finestra
nl.all.NewWindowNS:Nieuw venster
-en.all.NewTab:New tab
+en.all.NewTab:New Tab
de.all.NewTab:Neuer Tab
fr.all.NewTab:Nouvel onglet
it.all.NewTab:Nuova scheda
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-62-ge193566
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/e193566de41d65e055db3...
...commit http://git.netsurf-browser.org/netsurf.git/commit/e193566de41d65e055db306...
...tree http://git.netsurf-browser.org/netsurf.git/tree/e193566de41d65e055db306b9...
The branch, master has been updated
via e193566de41d65e055db306b9ca28b35daa8bc43 (commit)
from 4f13cbd31c984957d17081ac6d59a62b04d57765 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=e193566de41d65e055d...
commit e193566de41d65e055db306b9ca28b35daa8bc43
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Improve the stock icon/icon name compatability logic to be explicit
diff --git a/gtk/compat.c b/gtk/compat.c
index 7f6d061..14284fc 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -168,11 +168,13 @@ void nsgtk_entry_set_icon_from_pixbuf(GtkWidget *entry,
#endif
}
+
+/* exported interface documented in gtk/compat.h */
void nsgtk_entry_set_icon_from_stock(GtkWidget *entry,
GtkEntryIconPosition icon_pos,
const gchar *id)
{
-#if GTK_CHECK_VERSION(3,10,0)
+#ifdef NSGTK_USE_ICON_NAME
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry), icon_pos, id);
#else
#if GTK_CHECK_VERSION(2,16,0)
@@ -191,15 +193,39 @@ void nsgtk_entry_set_icon_from_stock(GtkWidget *entry,
#endif
}
+
+/* exported interface documented in gtk/compat.h */
GtkWidget *nsgtk_image_new_from_stock(const gchar *id, GtkIconSize size)
{
-#if GTK_CHECK_VERSION(3,10,0)
+#ifdef NSGTK_USE_ICON_NAME
return gtk_image_new_from_icon_name(id, size);
#else
return gtk_image_new_from_stock(id, size);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+GtkWidget *nsgtk_button_new_from_stock(const gchar *stock_id)
+{
+#ifdef NSGTK_USE_ICON_NAME
+ return gtk_button_new_with_label(stock_id);
+#else
+ return gtk_button_new_from_stock(stock_id);
+#endif
+}
+
+/* exported interface documented in gtk/compat.h */
+gboolean nsgtk_stock_lookup(const gchar *stock_id, GtkStockItem *item)
+{
+#ifdef NSGTK_USE_ICON_NAME
+ return FALSE;
+#else
+ return gtk_stock_lookup(stock_id, item);
+#endif
+}
+
+
void nsgtk_widget_override_background_color(GtkWidget *widget,
GtkStateFlags state,
uint16_t a,
@@ -465,25 +491,6 @@ GtkWidget *nsgtk_image_new_from_pixbuf_icon(GdkPixbuf *pixbuf, GtkIconSize size)
#endif
}
-/* exported interface documented in gtk/compat.h */
-GtkWidget *nsgtk_button_new_from_stock(const gchar *stock_id)
-{
-#if GTK_CHECK_VERSION(3,10,0)
- return gtk_button_new_with_label(stock_id);
-#else
- return gtk_button_new_from_stock(stock_id);
-#endif
-}
-
-/* exported interface documented in gtk/compat.h */
-gboolean nsgtk_stock_lookup(const gchar *stock_id, GtkStockItem *item)
-{
-#if GTK_CHECK_VERSION(3,10,0)
- return FALSE;
-#else
- return gtk_stock_lookup(stock_id, item);
-#endif
-}
/* exported interface documented in gtk/compat.h */
void nsgtk_window_set_opacity(GtkWindow *window, gdouble opacity)
diff --git a/gtk/compat.h b/gtk/compat.h
index 15c30ab..52d10f3 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -29,8 +29,15 @@
/* gtk 3.10 depricated the use of stock names */
#if GTK_CHECK_VERSION(3,10,0)
+#define NSGTK_USE_ICON_NAME
+#else
+#undef NSGTK_USE_ICON_NAME
+#endif
+
+/* icon names instead of stock */
+#ifdef NSGTK_USE_ICON_NAME
#define NSGTK_STOCK_ADD "list-add"
-#define NSGTK_STOCK_CANCEL "gtk-cancel"
+#define NSGTK_STOCK_CANCEL "_Cancel"
#define NSGTK_STOCK_CLEAR "edit-clear"
#define NSGTK_STOCK_CLOSE "window-close"
#define NSGTK_STOCK_FIND "edit-find"
@@ -42,8 +49,8 @@
#define NSGTK_STOCK_SAVE "document-save"
#define NSGTK_STOCK_SAVE_AS "document-save-as"
#define NSGTK_STOCK_STOP "process-stop"
-#define NSGTK_STOCK_OK "gtk-ok"
-#define NSGTK_STOCK_OPEN "document-open"
+#define NSGTK_STOCK_OK "_OK"
+#define NSGTK_STOCK_OPEN "_Open"
#else
#define NSGTK_STOCK_ADD GTK_STOCK_ADD
#define NSGTK_STOCK_CANCEL GTK_STOCK_CANCEL
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 650eee1..d7569f1 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -587,17 +587,23 @@ MULTIHANDLER(newtab)
MULTIHANDLER(openfile)
{
+ GtkWidget *dlgOpen;
+ gint response;
+
scaf_current = g;
- GtkWidget *dlgOpen = gtk_file_chooser_dialog_new("Open File",
- scaf_current->window, GTK_FILE_CHOOSER_ACTION_OPEN,
- NSGTK_STOCK_CANCEL, -6, NSGTK_STOCK_OPEN, -5, NULL);
+ dlgOpen = gtk_file_chooser_dialog_new("Open File",
+ scaf_current->window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL, NULL);
- gint response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
+ response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
if (response == GTK_RESPONSE_OK) {
- gchar *filename = gtk_file_chooser_get_filename(
- GTK_FILE_CHOOSER(dlgOpen));
+ gchar *filename;
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
- nsgtk_openfile_open((const char *) filename);
+ nsgtk_openfile_open((const char *)filename);
g_free(filename);
}
@@ -2750,7 +2756,3 @@ void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget,
g->toolbarmem = alloc->x;
gtk_widget_size_allocate(widget, alloc);
}
-
-
-
-
-----------------------------------------------------------------------
Summary of changes:
gtk/compat.c | 49 ++++++++++++++++++++++++++++---------------------
gtk/compat.h | 13 ++++++++++---
gtk/scaffolding.c | 24 +++++++++++++-----------
3 files changed, 51 insertions(+), 35 deletions(-)
diff --git a/gtk/compat.c b/gtk/compat.c
index 7f6d061..14284fc 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -168,11 +168,13 @@ void nsgtk_entry_set_icon_from_pixbuf(GtkWidget *entry,
#endif
}
+
+/* exported interface documented in gtk/compat.h */
void nsgtk_entry_set_icon_from_stock(GtkWidget *entry,
GtkEntryIconPosition icon_pos,
const gchar *id)
{
-#if GTK_CHECK_VERSION(3,10,0)
+#ifdef NSGTK_USE_ICON_NAME
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry), icon_pos, id);
#else
#if GTK_CHECK_VERSION(2,16,0)
@@ -191,15 +193,39 @@ void nsgtk_entry_set_icon_from_stock(GtkWidget *entry,
#endif
}
+
+/* exported interface documented in gtk/compat.h */
GtkWidget *nsgtk_image_new_from_stock(const gchar *id, GtkIconSize size)
{
-#if GTK_CHECK_VERSION(3,10,0)
+#ifdef NSGTK_USE_ICON_NAME
return gtk_image_new_from_icon_name(id, size);
#else
return gtk_image_new_from_stock(id, size);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+GtkWidget *nsgtk_button_new_from_stock(const gchar *stock_id)
+{
+#ifdef NSGTK_USE_ICON_NAME
+ return gtk_button_new_with_label(stock_id);
+#else
+ return gtk_button_new_from_stock(stock_id);
+#endif
+}
+
+/* exported interface documented in gtk/compat.h */
+gboolean nsgtk_stock_lookup(const gchar *stock_id, GtkStockItem *item)
+{
+#ifdef NSGTK_USE_ICON_NAME
+ return FALSE;
+#else
+ return gtk_stock_lookup(stock_id, item);
+#endif
+}
+
+
void nsgtk_widget_override_background_color(GtkWidget *widget,
GtkStateFlags state,
uint16_t a,
@@ -465,25 +491,6 @@ GtkWidget *nsgtk_image_new_from_pixbuf_icon(GdkPixbuf *pixbuf, GtkIconSize size)
#endif
}
-/* exported interface documented in gtk/compat.h */
-GtkWidget *nsgtk_button_new_from_stock(const gchar *stock_id)
-{
-#if GTK_CHECK_VERSION(3,10,0)
- return gtk_button_new_with_label(stock_id);
-#else
- return gtk_button_new_from_stock(stock_id);
-#endif
-}
-
-/* exported interface documented in gtk/compat.h */
-gboolean nsgtk_stock_lookup(const gchar *stock_id, GtkStockItem *item)
-{
-#if GTK_CHECK_VERSION(3,10,0)
- return FALSE;
-#else
- return gtk_stock_lookup(stock_id, item);
-#endif
-}
/* exported interface documented in gtk/compat.h */
void nsgtk_window_set_opacity(GtkWindow *window, gdouble opacity)
diff --git a/gtk/compat.h b/gtk/compat.h
index 15c30ab..52d10f3 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -29,8 +29,15 @@
/* gtk 3.10 depricated the use of stock names */
#if GTK_CHECK_VERSION(3,10,0)
+#define NSGTK_USE_ICON_NAME
+#else
+#undef NSGTK_USE_ICON_NAME
+#endif
+
+/* icon names instead of stock */
+#ifdef NSGTK_USE_ICON_NAME
#define NSGTK_STOCK_ADD "list-add"
-#define NSGTK_STOCK_CANCEL "gtk-cancel"
+#define NSGTK_STOCK_CANCEL "_Cancel"
#define NSGTK_STOCK_CLEAR "edit-clear"
#define NSGTK_STOCK_CLOSE "window-close"
#define NSGTK_STOCK_FIND "edit-find"
@@ -42,8 +49,8 @@
#define NSGTK_STOCK_SAVE "document-save"
#define NSGTK_STOCK_SAVE_AS "document-save-as"
#define NSGTK_STOCK_STOP "process-stop"
-#define NSGTK_STOCK_OK "gtk-ok"
-#define NSGTK_STOCK_OPEN "document-open"
+#define NSGTK_STOCK_OK "_OK"
+#define NSGTK_STOCK_OPEN "_Open"
#else
#define NSGTK_STOCK_ADD GTK_STOCK_ADD
#define NSGTK_STOCK_CANCEL GTK_STOCK_CANCEL
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 650eee1..d7569f1 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -587,17 +587,23 @@ MULTIHANDLER(newtab)
MULTIHANDLER(openfile)
{
+ GtkWidget *dlgOpen;
+ gint response;
+
scaf_current = g;
- GtkWidget *dlgOpen = gtk_file_chooser_dialog_new("Open File",
- scaf_current->window, GTK_FILE_CHOOSER_ACTION_OPEN,
- NSGTK_STOCK_CANCEL, -6, NSGTK_STOCK_OPEN, -5, NULL);
+ dlgOpen = gtk_file_chooser_dialog_new("Open File",
+ scaf_current->window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL, NULL);
- gint response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
+ response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
if (response == GTK_RESPONSE_OK) {
- gchar *filename = gtk_file_chooser_get_filename(
- GTK_FILE_CHOOSER(dlgOpen));
+ gchar *filename;
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
- nsgtk_openfile_open((const char *) filename);
+ nsgtk_openfile_open((const char *)filename);
g_free(filename);
}
@@ -2750,7 +2756,3 @@ void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget,
g->toolbarmem = alloc->x;
gtk_widget_size_allocate(widget, alloc);
}
-
-
-
-
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-61-g4f13cbd
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/4f13cbd31c984957d1708...
...commit http://git.netsurf-browser.org/netsurf.git/commit/4f13cbd31c984957d17081a...
...tree http://git.netsurf-browser.org/netsurf.git/tree/4f13cbd31c984957d17081ac6...
The branch, master has been updated
via 4f13cbd31c984957d17081ac6d59a62b04d57765 (commit)
from 267fb0b00eec762da36f9f763521399efb914c2b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=4f13cbd31c984957d17...
commit 4f13cbd31c984957d17081ac6d59a62b04d57765
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
Fixup deprication of gtk_icon_size_lookup_for_settings in gtk 3.10
diff --git a/gtk/compat.c b/gtk/compat.c
index dc9864b..7f6d061 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -506,6 +506,7 @@ void nsgtk_scrolled_window_add_with_viewport(GtkScrolledWindow *window,
#endif
}
+/* exported interface documented in gtk/compat.h */
GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
{
#if GTK_CHECK_VERSION(3,10,0)
@@ -515,9 +516,23 @@ GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
#endif
}
+/* exported interface documented in gtk/compat.h */
void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image)
{
#if !GTK_CHECK_VERSION(3,10,0)
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(image_menu_item), image);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+gboolean nsgtk_icon_size_lookup_for_settings(GtkSettings *settings,
+ GtkIconSize size,
+ gint *width,
+ gint *height)
+{
+#if GTK_CHECK_VERSION(3,10,0)
+ return gtk_icon_size_lookup(size, width, height);
+#else
+ return gtk_icon_size_lookup_for_settings(settings, size, width, height);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index 748f1b4..15c30ab 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -182,6 +182,8 @@ gboolean nsgtk_show_uri(GdkScreen *screen, const gchar *uri, guint32 timestamp,
GdkWindow *nsgtk_layout_get_bin_window(GtkLayout *layout);
void nsgtk_widget_get_allocation(GtkWidget *widget, GtkAllocation *allocation);
+gboolean nsgtk_icon_size_lookup_for_settings (GtkSettings *settings, GtkIconSize size, gint *width, gint *height);
+
GtkAdjustment *nsgtk_layout_get_vadjustment(GtkLayout *layout);
GtkAdjustment *nsgtk_layout_get_hadjustment(GtkLayout *layout);
void nsgtk_layout_set_hadjustment(GtkLayout *layout, GtkAdjustment *adj);
diff --git a/gtk/tabs.c b/gtk/tabs.c
index 75e3a03..f69966c 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -53,7 +53,7 @@ static void nsgtk_tab_update_size(GtkWidget *hbox, GtkStyle *previous_style,
char_width = pango_font_metrics_get_approximate_digit_width(metrics);
pango_font_metrics_unref(metrics);
- gtk_icon_size_lookup_for_settings(gtk_widget_get_settings (hbox),
+ nsgtk_icon_size_lookup_for_settings(gtk_widget_get_settings (hbox),
GTK_ICON_SIZE_MENU, &w, &h);
gtk_widget_set_size_request(hbox,
-----------------------------------------------------------------------
Summary of changes:
gtk/compat.c | 15 +++++++++++++++
gtk/compat.h | 2 ++
gtk/tabs.c | 2 +-
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/gtk/compat.c b/gtk/compat.c
index dc9864b..7f6d061 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -506,6 +506,7 @@ void nsgtk_scrolled_window_add_with_viewport(GtkScrolledWindow *window,
#endif
}
+/* exported interface documented in gtk/compat.h */
GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
{
#if GTK_CHECK_VERSION(3,10,0)
@@ -515,9 +516,23 @@ GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
#endif
}
+/* exported interface documented in gtk/compat.h */
void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image)
{
#if !GTK_CHECK_VERSION(3,10,0)
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(image_menu_item), image);
#endif
}
+
+/* exported interface documented in gtk/compat.h */
+gboolean nsgtk_icon_size_lookup_for_settings(GtkSettings *settings,
+ GtkIconSize size,
+ gint *width,
+ gint *height)
+{
+#if GTK_CHECK_VERSION(3,10,0)
+ return gtk_icon_size_lookup(size, width, height);
+#else
+ return gtk_icon_size_lookup_for_settings(settings, size, width, height);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index 748f1b4..15c30ab 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -182,6 +182,8 @@ gboolean nsgtk_show_uri(GdkScreen *screen, const gchar *uri, guint32 timestamp,
GdkWindow *nsgtk_layout_get_bin_window(GtkLayout *layout);
void nsgtk_widget_get_allocation(GtkWidget *widget, GtkAllocation *allocation);
+gboolean nsgtk_icon_size_lookup_for_settings (GtkSettings *settings, GtkIconSize size, gint *width, gint *height);
+
GtkAdjustment *nsgtk_layout_get_vadjustment(GtkLayout *layout);
GtkAdjustment *nsgtk_layout_get_hadjustment(GtkLayout *layout);
void nsgtk_layout_set_hadjustment(GtkLayout *layout, GtkAdjustment *adj);
diff --git a/gtk/tabs.c b/gtk/tabs.c
index 75e3a03..f69966c 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -53,7 +53,7 @@ static void nsgtk_tab_update_size(GtkWidget *hbox, GtkStyle *previous_style,
char_width = pango_font_metrics_get_approximate_digit_width(metrics);
pango_font_metrics_unref(metrics);
- gtk_icon_size_lookup_for_settings(gtk_widget_get_settings (hbox),
+ nsgtk_icon_size_lookup_for_settings(gtk_widget_get_settings (hbox),
GTK_ICON_SIZE_MENU, &w, &h);
gtk_widget_set_size_request(hbox,
--
NetSurf Browser
7 years, 11 months
netsurf: branch master updated. release/3.3-60-g267fb0b
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/267fb0b00eec762da36f9...
...commit http://git.netsurf-browser.org/netsurf.git/commit/267fb0b00eec762da36f9f7...
...tree http://git.netsurf-browser.org/netsurf.git/tree/267fb0b00eec762da36f9f763...
The branch, master has been updated
via 267fb0b00eec762da36f9f763521399efb914c2b (commit)
from 1922eb1e2a688c1927ab05436dec5043c31b8e78 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=267fb0b00eec762da36...
commit 267fb0b00eec762da36f9f763521399efb914c2b
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
cope with deprication of image menus in GTK 3.10
diff --git a/gtk/compat.c b/gtk/compat.c
index c00e7b3..dc9864b 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -505,3 +505,19 @@ void nsgtk_scrolled_window_add_with_viewport(GtkScrolledWindow *window,
gtk_scrolled_window_add_with_viewport(window, child);
#endif
}
+
+GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
+{
+#if GTK_CHECK_VERSION(3,10,0)
+ return gtk_menu_item_new_with_mnemonic(label);
+#else
+ return gtk_image_menu_item_new_with_mnemonic(label);
+#endif
+}
+
+void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image)
+{
+#if !GTK_CHECK_VERSION(3,10,0)
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(image_menu_item), image);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index a5fd33c..748f1b4 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -191,5 +191,29 @@ gdouble nsgtk_adjustment_get_upper(GtkAdjustment *adjustment);
gdouble nsgtk_adjustment_get_lower(GtkAdjustment *adjustment);
gdouble nsgtk_adjustment_get_page_increment(GtkAdjustment *adjustment);
+/* menu compatability */
+
+/**
+ * Creates a new GtkImageMenuItem containing a label.
+ *
+ * Compatability interface for original deprecated in GTK 3.10.
+ * @note post 3.10 this creates a GtkMenuItem.
+ *
+ * \param label The text of the button, with an underscore in front of
+ * the mnemonic character.
+ * \return a new GtkMenuItem
+ */
+GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label);
+
+/**
+ * Sets the image of image_menu_item to the given widget.
+ *
+ * Compatability interface for original deprecated in GTK 3.10.
+ * @note post 3.10 this is empty as menu creation generates GtkMenuItem.
+ *
+ * \param image_menu_item The image menu entry item.
+ * \param image The image to set.
+ */
+void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image);
#endif /* NETSURF_GTK_COMPAT_H */
diff --git a/gtk/menu.c b/gtk/menu.c
index 8b684d6..6052d14 100644
--- a/gtk/menu.c
+++ b/gtk/menu.c
@@ -21,35 +21,46 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include "gtk/menu.h"
#include "utils/messages.h"
#include "utils/utils.h"
+#include "gtk/compat.h"
+#include "gtk/menu.h"
+
/**
- * adds image menu item to specified menu
+ * Adds image menu item to a menu.
+ *
* \param menu the menu to add the item to
- * \param item a pointer to the item's location in the menu struct
+ * \param item_out a pointer to the item's location in the menu struct
* \param message the menu item I18n lookup value
* \param messageAccel the menu item accelerator I18n lookup value
* \param group the 'global' in a gtk sense accelerator group
+ * \return true if sucessful and \a item_out updated else false.
*/
static bool nsgtk_menu_add_image_item(GtkMenu *menu,
- GtkImageMenuItem **item, const char *message,
+ GtkWidget **item_out, const char *message,
const char *messageAccel, GtkAccelGroup *group)
{
unsigned int key;
GdkModifierType mod;
- *item = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(
- messages_get(message)));
- if (*item == NULL)
+ GtkWidget *item;
+
+ item = nsgtk_image_menu_item_new_with_mnemonic(messages_get(message));
+ if (item == NULL) {
return false;
+ }
+
gtk_accelerator_parse(messages_get(messageAccel), &key, &mod);
- if (key > 0)
- gtk_widget_add_accelerator(GTK_WIDGET(*item), "activate",
- group, key, mod, GTK_ACCEL_VISIBLE);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), GTK_WIDGET(*item));
- gtk_widget_show(GTK_WIDGET(*item));
+ if (key > 0) {
+ gtk_widget_add_accelerator(item, "activate", group, key, mod,
+ GTK_ACCEL_VISIBLE);
+ }
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ gtk_widget_show(item);
+
+ *item_out = item;
+
return true;
}
diff --git a/gtk/menu.h b/gtk/menu.h
index b14c0bb..5da5cb1 100644
--- a/gtk/menu.h
+++ b/gtk/menu.h
@@ -23,100 +23,100 @@
struct nsgtk_file_menu {
GtkMenuItem *file; /* File menu item on menubar */
GtkMenu *file_menu;
- GtkImageMenuItem *newwindow_menuitem;
- GtkImageMenuItem *newtab_menuitem;
- GtkImageMenuItem *openfile_menuitem;
- GtkImageMenuItem *closewindow_menuitem;
- GtkImageMenuItem *savepage_menuitem;
- GtkImageMenuItem *export_menuitem;
+ GtkWidget *newwindow_menuitem;
+ GtkWidget *newtab_menuitem;
+ GtkWidget *openfile_menuitem;
+ GtkWidget *closewindow_menuitem;
+ GtkWidget *savepage_menuitem;
+ GtkWidget *export_menuitem;
struct nsgtk_export_submenu *export_submenu;
- GtkImageMenuItem *printpreview_menuitem;
- GtkImageMenuItem *print_menuitem;
- GtkImageMenuItem *quit_menuitem;
+ GtkWidget *printpreview_menuitem;
+ GtkWidget *print_menuitem;
+ GtkWidget *quit_menuitem;
};
struct nsgtk_edit_menu {
GtkMenuItem *edit; /* Edit menu item on menubar */
GtkMenu *edit_menu;
- GtkImageMenuItem *cut_menuitem;
- GtkImageMenuItem *copy_menuitem;
- GtkImageMenuItem *paste_menuitem;
- GtkImageMenuItem *delete_menuitem;
- GtkImageMenuItem *selectall_menuitem;
- GtkImageMenuItem *find_menuitem;
- GtkImageMenuItem *preferences_menuitem;
+ GtkWidget *cut_menuitem;
+ GtkWidget *copy_menuitem;
+ GtkWidget *paste_menuitem;
+ GtkWidget *delete_menuitem;
+ GtkWidget *selectall_menuitem;
+ GtkWidget *find_menuitem;
+ GtkWidget *preferences_menuitem;
};
struct nsgtk_view_menu {
GtkMenuItem *view; /* View menu item on menubar */
GtkMenu *view_menu; /* gtk menu attached to menu item */
- GtkImageMenuItem *stop_menuitem;
- GtkImageMenuItem *reload_menuitem;
- GtkImageMenuItem *scaleview_menuitem;
+ GtkWidget *stop_menuitem;
+ GtkWidget *reload_menuitem;
+ GtkWidget *scaleview_menuitem;
struct nsgtk_scaleview_submenu *scaleview_submenu;
- GtkImageMenuItem *fullscreen_menuitem;
- GtkImageMenuItem *images_menuitem;
+ GtkWidget *fullscreen_menuitem;
+ GtkWidget *images_menuitem;
struct nsgtk_images_submenu *images_submenu;
- GtkImageMenuItem *toolbars_menuitem;
+ GtkWidget *toolbars_menuitem;
struct nsgtk_toolbars_submenu *toolbars_submenu;
- GtkImageMenuItem *tabs_menuitem;
+ GtkWidget *tabs_menuitem;
struct nsgtk_tabs_submenu *tabs_submenu;
- GtkImageMenuItem *savewindowsize_menuitem;
+ GtkWidget *savewindowsize_menuitem;
};
struct nsgtk_nav_menu {
GtkMenuItem *nav; /* Nav menu item on menubar */
GtkMenu *nav_menu;
- GtkImageMenuItem *back_menuitem;
- GtkImageMenuItem *forward_menuitem;
- GtkImageMenuItem *home_menuitem;
- GtkImageMenuItem *localhistory_menuitem;
- GtkImageMenuItem *globalhistory_menuitem;
- GtkImageMenuItem *addbookmarks_menuitem;
- GtkImageMenuItem *showbookmarks_menuitem;
- GtkImageMenuItem *openlocation_menuitem;
+ GtkWidget *back_menuitem;
+ GtkWidget *forward_menuitem;
+ GtkWidget *home_menuitem;
+ GtkWidget *localhistory_menuitem;
+ GtkWidget *globalhistory_menuitem;
+ GtkWidget *addbookmarks_menuitem;
+ GtkWidget *showbookmarks_menuitem;
+ GtkWidget *openlocation_menuitem;
};
struct nsgtk_tools_menu {
GtkMenuItem *tools; /* Tools menu item on menubar */
GtkMenu *tools_menu;
- GtkImageMenuItem *showcookies_menuitem;
- GtkImageMenuItem *downloads_menuitem;
- GtkImageMenuItem *developer_menuitem;
+ GtkWidget *showcookies_menuitem;
+ GtkWidget *downloads_menuitem;
+ GtkWidget *developer_menuitem;
struct nsgtk_developer_submenu *developer_submenu;
};
struct nsgtk_help_menu {
GtkMenuItem *help; /* Help menu item on menubar */
GtkMenu *help_menu;
- GtkImageMenuItem *contents_menuitem;
- GtkImageMenuItem *guide_menuitem;
- GtkImageMenuItem *info_menuitem;
- GtkImageMenuItem *about_menuitem;
+ GtkWidget *contents_menuitem;
+ GtkWidget *guide_menuitem;
+ GtkWidget *info_menuitem;
+ GtkWidget *about_menuitem;
};
struct nsgtk_export_submenu {
GtkMenu *export_menu;
- GtkImageMenuItem *plaintext_menuitem;
- GtkImageMenuItem *drawfile_menuitem;
- GtkImageMenuItem *postscript_menuitem;
- GtkImageMenuItem *pdf_menuitem;
+ GtkWidget *plaintext_menuitem;
+ GtkWidget *drawfile_menuitem;
+ GtkWidget *postscript_menuitem;
+ GtkWidget *pdf_menuitem;
};
struct nsgtk_scaleview_submenu {
GtkMenu *scaleview_menu;
- GtkImageMenuItem *zoomplus_menuitem;
- GtkImageMenuItem *zoomminus_menuitem;
- GtkImageMenuItem *zoomnormal_menuitem;
+ GtkWidget *zoomplus_menuitem;
+ GtkWidget *zoomminus_menuitem;
+ GtkWidget *zoomnormal_menuitem;
};
struct nsgtk_tabs_submenu {
GtkMenu *tabs_menu;
- GtkImageMenuItem *nexttab_menuitem;
- GtkImageMenuItem *prevtab_menuitem;
- GtkImageMenuItem *closetab_menuitem;
+ GtkWidget *nexttab_menuitem;
+ GtkWidget *prevtab_menuitem;
+ GtkWidget *closetab_menuitem;
};
struct nsgtk_images_submenu {
@@ -132,12 +132,12 @@ struct nsgtk_toolbars_submenu {
};
struct nsgtk_developer_submenu {
- GtkMenu *developer_menu;
+ GtkMenu *developer_menu;
- GtkImageMenuItem *viewsource_menuitem;
- GtkImageMenuItem *toggledebugging_menuitem;
- GtkImageMenuItem *debugboxtree_menuitem;
- GtkImageMenuItem *debugdomtree_menuitem;
+ GtkWidget *viewsource_menuitem;
+ GtkWidget *toggledebugging_menuitem;
+ GtkWidget *debugboxtree_menuitem;
+ GtkWidget *debugdomtree_menuitem;
};
@@ -155,55 +155,55 @@ struct nsgtk_bar_submenu {
struct nsgtk_popup_menu {
GtkMenu *popup_menu;
- GtkImageMenuItem *file_menuitem;
+ GtkWidget *file_menuitem;
struct nsgtk_file_menu *file_submenu;
- GtkImageMenuItem *edit_menuitem;
+ GtkWidget *edit_menuitem;
struct nsgtk_edit_menu *edit_submenu;
- GtkImageMenuItem *view_menuitem;
+ GtkWidget *view_menuitem;
struct nsgtk_view_menu *view_submenu;
- GtkImageMenuItem *nav_menuitem;
+ GtkWidget *nav_menuitem;
struct nsgtk_nav_menu *nav_submenu;
- GtkImageMenuItem *tabs_menuitem;
+ GtkWidget *tabs_menuitem;
struct nsgtk_tabs_submenu *tabs_submenu;
- GtkImageMenuItem *tools_menuitem;
+ GtkWidget *tools_menuitem;
struct nsgtk_tools_menu *tools_submenu;
- GtkImageMenuItem *help_menuitem;
+ GtkWidget *help_menuitem;
struct nsgtk_help_menu *help_submenu;
GtkWidget *first_separator;
/* navigation entries */
- GtkImageMenuItem *back_menuitem;
- GtkImageMenuItem *forward_menuitem;
+ GtkWidget *back_menuitem;
+ GtkWidget *forward_menuitem;
GtkWidget *third_separator;
/* view entries */
- GtkImageMenuItem *stop_menuitem;
- GtkImageMenuItem *reload_menuitem;
+ GtkWidget *stop_menuitem;
+ GtkWidget *reload_menuitem;
- GtkImageMenuItem *cut_menuitem;
- GtkImageMenuItem *copy_menuitem;
- GtkImageMenuItem *paste_menuitem;
- GtkImageMenuItem *customize_menuitem;
+ GtkWidget *cut_menuitem;
+ GtkWidget *copy_menuitem;
+ GtkWidget *paste_menuitem;
+ GtkWidget *customize_menuitem;
};
struct nsgtk_link_menu {
GtkMenu *link_menu;
- GtkImageMenuItem *opentab_menuitem;
- GtkImageMenuItem *openwin_menuitem;
+ GtkWidget *opentab_menuitem;
+ GtkWidget *openwin_menuitem;
- GtkImageMenuItem *save_menuitem;
- GtkImageMenuItem *bookmark_menuitem;
- GtkImageMenuItem *copy_menuitem;
+ GtkWidget *save_menuitem;
+ GtkWidget *bookmark_menuitem;
+ GtkWidget *copy_menuitem;
};
/**
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 2e51799..650eee1 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -1846,8 +1846,7 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
nsgtk_toolbar_##q##_toolbar_button_data
#define ITEM_POP(p, q) \
- g->buttons[p##_BUTTON]->popup = GTK_IMAGE_MENU_ITEM(\
- g->menu_popup->q##_menuitem)
+ g->buttons[p##_BUTTON]->popup = g->menu_popup->q##_menuitem
#define SENSITIVITY(q) \
g->buttons[q##_BUTTON]->sensitivity = false
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 887d658..730d4fc 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -101,16 +101,16 @@ struct gtk_search {
};
struct nsgtk_button_connect {
- GtkToolItem *button;
- int location; /* in toolbar */
- bool sensitivity;
- GtkImageMenuItem *main;
- GtkImageMenuItem *rclick;
- GtkImageMenuItem *popup;
- void *mhandler; /* menu item clicked */
- void *bhandler; /* button clicked */
- void *dataplus; /* customization -> toolbar */
- void *dataminus; /* customization -> store */
+ GtkToolItem *button;
+ int location; /* in toolbar */
+ bool sensitivity;
+ GtkWidget *main; /* left click menu entry */
+ GtkWidget *rclick; /* right click menu */
+ GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item clicked */
+ void *bhandler; /* button clicked */
+ void *dataplus; /* customization -> toolbar */
+ void *dataminus; /* customization -> store */
};
/**
diff --git a/gtk/theme.c b/gtk/theme.c
index 3a13640..4cd02d4 100644
--- a/gtk/theme.c
+++ b/gtk/theme.c
@@ -319,7 +319,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
/* gtk_image_menu_item_set_image accepts NULL image */
if ((button->main != NULL) &&
(theme[IMAGE_SET_MAIN_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->main,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->main),
GTK_WIDGET(
theme[IMAGE_SET_MAIN_MENU]->
image[i]));
@@ -327,7 +327,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
}
if ((button->rclick != NULL) &&
(theme[IMAGE_SET_RCLICK_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->rclick,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->rclick),
GTK_WIDGET(
theme[IMAGE_SET_RCLICK_MENU]->
image[i]));
@@ -335,7 +335,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
}
if ((button->popup != NULL) &&
(theme[IMAGE_SET_POPUP_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->popup,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->popup),
GTK_WIDGET(
theme[IMAGE_SET_POPUP_MENU]->
image[i]));
-----------------------------------------------------------------------
Summary of changes:
gtk/compat.c | 16 ++++++
gtk/compat.h | 24 +++++++++
gtk/menu.c | 35 ++++++++-----
gtk/menu.h | 148 ++++++++++++++++++++++++++---------------------------
gtk/scaffolding.c | 3 +-
gtk/scaffolding.h | 20 ++++----
gtk/theme.c | 6 +--
7 files changed, 151 insertions(+), 101 deletions(-)
diff --git a/gtk/compat.c b/gtk/compat.c
index c00e7b3..dc9864b 100644
--- a/gtk/compat.c
+++ b/gtk/compat.c
@@ -505,3 +505,19 @@ void nsgtk_scrolled_window_add_with_viewport(GtkScrolledWindow *window,
gtk_scrolled_window_add_with_viewport(window, child);
#endif
}
+
+GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label)
+{
+#if GTK_CHECK_VERSION(3,10,0)
+ return gtk_menu_item_new_with_mnemonic(label);
+#else
+ return gtk_image_menu_item_new_with_mnemonic(label);
+#endif
+}
+
+void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image)
+{
+#if !GTK_CHECK_VERSION(3,10,0)
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(image_menu_item), image);
+#endif
+}
diff --git a/gtk/compat.h b/gtk/compat.h
index a5fd33c..748f1b4 100644
--- a/gtk/compat.h
+++ b/gtk/compat.h
@@ -191,5 +191,29 @@ gdouble nsgtk_adjustment_get_upper(GtkAdjustment *adjustment);
gdouble nsgtk_adjustment_get_lower(GtkAdjustment *adjustment);
gdouble nsgtk_adjustment_get_page_increment(GtkAdjustment *adjustment);
+/* menu compatability */
+
+/**
+ * Creates a new GtkImageMenuItem containing a label.
+ *
+ * Compatability interface for original deprecated in GTK 3.10.
+ * @note post 3.10 this creates a GtkMenuItem.
+ *
+ * \param label The text of the button, with an underscore in front of
+ * the mnemonic character.
+ * \return a new GtkMenuItem
+ */
+GtkWidget *nsgtk_image_menu_item_new_with_mnemonic(const gchar *label);
+
+/**
+ * Sets the image of image_menu_item to the given widget.
+ *
+ * Compatability interface for original deprecated in GTK 3.10.
+ * @note post 3.10 this is empty as menu creation generates GtkMenuItem.
+ *
+ * \param image_menu_item The image menu entry item.
+ * \param image The image to set.
+ */
+void nsgtk_image_menu_item_set_image(GtkWidget *image_menu_item, GtkWidget *image);
#endif /* NETSURF_GTK_COMPAT_H */
diff --git a/gtk/menu.c b/gtk/menu.c
index 8b684d6..6052d14 100644
--- a/gtk/menu.c
+++ b/gtk/menu.c
@@ -21,35 +21,46 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include "gtk/menu.h"
#include "utils/messages.h"
#include "utils/utils.h"
+#include "gtk/compat.h"
+#include "gtk/menu.h"
+
/**
- * adds image menu item to specified menu
+ * Adds image menu item to a menu.
+ *
* \param menu the menu to add the item to
- * \param item a pointer to the item's location in the menu struct
+ * \param item_out a pointer to the item's location in the menu struct
* \param message the menu item I18n lookup value
* \param messageAccel the menu item accelerator I18n lookup value
* \param group the 'global' in a gtk sense accelerator group
+ * \return true if sucessful and \a item_out updated else false.
*/
static bool nsgtk_menu_add_image_item(GtkMenu *menu,
- GtkImageMenuItem **item, const char *message,
+ GtkWidget **item_out, const char *message,
const char *messageAccel, GtkAccelGroup *group)
{
unsigned int key;
GdkModifierType mod;
- *item = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(
- messages_get(message)));
- if (*item == NULL)
+ GtkWidget *item;
+
+ item = nsgtk_image_menu_item_new_with_mnemonic(messages_get(message));
+ if (item == NULL) {
return false;
+ }
+
gtk_accelerator_parse(messages_get(messageAccel), &key, &mod);
- if (key > 0)
- gtk_widget_add_accelerator(GTK_WIDGET(*item), "activate",
- group, key, mod, GTK_ACCEL_VISIBLE);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), GTK_WIDGET(*item));
- gtk_widget_show(GTK_WIDGET(*item));
+ if (key > 0) {
+ gtk_widget_add_accelerator(item, "activate", group, key, mod,
+ GTK_ACCEL_VISIBLE);
+ }
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ gtk_widget_show(item);
+
+ *item_out = item;
+
return true;
}
diff --git a/gtk/menu.h b/gtk/menu.h
index b14c0bb..5da5cb1 100644
--- a/gtk/menu.h
+++ b/gtk/menu.h
@@ -23,100 +23,100 @@
struct nsgtk_file_menu {
GtkMenuItem *file; /* File menu item on menubar */
GtkMenu *file_menu;
- GtkImageMenuItem *newwindow_menuitem;
- GtkImageMenuItem *newtab_menuitem;
- GtkImageMenuItem *openfile_menuitem;
- GtkImageMenuItem *closewindow_menuitem;
- GtkImageMenuItem *savepage_menuitem;
- GtkImageMenuItem *export_menuitem;
+ GtkWidget *newwindow_menuitem;
+ GtkWidget *newtab_menuitem;
+ GtkWidget *openfile_menuitem;
+ GtkWidget *closewindow_menuitem;
+ GtkWidget *savepage_menuitem;
+ GtkWidget *export_menuitem;
struct nsgtk_export_submenu *export_submenu;
- GtkImageMenuItem *printpreview_menuitem;
- GtkImageMenuItem *print_menuitem;
- GtkImageMenuItem *quit_menuitem;
+ GtkWidget *printpreview_menuitem;
+ GtkWidget *print_menuitem;
+ GtkWidget *quit_menuitem;
};
struct nsgtk_edit_menu {
GtkMenuItem *edit; /* Edit menu item on menubar */
GtkMenu *edit_menu;
- GtkImageMenuItem *cut_menuitem;
- GtkImageMenuItem *copy_menuitem;
- GtkImageMenuItem *paste_menuitem;
- GtkImageMenuItem *delete_menuitem;
- GtkImageMenuItem *selectall_menuitem;
- GtkImageMenuItem *find_menuitem;
- GtkImageMenuItem *preferences_menuitem;
+ GtkWidget *cut_menuitem;
+ GtkWidget *copy_menuitem;
+ GtkWidget *paste_menuitem;
+ GtkWidget *delete_menuitem;
+ GtkWidget *selectall_menuitem;
+ GtkWidget *find_menuitem;
+ GtkWidget *preferences_menuitem;
};
struct nsgtk_view_menu {
GtkMenuItem *view; /* View menu item on menubar */
GtkMenu *view_menu; /* gtk menu attached to menu item */
- GtkImageMenuItem *stop_menuitem;
- GtkImageMenuItem *reload_menuitem;
- GtkImageMenuItem *scaleview_menuitem;
+ GtkWidget *stop_menuitem;
+ GtkWidget *reload_menuitem;
+ GtkWidget *scaleview_menuitem;
struct nsgtk_scaleview_submenu *scaleview_submenu;
- GtkImageMenuItem *fullscreen_menuitem;
- GtkImageMenuItem *images_menuitem;
+ GtkWidget *fullscreen_menuitem;
+ GtkWidget *images_menuitem;
struct nsgtk_images_submenu *images_submenu;
- GtkImageMenuItem *toolbars_menuitem;
+ GtkWidget *toolbars_menuitem;
struct nsgtk_toolbars_submenu *toolbars_submenu;
- GtkImageMenuItem *tabs_menuitem;
+ GtkWidget *tabs_menuitem;
struct nsgtk_tabs_submenu *tabs_submenu;
- GtkImageMenuItem *savewindowsize_menuitem;
+ GtkWidget *savewindowsize_menuitem;
};
struct nsgtk_nav_menu {
GtkMenuItem *nav; /* Nav menu item on menubar */
GtkMenu *nav_menu;
- GtkImageMenuItem *back_menuitem;
- GtkImageMenuItem *forward_menuitem;
- GtkImageMenuItem *home_menuitem;
- GtkImageMenuItem *localhistory_menuitem;
- GtkImageMenuItem *globalhistory_menuitem;
- GtkImageMenuItem *addbookmarks_menuitem;
- GtkImageMenuItem *showbookmarks_menuitem;
- GtkImageMenuItem *openlocation_menuitem;
+ GtkWidget *back_menuitem;
+ GtkWidget *forward_menuitem;
+ GtkWidget *home_menuitem;
+ GtkWidget *localhistory_menuitem;
+ GtkWidget *globalhistory_menuitem;
+ GtkWidget *addbookmarks_menuitem;
+ GtkWidget *showbookmarks_menuitem;
+ GtkWidget *openlocation_menuitem;
};
struct nsgtk_tools_menu {
GtkMenuItem *tools; /* Tools menu item on menubar */
GtkMenu *tools_menu;
- GtkImageMenuItem *showcookies_menuitem;
- GtkImageMenuItem *downloads_menuitem;
- GtkImageMenuItem *developer_menuitem;
+ GtkWidget *showcookies_menuitem;
+ GtkWidget *downloads_menuitem;
+ GtkWidget *developer_menuitem;
struct nsgtk_developer_submenu *developer_submenu;
};
struct nsgtk_help_menu {
GtkMenuItem *help; /* Help menu item on menubar */
GtkMenu *help_menu;
- GtkImageMenuItem *contents_menuitem;
- GtkImageMenuItem *guide_menuitem;
- GtkImageMenuItem *info_menuitem;
- GtkImageMenuItem *about_menuitem;
+ GtkWidget *contents_menuitem;
+ GtkWidget *guide_menuitem;
+ GtkWidget *info_menuitem;
+ GtkWidget *about_menuitem;
};
struct nsgtk_export_submenu {
GtkMenu *export_menu;
- GtkImageMenuItem *plaintext_menuitem;
- GtkImageMenuItem *drawfile_menuitem;
- GtkImageMenuItem *postscript_menuitem;
- GtkImageMenuItem *pdf_menuitem;
+ GtkWidget *plaintext_menuitem;
+ GtkWidget *drawfile_menuitem;
+ GtkWidget *postscript_menuitem;
+ GtkWidget *pdf_menuitem;
};
struct nsgtk_scaleview_submenu {
GtkMenu *scaleview_menu;
- GtkImageMenuItem *zoomplus_menuitem;
- GtkImageMenuItem *zoomminus_menuitem;
- GtkImageMenuItem *zoomnormal_menuitem;
+ GtkWidget *zoomplus_menuitem;
+ GtkWidget *zoomminus_menuitem;
+ GtkWidget *zoomnormal_menuitem;
};
struct nsgtk_tabs_submenu {
GtkMenu *tabs_menu;
- GtkImageMenuItem *nexttab_menuitem;
- GtkImageMenuItem *prevtab_menuitem;
- GtkImageMenuItem *closetab_menuitem;
+ GtkWidget *nexttab_menuitem;
+ GtkWidget *prevtab_menuitem;
+ GtkWidget *closetab_menuitem;
};
struct nsgtk_images_submenu {
@@ -132,12 +132,12 @@ struct nsgtk_toolbars_submenu {
};
struct nsgtk_developer_submenu {
- GtkMenu *developer_menu;
+ GtkMenu *developer_menu;
- GtkImageMenuItem *viewsource_menuitem;
- GtkImageMenuItem *toggledebugging_menuitem;
- GtkImageMenuItem *debugboxtree_menuitem;
- GtkImageMenuItem *debugdomtree_menuitem;
+ GtkWidget *viewsource_menuitem;
+ GtkWidget *toggledebugging_menuitem;
+ GtkWidget *debugboxtree_menuitem;
+ GtkWidget *debugdomtree_menuitem;
};
@@ -155,55 +155,55 @@ struct nsgtk_bar_submenu {
struct nsgtk_popup_menu {
GtkMenu *popup_menu;
- GtkImageMenuItem *file_menuitem;
+ GtkWidget *file_menuitem;
struct nsgtk_file_menu *file_submenu;
- GtkImageMenuItem *edit_menuitem;
+ GtkWidget *edit_menuitem;
struct nsgtk_edit_menu *edit_submenu;
- GtkImageMenuItem *view_menuitem;
+ GtkWidget *view_menuitem;
struct nsgtk_view_menu *view_submenu;
- GtkImageMenuItem *nav_menuitem;
+ GtkWidget *nav_menuitem;
struct nsgtk_nav_menu *nav_submenu;
- GtkImageMenuItem *tabs_menuitem;
+ GtkWidget *tabs_menuitem;
struct nsgtk_tabs_submenu *tabs_submenu;
- GtkImageMenuItem *tools_menuitem;
+ GtkWidget *tools_menuitem;
struct nsgtk_tools_menu *tools_submenu;
- GtkImageMenuItem *help_menuitem;
+ GtkWidget *help_menuitem;
struct nsgtk_help_menu *help_submenu;
GtkWidget *first_separator;
/* navigation entries */
- GtkImageMenuItem *back_menuitem;
- GtkImageMenuItem *forward_menuitem;
+ GtkWidget *back_menuitem;
+ GtkWidget *forward_menuitem;
GtkWidget *third_separator;
/* view entries */
- GtkImageMenuItem *stop_menuitem;
- GtkImageMenuItem *reload_menuitem;
+ GtkWidget *stop_menuitem;
+ GtkWidget *reload_menuitem;
- GtkImageMenuItem *cut_menuitem;
- GtkImageMenuItem *copy_menuitem;
- GtkImageMenuItem *paste_menuitem;
- GtkImageMenuItem *customize_menuitem;
+ GtkWidget *cut_menuitem;
+ GtkWidget *copy_menuitem;
+ GtkWidget *paste_menuitem;
+ GtkWidget *customize_menuitem;
};
struct nsgtk_link_menu {
GtkMenu *link_menu;
- GtkImageMenuItem *opentab_menuitem;
- GtkImageMenuItem *openwin_menuitem;
+ GtkWidget *opentab_menuitem;
+ GtkWidget *openwin_menuitem;
- GtkImageMenuItem *save_menuitem;
- GtkImageMenuItem *bookmark_menuitem;
- GtkImageMenuItem *copy_menuitem;
+ GtkWidget *save_menuitem;
+ GtkWidget *bookmark_menuitem;
+ GtkWidget *copy_menuitem;
};
/**
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 2e51799..650eee1 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -1846,8 +1846,7 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
nsgtk_toolbar_##q##_toolbar_button_data
#define ITEM_POP(p, q) \
- g->buttons[p##_BUTTON]->popup = GTK_IMAGE_MENU_ITEM(\
- g->menu_popup->q##_menuitem)
+ g->buttons[p##_BUTTON]->popup = g->menu_popup->q##_menuitem
#define SENSITIVITY(q) \
g->buttons[q##_BUTTON]->sensitivity = false
diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h
index 887d658..730d4fc 100644
--- a/gtk/scaffolding.h
+++ b/gtk/scaffolding.h
@@ -101,16 +101,16 @@ struct gtk_search {
};
struct nsgtk_button_connect {
- GtkToolItem *button;
- int location; /* in toolbar */
- bool sensitivity;
- GtkImageMenuItem *main;
- GtkImageMenuItem *rclick;
- GtkImageMenuItem *popup;
- void *mhandler; /* menu item clicked */
- void *bhandler; /* button clicked */
- void *dataplus; /* customization -> toolbar */
- void *dataminus; /* customization -> store */
+ GtkToolItem *button;
+ int location; /* in toolbar */
+ bool sensitivity;
+ GtkWidget *main; /* left click menu entry */
+ GtkWidget *rclick; /* right click menu */
+ GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item clicked */
+ void *bhandler; /* button clicked */
+ void *dataplus; /* customization -> toolbar */
+ void *dataminus; /* customization -> store */
};
/**
diff --git a/gtk/theme.c b/gtk/theme.c
index 3a13640..4cd02d4 100644
--- a/gtk/theme.c
+++ b/gtk/theme.c
@@ -319,7 +319,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
/* gtk_image_menu_item_set_image accepts NULL image */
if ((button->main != NULL) &&
(theme[IMAGE_SET_MAIN_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->main,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->main),
GTK_WIDGET(
theme[IMAGE_SET_MAIN_MENU]->
image[i]));
@@ -327,7 +327,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
}
if ((button->rclick != NULL) &&
(theme[IMAGE_SET_RCLICK_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->rclick,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->rclick),
GTK_WIDGET(
theme[IMAGE_SET_RCLICK_MENU]->
image[i]));
@@ -335,7 +335,7 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
}
if ((button->popup != NULL) &&
(theme[IMAGE_SET_POPUP_MENU] != NULL)) {
- gtk_image_menu_item_set_image(button->popup,
+ nsgtk_image_menu_item_set_image(GTK_WIDGET(button->popup),
GTK_WIDGET(
theme[IMAGE_SET_POPUP_MENU]->
image[i]));
--
NetSurf Browser
7 years, 11 months