summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/compat.c16
-rw-r--r--gtk/compat.h24
-rw-r--r--gtk/menu.c35
-rw-r--r--gtk/menu.h148
-rw-r--r--gtk/scaffolding.c3
-rw-r--r--gtk/scaffolding.h20
-rw-r--r--gtk/theme.c6
7 files changed, 151 insertions, 101 deletions
diff --git a/gtk/compat.c b/gtk/compat.c
index c00e7b3fe..dc9864bb9 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 a5fd33ce8..748f1b4e4 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 8b684d6c6..6052d140b 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 b14c0bb82..5da5cb1b2 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 2e51799fc..650eee1cc 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 887d6587a..730d4fc89 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 3a13640b6..4cd02d478 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]));