From 552de6c75e37f45c0a9ff08cf3f4191bbc56ca24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Enrico=20Tr=C3=83=C2=B6ger?= <enrico@xfce.org>
Date: Sun, 30 Mar 2008 15:51:03 +0000
Subject: [PATCH] Add file menu to make preferences dialog accessable when run
 as stand-alone application.

(Old svn revision: 4488)
---
 ChangeLog                        |  2 ++
 lib/common.h                     |  2 ++
 lib/gui.c                        | 44 ++++++++++++++++++++++++++++++--
 panel-plugin/xfce4-dict-plugin.c |  4 +++
 src/xfce4-dict.c                 | 12 +++++++++
 5 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2d59cf9..ce12b13 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
 	* Redesign preferences dialog: use a GtkNotebook and use a XfceDialog.
 	* Update POTFILES.in.
 	* Remove debug messages.
+	* Add file menu to make preferences dialog accessable when run as
+	  stand-alone application.
 
 
 2008-03-27  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
diff --git a/lib/common.h b/lib/common.h
index fce2ea2..84cc47f 100644
--- a/lib/common.h
+++ b/lib/common.h
@@ -61,6 +61,8 @@ typedef struct
 	GtkWidget *window;
 	GtkWidget *statusbar;
 	GtkWidget *close_button;
+	GtkWidget *close_menu_item;
+	GtkWidget *pref_menu_item;
 	GtkWidget *main_entry;
 	GtkWidget *panel_entry;
 	GtkWidget *main_textview;
diff --git a/lib/gui.c b/lib/gui.c
index c197a43..ccb6e9a 100644
--- a/lib/gui.c
+++ b/lib/gui.c
@@ -130,6 +130,43 @@ const guint8 *dict_get_icon_data(void)
 }
 
 
+static GtkWidget *create_file_menu(DictData *dd)
+{
+	GtkWidget *menubar, *file, *file_menu, *help, *help_menu, *menu_item;
+
+	menubar = gtk_menu_bar_new();
+
+	file = gtk_menu_item_new_with_mnemonic(_("_File"));
+
+	file_menu = gtk_menu_new();
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), file_menu);
+
+	dd->pref_menu_item = gtk_image_menu_item_new_from_stock("gtk-preferences", NULL);
+	gtk_container_add(GTK_CONTAINER(file_menu), dd->pref_menu_item);
+
+	gtk_container_add(GTK_CONTAINER(file_menu), gtk_separator_menu_item_new());
+
+	dd->close_menu_item = gtk_image_menu_item_new_from_stock((dd->is_plugin) ? "gtk-close" : "gtk-quit", NULL);
+	gtk_container_add(GTK_CONTAINER(file_menu), dd->close_menu_item);
+
+	help = gtk_menu_item_new_with_mnemonic(_("_Help"));
+
+	help_menu = gtk_menu_new();
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), help_menu);
+
+	menu_item = gtk_image_menu_item_new_from_stock("gtk-about", NULL);
+	gtk_container_add(GTK_CONTAINER(help_menu), menu_item);
+	g_signal_connect(menu_item, "activate", G_CALLBACK(dict_about_dialog), dd);
+
+	gtk_container_add(GTK_CONTAINER(menubar), file);
+	gtk_container_add(GTK_CONTAINER(menubar), help);
+
+	gtk_widget_show_all(menubar);
+
+	return menubar;
+}
+
+
 void dict_create_main_window(DictData *dd)
 {
 	GtkWidget *main_box;
@@ -150,6 +187,8 @@ void dict_create_main_window(DictData *dd)
 	gtk_widget_show(main_box);
 	gtk_container_add(GTK_CONTAINER(dd->window), main_box);
 
+	gtk_box_pack_start(GTK_BOX(main_box), create_file_menu(dd), FALSE, TRUE, 0);
+
 	/* entry box (label, entry, buttons) */
 	entry_box = gtk_hbox_new(FALSE, 10);
 	gtk_widget_show(entry_box);
@@ -192,7 +231,7 @@ void dict_create_main_window(DictData *dd)
 	gtk_container_add(GTK_CONTAINER(align), gtk_label_new(""));
 	gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 0);
 
-	dd->close_button = gtk_button_new_from_stock("gtk-close");
+	dd->close_button = gtk_button_new_from_stock((dd->is_plugin) ? "gtk-close" : "gtk-quit");
 	gtk_widget_show(dd->close_button);
 	gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 2);
 
@@ -271,7 +310,8 @@ void dict_about_dialog(GtkWidget *widget, DictData *dd)
 	xfce_about_info_add_credit(info, "Enrico Tröger", "enrico(dot)troeger(at)uvena(dot)de", _("Developer"));
 	xfce_about_info_set_homepage(info, "http://goodies.xfce.org");
 
-	dialog = xfce_about_dialog_new_with_values(GTK_WINDOW(widget), info, dd->icon);
+	dialog = xfce_about_dialog_new_with_values(
+		GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), info, dd->icon);
 	g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
 	gtk_window_set_title(GTK_WINDOW(dialog), "Xfce Dictionary");
 	gtk_dialog_run(GTK_DIALOG(dialog));
diff --git a/panel-plugin/xfce4-dict-plugin.c b/panel-plugin/xfce4-dict-plugin.c
index 43f94f9..db52d38 100644
--- a/panel-plugin/xfce4-dict-plugin.c
+++ b/panel-plugin/xfce4-dict-plugin.c
@@ -358,6 +358,10 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin)
 	xfce_panel_plugin_menu_show_configure(plugin);
 	xfce_panel_plugin_menu_show_about(plugin);
 
+	/* file menu */
+	g_signal_connect(dpd->dd->close_menu_item, "activate", G_CALLBACK(dict_plugin_close_button_clicked), dpd);
+	g_signal_connect(dpd->dd->pref_menu_item, "activate", G_CALLBACK(dict_plugin_properties_dialog), dpd);
+
 	/* panel entry */
 	dpd->dd->panel_entry = gtk_entry_new();
 	gtk_entry_set_width_chars(GTK_ENTRY(dpd->dd->panel_entry), 15);
diff --git a/src/xfce4-dict.c b/src/xfce4-dict.c
index a45133d..b0b64d5 100644
--- a/src/xfce4-dict.c
+++ b/src/xfce4-dict.c
@@ -55,6 +55,15 @@ static void close_button_clicked(GtkWidget *button, DictData *dd)
 }
 
 
+void pref_dialog_activated(GtkMenuItem *menuitem, DictData *dd)
+{
+	GtkWidget *dlg;
+
+	dlg = dict_prefs_dialog_show(gtk_widget_get_toplevel(GTK_WIDGET(menuitem)), dd);
+	gtk_widget_show(dlg);
+}
+
+
 gint main(gint argc, gchar *argv[])
 {
 	DictData *dd;
@@ -83,6 +92,9 @@ gint main(gint argc, gchar *argv[])
 
 	g_signal_connect(dd->window, "delete-event", G_CALLBACK(main_quit), dd);
 	g_signal_connect(dd->close_button, "clicked", G_CALLBACK(close_button_clicked), dd);
+	/* file menu */
+	g_signal_connect(dd->close_menu_item, "activate", G_CALLBACK(close_button_clicked), dd);
+	g_signal_connect(dd->pref_menu_item, "activate", G_CALLBACK(pref_dialog_activated), dd);
 
 	dict_status_add(dd, _("Ready."));
 
-- 
GitLab