summaryrefslogtreecommitdiff
path: root/katze
diff options
context:
space:
mode:
authorgue5t <gue5t@midori.launchpad>2015-08-10 18:42:56 -0500
committergue5t <gue5t@midori.launchpad>2015-08-10 18:42:56 -0500
commit5790e990408749091018e3aa7df9caabba4f4b20 (patch)
treee92f62cec46e55a93f34273f21e24e266a44cb1c /katze
parent059ba74b72192fb79e012f81e77cc99db9fcb3b3 (diff)
downloadmidori-5790e990408749091018e3aa7df9caabba4f4b20.tar.gz
fix last known GTK2 entry placeholder text bugs
Diffstat (limited to 'katze')
-rw-r--r--katze/gtk3-compat.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/katze/gtk3-compat.c b/katze/gtk3-compat.c
index 4a15ba14..d8a37f2e 100644
--- a/katze/gtk3-compat.c
+++ b/katze/gtk3-compat.c
@@ -166,17 +166,44 @@ sokoke_on_entry_drag_drop (GtkEntry* entry,
return FALSE;
}
+static void
+sokoke_on_entry_popup (GtkEntry *entry,
+ GtkWidget *popup,
+ gpointer user_data)
+{
+ /* If the user selects paste in the popup, we should hide the default
+ when the menu closes so it pastes into a clean entry */
+ g_signal_connect_swapped (popup, "destroy", G_CALLBACK (
+ sokoke_hide_placeholder_text), entry);
+}
+
void
gtk_entry_set_placeholder_text (GtkEntry* entry,
const gchar* default_text)
{
/* Note: The default text initially overwrites any previous text */
- gchar* old_value = g_object_get_data (G_OBJECT (entry), "sokoke_default_text");
+ gchar* old_default_text = g_object_get_data (G_OBJECT (entry), "sokoke_default_text");
g_object_set_data (G_OBJECT (entry), "sokoke_default_text", (gpointer)default_text);
if (default_text == NULL)
+ {
g_object_set_data (G_OBJECT (entry), "sokoke_showing_default", GINT_TO_POINTER (0));
- else if (!old_value)
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_drag_motion), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_focus_in_event), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_drag_leave), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_drag_drop), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_focus_out_event), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_text_changed), NULL);
+ g_signal_handlers_disconnect_by_func (entry,
+ G_CALLBACK (sokoke_on_entry_popup), NULL);
+ }
+ else if (old_default_text == NULL)
{
g_object_set_data (G_OBJECT (entry), "sokoke_showing_default", GINT_TO_POINTER (1));
sokoke_widget_set_pango_font_style (GTK_WIDGET (entry), PANGO_STYLE_ITALIC);
@@ -193,6 +220,8 @@ gtk_entry_set_placeholder_text (GtkEntry* entry,
G_CALLBACK (sokoke_on_entry_focus_out_event), NULL);
g_signal_connect (entry, "notify::text",
G_CALLBACK (sokoke_on_entry_text_changed), NULL);
+ g_signal_connect (entry, "populate-popup",
+ G_CALLBACK (sokoke_on_entry_popup), NULL);
}
else if (!gtk_widget_has_focus (GTK_WIDGET (entry)))
{