forked from AuroraMiddleware/gtk
Merge branch 'wip/chergert/textview-propagate-undo-state' into 'master'
textview: propagate GtkTextBuffer can-undo/redo action state See merge request GNOME/gtk!1311
This commit is contained in:
commit
2b695ac8d1
@ -512,6 +512,12 @@ static void gtk_text_view_paste_done_handler (GtkTextBuffer *buffer,
|
||||
gpointer data);
|
||||
static void gtk_text_view_buffer_changed_handler (GtkTextBuffer *buffer,
|
||||
gpointer data);
|
||||
static void gtk_text_view_buffer_notify_redo (GtkTextBuffer *buffer,
|
||||
GParamSpec *pspec,
|
||||
GtkTextView *view);
|
||||
static void gtk_text_view_buffer_notify_undo (GtkTextBuffer *buffer,
|
||||
GParamSpec *pspec,
|
||||
GtkTextView *view);
|
||||
static void gtk_text_view_get_virtual_cursor_pos (GtkTextView *text_view,
|
||||
GtkTextIter *cursor,
|
||||
gint *x,
|
||||
@ -1709,6 +1715,9 @@ gtk_text_view_init (GtkTextView *text_view)
|
||||
gtk_css_node_get_state (priv->text_window->css_node) & ~GTK_STATE_FLAG_DROP_ACTIVE);
|
||||
gtk_css_node_set_visible (priv->selection_node, FALSE);
|
||||
g_object_unref (priv->selection_node);
|
||||
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (text_view), "text.can-redo", FALSE);
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (text_view), "text.can-undo", FALSE);
|
||||
}
|
||||
|
||||
GtkCssNode *
|
||||
@ -1817,6 +1826,8 @@ gtk_text_view_set_buffer (GtkTextView *text_view,
|
||||
{
|
||||
GtkTextViewPrivate *priv;
|
||||
GtkTextBuffer *old_buffer;
|
||||
gboolean can_undo = FALSE;
|
||||
gboolean can_redo = FALSE;
|
||||
|
||||
g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
|
||||
g_return_if_fail (buffer == NULL || GTK_IS_TEXT_BUFFER (buffer));
|
||||
@ -1846,6 +1857,12 @@ gtk_text_view_set_buffer (GtkTextView *text_view,
|
||||
g_signal_handlers_disconnect_by_func (priv->buffer,
|
||||
gtk_text_view_buffer_changed_handler,
|
||||
text_view);
|
||||
g_signal_handlers_disconnect_by_func (priv->buffer,
|
||||
gtk_text_view_buffer_notify_redo,
|
||||
text_view);
|
||||
g_signal_handlers_disconnect_by_func (priv->buffer,
|
||||
gtk_text_view_buffer_notify_undo,
|
||||
text_view);
|
||||
|
||||
if (gtk_widget_get_realized (GTK_WIDGET (text_view)))
|
||||
{
|
||||
@ -1894,6 +1911,15 @@ gtk_text_view_set_buffer (GtkTextView *text_view,
|
||||
g_signal_connect (priv->buffer, "changed",
|
||||
G_CALLBACK (gtk_text_view_buffer_changed_handler),
|
||||
text_view);
|
||||
g_signal_connect (priv->buffer, "notify",
|
||||
G_CALLBACK (gtk_text_view_buffer_notify_undo),
|
||||
text_view);
|
||||
g_signal_connect (priv->buffer, "notify",
|
||||
G_CALLBACK (gtk_text_view_buffer_notify_redo),
|
||||
text_view);
|
||||
|
||||
can_undo = gtk_text_buffer_get_can_undo (buffer);
|
||||
can_redo = gtk_text_buffer_get_can_redo (buffer);
|
||||
|
||||
if (gtk_widget_get_realized (GTK_WIDGET (text_view)))
|
||||
{
|
||||
@ -1905,6 +1931,9 @@ gtk_text_view_set_buffer (GtkTextView *text_view,
|
||||
gtk_text_view_update_handles (text_view, GTK_TEXT_HANDLE_MODE_NONE);
|
||||
}
|
||||
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (text_view), "text.undo", can_undo);
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (text_view), "text.redo", can_redo);
|
||||
|
||||
_gtk_text_view_accessible_set_buffer (text_view, old_buffer);
|
||||
if (old_buffer)
|
||||
g_object_unref (old_buffer);
|
||||
@ -9728,3 +9757,25 @@ gtk_text_view_real_redo (GtkWidget *widget,
|
||||
if (gtk_text_view_get_editable (text_view))
|
||||
gtk_text_buffer_redo (text_view->priv->buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_text_view_buffer_notify_redo (GtkTextBuffer *buffer,
|
||||
GParamSpec *pspec,
|
||||
GtkTextView *view)
|
||||
{
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (view),
|
||||
"text.redo",
|
||||
(gtk_text_view_get_editable (view) &&
|
||||
gtk_text_buffer_get_can_redo (buffer)));
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_text_view_buffer_notify_undo (GtkTextBuffer *buffer,
|
||||
GParamSpec *pspec,
|
||||
GtkTextView *view)
|
||||
{
|
||||
gtk_widget_action_set_enabled (GTK_WIDGET (view),
|
||||
"text.undo",
|
||||
(gtk_text_view_get_editable (view) &&
|
||||
gtk_text_buffer_get_can_undo (buffer)));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user