[anjuta] anjuta: Add application menu



commit 46747b216f629e23435aa5ea9f620c2b5ce08f61
Author: Johannes Schmid <jhs gnome org>
Date:   Sun Jul 7 11:59:42 2013 +0200

    anjuta: Add application menu

 src/Makefile.am          |    3 +-
 src/action-callbacks.c   |    4 +-
 src/action-callbacks.h   |    4 +-
 src/anjuta-actions.h     |    4 +-
 src/anjuta-application.c |  114 +++++++++++++++++++++++++++++++++++++++++++++-
 src/anjuta-menu.ui       |   36 ++++++++++++++
 src/anjuta-window.c      |    9 ++--
 src/anjuta-window.h      |    6 +-
 src/main.c               |   18 +-------
 9 files changed, 166 insertions(+), 32 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 056d279..f9c0f00 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,8 @@
 ## Process this file with automake to produce Makefile.in
 
 anjuta_gladedir = $(anjuta_glade_dir)
-dist_anjuta_glade_DATA = preferences.ui
+dist_anjuta_glade_DATA = preferences.ui \
+       anjuta-menu.ui
 
 anjuta_uidir = $(anjuta_ui_dir)
 dist_anjuta_ui_DATA = anjuta.xml
diff --git a/src/action-callbacks.c b/src/action-callbacks.c
index 259a1e8..050c682 100644
--- a/src/action-callbacks.c
+++ b/src/action-callbacks.c
@@ -41,7 +41,7 @@
 #define TOOLBAR_VISIBLE "toolbar-visible"
 
 void
-on_exit1_activate (GtkAction * action, AnjutaWindow *win)
+on_exit_activate (GtkAction * action, AnjutaWindow *win)
 {
        GdkEvent *event = gdk_event_new (GDK_DELETE);
 
@@ -94,7 +94,7 @@ on_toolbar_view_toggled (GtkAction *action, AnjutaWindow *win)
 }
 
 void
-on_set_preferences1_activate (GtkAction * action, AnjutaWindow *win)
+on_preferences_activate (GtkAction * action, AnjutaWindow *win)
 {
 
        GtkWidget *preferences_dialog;
diff --git a/src/action-callbacks.h b/src/action-callbacks.h
index 0ca5aa7..314da79 100644
--- a/src/action-callbacks.h
+++ b/src/action-callbacks.h
@@ -22,12 +22,12 @@
 
 #include <gtk/gtk.h>
 
-void on_exit1_activate (GtkAction * action, AnjutaWindow *win);
+void on_exit_activate (GtkAction * action, AnjutaWindow *win);
 void on_fullscreen_toggle (GtkAction *action, AnjutaWindow *win);
 void on_layout_lock_toggle (GtkAction *action, AnjutaWindow *win);
 void on_reset_layout_activate (GtkAction *action, AnjutaWindow *win);
 void on_toolbar_view_toggled (GtkAction *action,  AnjutaWindow *win);
-void on_set_preferences1_activate (GtkAction * action, AnjutaWindow *win);
+void on_preferences_activate (GtkAction * action, AnjutaWindow *win);
 
 /* Help actions */
 void on_help_manual_activate (GtkAction *action, gpointer data);
diff --git a/src/anjuta-actions.h b/src/anjuta-actions.h
index af2a7e9..2501383 100644
--- a/src/anjuta-actions.h
+++ b/src/anjuta-actions.h
@@ -23,7 +23,7 @@ static GtkActionEntry menu_entries_file[] = {
   { "ActionMenuFile", NULL, N_("_File")},
   { "ActionExit", GTK_STOCK_QUIT, N_("_Quit"), "<control>q",
        N_("Quit Anjuta IDE"),
-    G_CALLBACK (on_exit1_activate)}
+    G_CALLBACK (on_exit_activate)}
 };
 
 static GtkActionEntry menu_entries_edit[] = {
@@ -31,7 +31,7 @@ static GtkActionEntry menu_entries_edit[] = {
   { "ActionEditPreferences", GTK_STOCK_PROPERTIES,
        N_("_Preferences"), NULL,
        N_("Do you prefer coffee to tea? Check it out."),
-    G_CALLBACK (on_set_preferences1_activate)},
+    G_CALLBACK (on_preferences_activate)},
 };
 
 static GtkActionEntry menu_entries_view[] = {
diff --git a/src/anjuta-application.c b/src/anjuta-application.c
index facf267..33b7f05 100644
--- a/src/anjuta-application.c
+++ b/src/anjuta-application.c
@@ -19,6 +19,9 @@
  */
 
 #include <config.h>
+#ifdef ENABLE_NLS
+#  include <locale.h>
+#endif
 
 #include <string.h>
 #include <stdlib.h>
@@ -32,6 +35,7 @@
 #include <libanjuta/interfaces/ianjuta-file.h>
 
 #include "anjuta-application.h"
+#include "action-callbacks.h"
 
 #define ANJUTA_REMEMBERED_PLUGINS "remembered-plugins"
 #define USER_SESSION_PATH_NEW (anjuta_util_get_user_cache_file_path ("session/", NULL))
@@ -52,6 +56,8 @@
 
 static gchar DEFAULT_PROFILE[] = "default.profile";
 
+#define ANJUTA_MENU_UI_FILE PACKAGE_DATA_DIR"/glade/anjuta-menu.ui"
+
 G_DEFINE_TYPE (AnjutaApplication, anjuta_application, GTK_TYPE_APPLICATION)
 
 struct _AnjutaApplicationPrivate {
@@ -63,6 +69,63 @@ struct _AnjutaApplicationPrivate {
        gchar *profile;
 };
 
+static void
+on_app_preferences (GSimpleAction  *action,
+                    GVariant       *parameter,
+                    gpointer        user_data)
+{
+       GtkApplication *app;
+       AnjutaWindow* window;
+
+       app = GTK_APPLICATION (user_data);
+       window = ANJUTA_WINDOW (gtk_application_get_active_window (app));
+
+       on_preferences_activate (NULL, window);
+}
+
+static void
+on_app_manual (GSimpleAction  *action,
+               GVariant       *parameter,
+               gpointer        user_data)
+{
+       GtkApplication *app;
+       AnjutaWindow* window;
+
+       app = GTK_APPLICATION (user_data);
+       window = ANJUTA_WINDOW (gtk_application_get_active_window (app));
+
+       on_help_manual_activate (NULL, window);
+}
+
+static void
+on_app_about (GSimpleAction  *action,
+              GVariant       *parameter,
+              gpointer        user_data)
+{
+       GtkApplication *app;
+       AnjutaWindow* window;
+
+       app = GTK_APPLICATION (user_data);
+       window = ANJUTA_WINDOW (gtk_application_get_active_window (app));
+
+       on_about_activate (NULL, window);
+}
+
+static void
+on_app_quit (GSimpleAction  *action,
+             GVariant       *parameter,
+             gpointer        user_data)
+{
+       GtkApplication *app;
+       AnjutaWindow* window;
+
+       app = GTK_APPLICATION (user_data);
+       window = ANJUTA_WINDOW (gtk_application_get_active_window (app));
+
+       on_exit_activate (NULL, window);
+}
+
+
 static gboolean
 on_anjuta_delete_event (AnjutaWindow *win, GdkEvent *event, gpointer user_data)
 {
@@ -488,7 +551,53 @@ anjuta_application_open (GApplication *application,
        anjuta_application_reset_hint (ANJUTA_APPLICATION (application));
 }
 
+static GActionEntry app_entries[] = {
+       { "preferences", on_app_preferences, NULL, NULL, NULL },
+       { "help", on_app_manual, NULL, NULL, NULL },
+       { "about", on_app_about, NULL, NULL, NULL },
+       { "quit", on_app_quit, NULL, NULL, NULL }
+};
+
+static void
+anjuta_application_startup (GApplication* application)
+{
+       AnjutaApplication *app = ANJUTA_APPLICATION (application);
+       GtkBuilder *builder;
+       GError *error = NULL;
+
+#ifdef ENABLE_NLS
+       setlocale (LC_ALL, "");
+       bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
+       bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+       textdomain (GETTEXT_PACKAGE);
+#endif
 
+       G_APPLICATION_CLASS (anjuta_application_parent_class)->startup (application);
+       
+       g_action_map_add_action_entries (G_ACTION_MAP (app),
+                                        app_entries,
+                                        G_N_ELEMENTS (app_entries),
+                                        app);
+
+       builder = gtk_builder_new ();
+       if (!gtk_builder_add_from_file (builder,
+                                       ANJUTA_MENU_UI_FILE,
+                                       &error))
+       {
+               g_warning ("loading menu builder file: %s", error->message);
+               g_error_free (error);
+       }
+       else
+       {
+               GMenuModel *app_menu;
+
+               app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+               gtk_application_set_app_menu (GTK_APPLICATION (application),
+                                             app_menu);
+       }
+
+       g_object_unref (builder);
+}
 
 /* GObject implementation
  *---------------------------------------------------------------------------*/
@@ -529,6 +638,7 @@ anjuta_application_class_init (AnjutaApplicationClass *klass)
 
        app_class->open = anjuta_application_open;
        app_class->local_command_line = anjuta_application_local_command_line;
+       app_class->startup = anjuta_application_startup;
 
        g_type_class_add_private (klass, sizeof (AnjutaApplicationPrivate));
 }
@@ -588,7 +698,9 @@ anjuta_application_create_window (AnjutaApplication *app)
        GError *error = NULL;
 
        /* Initialize application */
-       win = ANJUTA_WINDOW (anjuta_window_new ());
+       win = ANJUTA_WINDOW (anjuta_window_new (GTK_APPLICATION(app)));
+       gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW(win),
+                                                FALSE);
        gtk_application_add_window (GTK_APPLICATION (app), GTK_WINDOW (win));
        status = anjuta_shell_get_status (ANJUTA_SHELL (win), NULL);
        anjuta_status_progress_add_ticks (status, 1);
diff --git a/src/anjuta-menu.ui b/src/anjuta-menu.ui
new file mode 100644
index 0000000..ba844b8
--- /dev/null
+++ b/src/anjuta-menu.ui
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <menu id="appmenu">
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_New Window</attribute>
+        <attribute name="action">app.new_window</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Preferences</attribute>
+        <attribute name="action">app.preferences</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Help</attribute>
+        <attribute name="action">app.help</attribute>
+        <attribute name="accel">F1</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_About</attribute>
+        <attribute name="action">app.about</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Quit</attribute>
+        <attribute name="action">app.quit</attribute>
+        <attribute name="accel">&lt;Primary&gt;q</attribute>
+      </item>
+    </section>
+  </menu>
+</interface>
\ No newline at end of file
diff --git a/src/anjuta-window.c b/src/anjuta-window.c
index f4a7fca..f99673a 100644
--- a/src/anjuta-window.c
+++ b/src/anjuta-window.c
@@ -833,13 +833,14 @@ anjuta_window_class_init (AnjutaWindowClass *class)
 }
 
 GtkWidget *
-anjuta_window_new (void)
+anjuta_window_new (GtkApplication* app)
 {
        AnjutaWindow *win;
 
        win = ANJUTA_WINDOW (g_object_new (ANJUTA_TYPE_WINDOW,
-                                                                       "title", "Anjuta",
-                                                                       NULL));
+                                          "title", "Anjuta",
+                                          "application", app,
+                                          NULL));
        return GTK_WIDGET (win);
 }
 
@@ -1449,6 +1450,6 @@ anjuta_shell_iface_init (AnjutaShellIface *iface)
        iface->saving_pop = anjuta_window_saving_pop;
 }
 
-ANJUTA_TYPE_BEGIN(AnjutaWindow, anjuta_window, GTK_TYPE_WINDOW);
+ANJUTA_TYPE_BEGIN(AnjutaWindow, anjuta_window, GTK_TYPE_APPLICATION_WINDOW);
 ANJUTA_TYPE_ADD_INTERFACE(anjuta_shell, ANJUTA_TYPE_SHELL);
 ANJUTA_TYPE_END;
diff --git a/src/anjuta-window.h b/src/anjuta-window.h
index b32a88f..d124799 100644
--- a/src/anjuta-window.h
+++ b/src/anjuta-window.h
@@ -42,7 +42,7 @@ typedef struct _AnjutaWindowClass AnjutaWindowClass;
 
 struct _AnjutaWindow
 {
-       GtkWindow parent;
+       GtkApplicationWindow parent;
        GtkWidget *toolbar;
        GtkWidget *view_menu;
        GtkWidget *dock;
@@ -66,11 +66,11 @@ struct _AnjutaWindow
 
 struct _AnjutaWindowClass
 {
-       GtkWindowClass klass;
+       GtkApplicationWindowClass klass;
 };
 
 GType      anjuta_window_get_type (void);
-GtkWidget* anjuta_window_new (void);
+GtkWidget* anjuta_window_new (GtkApplication* app);
 
 void       anjuta_window_set_geometry (AnjutaWindow *win, const gchar *geometry);
 gchar*     anjuta_window_get_geometry (AnjutaWindow *win);
diff --git a/src/main.c b/src/main.c
index e88dffb..7b9f086 100644
--- a/src/main.c
+++ b/src/main.c
@@ -18,16 +18,7 @@
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#ifdef ENABLE_NLS
-#  include <locale.h>
-#endif
-
-#include <sys/stat.h>
-#include <stdlib.h>
+#include <config.h>
 #include <gtk/gtk.h>
 #include <libxml/parser.h>
 #include <libanjuta/anjuta-debug.h>
@@ -40,13 +31,6 @@ main (int argc, char *argv[])
        AnjutaApplication* anjuta;
        gint status;
 
-#ifdef ENABLE_NLS
-       setlocale (LC_ALL, "");
-       bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
-       bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
-       textdomain (GETTEXT_PACKAGE);
-#endif
-
        g_set_application_name (_("Anjuta"));
 
        anjuta = anjuta_application_new ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]