[gtk+/wip/carlosg/event-delivery: 25/104] gtkentry: Remove text_area window
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/carlosg/event-delivery: 25/104] gtkentry: Remove text_area window
- Date: Thu, 25 May 2017 14:42:12 +0000 (UTC)
commit 322ee63e0c5ce7ac51dbf8fd44d3f5227b488eab
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]