From cd7df218e1f2798b4ac8e193558a67e6ad59e3ed Mon Sep 17 00:00:00 2001 From: John Darrington Date: Mon, 10 May 2010 18:50:38 +0200 Subject: [PATCH] Refactor the Help menu. Instead of writing a help menu for each of the three main windows, implement it once, and merge it into the menubars using GtkUIManager --- src/ui/gui/automake.mk | 4 +- src/ui/gui/data-editor.ui | 22 --------- src/ui/gui/{about.c => help-menu.c} | 69 +++++++++++++++++++++++++++-- src/ui/gui/{about.h => help-menu.h} | 7 ++- src/ui/gui/helper.c | 19 -------- src/ui/gui/helper.h | 2 - src/ui/gui/output-viewer.glade | 27 +---------- src/ui/gui/psppire-data-window.c | 25 +++-------- src/ui/gui/psppire-output-window.c | 15 ++----- src/ui/gui/psppire-syntax-window.c | 23 +++------- src/ui/gui/syntax-editor.glade | 28 +----------- 11 files changed, 90 insertions(+), 151 deletions(-) rename src/ui/gui/{about.c => help-menu.c} (58%) rename src/ui/gui/{about.h => help-menu.h} (89%) diff --git a/src/ui/gui/automake.mk b/src/ui/gui/automake.mk index 52e77134..48154d6d 100644 --- a/src/ui/gui/automake.mk +++ b/src/ui/gui/automake.mk @@ -116,8 +116,6 @@ src_ui_gui_psppire_SOURCES = \ src/ui/gui/psppire-hbuttonbox.c \ src/ui/gui/psppire-vbuttonbox.c \ src/ui/gui/psppire-acr.c \ - src/ui/gui/about.c \ - src/ui/gui/about.h \ src/ui/gui/checkbox-treeview.c \ src/ui/gui/checkbox-treeview.h \ src/ui/gui/comments-dialog.c \ @@ -149,6 +147,8 @@ src_ui_gui_psppire_SOURCES = \ src/ui/gui/goto-case-dialog.c \ src/ui/gui/goto-case-dialog.h \ src/ui/gui/helper.c \ + src/ui/gui/help-menu.c \ + src/ui/gui/help-menu.h \ src/ui/gui/helper.h \ src/ui/gui/main.c \ src/ui/gui/missing-val-dialog.c \ diff --git a/src/ui/gui/data-editor.ui b/src/ui/gui/data-editor.ui index 8ae12eff..e05f4ffd 100644 --- a/src/ui/gui/data-editor.ui +++ b/src/ui/gui/data-editor.ui @@ -456,24 +456,6 @@ _Split - - - help - _Help - - - - - help_reference - _Reference Manual - - - - - gtk-about - help_about - - @@ -570,10 +552,6 @@ - - - - diff --git a/src/ui/gui/about.c b/src/ui/gui/help-menu.c similarity index 58% rename from src/ui/gui/about.c rename to src/ui/gui/help-menu.c index 5b606bf5..c24125d7 100644 --- a/src/ui/gui/about.c +++ b/src/ui/gui/help-menu.c @@ -21,10 +21,11 @@ #include #include -#include "about.h" -#include "helper.h" +#include "help-menu.h" +#include #include "gl/configmake.h" +#include "gl/relocatable.h" #include #define _(msgid) gettext (msgid) @@ -33,7 +34,7 @@ static const gchar *artists[] = { "Patrick Brunier", "Dondi Bogusky", NULL}; -void +static void about_new (GtkMenuItem *m, GtkWindow *parent) { GtkWidget *about = gtk_about_dialog_new (); @@ -85,3 +86,65 @@ about_new (GtkMenuItem *m, GtkWindow *parent) gtk_widget_hide (about); } + +static void +reference_manual (GtkMenuItem *menu, gpointer data) +{ + GError *err = NULL; + gchar *cmd = g_strdup_printf ("yelp file://%s", relocate (DOCDIR "/pspp.xml")); + + if ( ! g_spawn_command_line_async (cmd, &err) ) + { + msg (ME, _("Cannot open reference manual: %s. The PSPP user manual is " + "also available at " + "http://www.gnu.org/software/pspp/documentation.html"), + err->message); + } + + g_free (cmd); + g_clear_error (&err); +} + +void +merge_help_menu (GtkUIManager *uim) +{ + GtkActionGroup *action_group = gtk_action_group_new ("help"); + + static const GtkActionEntry entries[] = + { + { + "help", NULL, /* name, stock id */ + N_("_Help"), NULL, /* label, accelerator */ + NULL, + NULL, + }, + + { + "help_reference", GTK_STOCK_HELP, /* name, stock id */ + N_("_Reference Manual"), NULL, /* label, accelerator */ + NULL, /* tooltip */ + G_CALLBACK (reference_manual) + }, + + { + "help_about", GTK_STOCK_ABOUT, + NULL, NULL, NULL, + G_CALLBACK (about_new) + }, + }; + + gtk_action_group_set_translation_domain (action_group, PACKAGE); + + gtk_ui_manager_add_ui_from_string (uim, "\ + \ + \ + \ + \ + \ + \ + ", -1, 0); + + gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), NULL); + + gtk_ui_manager_insert_action_group (uim, action_group, 0); +} diff --git a/src/ui/gui/about.h b/src/ui/gui/help-menu.h similarity index 89% rename from src/ui/gui/about.h rename to src/ui/gui/help-menu.h index 16956488..ff3740fb 100644 --- a/src/ui/gui/about.h +++ b/src/ui/gui/help-menu.h @@ -14,7 +14,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#ifndef HELP_MENU_H +#define HELP_MENU_H + #include -void about_new (GtkMenuItem *m, GtkWindow *parent); +void merge_help_menu (GtkUIManager *uim); + +#endif diff --git a/src/ui/gui/helper.c b/src/ui/gui/helper.c index 3be39813..e25342ed 100644 --- a/src/ui/gui/helper.c +++ b/src/ui/gui/helper.c @@ -230,25 +230,6 @@ connect_help (GtkBuilder *xml) } -void -reference_manual (GtkMenuItem *menu, gpointer data) -{ - GError *err = NULL; - gchar *cmd = g_strdup_printf ("yelp file://%s", relocate (DOCDIR "/pspp.xml")); - - if ( ! g_spawn_command_line_async (cmd, &err) ) - { - msg (ME, _("Cannot open reference manual: %s. The PSPP user manual is " - "also available at " - "http://www.gnu.org/software/pspp/documentation.html"), - err->message); - } - - g_free (cmd); - g_clear_error (&err); -} - - /* Create a deep copy of SRC */ GtkListStore * clone_list_store (const GtkListStore *src) diff --git a/src/ui/gui/helper.h b/src/ui/gui/helper.h index 671bb8ed..ec142c8e 100644 --- a/src/ui/gui/helper.h +++ b/src/ui/gui/helper.h @@ -54,8 +54,6 @@ gchar * convert_glib_filename_to_system_filename (const gchar *fname, void connect_help (GtkBuilder *); -void reference_manual (GtkMenuItem *, gpointer); - #define builder_new(NAME) builder_new_real (relocate (PKGDATADIR "/" NAME)) GtkBuilder *builder_new_real (const gchar *name); diff --git a/src/ui/gui/output-viewer.glade b/src/ui/gui/output-viewer.glade index dfc2663f..76770e9f 100644 --- a/src/ui/gui/output-viewer.glade +++ b/src/ui/gui/output-viewer.glade @@ -11,7 +11,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -81,31 +81,6 @@ - - - True - _Help - True - - - - - True - _Reference Manual - True - - - - - True - _About - True - - - - - - False diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index c655ece6..2968892d 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -24,7 +24,7 @@ #include "data/procedure.h" #include "language/syntax-string-source.h" #include "libpspp/message.h" -#include "ui/gui/about.h" +#include "ui/gui/help-menu.h" #include "ui/gui/comments-dialog.h" #include "ui/gui/compute-dialog.h" #include "ui/gui/correlation-dialog.h" @@ -1443,27 +1443,12 @@ psppire_data_window_init (PsppireDataWindow *de) } - g_signal_connect (get_action_assert (de->builder,"file_new_syntax"), - "activate", - G_CALLBACK (create_syntax_window), - NULL); - - - { - GtkAction *abt = get_action_assert (de->builder, "help_about"); - - g_signal_connect (abt, + g_signal_connect (get_action_assert (de->builder,"file_new_syntax"), "activate", - G_CALLBACK (about_new), - de); - } + G_CALLBACK (create_syntax_window), + NULL); - g_signal_connect (get_action_assert (de->builder,"help_reference"), - "activate", - G_CALLBACK (reference_manual), - de); - g_signal_connect (de->data_editor, "cases-selected", @@ -1540,6 +1525,8 @@ psppire_data_window_init (PsppireDataWindow *de) { GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER)); + merge_help_menu (uim); + PSPPIRE_WINDOW (de)->menu = GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows/windows_minimise_all")->parent); } diff --git a/src/ui/gui/psppire-output-window.c b/src/ui/gui/psppire-output-window.c index 3003fba8..f78b8855 100644 --- a/src/ui/gui/psppire-output-window.c +++ b/src/ui/gui/psppire-output-window.c @@ -32,7 +32,7 @@ #include #include -#include "about.h" +#include "help-menu.h" #include "psppire-output-window.h" @@ -553,16 +553,6 @@ psppire_output_window_init (PsppireOutputWindow *window) G_CALLBACK (cancel_urgency), NULL); - g_signal_connect (get_action_assert (xml,"help_about"), - "activate", - G_CALLBACK (about_new), - window); - - g_signal_connect (get_action_assert (xml,"help_reference"), - "activate", - G_CALLBACK (reference_manual), - NULL); - g_signal_connect (get_action_assert (xml,"windows_minimise-all"), "activate", G_CALLBACK (psppire_window_minimise_all), @@ -570,9 +560,10 @@ psppire_output_window_init (PsppireOutputWindow *window) { GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER)); + merge_help_menu (uim); PSPPIRE_WINDOW (window)->menu = - GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar1/windows_menuitem/windows_minimise-all")->parent); + GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows_menuitem/windows_minimise-all")->parent); } g_signal_connect_swapped (get_action_assert (xml, "file_export"), "activate", diff --git a/src/ui/gui/psppire-syntax-window.c b/src/ui/gui/psppire-syntax-window.c index f9fe53cc..3541a165 100644 --- a/src/ui/gui/psppire-syntax-window.c +++ b/src/ui/gui/psppire-syntax-window.c @@ -30,7 +30,7 @@ #include "psppire-data-window.h" #include "psppire-window-register.h" #include "psppire.h" -#include "about.h" +#include "help-menu.h" #include "psppire-syntax-window.h" #include "syntax-editor-source.h" #include @@ -392,7 +392,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) GtkBuilder *xml = builder_new ("syntax-editor.ui"); GtkWidget *box = gtk_vbox_new (FALSE, 0); - GtkWidget *menubar = get_widget_assert (xml, "menubar2"); + GtkWidget *menubar = get_widget_assert (xml, "menubar"); GtkWidget *sw = get_widget_assert (xml, "scrolledwindow8"); @@ -437,21 +437,6 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) window); #endif - { - GtkAction *abt = get_action_assert (xml, "help_about"); - g_object_set (abt, "stock-id", "gtk-about", NULL); - - g_signal_connect (abt, - "activate", - G_CALLBACK (about_new), - window); - } - - g_signal_connect (get_action_assert (xml,"help_reference"), - "activate", - G_CALLBACK (reference_manual), - NULL); - g_signal_connect_swapped (get_action_assert (xml, "file_save"), "activate", G_CALLBACK (syntax_save), @@ -496,8 +481,10 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) { GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER)); + merge_help_menu (uim); + PSPPIRE_WINDOW (window)->menu = - GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar2/windows/windows_minimise_all")->parent); + GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows/windows_minimise_all")->parent); } g_object_unref (xml); diff --git a/src/ui/gui/syntax-editor.glade b/src/ui/gui/syntax-editor.glade index 8f565e12..ae43ea5b 100644 --- a/src/ui/gui/syntax-editor.glade +++ b/src/ui/gui/syntax-editor.glade @@ -3,7 +3,7 @@ - + True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR @@ -223,32 +223,6 @@ - - - True - _Help - True - - - - - - True - _Reference Manual - True - - - - - True - _About - True - - - - - - -- 2.30.2