gui: Fix icon names.
[pspp] / src / ui / gui / psppire-syntax-window.c
index 261254cf644a69216ffde308b509daea029d2baa..393c2afb5a0d966f3c5d8824601e760a73b4a709 100644 (file)
@@ -45,8 +45,6 @@
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
-static void psppire_syntax_window_base_finalize (PsppireSyntaxWindowClass *, gpointer);
-static void psppire_syntax_window_base_init     (PsppireSyntaxWindowClass *class);
 static void psppire_syntax_window_class_init    (PsppireSyntaxWindowClass *class);
 static void psppire_syntax_window_init          (PsppireSyntaxWindow      *syntax_editor);
 
@@ -101,44 +99,8 @@ psppire_syntax_window_get_property (GObject         *object,
     };
 }
 
-GType
-psppire_syntax_window_get_type (void)
-{
-  static GType psppire_syntax_window_type = 0;
-
-  if (!psppire_syntax_window_type)
-    {
-      static const GTypeInfo psppire_syntax_window_info =
-      {
-       sizeof (PsppireSyntaxWindowClass),
-       (GBaseInitFunc) psppire_syntax_window_base_init,
-        (GBaseFinalizeFunc) psppire_syntax_window_base_finalize,
-       (GClassInitFunc)psppire_syntax_window_class_init,
-       (GClassFinalizeFunc) NULL,
-       NULL,
-        sizeof (PsppireSyntaxWindow),
-       0,
-       (GInstanceInitFunc) psppire_syntax_window_init,
-      };
-
-      static const GInterfaceInfo window_interface_info =
-       {
-         (GInterfaceInitFunc) psppire_syntax_window_iface_init,
-         NULL,
-         NULL
-       };
-
-      psppire_syntax_window_type =
-       g_type_register_static (PSPPIRE_TYPE_WINDOW, "PsppireSyntaxWindow",
-                               &psppire_syntax_window_info, 0);
-
-      g_type_add_interface_static (psppire_syntax_window_type,
-                                  PSPPIRE_TYPE_WINDOW_MODEL,
-                                  &window_interface_info);
-    }
-
-  return psppire_syntax_window_type;
-}
+G_DEFINE_TYPE_WITH_CODE (PsppireSyntaxWindow, psppire_syntax_window, PSPPIRE_TYPE_WINDOW,
+                         G_IMPLEMENT_INTERFACE (PSPPIRE_TYPE_WINDOW_MODEL, psppire_syntax_window_iface_init))
 
 static GObjectClass *parent_class ;
 
@@ -153,7 +115,7 @@ psppire_syntax_window_finalize (GObject *object)
 static void
 psppire_syntax_window_dispose (GObject *obj)
 {
-  PsppireSyntaxWindow *sw = (PsppireSyntaxWindow *)obj;
+  PsppireSyntaxWindow *sw = PSPPIRE_SYNTAX_WINDOW (obj);
 
   GtkClipboard *clip_selection;
   GtkClipboard *clip_primary;
@@ -187,6 +149,7 @@ psppire_syntax_window_class_init (PsppireSyntaxWindowClass *class)
 {
   GParamSpec *encoding_spec;
   GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+  gobject_class->finalize = psppire_syntax_window_finalize;
 
   GtkSourceLanguageManager *lm = gtk_source_language_manager_get_default ();
 
@@ -229,30 +192,19 @@ psppire_syntax_window_class_init (PsppireSyntaxWindowClass *class)
 }
 
 
-static void
-psppire_syntax_window_base_init (PsppireSyntaxWindowClass *class)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (class);
-  object_class->finalize = psppire_syntax_window_finalize;
-}
-
-
-
-static void
-psppire_syntax_window_base_finalize (PsppireSyntaxWindowClass *class,
-                                    gpointer class_data)
-{
-}
-
-
 static void
 editor_execute_syntax (const PsppireSyntaxWindow *sw, GtkTextIter start,
                       GtkTextIter stop)
 {
   PsppireWindow *win = PSPPIRE_WINDOW (sw);
-  struct lex_reader *reader = lex_reader_for_gtk_text_buffer (GTK_TEXT_BUFFER (sw->buffer), start, stop);
+  struct lex_reader *reader = lex_reader_for_gtk_text_buffer (
+    GTK_TEXT_BUFFER (sw->buffer), start, stop, sw->syntax_mode);
 
-  lex_reader_set_file_name (reader, psppire_window_get_filename (win));
+  const gchar *filename = psppire_window_get_filename (win);
+  /* TRANSLATORS: This is part of a filename.  Please avoid whitespace. */
+  gchar *untitled = xasprintf ("%s.sps", _("Untitled"));
+  lex_reader_set_file_name (reader, filename ? filename : untitled);
+  free (untitled);
 
   execute_syntax (psppire_default_data_window (), reader);
 }
@@ -391,17 +343,22 @@ clipboard_clear_cb (GtkClipboard *clipboard,
   sw->cliptext = NULL;
 }
 
+static gchar tn1[] = "UTF8_STRING";
+static gchar tn2[] = "STRING";
+static gchar tn3[] = "TEXT";
+static gchar tn4[] = "COMPOUND_TEXT";
+static gchar tn5[] = "text/plain;charset=utf-8";
+static gchar tn6[] = "text/plain";
 
 static const GtkTargetEntry targets[] = {
-  { "UTF8_STRING",   0, SELECT_FMT_TEXT },
-  { "STRING",        0, SELECT_FMT_TEXT },
-  { "TEXT",          0, SELECT_FMT_TEXT },
-  { "COMPOUND_TEXT", 0, SELECT_FMT_TEXT },
-  { "text/plain;charset=utf-8", 0, SELECT_FMT_TEXT },
-  { "text/plain",    0, SELECT_FMT_TEXT },
+  { tn1, 0, SELECT_FMT_TEXT },
+  { tn2, 0, SELECT_FMT_TEXT },
+  { tn3, 0, SELECT_FMT_TEXT },
+  { tn4, 0, SELECT_FMT_TEXT },
+  { tn5, 0, SELECT_FMT_TEXT },
+  { tn6, 0, SELECT_FMT_TEXT }
 };
 
-
 /*
   Store a clip containing the currently selected text.
   Returns true iff something was set.
@@ -562,6 +519,24 @@ on_run_current_line (PsppireSyntaxWindow *se)
 
 
 
+static void
+on_syntax (GAction *action, GVariant *param, PsppireSyntaxWindow *sw)
+{
+  g_action_change_state (action, param);
+  GVariant *new_state = g_action_get_state (action);
+
+  const gchar *what = g_variant_get_string (new_state, NULL);
+  if (0 == g_strcmp0 (what, "auto"))
+    sw->syntax_mode = SEG_MODE_AUTO;
+  else if (0 == g_strcmp0 (what, "interactive"))
+    sw->syntax_mode = SEG_MODE_INTERACTIVE;
+  else if (0 == g_strcmp0 (what, "batch"))
+    sw->syntax_mode = SEG_MODE_BATCH;
+  else
+    g_warn_if_reached ();
+}
+
+
 /* Append ".sps" to FILENAME if necessary.
    The returned result must be freed when no longer required.
  */
@@ -808,6 +783,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
                NULL);
 
   window->encoding = NULL;
+  window->syntax_mode = SEG_MODE_AUTO;
 
   window->cliptext = NULL;
   window->dispose_has_run = FALSE;
@@ -998,6 +974,13 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
     g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (run_to_end));
   }
 
+  {
+    GSimpleAction *act_syntax = g_simple_action_new_stateful ("syntax", G_VARIANT_TYPE_STRING,
+                                                                g_variant_new_string ("auto"));
+    g_signal_connect (act_syntax, "activate", G_CALLBACK (on_syntax), window);
+    g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (act_syntax));
+  }
+
   gtk_menu_shell_append (GTK_MENU_SHELL (menubar),
                         create_windows_menu (GTK_WINDOW (window)));
 
@@ -1040,7 +1023,7 @@ error_dialog (GtkWindow *w, const gchar *filename,  GError *err)
 
   g_free (fn);
 
-  g_object_set (dialog, "icon-name", "pspp", NULL);
+  g_object_set (dialog, "icon-name", "org.gnu.pspp", NULL);
 
   gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
                                            "%s", err->message);
@@ -1053,7 +1036,7 @@ error_dialog (GtkWindow *w, const gchar *filename,  GError *err)
 /*
   Loads the buffer from the file called FILENAME
 */
-gboolean
+static gboolean
 syntax_load (PsppireWindow *window, const gchar *filename,
              const gchar *encoding, gpointer not_used)
 {