[gedit/wip/3.14-osx: 38/69] Add toggle overwrite mode action



commit 4cde3c147c109bda7111abc747e2922daa0814fb
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Sat Aug 23 19:40:47 2014 +0200

    Add toggle overwrite mode action

 gedit/gedit-commands-edit.c      |   22 ++++++++++++++++++++
 gedit/gedit-commands.h           |    4 +++
 gedit/gedit-window.c             |   40 +++++++++++++++++++++++--------------
 gedit/resources/gtk/menus-osx.ui |    4 +++
 4 files changed, 55 insertions(+), 15 deletions(-)
---
diff --git a/gedit/gedit-commands-edit.c b/gedit/gedit-commands-edit.c
index 0b5f057..91b6860 100644
--- a/gedit/gedit-commands-edit.c
+++ b/gedit/gedit-commands-edit.c
@@ -180,4 +180,26 @@ _gedit_cmd_edit_preferences (GSimpleAction *action,
        gedit_show_preferences_dialog (window);
 }
 
+void
+_gedit_cmd_edit_overwrite_mode (GSimpleAction *action,
+                                GVariant      *state,
+                                gpointer       user_data)
+{
+       GeditWindow *window = GEDIT_WINDOW (user_data);
+       GeditView *active_view;
+       gboolean overwrite;
+
+       gedit_debug (DEBUG_COMMANDS);
+
+       active_view = gedit_window_get_active_view (window);
+       g_return_if_fail (active_view);
+
+       overwrite = g_variant_get_boolean (state);
+       g_simple_action_set_state (action, state);
+
+       gtk_text_view_set_overwrite (GTK_TEXT_VIEW (active_view), overwrite);
+       gtk_widget_grab_focus (GTK_WIDGET (active_view));
+}
+
+
 /* ex:set ts=8 noet: */
diff --git a/gedit/gedit-commands.h b/gedit/gedit-commands.h
index c85c1b6..f9d290a 100644
--- a/gedit/gedit-commands.h
+++ b/gedit/gedit-commands.h
@@ -124,6 +124,10 @@ void               _gedit_cmd_edit_select_all              (GSimpleAction *action,
 void           _gedit_cmd_edit_preferences             (GSimpleAction *action,
                                                          GVariant      *parameter,
                                                          gpointer       user_data);
+void           _gedit_cmd_edit_overwrite_mode          (GSimpleAction *action,
+                                                        GVariant      *parameter,
+                                                        gpointer       user_data);
+
 void           _gedit_cmd_view_toggle_side_panel       (GSimpleAction *action,
                                                          GVariant      *state,
                                                          gpointer       user_data);
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 707c441..83ee35a 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -680,6 +680,9 @@ update_actions_sensitivity (GeditWindow *window)
                                     editable &&
                                     (doc != NULL) && gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER 
(doc)));
 
+       action = g_action_map_lookup_action (G_ACTION_MAP (window), "overwrite-mode");
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), doc != NULL);
+
        action = g_action_map_lookup_action (G_ACTION_MAP (window), "find");
        g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
                                     ((state == GEDIT_TAB_STATE_NORMAL) ||
@@ -1026,19 +1029,26 @@ update_cursor_position_statusbar (GtkTextBuffer *buffer,
 }
 
 static void
-update_overwrite_mode_statusbar (GtkTextView *view,
-                                GeditWindow *window)
+set_overwrite_mode (GeditWindow *window,
+                    gboolean     overwrite)
+{
+       GAction *action;
+
+       gedit_statusbar_set_overwrite (GEDIT_STATUSBAR (window->priv->statusbar), overwrite);
+
+       action = g_action_map_lookup_action (G_ACTION_MAP (window), "overwrite-mode");
+       g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (overwrite));
+}
+
+static void
+overwrite_mode_changed (GtkTextView *view,
+                       GParamSpec  *pspec,
+                       GeditWindow *window)
 {
        if (view != GTK_TEXT_VIEW (gedit_window_get_active_view (window)))
                return;
 
-       /* Note that we have to use !gtk_text_view_get_overwrite since we
-          are in the in the signal handler of "toggle overwrite" that is
-          G_SIGNAL_RUN_LAST
-       */
-       gedit_statusbar_set_overwrite (
-                       GEDIT_STATUSBAR (window->priv->statusbar),
-                       !gtk_text_view_get_overwrite (view));
+       set_overwrite_mode (window, gtk_text_view_get_overwrite (view));
 }
 
 #define MAX_TITLE_LENGTH 100
@@ -1380,8 +1390,7 @@ update_statusbar (GeditWindow *window,
                update_cursor_position_statusbar (GTK_TEXT_BUFFER (doc),
                                                  window);
 
-               gedit_statusbar_set_overwrite (GEDIT_STATUSBAR (window->priv->statusbar),
-                                              gtk_text_view_get_overwrite (GTK_TEXT_VIEW (new_view)));
+               set_overwrite_mode (window, gtk_text_view_get_overwrite (GTK_TEXT_VIEW (new_view)));
 
                gtk_widget_show (window->priv->line_col_button);
                gtk_widget_show (window->priv->tab_width_button);
@@ -1973,8 +1982,8 @@ on_tab_added (GeditMultiNotebook *multi,
                          G_CALLBACK (readonly_changed),
                          window);
        g_signal_connect (view,
-                         "toggle_overwrite",
-                         G_CALLBACK (update_overwrite_mode_statusbar),
+                         "notify::overwrite",
+                         G_CALLBACK (overwrite_mode_changed),
                          window);
        g_signal_connect (view,
                          "notify::editable",
@@ -2068,7 +2077,7 @@ on_tab_removed (GeditMultiNotebook *multi,
                                              G_CALLBACK (readonly_changed),
                                              window);
        g_signal_handlers_disconnect_by_func (view,
-                                             G_CALLBACK (update_overwrite_mode_statusbar),
+                                             G_CALLBACK (overwrite_mode_changed),
                                              window);
        g_signal_handlers_disconnect_by_func (view,
                                              G_CALLBACK (editable_changed),
@@ -2692,7 +2701,8 @@ static GActionEntry win_entries[] = {
        { "paste", _gedit_cmd_edit_paste },
        { "delete", _gedit_cmd_edit_delete },
        { "select-all", _gedit_cmd_edit_select_all },
-       { "highlight-mode", _gedit_cmd_view_highlight_mode }
+       { "highlight-mode", _gedit_cmd_view_highlight_mode },
+       { "overwrite-mode", NULL, NULL, "false", _gedit_cmd_edit_overwrite_mode }
 };
 
 static void
diff --git a/gedit/resources/gtk/menus-osx.ui b/gedit/resources/gtk/menus-osx.ui
index e3b7693..73e795a 100644
--- a/gedit/resources/gtk/menus-osx.ui
+++ b/gedit/resources/gtk/menus-osx.ui
@@ -104,6 +104,10 @@
         </section>
         <section>
           <attribute name="id">edit-section-1</attribute>
+          <item>
+            <attribute name="label" translatable="yes">Overwrite _Mode</attribute>
+            <attribute name="action">win.overwrite-mode</attribute>
+          </item>
         </section>
         <section>
           <attribute name="id">edit-section-2</attribute>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]