[gtk+] Add support for disabling middle click paste
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Add support for disabling middle click paste
- Date: Fri, 4 May 2012 01:59:27 +0000 (UTC)
commit c1f01eb929b20cff0075ce76f214fc579a9796c9
Author: Bastien Nocera <hadess hadess net>
Date: Wed Nov 30 20:46:55 2011 +0100
Add support for disabling middle click paste
Adds a gtk-enable-primary-paste setting that is backed by
and X setting, and make GtkEntry and GtkTextView respect it.
https://bugzilla.gnome.org/show_bug.cgi?id=665243
gdk/x11/gdksettings.c | 7 +++++--
gtk/gtkentry.c | 17 ++++++++++++++++-
gtk/gtksettings.c | 20 +++++++++++++++++++-
gtk/gtktextview.c | 17 +++++++++++++++--
4 files changed, 55 insertions(+), 6 deletions(-)
---
diff --git a/gdk/x11/gdksettings.c b/gdk/x11/gdksettings.c
index eed43b5..15d73ba 100644
--- a/gdk/x11/gdksettings.c
+++ b/gdk/x11/gdksettings.c
@@ -81,7 +81,9 @@ static const char gdk_settings_names[] =
"Gtk/AutoMnemonics\0" "gtk-auto-mnemonics\0"
"Gtk/VisibleFocus\0" "gtk-visible-focus\0"
"Gtk/ShellShowsAppMenu\0" "gtk-shell-shows-app-menu\0"
- "Gtk/ShellShowsMenubar\0" "gtk-shell-shows-menubar\0";
+ "Gtk/ShellShowsMenubar\0" "gtk-shell-shows-menubar\0"
+ "Gtk/EnablePrimaryPaste\0" "gtk-enable-primary-paste\0";
+
static const struct
@@ -137,5 +139,6 @@ static const struct
{ 1730, 1748 },
{ 1767, 1784 },
{ 1802, 1824 },
- { 1849, 1871 }
+ { 1849, 1871 },
+ { 1895, 1918 }
};
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 28bf32b..22ff7ef 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -572,6 +572,7 @@ static void gtk_entry_move_adjustments (GtkEntry *en
static GdkPixbuf * gtk_entry_ensure_pixbuf (GtkEntry *entry,
GtkEntryIconPosition icon_pos);
static void gtk_entry_update_cached_style_values(GtkEntry *entry);
+static gboolean get_middle_click_paste (GtkEntry *entry);
/* Completion */
static gint gtk_entry_completion_timeout (gpointer data);
@@ -3962,7 +3963,9 @@ gtk_entry_button_press (GtkWidget *widget,
return TRUE;
}
- else if (event->button == GDK_BUTTON_MIDDLE && event->type == GDK_BUTTON_PRESS)
+ else if (event->type == GDK_BUTTON_PRESS &&
+ event->button == GDK_BUTTON_MIDDLE &&
+ get_middle_click_paste (entry))
{
if (priv->editable)
{
@@ -9157,6 +9160,18 @@ cursor_blinks (GtkEntry *entry)
return FALSE;
}
+static gboolean
+get_middle_click_paste (GtkEntry *entry)
+{
+ GtkSettings *settings;
+ gboolean paste;
+
+ settings = gtk_widget_get_settings (GTK_WIDGET (entry));
+ g_object_get (settings, "gtk-enable-primary-paste", &paste, NULL);
+
+ return paste;
+}
+
static gint
get_cursor_time (GtkEntry *entry)
{
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 871c5e9..534ef02 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -209,7 +209,8 @@ enum {
PROP_IM_PREEDIT_STYLE,
PROP_IM_STATUS_STYLE,
PROP_SHELL_SHOWS_APP_MENU,
- PROP_SHELL_SHOWS_MENUBAR
+ PROP_SHELL_SHOWS_MENUBAR,
+ PROP_ENABLE_PRIMARY_PASTE
};
/* --- prototypes --- */
@@ -1355,6 +1356,23 @@ gtk_settings_class_init (GtkSettingsClass *class)
NULL);
g_assert (result == PROP_SHELL_SHOWS_MENUBAR);
+ /**
+ * GtkSettings:gtk-enable-primary-paste:
+ *
+ * Whether a middle click on a mouse should paste the
+ * 'PRIMARY' clipboard content at the cursor location.
+ *
+ * Since: 3.4
+ */
+ result = settings_install_property_parser (class,
+ g_param_spec_boolean ("gtk-enable-primary-paste",
+ P_("Enable primary paste"),
+ P_("Whether a middle click on a mouse should paste the 'PRIMARY' clipboard content at the cursor location."),
+ TRUE,
+ GTK_PARAM_READWRITE),
+ NULL);
+ g_assert (result == PROP_ENABLE_PRIMARY_PASTE);
+
g_type_class_add_private (class, sizeof (GtkSettingsPrivate));
}
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 53e1004..6611673 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -338,7 +338,7 @@ static gboolean gtk_text_view_focus (GtkWidget *widget,
GtkDirectionType direction);
static void gtk_text_view_select_all (GtkWidget *widget,
gboolean select);
-
+static gboolean get_middle_click_paste (GtkTextView *text_view);
/* Source side drag signals */
static void gtk_text_view_drag_begin (GtkWidget *widget,
@@ -4589,7 +4589,8 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
return TRUE;
}
- else if (event->button == GDK_BUTTON_MIDDLE)
+ else if (event->button == GDK_BUTTON_MIDDLE &&
+ get_middle_click_paste (text_view))
{
GtkTextIter iter;
@@ -5052,6 +5053,18 @@ cursor_blinks (GtkTextView *text_view)
return FALSE;
}
+static gboolean
+get_middle_click_paste (GtkTextView *text_view)
+{
+ GtkSettings *settings;
+ gboolean paste;
+
+ settings = gtk_widget_get_settings (GTK_WIDGET (text_view));
+ g_object_get (settings, "gtk-enable-primary-paste", &paste, NULL);
+
+ return paste;
+}
+
static gint
get_cursor_time (GtkTextView *text_view)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]