[anjuta] anjuta: Add application menu
- From: Johannes Schmid <jhs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] anjuta: Add application menu
- Date: Mon, 8 Jul 2013 21:16:41 +0000 (UTC)
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"><Primary>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]