[gtk+/wip/carlosg/event-delivery: 24/66] gtkentry: Remove text_area window
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/carlosg/event-delivery: 24/66] gtkentry: Remove text_area window
- Date: Mon, 10 Apr 2017 15:27:56 +0000 (UTC)
commit 2201dd70176b65d4a182cdc2b3a940cdecd842d4
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Mar 31 18:01:13 2017 +0200
gtkentry: Remove text_area window
And refurbish cursor management to be set on the GtkWidget. The
input window is not needed anymore to receive events either.
This is no longer set through the GdkWindow, so use the private
GtkWidget API.
gtk/gtkentry.c | 127 ++++++++++++++++----------------------------------------
1 files changed, 36 insertions(+), 91 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index fcfce25..9b1e876 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -182,7 +182,6 @@ struct _GtkEntryPrivate
GtkIMContext *im_context;
GtkWidget *popup_menu;
- GdkWindow *text_area;
int text_baseline;
PangoLayout *cached_layout;
@@ -2822,6 +2821,16 @@ _gtk_entry_get_display_text (GtkEntry *entry,
}
static void
+set_text_cursor (GtkWidget *widget)
+{
+ GdkCursor *cursor;
+
+ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text");
+ gtk_widget_set_cursor (widget, cursor);
+ g_clear_object (&cursor);
+}
+
+static void
update_cursors (GtkWidget *widget)
{
GtkEntry *entry = GTK_ENTRY (widget);
@@ -2831,6 +2840,8 @@ update_cursors (GtkWidget *widget)
GdkCursor *cursor;
gint i;
+ display = gtk_widget_get_display (widget);
+
for (i = 0; i < MAX_ICONS; i++)
{
if ((icon_info = priv->icons[i]) != NULL)
@@ -2848,7 +2859,6 @@ update_cursors (GtkWidget *widget)
(icon_info->insensitive ||
(icon_info->nonactivatable && icon_info->target_list == NULL)))
{
- display = gtk_widget_get_display (widget);
cursor = gdk_cursor_new_from_name (display, "text");
gdk_window_set_cursor (icon_info->window, cursor);
g_clear_object (&cursor);
@@ -2859,6 +2869,8 @@ update_cursors (GtkWidget *widget)
}
}
}
+
+ set_text_cursor (widget);
}
static void
@@ -3018,8 +3030,6 @@ gtk_entry_map (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_entry_parent_class)->map (widget);
- gdk_window_show (priv->text_area);
-
for (i = 0; i < MAX_ICONS; i++)
{
if ((icon_info = priv->icons[i]) != NULL)
@@ -3055,8 +3065,6 @@ gtk_entry_unmap (GtkWidget *widget)
}
}
- gdk_window_hide (priv->text_area);
-
GTK_WIDGET_CLASS (gtk_entry_parent_class)->unmap (widget);
}
@@ -3087,28 +3095,6 @@ gtk_entry_realize (GtkWidget *widget)
gtk_entry_get_text_allocation (entry, &text_allocation);
- priv->text_area = gdk_window_new_input (gtk_widget_get_window (widget),
- gtk_widget_get_events (widget)
- | GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK
- | GDK_BUTTON1_MOTION_MASK
- | GDK_BUTTON3_MOTION_MASK
- | GDK_POINTER_MOTION_MASK
- | GDK_ENTER_NOTIFY_MASK
- | GDK_LEAVE_NOTIFY_MASK,
- &text_allocation);
-
- if (gtk_widget_is_sensitive (widget))
- {
- GdkCursor *cursor;
-
- cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text");
- gdk_window_set_cursor (priv->text_area, cursor);
- g_object_unref (cursor);
- }
-
- gtk_widget_register_window (widget, priv->text_area);
-
gtk_im_context_set_client_widget (priv->im_context, widget);
gtk_entry_adjust_scroll (entry);
@@ -3144,13 +3130,6 @@ gtk_entry_unrealize (GtkWidget *widget)
clipboard = gtk_widget_get_clipboard (widget, GDK_SELECTION_PRIMARY);
if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (entry))
gtk_clipboard_clear (clipboard);
-
- if (priv->text_area)
- {
- gtk_widget_unregister_window (widget, priv->text_area);
- gdk_window_destroy (priv->text_area);
- priv->text_area = NULL;
- }
if (priv->popup_menu)
{
@@ -3322,7 +3301,6 @@ place_windows (GtkEntry *entry)
{
GtkEntryPrivate *priv = entry->priv;
EntryIconInfo *icon_info;
- GtkAllocation content_allocation;
icon_info = priv->icons[GTK_ENTRY_ICON_PRIMARY];
if (icon_info)
@@ -3345,11 +3323,6 @@ place_windows (GtkEntry *entry)
secondary.x, secondary.y,
secondary.width, secondary.height);
}
-
- gtk_entry_get_text_allocation (entry, &content_allocation);
- gdk_window_move_resize (priv->text_area,
- content_allocation.x, content_allocation.y,
- content_allocation.width, content_allocation.height);
}
static void
@@ -3824,12 +3797,12 @@ gtk_entry_update_handles (GtkEntry *entry,
GtkTextHandleMode mode)
{
GtkEntryPrivate *priv = entry->priv;
- gint strong_x, height;
+ GtkAllocation text_allocation;
+ gint strong_x;
gint cursor, bound;
_gtk_text_handle_set_mode (priv->text_handle, mode);
-
- height = gdk_window_get_height (priv->text_area);
+ gtk_entry_get_text_allocation (entry, &text_allocation);
gtk_entry_get_cursor_locations (entry, &strong_x, NULL);
cursor = strong_x - priv->scroll_offset;
@@ -3853,13 +3826,13 @@ gtk_entry_update_handles (GtkEntry *entry,
/* Update start selection bound */
gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_SELECTION_START,
- start, 0, height);
+ start, 0, text_allocation.height);
gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_SELECTION_END,
- end, 0, height);
+ end, 0, text_allocation.height);
}
else
gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_CURSOR,
- cursor, 0, height);
+ cursor, 0, text_allocation.height);
}
static gboolean
@@ -3874,14 +3847,9 @@ gtk_entry_event (GtkWidget *widget,
gint i;
if (event->type == GDK_MOTION_NOTIFY &&
- priv->mouse_cursor_obscured &&
- event->any.window == priv->text_area)
+ priv->mouse_cursor_obscured)
{
- GdkCursor *cursor;
-
- cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text");
- gdk_window_set_cursor (priv->text_area, cursor);
- g_object_unref (cursor);
+ set_text_cursor (widget);
priv->mouse_cursor_obscured = FALSE;
return GDK_EVENT_PROPAGATE;
}
@@ -4252,11 +4220,7 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
if (priv->mouse_cursor_obscured)
{
- GdkCursor *cursor;
-
- cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text");
- gdk_window_set_cursor (priv->text_area, cursor);
- g_object_unref (cursor);
+ set_text_cursor (widget);
priv->mouse_cursor_obscured = FALSE;
}
@@ -4294,16 +4258,18 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
}
else
{
+ GtkAllocation text_allocation;
GdkInputSource input_source;
GdkDevice *source;
guint length;
gint tmp_pos;
length = gtk_entry_buffer_get_length (get_buffer (entry));
+ gtk_entry_get_text_allocation (entry, &text_allocation);
if (y < 0)
tmp_pos = 0;
- else if (y >= gdk_window_get_height (priv->text_area))
+ else if (y >= text_allocation.height)
tmp_pos = length;
else
tmp_pos = gtk_entry_find_position (entry, x);
@@ -4409,12 +4375,12 @@ gtk_entry_drag_gesture_end (GtkGestureDrag *gesture,
}
static void
-set_invisible_cursor (GdkWindow *window)
+set_invisible_cursor (GtkWidget *widget)
{
GdkCursor *cursor;
- cursor = gdk_cursor_new_from_name (gdk_window_get_display (window), "none");
- gdk_window_set_cursor (window, cursor);
+ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "none");
+ gtk_widget_set_cursor (widget, cursor);
g_object_unref (cursor);
}
@@ -4426,11 +4392,8 @@ gtk_entry_obscure_mouse_cursor (GtkEntry *entry)
if (priv->mouse_cursor_obscured)
return;
- if (priv->text_area)
- {
- set_invisible_cursor (priv->text_area);
- priv->mouse_cursor_obscured = TRUE;
- }
+ set_invisible_cursor (GTK_WIDGET (entry));
+ priv->mouse_cursor_obscured = TRUE;
}
static gint
@@ -4670,22 +4633,10 @@ gtk_entry_state_flags_changed (GtkWidget *widget,
{
GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = entry->priv;
- GdkCursor *cursor;
if (gtk_widget_get_realized (widget))
{
- if (gtk_widget_is_sensitive (widget))
- cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text");
- else
- cursor = NULL;
-
- gdk_window_set_cursor (priv->text_area, cursor);
-
- if (cursor)
- g_object_unref (cursor);
-
priv->mouse_cursor_obscured = FALSE;
-
update_cursors (widget);
}
@@ -8887,7 +8838,6 @@ popup_targets_received (GtkClipboard *clipboard,
PopupInfo *info = user_data;
GtkEntry *entry = info->entry;
GtkEntryPrivate *info_entry_priv = entry->priv;
- GdkRectangle rect = { 0, 0, 1, 0 };
if (gtk_widget_get_realized (GTK_WIDGET (entry)))
{
@@ -8942,16 +8892,11 @@ popup_targets_received (GtkClipboard *clipboard,
gtk_menu_popup_at_pointer (GTK_MENU (menu), info->trigger_event);
else
{
- gtk_entry_get_cursor_locations (entry, &rect.x, NULL);
- rect.x -= info_entry_priv->scroll_offset;
- rect.height = gdk_window_get_height (info_entry_priv->text_area);
-
- gtk_menu_popup_at_rect (GTK_MENU (menu),
- info_entry_priv->text_area,
- &rect,
- GDK_GRAVITY_SOUTH_EAST,
- GDK_GRAVITY_NORTH_WEST,
- info->trigger_event);
+ gtk_menu_popup_at_widget (GTK_MENU (menu),
+ GTK_WIDGET (entry),
+ GDK_GRAVITY_SOUTH_EAST,
+ GDK_GRAVITY_NORTH_WEST,
+ info->trigger_event);
gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]