[gedit] Add highlight mode dialog



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]