This patch enable owl menu, which is hidden in the title bar to save space on
small screen. It has not been used for a long time, rebase needed.

Upstream-Status: Inappropriate [enable feature]

Index: src/gtk.c
===================================================================
--- src/gtk.c	(revision 22)
+++ src/gtk.c	(working copy)
@@ -28,6 +28,8 @@
 #include <gdk/gdkx.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 
+#include <libowl/owlwindowmenu.h>
+
 #include <librsvg/rsvg.h>
 
 #include <X11/Xlib.h>
@@ -1237,6 +1239,7 @@
     }
 }
 
+#if 0
 static void
 add_widget (GtkUIManager *merge,
 	    GtkWidget *widget,
@@ -1247,10 +1250,11 @@
     gtk_box_pack_start (box, widget, FALSE, FALSE, 0);
 
     toplevel = gtk_widget_get_toplevel (GTK_WIDGET (box));
-    gtk_widget_show_all (toplevel);
 }
+#endif
 
 static GtkActionEntry toplevel_actions[] = {
+    { "Top", NULL, "" },
     { "Game", NULL, N_("Game") },
     { "Settings", NULL, N_("Settings") },
     { "Help", NULL, N_("Help") },
@@ -1303,11 +1307,13 @@
 			frontend *fe)
 {
     GString *xml;
+    GError *error = NULL;
     gboolean presets = FALSE;
     GSList *radio_group = NULL;
     int i;
 
-    xml = g_string_new ("<ui><menubar><placeholder name=\"TypePlaceholder\">"
+    xml = g_string_new ("<ui><menubar><menu name=\"TopMenu\" action=\"Top\">"
+			"<placeholder name=\"TypePlaceholder\">"
 			"<menu name=\"SettingsMenu\" action=\"Settings\">");
 
     for (i = 0; i < midend_num_presets(fe->me); i++) {
@@ -1359,8 +1365,14 @@
 			 "<menuitem name=\"CustomMenu\" action=\"Custom\"/>");
     }
     
-    g_string_append (xml, "</menu></placeholder></menubar></ui>");
-    gtk_ui_manager_add_ui_from_string (merge, xml->str, -1, NULL);
+    g_string_append (xml, "</menu></placeholder></menu></menubar></ui>");
+
+    gtk_ui_manager_add_ui_from_string (merge, xml->str, -1, &error);
+    if (error != NULL) {
+	g_warning ("Error adding custom: %s", error->message);
+	g_error_free (error);
+    }
+
     g_string_free (xml, TRUE);
 }
 
@@ -1434,6 +1446,7 @@
 new_window(char *arg, char **error)
 {
     frontend *fe;
+    GError *err = NULL;
     GtkBox *vbox;
     GtkUIManager *merge;
     GtkActionGroup *actions;
@@ -1496,8 +1509,6 @@
     gtk_window_add_accel_group(GTK_WINDOW(fe->window), fe->accelgroup);
 
     merge = gtk_ui_manager_new ();
-    g_signal_connect (G_OBJECT (merge), "add_widget",
-		      G_CALLBACK (add_widget), vbox);
 
     actions = gtk_action_group_new ("PuzzleActions");
     gtk_action_group_add_actions (actions, toplevel_actions,
@@ -1509,22 +1520,39 @@
 
     gtk_ui_manager_insert_action_group (merge, actions, 0);
     
-    gtk_ui_manager_add_ui_from_file (merge, DATADIR "/oh-puzzles/ui/menu.xml", NULL);
+    gtk_ui_manager_add_ui_from_file (merge, DATADIR "/oh-puzzles/ui/menu.xml", 
+				     &err);
+    if (err != NULL) {
+	g_warning ("Error making UI: %s", err->message);
+	g_error_free (err);
+	err = NULL;
+    }
 
     if (thegame.can_solve) {
-	    char *str = "<ui><menubar><menu name=\"GameMenu\" action=\"Game\">"
+	char *str = "<ui><menubar><menu name=\"TopMenu\" action=\"Top\">"
+	    "<menu name=\"GameMenu\" action=\"Game\">"
 	    "<placeholder name=\"SolvePlaceholder\">"
 	    "<separator name=\"SolveSep\"/>"
 	    "<menuitem name=\"SolveMenu\" action=\"Solve\"/>"
-	    "</placeholder></menu></menubar></ui>";
+	    "</placeholder></menu></menu></menubar></ui>";
 
-	gtk_ui_manager_add_ui_from_string (merge, str, -1, NULL);
+	gtk_ui_manager_add_ui_from_string (merge, str, -1, &err);
+	if (err != NULL) {
+	    g_warning ("Error adding solve. %s", err->message);
+	    g_error_free (err);
+	}
     }
 
     if ((n = midend_num_presets(fe->me)) > 0 || thegame.can_configure) {
 	generate_settings_menu (merge, actions, fe);
     }
 
+    /* Do this so that the menu is packed now instead of in the idle loop */
+    gtk_ui_manager_ensure_update (merge);
+
+    owl_set_window_menu_item (GTK_WINDOW (fe->window),
+			      GTK_MENU_ITEM (gtk_ui_manager_get_widget (merge, "/menubar/TopMenu")));
+    
     setup_colours (fe);
     setup_pixbufs (fe);
 
@@ -1572,7 +1600,7 @@
                           GDK_BUTTON_RELEASE_MASK |
 			  GDK_BUTTON_MOTION_MASK);
 
-    /* The window is shown once the menubar has been added */
+    gtk_widget_show_all (fe->window);
     return fe;
 }
 
Index: src/menu.xml
===================================================================
--- src/menu.xml	(revision 22)
+++ src/menu.xml	(working copy)
@@ -1,26 +1,25 @@
 <ui>
 <menubar>
-<menu name="GameMenu" action="Game">
-	<menuitem name="NewMenu" action="New"/>
-	<menuitem name="RestartMenu" action="Restart"/>
-<!--	<menuitem name="SpecificMenu" action="Specific"/> -->
-	<menuitem name="RandomMenu" action="Random"/>
-	<separator name="GameSep1"/>
-	<menuitem name="LoadMenu" action="Load"/>
-	<menuitem name="SaveMenu" action="Save"/>
-	<separator name="GameSep2"/>
-	<menuitem name="UndoMenu" action="Undo"/>
-	<menuitem name="RedoMenu" action="Redo"/>
-	<placeholder name="CopyPlaceholder"/>
-	<placeholder name="SolvePlaceholder"/>
-	<separator name="GameSep3"/>
-	<menuitem name="QuitMenu" action="Quit"/>
-</menu>
+<menu name="TopMenu" action="Top">
+	<menu name="GameMenu" action="Game">
+		<menuitem name="NewMenu" action="New"/>
+		<menuitem name="RestartMenu" action="Restart"/>
+	<!--	<menuitem name="SpecificMenu" action="Specific"/> -->
+		<menuitem name="RandomMenu" action="Random"/>
+		<separator name="GameSep1"/>
+		<menuitem name="LoadMenu" action="Load"/>
+		<menuitem name="SaveMenu" action="Save"/>
+		<separator name="GameSep2"/>
+		<menuitem name="UndoMenu" action="Undo"/>
+		<menuitem name="RedoMenu" action="Redo"/>
+		<placeholder name="CopyPlaceholder"/>
+		<placeholder name="SolvePlaceholder"/>
+	</menu>
 
-<placeholder name="TypePlaceholder"/>
-
-<menu name="HelpMenu" action="Help">
+	<placeholder name="TypePlaceholder"/>
 	<menuitem name="AboutMenu" action="About"/>
+	<menuitem name="QuitMenu" action="Quit"/>
+
 </menu>
 </menubar>
 </ui>
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 22)
+++ src/Makefile.am	(working copy)
@@ -10,7 +10,7 @@
 	lightup loopy map mines net netslide pattern pegs rect samegame \
 	sixteen slant solo tents twiddle untangle
 
-libpuzzles_la_LIBADD = $(PUZZLES_LIBS)
+libpuzzles_la_LIBADD = $(PUZZLES_LIBS) -lowl
 libpuzzles_la_SOURCES = combi.c \
 			configuration.c \
 			drawing.c \
