[gedit] Add highlight mode dialog
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Add highlight mode dialog
- Date: Thu, 16 May 2013 08:33:44 +0000 (UTC)
commit 6742cd81ae953c5417ee56834e95c6af050214e9
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Mon May 13 14:42:34 2013 +0200
Add highlight mode dialog
gedit/Makefile.am | 5 +-
gedit/gedit-commands-view.c | 29 ++++
gedit/gedit-commands.h | 2 +
gedit/gedit-ui.h | 4 +-
gedit/gedit-ui.xml | 5 +-
gedit/gedit-window-private.h | 1 -
gedit/gedit-window.c | 308 ------------------------------------------
gedit/gedit.gresource.xml | 1 +
8 files changed, 40 insertions(+), 315 deletions(-)
---
diff --git a/gedit/Makefile.am b/gedit/Makefile.am
index a7cce7e..fa621f2 100644
--- a/gedit/Makefile.am
+++ b/gedit/Makefile.am
@@ -103,6 +103,7 @@ NOINST_H_FILES = \
gedit-documents-panel.h \
gedit-encodings-dialog.h \
gedit-file-chooser-dialog.h \
+ gedit-highlight-mode-dialog.h \
gedit-history-entry.h \
gedit-io-error-info-bar.h \
gedit-multi-notebook.h \
@@ -184,6 +185,7 @@ libgedit_c_files = \
gedit-encodings-combo-box.c \
gedit-encodings-dialog.c \
gedit-file-chooser-dialog.c \
+ gedit-highlight-mode-dialog.c \
gedit-history-entry.c \
gedit-io-error-info-bar.c \
gedit-message-bus.c \
@@ -262,7 +264,8 @@ EXTRA_DIST = \
gedit-print-preferences.ui \
gedit-progress-info-bar.ui \
gedit-status-menu-button.ui \
- gedit-view-frame.ui
+ gedit-view-frame.ui \
+ gedit-highlight-mode-dialog.ui
CLEANFILES = $(BUILT_SOURCES) $(BUILT_SOURCES_PRIVATE)
diff --git a/gedit/gedit-commands-view.c b/gedit/gedit-commands-view.c
index 2e53995..5032a44 100644
--- a/gedit/gedit-commands-view.c
+++ b/gedit/gedit-commands-view.c
@@ -40,6 +40,7 @@
#include "gedit-debug.h"
#include "gedit-window.h"
#include "gedit-window-private.h"
+#include "gedit-highlight-mode-dialog.h"
void
@@ -139,4 +140,32 @@ _gedit_cmd_view_leave_fullscreen_mode (GtkAction *action,
window);
}
+static void
+on_language_selected (GeditHighlightModeDialog *dlg,
+ GtkSourceLanguage *language,
+ GeditWindow *window)
+{
+ GeditDocument *doc;
+
+ doc = gedit_window_get_active_document (window);
+
+ if (!doc)
+ return;
+
+ gedit_document_set_language (doc, language);
+}
+
+void
+_gedit_cmd_view_highlight_mode (GtkAction *action,
+ GeditWindow *window)
+{
+ GtkWidget *dlg;
+
+ dlg = gedit_highlight_mode_dialog_new (GTK_WINDOW (window));
+ g_signal_connect (dlg, "language-selected",
+ G_CALLBACK (on_language_selected), window);
+
+ gtk_widget_show (GTK_WIDGET (dlg));
+}
+
/* ex:set ts=8 noet: */
diff --git a/gedit/gedit-commands.h b/gedit/gedit-commands.h
index ad6b5c8..70ae612 100644
--- a/gedit/gedit-commands.h
+++ b/gedit/gedit-commands.h
@@ -127,6 +127,8 @@ void _gedit_cmd_view_toggle_fullscreen_mode (GtkAction *action,
GeditWindow *window);
void _gedit_cmd_view_leave_fullscreen_mode (GtkAction *action,
GeditWindow *window);
+void _gedit_cmd_view_highlight_mode (GtkAction *action,
+ GeditWindow *window);
void _gedit_cmd_search_find (GtkAction *action,
GeditWindow *window);
diff --git a/gedit/gedit-ui.h b/gedit/gedit-ui.h
index 410835b..547f47b 100644
--- a/gedit/gedit-ui.h
+++ b/gedit/gedit-ui.h
@@ -101,7 +101,9 @@ static const GtkActionEntry gedit_menu_entries[] =
N_("Select the entire document"), G_CALLBACK (_gedit_cmd_edit_select_all) },
/* View menu */
- { "ViewHighlightMode", NULL, N_("_Highlight Mode") },
+ { "ViewHighlightMode", NULL, N_("_Highlight Mode"), NULL,
+ N_("Changes the highlight mode of the active document"),
+ G_CALLBACK (_gedit_cmd_view_highlight_mode) },
/* Search menu */
{ "SearchFind", GTK_STOCK_FIND, N_("_Find..."), "<control>F",
diff --git a/gedit/gedit-ui.xml b/gedit/gedit-ui.xml
index 19a8f7f..a0ee907 100644
--- a/gedit/gedit-ui.xml
+++ b/gedit/gedit-ui.xml
@@ -83,10 +83,7 @@
<separator/>
<menuitem name="ViewFullscreenMenu" action="ViewFullscreen"/>
<separator/>
- <menu name="ViewHighlightModeMenu" action="ViewHighlightMode">
- <placeholder name="LanguagesMenuPlaceholder">
- </placeholder>
- </menu>
+ <menuitem name="ViewHighlightModeMenu" action="ViewHighlightMode"/>
</menu>
<menu name="SearchMenu" action="Search">
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index 87c6b3b..ccd2bdf 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -88,7 +88,6 @@ struct _GeditWindowPrivate
GtkActionGroup *close_action_group;
GtkActionGroup *quit_action_group;
GtkActionGroup *panels_action_group;
- GtkActionGroup *languages_action_group;
GtkActionGroup *documents_list_action_group;
guint documents_list_menu_ui_id;
GtkWidget *toolbar;
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 8eb9289..71331e6 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -833,302 +833,6 @@ set_sensitivity_according_to_tab (GeditWindow *window,
window);
}
-static void
-language_toggled (GtkToggleAction *action,
- GeditWindow *window)
-{
- GeditDocument *doc;
- GtkSourceLanguage *lang;
- const gchar *lang_id;
-
- if (gtk_toggle_action_get_active (action) == FALSE)
- return;
-
- doc = gedit_window_get_active_document (window);
- if (doc == NULL)
- return;
-
- lang_id = gtk_action_get_name (GTK_ACTION (action));
-
- if (strcmp (lang_id, LANGUAGE_NONE) == 0)
- {
- /* Normal (no highlighting) */
- lang = NULL;
- }
- else
- {
- lang = gtk_source_language_manager_get_language (
- gtk_source_language_manager_get_default (),
- lang_id);
- if (lang == NULL)
- {
- g_warning ("Could not get language %s\n", lang_id);
- }
- }
-
- gedit_document_set_language (doc, lang);
-}
-
-static gchar *
-escape_section_name (const gchar *name)
-{
- gchar *ret;
-
- ret = g_markup_escape_text (name, -1);
-
- /* Replace '/' with '-' to avoid problems in xml paths */
- g_strdelimit (ret, "/", '-');
-
- return ret;
-}
-
-static void
-create_language_menu_item (GtkSourceLanguage *lang,
- gint index,
- guint ui_id,
- GeditWindow *window)
-{
- GtkAction *section_action;
- GtkRadioAction *action;
- GtkAction *normal_action;
- GSList *group;
- const gchar *section;
- gchar *escaped_section;
- const gchar *lang_id;
- const gchar *lang_name;
- gchar *escaped_lang_name;
- gchar *tip;
- gchar *path;
-
- section = gtk_source_language_get_section (lang);
- escaped_section = escape_section_name (section);
-
- /* check if the section submenu exists or create it */
- section_action = gtk_action_group_get_action (window->priv->languages_action_group,
- escaped_section);
-
- if (section_action == NULL)
- {
- gchar *section_name;
-
- section_name = gedit_utils_escape_underscores (section, -1);
-
- section_action = gtk_action_new (escaped_section,
- section_name,
- NULL,
- NULL);
-
- g_free (section_name);
-
- gtk_action_group_add_action (window->priv->languages_action_group,
- section_action);
- g_object_unref (section_action);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- ui_id,
- "/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder",
- escaped_section,
- escaped_section,
- GTK_UI_MANAGER_MENU,
- FALSE);
- }
-
- /* now add the language item to the section */
- lang_name = gtk_source_language_get_name (lang);
- lang_id = gtk_source_language_get_id (lang);
-
- escaped_lang_name = gedit_utils_escape_underscores (lang_name, -1);
-
- tip = g_strdup_printf (_("Use %s highlight mode"), lang_name);
- path = g_strdup_printf ("/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder/%s",
- escaped_section);
-
- action = gtk_radio_action_new (lang_id,
- escaped_lang_name,
- tip,
- NULL,
- index);
-
- g_free (escaped_lang_name);
-
- /* Action is added with a NULL accel to make the accel overridable */
- gtk_action_group_add_action_with_accel (window->priv->languages_action_group,
- GTK_ACTION (action),
- NULL);
- g_object_unref (action);
-
- /* add the action to the same radio group of the "Normal" action */
- normal_action = gtk_action_group_get_action (window->priv->languages_action_group,
- LANGUAGE_NONE);
- group = gtk_radio_action_get_group (GTK_RADIO_ACTION (normal_action));
- gtk_radio_action_set_group (action, group);
-
- g_signal_connect (action,
- "activate",
- G_CALLBACK (language_toggled),
- window);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- ui_id,
- path,
- lang_id,
- lang_id,
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- g_free (path);
- g_free (tip);
- g_free (escaped_section);
-}
-
-static gint
-language_compare (GtkSourceLanguage *lang1,
- GtkSourceLanguage *lang2)
-{
- const gchar *section1, *section2, *name1, *name2;
- gchar *tmp1, *tmp2;
- gint ret;
-
- section1 = gtk_source_language_get_section (lang1);
- section2 = gtk_source_language_get_section (lang2);
- name1 = gtk_source_language_get_name (lang1);
- name2 = gtk_source_language_get_name (lang2);
-
- /* we collate the concatenation so that they are
- * sorted first by section and then by name */
- tmp1 = g_strconcat (section1, "::", name1, NULL);
- tmp2 = g_strconcat (section2, "::", name2, NULL);
-
- ret = g_utf8_collate (tmp1, tmp2);
-
- g_free(tmp1);
- g_free(tmp2);
-
- return ret;
-}
-
-static GSList *
-get_languages_sorted_by_section (GeditWindow *window)
-{
- GtkSourceLanguageManager *lm;
- const gchar * const *ids;
- gint i;
- GSList *languages = NULL;
-
- lm = gtk_source_language_manager_get_default ();
- ids = gtk_source_language_manager_get_language_ids (lm);
-
- for (i = 0; ids[i] != NULL; i++)
- {
- GtkSourceLanguage *lang;
-
- lang = gtk_source_language_manager_get_language (lm, ids[i]);
-
- if (!gtk_source_language_get_hidden (lang))
- {
- languages = g_slist_prepend (languages, lang);
- }
- }
-
- return g_slist_sort (languages, (GCompareFunc)language_compare);
-}
-
-static void
-create_languages_menu (GeditWindow *window)
-{
- GtkRadioAction *action_none;
- GSList *languages;
- GSList *l;
- guint id;
- gint i;
-
- gedit_debug (DEBUG_WINDOW);
-
- /* add the "Plain Text" item before all the others */
-
- /* Translators: "Plain Text" means that no highlight mode is selected in the
- * "View->Highlight Mode" submenu and so syntax highlighting is disabled */
- action_none = gtk_radio_action_new (LANGUAGE_NONE, _("Plain Text"),
- _("Disable syntax highlighting"),
- NULL,
- -1);
-
- gtk_action_group_add_action (window->priv->languages_action_group,
- GTK_ACTION (action_none));
- g_object_unref (action_none);
-
- g_signal_connect (action_none,
- "activate",
- G_CALLBACK (language_toggled),
- window);
-
- id = gtk_ui_manager_new_merge_id (window->priv->manager);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- id,
- "/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder",
- LANGUAGE_NONE,
- LANGUAGE_NONE,
- GTK_UI_MANAGER_MENUITEM,
- TRUE);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action_none), TRUE);
-
- languages = get_languages_sorted_by_section (window);
-
- for (l = languages, i = 0; l != NULL; l = l->next)
- {
- create_language_menu_item (l->data, i, id, window);
- }
-
- g_slist_free (languages);
-}
-
-static void
-update_languages_menu (GeditWindow *window)
-{
- GeditDocument *doc;
- GList *actions;
- GList *l;
- GtkAction *action;
- GtkSourceLanguage *lang;
- const gchar *lang_id;
-
- doc = gedit_window_get_active_document (window);
- if (doc == NULL)
- return;
-
- lang = gedit_document_get_language (doc);
- if (lang != NULL)
- lang_id = gtk_source_language_get_id (lang);
- else
- lang_id = LANGUAGE_NONE;
-
- actions = gtk_action_group_list_actions (window->priv->languages_action_group);
-
- /* prevent recursion */
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_block_by_func (GTK_ACTION (l->data),
- G_CALLBACK (language_toggled),
- window);
- }
-
- action = gtk_action_group_get_action (window->priv->languages_action_group,
- lang_id);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
-
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_unblock_by_func (GTK_ACTION (l->data),
- G_CALLBACK (language_toggled),
- window);
- }
-
- g_list_free (actions);
-}
-
void
_gedit_recent_add (GeditWindow *window,
GFile *location,
@@ -1622,14 +1326,6 @@ create_menu_bar_and_toolbar (GeditWindow *window,
window);
update_recent_files_menu (window);
- /* languages menu */
- action_group = gtk_action_group_new ("LanguagesActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- window->priv->languages_action_group = action_group;
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- create_languages_menu (window);
-
/* list of open documents menu */
action_group = gtk_action_group_new ("DocumentsListActions");
gtk_action_group_set_translation_domain (action_group, NULL);
@@ -2586,9 +2282,6 @@ tab_switched (GeditMultiNotebook *mnb,
/* activate the right item in the documents menu */
activate_documents_list_item (window, new_tab);
- /* update the syntax menu */
- update_languages_menu (window);
-
g_signal_emit (G_OBJECT (window),
signals[ACTIVE_TAB_CHANGED],
0,
@@ -3292,7 +2985,6 @@ sync_languages_menu (GeditDocument *doc,
GParamSpec *pspec,
GeditWindow *window)
{
- update_languages_menu (window);
peas_extension_set_foreach (window->priv->extensions,
(PeasExtensionSetForeachFunc) extension_update_state,
window);
diff --git a/gedit/gedit.gresource.xml b/gedit/gedit.gresource.xml
index 6938cb8..e277680 100644
--- a/gedit/gedit.gresource.xml
+++ b/gedit/gedit.gresource.xml
@@ -12,5 +12,6 @@
<file preprocess="xml-stripblanks">gedit-progress-info-bar.ui</file>
<file preprocess="xml-stripblanks">gedit-status-menu-button.ui</file>
<file preprocess="xml-stripblanks">gedit-view-frame.ui</file>
+ <file preprocess="xml-stripblanks">gedit-highlight-mode-dialog.ui</file>
</gresource>
</gresources>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]