[gedit/wip/appmenu] Add app menu
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/appmenu] Add app menu
- Date: Sun, 30 Dec 2012 22:05:36 +0000 (UTC)
commit 877e50cefc5e200d6570a530d3d2e4fc326272a4
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Sun Dec 30 22:10:28 2012 +0100
Add app menu
gedit/gedit-app.c | 107 ++++++++++++++++++++++++
gedit/gedit-menu.ui | 36 ++++++++
gedit/gedit-ui-fallback.xml | 194 +++++++++++++++++++++++++++++++++++++++++++
gedit/gedit-ui.xml | 7 --
gedit/gedit-window.c | 24 +++++-
gedit/gedit.gresource.xml | 2 +
6 files changed, 360 insertions(+), 10 deletions(-)
---
diff --git a/gedit/gedit-app.c b/gedit/gedit-app.c
index 2159862..edb411a 100644
--- a/gedit/gedit-app.c
+++ b/gedit/gedit-app.c
@@ -55,6 +55,8 @@
#include "gedit-settings.h"
#include "gedit-app-activatable.h"
#include "gedit-plugins-engine.h"
+#include "gedit-commands.h"
+#include "gedit-preferences-dialog.h"
#ifndef ENABLE_GVFS_METADATA
#include "gedit-metadata-manager.h"
@@ -307,6 +309,72 @@ gedit_app_set_window_title_impl (GeditApp *app,
}
static void
+new_window_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GeditWindow *window;
+
+ window = gedit_app_create_window (GEDIT_APP (user_data), NULL);
+
+ gedit_debug_message (DEBUG_APP, "Show window");
+ gtk_widget_show (GTK_WIDGET (window));
+
+ gedit_debug_message (DEBUG_APP, "Create tab");
+ gedit_window_create_tab (window, TRUE);
+
+ gtk_window_present (GTK_WINDOW (window));
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GtkApplication *app = GTK_APPLICATION (user_data);
+ GeditWindow *window = GEDIT_WINDOW (gtk_application_get_active_window (app));
+ gedit_show_preferences_dialog (window);
+}
+
+static void
+help_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GtkApplication *app = GTK_APPLICATION (user_data);
+ GeditWindow *window = GEDIT_WINDOW (gtk_application_get_active_window (app));
+ _gedit_cmd_help_contents (NULL, window);
+}
+
+static void
+about_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GtkApplication *app = GTK_APPLICATION (user_data);
+ GeditWindow *window = GEDIT_WINDOW (gtk_application_get_active_window (app));
+ _gedit_cmd_help_about (NULL, window);
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GeditApp *app = GEDIT_APP (user_data);
+
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "new_window", new_window_activated, NULL, NULL, NULL },
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "help", help_activated, NULL, NULL, NULL },
+ { "about", about_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
extension_added (PeasExtensionSet *extensions,
PeasPluginInfo *info,
PeasExtension *exten,
@@ -329,6 +397,8 @@ gedit_app_startup (GApplication *application)
{
GeditApp *app = GEDIT_APP (application);
GtkSourceStyleSchemeManager *manager;
+ GtkSettings *gtk_settings;
+ gboolean show_app_menu;
const gchar *dir;
gchar *icon_dir;
#ifndef ENABLE_GVFS_METADATA
@@ -379,6 +449,43 @@ gedit_app_startup (GApplication *application)
/* initial lockdown state */
app->priv->lockdown = gedit_settings_get_lockdown (GEDIT_SETTINGS (app->priv->settings));
+ /* app menu */
+ gtk_settings = gtk_settings_get_default ();
+ g_object_get (G_OBJECT (gtk_settings),
+ "gtk-shell-shows-app-menu",
+ &show_app_menu,
+ NULL);
+
+ if (show_app_menu)
+ {
+ GtkBuilder *builder;
+ GError *error = NULL;
+
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_resource (builder, "/org/gnome/gedit/ui/gedit-menu.ui", &error);
+
+ if (error != NULL)
+ {
+ g_warning ("loading menu builder file: %s", error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ GMenuModel *app_menu;
+
+ g_action_map_add_action_entries (G_ACTION_MAP (application),
+ app_entries,
+ G_N_ELEMENTS (app_entries),
+ application);
+
+ 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);
+ }
+
/*
* We use the default gtksourceview style scheme manager so that plugins
* can obtain it easily without a gedit specific api, but we need to
diff --git a/gedit/gedit-menu.ui b/gedit/gedit-menu.ui
new file mode 100644
index 0000000..11da064
--- /dev/null
+++ b/gedit/gedit-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>
diff --git a/gedit/gedit-ui-fallback.xml b/gedit/gedit-ui-fallback.xml
new file mode 100644
index 0000000..2569172
--- /dev/null
+++ b/gedit/gedit-ui-fallback.xml
@@ -0,0 +1,194 @@
+<!--
+ * gedit-ui.xml
+ * This file is part of gedit
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+-->
+
+<ui>
+
+ <menubar name="MenuBar">
+ <menu name="FileMenu" action="File">
+ <menuitem name="FileNewMenu" action="FileNew"/>
+ <placeholder name="FileOps_1"/>
+ <menuitem name="FileOpenMenu" action="FileOpen"/>
+ <placeholder name="FileOps_2"/>
+ <separator/>
+ <menuitem name="FileSaveMenu" action="FileSave"/>
+ <menuitem name="FileSaveAsMenu" action="FileSaveAs"/>
+ <placeholder name="FileOps_3"/>
+ <menuitem name="FileRevertMenu" action="FileRevert"/>
+ <placeholder name="FileOps_4"/>
+ <separator/>
+ <placeholder name="FileOps_5"/>
+ <menuitem name="FilePrintPreviewMenu" action="FilePrintPreview"/>
+ <menuitem name="FilePrintMenu" action="FilePrint"/>
+ <placeholder name="FileRecentsPlaceholder">
+ <separator/>
+ </placeholder>
+ <separator/>
+ <menuitem name="FileCloseMenu" action="FileClose"/>
+ <menuitem name="FileQuitMenu" action="FileQuit"/>
+ </menu>
+
+ <menu name="EditMenu" action="Edit">
+ <menuitem name="EditUndoMenu" action="EditUndo"/>
+ <menuitem name="EditRedoMenu" action="EditRedo"/>
+ <separator/>
+ <menuitem name="EditCutMenu" action="EditCut"/>
+ <menuitem name="EditCopyMenu" action="EditCopy"/>
+ <menuitem name="EditPasteMenu" action="EditPaste"/>
+ <menuitem name="EditDeleteMenu" action="EditDelete"/>
+ <placeholder name="EditOps_1" />
+ <separator/>
+ <placeholder name="EditOps_2" />
+ <menuitem name="EditSelectAllMenu" action="EditSelectAll"/>
+ <placeholder name="EditOps_3" />
+ <separator/>
+ <placeholder name="EditOps_4" />
+ <separator/>
+ <placeholder name="EditOps_5" />
+ <separator/>
+ <placeholder name="EditOps_6" />
+ <separator/>
+ <menuitem name="EditPreferencesMenu" action="EditPreferences"/>
+ </menu>
+
+ <menu name="ViewMenu" action="View">
+ <menuitem name="ViewToolbarMenu" action="ViewToolbar"/>
+ <menuitem name="ViewStatusbarMenu" action="ViewStatusbar"/>
+ <menuitem name="ViewSidePaneMenu" action="ViewSidePanel"/>
+ <menuitem name="ViewBottomPaneMenu" action="ViewBottomPanel"/>
+ <separator/>
+ <menuitem name="ViewFullscreenMenu" action="ViewFullscreen"/>
+ <separator/>
+ <menu name="ViewHighlightModeMenu" action="ViewHighlightMode">
+ <placeholder name="LanguagesMenuPlaceholder">
+ </placeholder>
+ </menu>
+ </menu>
+
+ <menu name="SearchMenu" action="Search">
+ <menuitem name="SearchFindMenu" action="SearchFind"/>
+ <menuitem name="SearchFindNextMenu" action="SearchFindNext"/>
+ <menuitem name="SearchFindPreviousMenu" action="SearchFindPrevious"/>
+ <placeholder name="SearchOps_1" />
+ <separator/>
+ <placeholder name="SearchOps_2" />
+ <separator/>
+ <menuitem name="SearchReplaceMenu" action="SearchReplace"/>
+ <placeholder name="SearchOps_3" />
+ <separator/>
+ <placeholder name="SearchOps_4" />
+ <separator/>
+ <menuitem name="SearchClearHighlight" action="SearchClearHighlight"/>
+ <placeholder name="SearchOps_5" />
+ <separator/>
+ <placeholder name="SearchOps_6" />
+ <separator/>
+ <menuitem name="SearchGoToLineMenu" action="SearchGoToLine"/>
+ <placeholder name="SearchOps_7" />
+ <separator/>
+ <placeholder name="SearchOps_8" />
+ </menu>
+
+ <menu name="ToolsMenu" action="Tools">
+ <placeholder name="ToolsOps_1" />
+ <separator/>
+ <placeholder name="ToolsOps_2" />
+ <separator/>
+ <placeholder name="ToolsOps_3" />
+ <separator/>
+ <placeholder name="ToolsOps_4" />
+ <separator/>
+ <placeholder name="ToolsOps_5" />
+ </menu>
+
+ <placeholder name="ExtraMenu_1" />
+
+ <menu name="DocumentsMenu" action="Documents">
+ <menuitem action="FileSaveAll" />
+ <menuitem action="FileCloseAll" />
+ <separator />
+ <menuitem action="DocumentsNewTabGroup"/>
+ <menuitem action="DocumentsPreviousTabGroup"/>
+ <menuitem action="DocumentsNextTabGroup"/>
+ <separator />
+ <placeholder name="DocumentsOps_1" />
+ <separator/>
+ <placeholder name="DocumentsOps_2" />
+ <separator/>
+ <placeholder name="DocumentsOps_3" />
+ <menuitem action="DocumentsPreviousDocument" />
+ <menuitem action="DocumentsNextDocument" />
+ <separator/>
+ <menuitem action="DocumentsMoveToNewWindow"/>
+ <placeholder name="DocumentsListPlaceholder">
+ <separator/>
+ </placeholder>
+ </menu>
+
+ <menu name="HelpMenu" action="Help">
+ <menuitem name="HelpContentsMenu" action="HelpContents"/>
+ <menuitem name="HelpAboutMenu" action="HelpAbout"/>
+ </menu>
+ </menubar>
+
+ <toolbar name="ToolBar">
+ <toolitem action="FileNew"/>
+ <toolitem action="FileSave"/>
+ <separator/>
+ <toolitem action="FilePrint"/>
+ <separator/>
+ <toolitem action="EditUndo"/>
+ <toolitem action="EditRedo"/>
+ <separator/>
+ <toolitem action="EditCut"/>
+ <toolitem action="EditCopy"/>
+ <toolitem action="EditPaste"/>
+ <separator/>
+ <toolitem action="SearchFind"/>
+ <toolitem action="SearchReplace"/>
+ </toolbar>
+
+ <toolbar name="FullscreenToolBar">
+ <toolitem action="FileNew"/>
+ <toolitem action="FileSave"/>
+ <separator/>
+ <toolitem action="FilePrint"/>
+ <separator/>
+ <toolitem action="EditUndo"/>
+ <toolitem action="EditRedo"/>
+ <separator/>
+ <toolitem action="EditCut"/>
+ <toolitem action="EditCopy"/>
+ <toolitem action="EditPaste"/>
+ <separator/>
+ <toolitem action="SearchFind"/>
+ <toolitem action="SearchReplace"/>
+ <separator expand="true"/>
+ <toolitem action="LeaveFullscreen"/>
+ </toolbar>
+
+</ui>
diff --git a/gedit/gedit-ui.xml b/gedit/gedit-ui.xml
index 2569172..8676d1c 100644
--- a/gedit/gedit-ui.xml
+++ b/gedit/gedit-ui.xml
@@ -49,7 +49,6 @@
</placeholder>
<separator/>
<menuitem name="FileCloseMenu" action="FileClose"/>
- <menuitem name="FileQuitMenu" action="FileQuit"/>
</menu>
<menu name="EditMenu" action="Edit">
@@ -71,8 +70,6 @@
<placeholder name="EditOps_5" />
<separator/>
<placeholder name="EditOps_6" />
- <separator/>
- <menuitem name="EditPreferencesMenu" action="EditPreferences"/>
</menu>
<menu name="ViewMenu" action="View">
@@ -149,10 +146,6 @@
</placeholder>
</menu>
- <menu name="HelpMenu" action="Help">
- <menuitem name="HelpContentsMenu" action="HelpContents"/>
- <menuitem name="HelpAboutMenu" action="HelpAbout"/>
- </menu>
</menubar>
<toolbar name="ToolBar">
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 852986e..e5a6832 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -1482,6 +1482,8 @@ create_menu_bar_and_toolbar (GeditWindow *window,
GtkAction *action;
GtkUIManager *manager;
GtkRecentManager *recent_manager;
+ GtkSettings *gtk_settings;
+ gboolean show_app_menu;
GError *error = NULL;
gedit_debug (DEBUG_WINDOW);
@@ -1566,9 +1568,25 @@ create_menu_bar_and_toolbar (GeditWindow *window,
g_object_unref (action_group);
window->priv->panels_action_group = action_group;
- gtk_ui_manager_add_ui_from_resource (manager,
- "/org/gnome/gedit/ui/gedit-ui.xml",
- &error);
+ gtk_settings = gtk_settings_get_default ();
+ g_object_get (G_OBJECT (gtk_settings),
+ "gtk-shell-shows-app-menu",
+ &show_app_menu,
+ NULL);
+
+ if (show_app_menu)
+ {
+ gtk_ui_manager_add_ui_from_resource (manager,
+ "/org/gnome/gedit/ui/gedit-ui.xml",
+ &error);
+ }
+ else
+ {
+ gtk_ui_manager_add_ui_from_resource (manager,
+ "/org/gnome/gedit/ui/gedit-ui-fallback.xml",
+ &error);
+ }
+
if (error != NULL)
{
g_warning ("Could not add ui definition: %s", error->message);
diff --git a/gedit/gedit.gresource.xml b/gedit/gedit.gresource.xml
index 11db256..d391d3a 100644
--- a/gedit/gedit.gresource.xml
+++ b/gedit/gedit.gresource.xml
@@ -2,6 +2,8 @@
<gresources>
<gresource prefix="/org/gnome/gedit/ui">
<file preprocess="xml-stripblanks">gedit-ui.xml</file>
+ <file preprocess="xml-stripblanks">gedit-ui-fallback.xml</file>
+ <file preprocess="xml-stripblanks">gedit-menu.ui</file>
<file preprocess="xml-stripblanks">gedit-encodings-dialog.ui</file>
<file preprocess="xml-stripblanks">gedit-preferences-dialog.ui</file>
<file preprocess="xml-stripblanks">gedit-replace-dialog.ui</file>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]